src/Controller/ApiController.php line 19

Open in your IDE?
  1. <?php
  2. namespace App\Controller;
  3. use App\Controller\Base\BaseController;
  4. use App\Repository\TPublikasiRepository;
  5. use App\Repository\TVariabelRepository;
  6. use DateTime;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpFoundation\Request;
  9. use Symfony\Component\HttpFoundation\Response;
  10. use Symfony\Component\Routing\Annotation\Route;
  11. class ApiController extends BaseController
  12. {
  13.     /**
  14.      * @Route("/api/{id}", name="api", methods={"GET", "POST"})
  15.      */
  16.     public function index(?string $idRequest $requestTPublikasiRepository $tPublikasiRepo)
  17.     {
  18.         $publikasi $tPublikasiRepo->find($id);
  19.         $url $this->base_url();
  20.         // dump($url); exit;
  21.         return $this->render('api/index.html.twig', [
  22.             'publikasi' => $publikasi,
  23.             'url' => $url,
  24.         ]);
  25.     }
  26.     /**
  27.      * @Route("/api/{id}/get/{row}", name="api_get", methods={"GET"})
  28.      */
  29.     public function getApi(?string $idstring $row nullRequest $requestTVariabelRepository $tVariabelRepoTPublikasiRepository $tPublikasiRepo)
  30.     {
  31.         $tVariabel $tVariabelRepo->findBy(['pub' => $id'is_tampil' => true], ['id'=>'asc']);
  32.         $tPublikasi $tPublikasiRepo->find($id);
  33.         $dataset $this->getDataTable($id$request->get('limit'null), $request->get('skip'null), null1$row);
  34.         if (!$dataset) {
  35.             $result['message'] = 'Data not found';
  36.             $result['status'] = 404;
  37.             $result['data'] = [];
  38.             return $this->json($result);
  39.         }
  40.         $variabel = array();
  41.         foreach($tVariabel as $var){
  42.             $variabel[] = $var->getNama();
  43.         }
  44.         foreach($dataset as $k => $dt)
  45.         {
  46.             foreach($variabel as $key => $var)
  47.             {
  48.                 $dataset[$k][$var] = $dataset[$k][$key];
  49.                 unset($dataset[$k][$key]);
  50.             }
  51.         }
  52.         
  53.         $result['result'][0]['message'] = 'Get data successfull';
  54.         $result['result'][0]['status'] = 200;
  55.         $result['result'][0]['total'] = count($dataset);
  56.         $result['result'][0]['title'] = $tPublikasi->getJudul();
  57.         $result['result'][0]['description'] = $tPublikasi->getDeskripsi();
  58.         $result['result'][0]['unit'] = $tPublikasi->getSatuan();
  59.         $result['result'][0]['source'] = $tPublikasi->getSumber();
  60.         $result['result'][0]['year'] = $tPublikasi->getTahun();
  61.         // $result['result'][0]['urusan_code'] = ($tPublikasi->getUrusan()) ? $tPublikasi->getUrusan()->getKode() : '';
  62.         $result['result'][0]['urusan_code'] = '9';
  63.         // $result['result'][0]['sektor_code'] = ($tPublikasi->getSektor()) ? $tPublikasi->getSektor()->getKode() : '';
  64.         $result['result'][0]['sektor_code'] = '901';
  65.         $result['result'][0]['created_at'] = $tPublikasi->getCreatedAt()->format("Y-m-d H:i:s");
  66.         $result['result'][0]['updated_at'] = $tPublikasi->getUpdatedAt()->format("Y-m-d H:i:s");
  67.         $result['result'][0]['data'] = $dataset;
  68.         return $this->json($result);
  69.     }
  70.     /**
  71.      * @Route("/get/api", name="api_get_data", methods={"GET"})
  72.      */
  73.     public function getData(Request $request)
  74.     {
  75.         // $token = "4a81432adf56aeb6aadfffa65ab70ab1";
  76.         $headers apache_request_headers();
  77.         // if (!isset($headers['token']) || $headers['token'] != $token) {
  78.         //     return $this->json(['status' => 400]);
  79.         // }
  80.         // $getToken = $headers['token'];
  81.         $request_body file_get_contents('php://input');
  82.         header('Content-Type: application/json');
  83.         $get json_decode($request_bodytrue);
  84.         if(isset($get['limit'])) {
  85.             if(!is_numeric($get['limit'])) {
  86.                 $response $this->deliver_response(400,"invalid request");
  87.                 return $this->json($response);
  88.             }
  89.         }
  90.         if(isset($get['page'])) {
  91.             if(!is_numeric($get['page'])) {
  92.                 $response $this->deliver_response(400,"invalid request");
  93.                 return $this->json($response);
  94.             }
  95.         }
  96.         if(isset($get['key'])) {
  97.             if(!is_numeric($get['key'])) {
  98.                 $response $this->deliver_response(400,"invalid request");
  99.                 return $this->json($response);
  100.             }
  101.         }
  102.         // $conn = pg_connect("host=localhost port=5432 dbname=open user='postgres' password='piramida123'");
  103.         $conn $this->getDoctrine()->getConnection();
  104.         if (!$conn) {
  105.             $response $this->deliver_response(400,"connection failed");
  106.             return $this->json($response);
  107.         }
  108.         $key = isset($get['key']) ? ' AND a.id = ' $get['key'] : '';
  109.         $limit = isset($get['limit']) ? $get['limit'] : 1;
  110.         $offset null;
  111.         if (isset($get['limit']) && isset($get['page'])) {
  112.             $offset $limit * ($get['page'] - 1);
  113.         }
  114.         else if(isset($get['page'])) {
  115.             $offset $get['page'];
  116.         }
  117.         $sql_limit " LIMIT $limit";
  118.         $sql_offset " OFFSET $offset";
  119.         $ids_pub "SELECT a.id
  120.                     FROM t_publikasi a
  121.                     WHERE a.status_id = 3 $key
  122.                     ORDER BY a.id ASC";
  123.         if (!isset($get['key'])) {
  124.             if (isset($get['limit'])) {
  125.                 $ids_pub .= $sql_limit;
  126.             }
  127.             if (isset($get['page'])) {
  128.                 $ids_pub .= $sql_offset;
  129.             }
  130.         }
  131.         $stmt $conn->prepare($ids_pub);
  132.         $stmt->execute();
  133.         // $result = pg_prepare($conn, 'ids', $ids_pub);
  134.         // $result = pg_execute($conn, 'ids', array());
  135.         $rs_ids = [];
  136.         foreach ($stmt->fetchAll() as $row)
  137.         {
  138.             $rs_ids[] = $row['id'];
  139.         }
  140.         // return $this->json($rs_ids);
  141.         $isHeader true;
  142.         $isVariable true;
  143.         $isData true;
  144.         if (isset($get['type'])) {
  145.             $tipe $get['type'];
  146.             switch ($tipe) {
  147.                 case 'header':
  148.                     $isHeader true;
  149.                     $isVariable false;
  150.                     $isData false;
  151.                     break;
  152.                 case 'variable':
  153.                     $isHeader false;
  154.                     $isVariable true;
  155.                     $isData false;
  156.                     break;
  157.                 case 'data':
  158.                     $isHeader false;
  159.                     $isVariable false;
  160.                     $isData true;
  161.                     break;
  162.                 
  163.                 default:
  164.                     break;
  165.             }
  166.         }
  167.         $hasil = [];
  168.         foreach ($rs_ids as $id) {
  169.             if ($isHeader) {
  170.                 $sql "SELECT a.id, a.kode as kode, a.judul as judul, a.satuan, a.sumber as sumber, c.periode,
  171.                         a.tahun as tahun, a.deskripsi as deskripsi, d.div_nama as perangkat_daerah, e.nama as urusan,
  172.                         f.nama as sektor, g.nama as status_verifikasi, a.updated_at as tanggal
  173.                         FROM t_publikasi a
  174.                         JOIN m_periode c
  175.                         ON a.periode_id = c.id
  176.                         JOIn t_div d
  177.                         On a.div_id = d.id
  178.                         JOIN m_urusan e
  179.                         ON a.urusan_id = e.id
  180.                         JOIN m_sektor f
  181.                         ON a.sektor_id = f.id
  182.                         JOIN m_status g
  183.                         ON a.status_id = g.id
  184.                         WHERE a.id = $id";
  185.         
  186.                 $stmt $conn->prepare($sql);
  187.                 $stmt->execute();
  188.                 
  189.                 // $result = pg_prepare($conn, '', $sql);
  190.                 // $result = pg_execute($conn, '', array());
  191.         
  192.                 foreach ($stmt->fetchAll() as $row)
  193.                 {
  194.                     $hasil[$id]['header'] = $row;
  195.                 }
  196.             }
  197.         
  198.             if ($isVariable) {
  199.                 $sql "SELECT a.nama
  200.                         FROM t_variabel a
  201.                         WHERE a.pub_id = $id AND is_tampil is true order by a.id asc";
  202.         
  203.                 $stmt $conn->prepare($sql);
  204.                 $stmt->execute();
  205.                 // $result = pg_prepare($conn, '', $sql);
  206.                 // $result = pg_execute($conn, '', array());
  207.         
  208.                 foreach ($stmt->fetchAll() as $row)
  209.                 {
  210.                     $hasil[$id]['variable'][] = $row['nama'];
  211.                 }
  212.             }
  213.         
  214.             if ($isData) {
  215.         
  216.                 $as_columns "";
  217.                 $sql "SELECT a.*
  218.                         FROM t_variabel a
  219.                         WHERE a.pub_id = $id order by a.id asc";
  220.         
  221.                 $stmt $conn->prepare($sql);
  222.                 $stmt->execute();
  223.                 // $result = pg_prepare($conn, '', $sql);
  224.                 // $result = pg_execute($conn, '', array());
  225.                 $as_columns "";
  226.                 $sel_columns "row_id";
  227.                 foreach ($stmt->fetchAll() as $row)
  228.                 {
  229.                     $as_columns .= ', "' $row['nama'] . '" text';
  230.                     if($row['nama'] != "periode_order") {
  231.                         $sel_columns .= ", " .$row['nama'] .":: text";
  232.                     }
  233.                 }
  234.         
  235.                 $sql "SELECT $sel_columns FROM crosstab($$ select a.row_id, b.id, a.isi 
  236.                         from t_data a 
  237.                         join t_variabel b 
  238.                         on a.variabel_id = b.id
  239.                         where a.pub_id = $id order by 1, 2 $$)
  240.                         AS ct (row_id int" .$as_columns") where 1=1 
  241.                         ORDER BY row_id";
  242.                 
  243.                         $stmt $conn->prepare($sql);
  244.                 $stmt->execute();
  245.                 // $rs = pg_prepare($conn, '', $sql);
  246.                 // $rs = pg_execute($conn, '', array());
  247.         
  248.                 $hasil[$id]['data'] = [];
  249.                 foreach ($stmt->fetchAll() as $row)
  250.                 {
  251.                     $hasil[$id]['data'][] = $row;
  252.                 }
  253.             }
  254.         
  255.         }
  256.         $data = (isset($hasil)) ? $hasil : [];
  257.         $response $this->deliver_response(200'data found'$data);
  258.         return $this->json($response);
  259.         // return $this->json($get);
  260.     }
  261.     function deliver_response($status$status_message$data = [], $type '')
  262.     {
  263.         // header("HTTP/1.1 $status $status_message");    
  264.         $response = array();
  265.         $response['status'] = $status;
  266.         $response['status_message'] = $status_message;
  267.         // if($type == 'data') {
  268.             $response['total_data'] = count($data);
  269.         // }
  270.         $response['result'] = $data;
  271.         // $json = json_encode($response, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
  272.         // echo $json;
  273.         return $response;
  274.     }
  275.     /**
  276.      * @Route("/data.json", name="api_json", methods={"GET"})
  277.      */
  278.     public function getJsonData(Request $requestTPublikasiRepository $tPublikasiRepo)
  279.     {
  280.         header('Content-Type: application/json');
  281.         $data = array(
  282.             "@context" => "https://project-open-data.cio.gov/v1.1/schema/catalog.jsonld",
  283.             "@id"      => "https://opendata.kedirikab.go.id/data.json",
  284.             "@type"    => "dcat:Catalog",
  285.             "conformsTo"    => "https://project-open-data.cio.gov/v1.1/schema",
  286.             "describedBy"   => "https://project-open-data.cio.gov/v1.1/schema/catalog.json",
  287.             
  288.         );
  289.         $dataset = [];
  290.         $publikasi $tPublikasiRepo->findBy(["status" => 3]);
  291.         foreach ($publikasi as $pub) {
  292.             $dataset[] = [
  293.                 "@type" => "dcat:Dataset",
  294.                 "accessLevel" => "public",
  295.                 "contactPoint" => [
  296.                     "fn" => "Rustam",
  297.                     "hasEmail" => "mailto:noemailprovided@usa.gov"
  298.                 ],
  299.                 "distribution" => [
  300.                     [
  301.                         "@type" => "dcat:Distribution",
  302.                         "downloadURL" => "https://opendata.kedirikab.go.id/dataset/" .$pub->getId(). "/csv/download_excel",
  303.                         "mediaType" => "text/csv",
  304.                         "format" => "csv",
  305.                         "title" => $pub->getJudul()
  306.                     ]
  307.                 ],
  308.                 "identifier" => md5($pub->getId()),
  309.                 "issued" => "-",
  310.                 "landingPage" => "https://opendata.kedirikab.go.id/dataset/" .$pub->getId(). "/detail",
  311.                 "modified" => $pub->getCreatedAt()->format("Y-m-d"),
  312.                 "publisher" => [
  313.                     "@type" => "org:Organization",
  314.                     "name" => "https://opendata.kedirikab.go.id/"
  315.                 ],
  316.                 "title" => $pub->getJudul(),
  317.                 "description" => $pub->getDeskripsi() ? strip_tags($pub->getDeskripsi()) : "",
  318.                 "keyword" => is_array($pub->getKeyword()) ? implode(","$pub->getKeyword()) : ""
  319.             ];
  320.         }
  321.         $data['dataset'] = $dataset;
  322.         return $this->json($data);
  323.     }
  324. }