src/Controller/Frontend/DatasetController.php line 623

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Frontend;
  3. use App\Controller\Base\BaseController;
  4. use App\Entity\MKategoriDetail;
  5. use App\Entity\TData;
  6. use App\Entity\TPermohonan;
  7. use App\Entity\TPublikasi;
  8. use App\Entity\TVariabel;
  9. use App\Form\TPermohonanType;
  10. use App\Repository\MKategoriDetailRepository;
  11. use App\Repository\MKategoriRepository;
  12. use App\Repository\MSektorRepository;
  13. use App\Repository\MUrusanDetailRepository;
  14. use App\Repository\TDataRepository;
  15. use App\Repository\MUrusanRepository;
  16. use App\Repository\TDivRepository;
  17. use App\Repository\TGrafikRepository;
  18. use App\Repository\TPermohonanRepository;
  19. use App\Repository\TPublikasiRepository;
  20. use App\Repository\TVariabelRepository;
  21. use Doctrine\Persistence\ManagerRegistry;
  22. use Knp\Component\Pager\PaginatorInterface;
  23. use PhpOffice\PhpSpreadsheet\Spreadsheet;
  24. use PhpOffice\PhpSpreadsheet\Style\Alignment;
  25. use PhpOffice\PhpSpreadsheet\Style\Border;
  26. use PhpOffice\PhpSpreadsheet\Writer\Csv;
  27. use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
  28. use Symfony\Component\HttpFoundation\JsonResponse;
  29. use Symfony\Component\HttpFoundation\Request;
  30. use Symfony\Component\HttpFoundation\Response;
  31. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  32. use Symfony\Component\Routing\Annotation\Route;
  33. use Sonata\SeoBundle\Seo\SeoPageInterface;
  34. use Kematjaya\Export\Manager\ManagerInterface;
  35. use Kematjaya\Export\Processor\Excel\SpreadsheetFromArrayProcessor;
  36. class DatasetController extends BaseController
  37. {
  38.     /**
  39.      * @Route("/dataset", name="dataset", methods={"POST", "GET"})
  40.      */
  41.     public function index(
  42.         SeoPageInterface $seoPage,
  43.         Request $request,
  44.         MKategoriRepository $mKategoriRepo,
  45.         MKategoriDetailRepository $mKategoriDetailRepo,
  46.         PaginatorInterface $paginatorInterface,
  47.         TDivRepository $tDivRepo,
  48.         MSektorRepository $mSektorRepo,
  49.         MUrusanRepository $mUrusanRepo,
  50.         MUrusanDetailRepository $mUrusanDetailRepository,
  51.         TPublikasiRepository $tPublikasiRepository
  52.     ): Response {
  53.         $seoPage->addTitlePrefix("Dataset");
  54.         $queryBuilder $this->getQueryBuilder(TPublikasi::class);
  55.         // if ($request->get('kategori')){
  56.         //     $queryBuilder = $queryBuilder
  57.         //                     ->join(MKategoriDetail::class, 'k', 'WITH', 'k.reff_id = this.id')
  58.         //                     ->andWhere("k.reff_name = 'PUBLIKASI'")
  59.         //                     ->andWhere('k.kategori = ' . $request->get('kategori'));
  60.         // }
  61.         $queryBuilder $queryBuilder
  62.             ->andWhere("this.status = 3");
  63.         if ($request->get('judul')) {
  64.             $queryBuilder $queryBuilder->andWhere("lower(this.judul) LIKE lower('%" $request->get('judul''') . "%')");
  65.         }
  66.         if ($request->get('opd')) {
  67.             $queryBuilder $queryBuilder->andWhere("this.div = " $request->get('opd'));
  68.         }
  69.         if ($request->get('sektor')) {
  70.             $queryBuilder $queryBuilder->andWhere("this.sektor = " $request->get('sektor'));
  71.         }
  72.         $queryBuilder $queryBuilder->addOrderBy('this.id''desc');
  73.         // dump($queryBuilder->getQuery()->getResult());exit;
  74.         $pagination $paginatorInterface->paginate($queryBuilder$request->query->getInt('page'1), 10);
  75.         $kategori = array();
  76.         $icons = array();
  77.         foreach ($pagination as $pub) {
  78.             $kategori_detail $mUrusanDetailRepository->findBy(['reff_id' => $pub->getId(), 'reff_name' => 'PUBLIKASI'], ['id' => 'ASC']);
  79.             if ($kategori_detail) {
  80.                 $icons[$pub->getId()] = ($kategori_detail[0]->getUrusan()->getIcon()) ? $kategori_detail[0]->getUrusan()->getIcon() : '';
  81.                 $temp = array();
  82.                 foreach ($kategori_detail as $kat) {
  83.                     $temp[] = $kat->getUrusan()->getNama();
  84.                 }
  85.                 $kategori[$pub->getId()] = implode(', '$temp);
  86.             } else {
  87.                 $kategori[$pub->getId()] = '-';
  88.                 $icons[$pub->getId()] = null;
  89.             }
  90.         }
  91.         $list_sektor $mSektorRepo->findAll();
  92.         $list_div $tDivRepo->findAll();
  93.         $urusan $mUrusanRepo->findBy([], ['id' => 'asc']);
  94.         // dump($urusan); exit;
  95.         $total_pub $tPublikasiRepository->findBy(['status' => 3], ['id' => 'desc']);
  96.         $total_pub count($total_pub);
  97.         return $this->render('frontend/dataset/index.html.twig', [
  98.             'controller_name' => 'DatasetController',
  99.             'header_kategori' => $this->getHeaderKategori(),
  100.             // 'publikasi' => $publikasi,
  101.             'pagination' => $pagination,
  102.             'kategori' => $kategori,
  103.             'icons' => $icons,
  104.             'list_sektor' => $list_sektor,
  105.             'list_div' => $list_div,
  106.             'total_pub' => $total_pub,
  107.             'search' => array('judul' => $request->get('judul'''), 'opd' => $request->get('opd'), 'sektor' => $request->get('sektor')),
  108.             'urusan' => $urusan,
  109.         ]);
  110.     }
  111.     /**
  112.      * @Route("/dataset/{id}/detail", name="dataset_detail", methods={"GET"})
  113.      */
  114.     public function detail(
  115.         ?string $id,
  116.         Request $request,
  117.         TPublikasiRepository $tPublikasiRepo,
  118.         MKategoriDetailRepository $mKategoriDetailRepo,
  119.         TVariabelRepository $tVariabelRepo,
  120.         TGrafikRepository $tGrafikRepo
  121.     ) {
  122.         $publikasi $tPublikasiRepo->find($id);
  123.         $publikasi->setView($publikasi->getView() + 1);
  124.         $entityManager $this->getDoctrine()->getManager();
  125.         $entityManager->persist($publikasi);
  126.         $entityManager->flush();
  127.         $kategori_detail $mKategoriDetailRepo->findBy(['reff_id' => $publikasi->getId(), 'reff_name' => 'PUBLIKASI'], ['id' => 'ASC']);
  128.         $kategori '';
  129.         if ($kategori_detail) {
  130.             $temp = array();
  131.             foreach ($kategori_detail as $kat) {
  132.                 $temp[] = $kat->getKategori()->getNama();
  133.             }
  134.             $kategori implode(', '$temp);
  135.         } else {
  136.             $kategori '';
  137.         }
  138.         if ($publikasi->getUrusan()) {
  139.             $terkait $this->getQueryBuilder(TPublikasi::class)
  140.                 ->andWhere("this.id != " $publikasi->getId())
  141.                 // ->andWhere("this.div = " .$publikasi->getDiv()->getId())
  142.                 ->andWhere("this.urusan = " $publikasi->getUrusan()->getId())
  143.                 ->orderBy('this.view''desc')->setMaxResults(5)
  144.                 ->getQuery()->getResult();
  145.         } else {
  146.             $terkait '';
  147.         }
  148.         $opt_periode $this->getPeriodeName($publikasi->getPeriode()->getId());
  149.         $variabel $tVariabelRepo->findBy(['pub' => $publikasi->getId(), 'is_tampil' => true], ['id' => 'ASC']);
  150.         $grafik $tGrafikRepo->findOneBy(['pub' => $publikasi->getId()]);
  151.         $grafik_info = [];
  152.         if ($grafik) {
  153.             $variabel_x $tVariabelRepo->find($grafik->getAxisX());
  154.             // $variabel_y = $tVariabelRepo->find($grafik->getAxisY());
  155.             $grafik_info = [
  156.                 'title' => $grafik->getJudul(),
  157.                 'tipe' => $grafik->getTipe(),
  158.                 'varX' => $variabel_x->getNama(),
  159.                 // 'varY' => $variabel_y->getNama()
  160.             ];
  161.         }
  162.         if ($publikasi->getJenis() != 1) {
  163.             $queryBuilderTahun $this->getQueryBuilder(TData::class);
  164.             $queryBuilderTahun $queryBuilderTahun
  165.                 ->join(TVariabel::class, 'v''WITH''v.id = this.variabel')
  166.                 ->andWhere("this.pub = " $publikasi->getId())
  167.                 ->andWhere("v.nama = 'tahun'");
  168.             $queryBuilderTahun $queryBuilderTahun->addOrderBy('this.id''asc');
  169.             $tahun $queryBuilderTahun->getQuery()->getResult();
  170.             $result = [];
  171.             $ids 0;
  172.             foreach ($tahun as $thn) {
  173.                 $result[$ids++]['tahun'] = $thn->getIsi();
  174.             }
  175.             $queryBuilderTarget $this->getQueryBuilder(TData::class);
  176.             $queryBuilderTarget $queryBuilderTarget
  177.                 ->join(TVariabel::class, 'v''WITH''v.id = this.variabel')
  178.                 ->andWhere("this.pub = " $publikasi->getId())
  179.                 ->andWhere("v.nama = 'target'");
  180.             $queryBuilderTarget $queryBuilderTarget->addOrderBy('this.id''asc');
  181.             $targets $queryBuilderTarget->getQuery()->getResult();
  182.             $ids 0;
  183.             // it should pushed to server
  184.             if (!empty($targets)) {
  185.                 foreach ($targets as $target) {
  186.                     $result[$ids++]['target'] = ['id'=> $target->getId(),'nilai' => $target->getIsi()];
  187.                 }
  188.             } else {
  189.                 $target null;
  190.             }
  191.             $queryBuilderRealisasi $this->getQueryBuilder(TData::class);
  192.             $queryBuilderRealisasi $queryBuilderRealisasi
  193.                 ->join(TVariabel::class, 'v''WITH''v.id = this.variabel')
  194.                 ->andWhere("this.pub = " $publikasi->getId())
  195.                 ->andWhere("v.nama = 'realisasi'");
  196.             $queryBuilderRealisasi $queryBuilderRealisasi->addOrderBy('this.id''asc');
  197.             $realisasi $queryBuilderRealisasi->getQuery()->getResult();
  198.             $ids 0;
  199.             foreach ($realisasi as $real) {
  200.                 $result[$ids++]['realisasi'] = ['id'=> $real->getId(),'nilai' => $real->getIsi()];
  201.             }
  202.             $jumlah_tahun count($tahun);
  203.             // dump($result); exit;
  204.         }else{
  205.             $tahun null;
  206.             $target null;
  207.             $realisasi null;
  208.             $result null;
  209.             $jumlah_tahun null;
  210.         }
  211.         return $this->render('frontend/dataset/detail.html.twig', [
  212.             'controller_name' => 'DatasetController',
  213.             'header_kategori' => $this->getHeaderKategori(),
  214.             'publikasi' => $publikasi,
  215.             'kategori' => $kategori,
  216.             'variabel' => $variabel,
  217.             'terkait' => $terkait,
  218.             'grafik' => $grafik,
  219.             'result' => $result,
  220.             'target' => $target,
  221.             'realisasi' => $realisasi,
  222.             'tahun' => $tahun,
  223.             'jumlah_tahun' => $jumlah_tahun,
  224.             'opt_periode' => $opt_periode,
  225.             'grafik_info' => $grafik_info,
  226.         ]);
  227.     }
  228.     /**
  229.      * @Route("/dataset/request/{id}", defaults={"id"= null}, name="dataset_form", methods={"POST", "GET"})
  230.      */
  231.     public function form(?string $id nullRequest $requestTPermohonanRepository $tPermohonanRepository)
  232.     {
  233.         if ($id) {
  234.             $permohonan $tPermohonanRepository->find($id);
  235.         } else {
  236.             $permohonan = new TPermohonan();
  237.         }
  238.         if (!$permohonan) {
  239.             throw new NotFoundHttpException();
  240.         }
  241.         $form $this->createForm(TPermohonanType::class, $permohonan, ['action' => $this->generateUrl('dataset_form', ['id' => $permohonan->getId()])]);
  242.         $form->handleRequest($request);
  243.         if ($form->isSubmitted() && $form->isValid()) {
  244.             $user $form->getData();
  245.             $user->setisDone(false);
  246.             $user->setCreatedAt(new \DateTime());
  247.             $entityManager $this->getDoctrine()->getManager();
  248.             $entityManager->persist($user);
  249.             $entityManager->flush();
  250.             $this->addFlash('notice''Berhasil dikirim');
  251.             return $this->redirectToRoute('dataset');
  252.         }
  253.         return $this->render('/frontend/dataset/form.html.twig', [
  254.             'form' => $form->createView(),
  255.             'header_kategori' => $this->getHeaderKategori(),
  256.         ]);
  257.     }
  258.     /**
  259.      * @Route("/dataset/{id}/dataset_table", name="dataset_dataset_table", methods={"GET", "POST"})
  260.      */
  261.     public function dataset_table(?string $idRequest $requestManagerRegistry $managerRegistry)
  262.     {
  263.         $item_per_page $_POST['length'];
  264.         $page = ($_POST['start'] / $item_per_page) + 1;
  265.         $page = ($page 1) * 10;
  266.         $dataset $this->getDataTableFront($managerRegistry$id10$page$_POST);
  267.         $jumlah count($this->getDataTableFront($managerRegistry$idnullnull$_POST));
  268.         $arrJson['aaData']                 = $dataset;
  269.         $arrJson['iTotalRecords']        = $jumlah;
  270.         $arrJson['iTotalDisplayRecords'] = $jumlah;
  271.         return new JsonResponse($arrJson);
  272.     }
  273.     /**
  274.      * @Route("/dataset/{id}/{tipe}/download_excel", name="dataset_excel", methods={"GET", "POST"})
  275.      */
  276.     public function downloadExcel(?string $idstring $tipeTPublikasiRepository $tPublikasiRepoTVariabelRepository $tVariabelRepo)
  277.     {
  278.         $publikasi $tPublikasiRepo->find($id);
  279.         $jumlah_download = ($publikasi->getJumlahDownload()) ? $publikasi->getJumlahDownload() + 0;
  280.         $publikasi->setJumlahDownload($jumlah_download 1);
  281.         $entityManager $this->getDoctrine()->getManager();
  282.         $entityManager->persist($publikasi);
  283.         $entityManager->flush();
  284.         $variabel $tVariabelRepo->findBy(['pub' => $id'is_tampil' => true], ['id' => 'asc']);
  285.         $dataset $this->getDataTable($idnullnullnull);
  286.         $styleFontCenter = array(
  287.             'alignment' => array('horizontal' => Alignment::HORIZONTAL_CENTER)
  288.         );
  289.         $styleBorder = array(
  290.             'borders' => array(
  291.                 'allBorders' => array(
  292.                     'borderStyle' => Border::BORDER_THIN,
  293.                 )
  294.             )
  295.         );
  296.         $styleFontBold = array(
  297.             'font' => array('bold' => true)
  298.         );
  299.         $spreadsheet = new Spreadsheet();
  300.         $sheet $spreadsheet->getActiveSheet();
  301.         $cols "A";
  302.         foreach ($variabel as $var) {
  303.             $sheet->getColumnDimension($cols)->setAutoSize(true);
  304.             $sheet->getCell($cols '1')->setValue($var->getNama());
  305.             if ($tipe == 'xlsx') {
  306.                 $sheet->getStyle($cols '1')->applyFromArray($styleFontBold);
  307.                 $sheet->getStyle($cols '1')->applyFromArray($styleFontCenter);
  308.                 $sheet->getStyle($cols '1')->applyFromArray($styleBorder);
  309.             }
  310.             $cols++;
  311.         }
  312.         // $cols = chr(ord($cols) - 1);
  313.         $cols "A";
  314.         if ($tipe == 'xlsx') {
  315.             foreach ($variabel as $var) {
  316.                 $sheet->getStyle($cols '2:' $cols . (count($dataset) + 1))->applyFromArray($styleBorder);
  317.                 $cols++;
  318.             }
  319.         }
  320.         $sheet->fromArray($datasetnull'A2');
  321.         header('Content-Type: application/vnd.ms-excel');
  322.         header('Content-Disposition: attachment; filename="' substr($publikasi->getJudul(), 030) . '.' $tipe '"');
  323.         if ($tipe == 'xlsx') {
  324.             $writer = new Xlsx($spreadsheet);
  325.         } else {
  326.             $writer = new Csv($spreadsheet);
  327.             $writer->setDelimiter(';');
  328.             $writer->setEnclosure('"');
  329.             $writer->setLineEnding("\r\n");
  330.         }
  331.         $writer->save("php://output");
  332.         exit;
  333.         // return $this->redirectToRoute('dataset_detail', ['id' => $id]);
  334.     }
  335.     /**
  336.      * @Route("/dataset/{id}/{tipe}/download_excel_kmj", name="dataset_excel_kmj", methods={"GET", "POST"})
  337.      */
  338.     public function downloadExcelKmj(
  339.         ?string $id,
  340.         string $tipe,
  341.         TPublikasiRepository $tPublikasiRepo,
  342.         TVariabelRepository $tVariabelRepo,
  343.         ManagerInterface $managerInterface
  344.     ) {
  345.         $publikasi $tPublikasiRepo->find($id);
  346.         $variabel $tVariabelRepo->findBy(['pub' => $id'is_tampil' => true], ['id' => 'asc']);
  347.         $dataset $this->getDataTable($idnullnullnull);
  348.         foreach ($variabel as $var) {
  349.             $vars[] = $var->getNama();
  350.         }
  351.         array_unshift($dataset$vars);
  352.         $filename substr($publikasi->getJudul(), 030) . ".xlsx";
  353.         $arrayToExcel $managerInterface->render($dataset, new SpreadsheetFromArrayProcessor('peringkat_pd.xlsx'));
  354.         return $arrayToExcel;
  355.     }
  356.     /**
  357.      * @Route("/dataset/{id}/chartJson", name="dataset_chart_json", methods={"POST", "GET"})
  358.      */
  359.     public function chartJson(
  360.         Request $request,
  361.         TPublikasi $tPublikasi,
  362.         TPublikasiRepository $tPublikasiRepo,
  363.         TGrafikRepository $tGrafikRepo,
  364.         TVariabelRepository $tVariabelRepo,
  365.         TDataRepository $tDataRepo
  366.     ) {
  367.         $detail $tPublikasiRepo->find($tPublikasi);
  368.         $sel_periode $request->get('periode');
  369.         $grafik $tGrafikRepo->findOneBy(['pub' => $detail->getId()]);
  370.         $varYs = [];
  371.         foreach ($grafik->getAxisYIds() as $axisY) {
  372.             $varYs[$axisY] = $tVariabelRepo->find($axisY);;
  373.         }
  374.         $period explode(" "$sel_periode);
  375.         if ($period[1] == 'All') {
  376.             $opt_periode $this->getPeriodeName($detail->getPeriode()->getId());
  377.             foreach ($opt_periode as $k => $v) {
  378.                 if ($period[0] == $v) {
  379.                     $periodex $k;
  380.                 }
  381.             }
  382.         } else {
  383.             $periodex $period[0] . ' ' $period[1];
  384.         }
  385.         $data_chart $this->getTabelGrafik($detail->getId(), $varYs$sel_periode);
  386.         $var  $tVariabelRepo->find($grafik->getAxisX());
  387.         if ($var && $var->getNama() == 'periode_update') {
  388.             if ($period[1] == 'All') {
  389.                 $queryBuilder $this->getQueryBuilder(TData::class);
  390.                 $queryBuilder $queryBuilder->andWhere("lower(this.isi) LIKE lower('%" $period[1] . "%')");
  391.                 $queryBuilder $queryBuilder->andWhere("this.pub = " $detail->getId());
  392.                 $queryBuilder $queryBuilder->andWhere("this.variabel = " $grafik->getAxisX());
  393.                 $queryBuilder $queryBuilder->addOrderBy('this.id''desc');
  394.                 $tdataKategori $queryBuilder->getQuery()->getResult();
  395.             } else {
  396.                 $tdataKategori $tDataRepo->findBy(['pub' => $detail->getId(), 'variabel' => $grafik->getAxisX(), 'isi' => $periodex], ['id' => 'asc']);
  397.             }
  398.         } else if ($var && $var->getNama() == 'tahun') {
  399.             if ($period[1] == 'All') {
  400.                 $queryBuilder $this->getQueryBuilder(TData::class);
  401.                 // $queryBuilder = $queryBuilder->andWhere("lower(this.isi) LIKE lower('%" . $period[1] . "%')");
  402.                 // $queryBuilder = $queryBuilder->andWhere("this.isi = " . $period[1]);
  403.                 $queryBuilder $queryBuilder->andWhere("this.pub = " $detail->getId());
  404.                 $queryBuilder $queryBuilder->andWhere("this.variabel = " $grafik->getAxisX());
  405.                 $queryBuilder $queryBuilder->addOrderBy('this.id''asc');
  406.                 $tdataKategori $queryBuilder->getQuery()->getResult();
  407.             } else {
  408.                 $tdataKategori $tDataRepo->findBy(['pub' => $detail->getId(), 'variabel' => $grafik->getAxisX(), 'isi' => $period[1]], ['id' => 'asc']);
  409.             }
  410.         } else {
  411.             $tdataKategori $tDataRepo->findBy(['pub' => $detail->getId(), 'variabel' => $grafik->getAxisX()], ['id' => 'asc']);
  412.         }
  413.         $data_kategori = array();
  414.         foreach ($tdataKategori as $td) {
  415.             $data_kategori[] = $td->getIsi();
  416.         }
  417.         // dump($data_kategori); exit;
  418.         $data_kategori = array();
  419.         foreach ($tdataKategori as $td) {
  420.             $data_kategori[] = $td->getIsi();
  421.         }
  422.         // $json = ['columns' => $data_kategori, 'datas' => $data_chart];
  423.         $datas = [];
  424.         foreach ($data_chart as $dchart) {
  425.             foreach ($dchart as $k => $v) {
  426.                 $datas[$k]["name"] = $k;
  427.                 $datas[$k]["data"][] = floatval($v);
  428.             }
  429.         }
  430.         unset($datas['periode_order']);
  431.         unset($datas['periode_update']);
  432.         $datas array_values($datas);
  433.         // dump($datas); exit;
  434.         // $datas[] = [
  435.         //     "name" => "kat1",
  436.         //     "data" => [70, 72, 71, 74, 73]
  437.         // ];
  438.         // $datas[] = [
  439.         //     "name" => "kat2",
  440.         //     "data" => [80, 82, 81, 84, 83]
  441.         // ];
  442.         $json = ['columns' => $data_kategori'datas' => $datas];
  443.         return $this->json($json);
  444.     }
  445.     /**
  446.      * @Route("/dataset/{id}/dcat", name="dataset_dcat", methods={"POST", "GET"})
  447.      */
  448.     public function dcat(?string $idTPublikasiRepository $tPublikasiRepo)
  449.     {
  450.         header('Content-Type: application/json');
  451.         $data = array(
  452.             "@context" => "https://project-open-data.cio.gov/v1.1/schema/catalog.jsonld",
  453.             "@id"      => "http://103.20.91.54:8007/data.json",
  454.             "@type"    => "dcat:Catalog",
  455.             "conformsTo"    => "https://project-open-data.cio.gov/v1.1/schema",
  456.             "describedBy"   => "https://project-open-data.cio.gov/v1.1/schema/catalog.json",
  457.         );
  458.         $dataset = [];
  459.         $publikasi = [$tPublikasiRepo->find($id)];
  460.         foreach ($publikasi as $pub) {
  461.             $dataset[] = [
  462.                 "@type" => "dcat:Dataset",
  463.                 "accessLevel" => "public",
  464.                 "contactPoint" => [
  465.                     "fn" => "Rustam",
  466.                     "hasEmail" => "mailto:noemailprovided@usa.gov"
  467.                 ],
  468.                 "distribution" => [
  469.                     [
  470.                         "@type" => "dcat:Distribution",
  471.                         "downloadURL" => "http://103.20.91.54:8007/frontend/dataset/" $pub->getId() . "/csv/download_excel",
  472.                         "mediaType" => "text/csv",
  473.                         "format" => "csv",
  474.                         "title" => $pub->getJudul()
  475.                     ]
  476.                 ],
  477.                 "identifier" => md5($pub->getId()),
  478.                 "issued" => "-",
  479.                 "landingPage" => "http://103.20.91.54:8007/dataset/" $pub->getId() . "/detail",
  480.                 "modified" => $pub->getCreatedAt()->format("Y-m-d"),
  481.                 "publisher" => [
  482.                     "@type" => "org:Organization",
  483.                     "name" => "http://103.20.91.54:8007/"
  484.                 ],
  485.                 "title" => $pub->getJudul(),
  486.                 "description" => $pub->getDeskripsi() ? strip_tags($pub->getDeskripsi()) : "",
  487.                 "keyword" => $pub->getKeyword() ? implode(","$pub->getKeyword()) : []
  488.             ];
  489.         }
  490.         $data['dataset'] = $dataset;
  491.         return $this->json($data);
  492.     }
  493.     public function getDataTableFront($managerRegistry$id$limit$page$get$state null$row null)
  494.     {
  495.         $connection $managerRegistry->getConnection();
  496.         // $connection = DriverManager::getConnection($this->connParams);
  497.         $tbl_func "CREATE EXTENSION IF NOT EXISTS tablefunc; ";
  498.         $stmt $connection->prepare($tbl_func);
  499.         $stmt->execute();
  500.         $variabel_repo $managerRegistry->getRepository(TVariabel::class);
  501.         $variabel $variabel_repo->findBy(['pub' => $id'is_tampil' => true], ['id' => 'asc']);
  502.         $as_columns "";
  503.         foreach ($variabel as $var) {
  504.             $as_columns .= ", " $var->getNama() . " text";
  505.         }
  506.         $sql "SELECT * FROM crosstab('select a.row_id, b.id, a.isi 
  507.                 from t_data a 
  508.                 join t_variabel b 
  509.                 on a.variabel_id = b.id 
  510.                 where a.pub_id = " $id " and b.is_tampil is true ";
  511.         $sql .= " order by 1, 2')
  512.                 AS ct (row_id int" $as_columns ") where 1=1";
  513.         if ($row) {
  514.             $sql .= " and row_id = " $row;
  515.         }
  516.         if ($get) {
  517.             foreach ($variabel as $var) {
  518.                 if ($value $get[$var->getNama()]) {
  519.                     $sql .= " and " $var->getNama() . " ILIKE '%" $value "%'";
  520.                 }
  521.             }
  522.         }
  523.         if ($limit) {
  524.             $sql .= " LIMIT " $limit;
  525.         }
  526.         if ($page) {
  527.             $sql .= " OFFSET " $page;
  528.         }
  529.         $stmt $connection->prepare($sql);
  530.         $stmt->execute();
  531.         $result = array();
  532.         foreach ($stmt->fetchAll() as $data) {
  533.             $temp = array();
  534.             if ($state) {
  535.                 $temp['id'] = $data['row_id'];
  536.             }
  537.             foreach ($variabel as $var) {
  538.                 $temp[] = $data[$var->getNama()];
  539.             }
  540.             $result[] = $temp;
  541.         }
  542.         // print_r($result);exit;
  543.         return $result;
  544.     }
  545.     /**
  546.      * @Route("/dataset/urusan/{id}", name="dataset_urusan", methods={"GET"})
  547.      */
  548.     public function datasetUrusan(
  549.         int $id,
  550.         Request $request,
  551.         MUrusanRepository $mUrusanRepo,
  552.         MSektorRepository $mSektorRepository,
  553.         TPublikasiRepository $tPublikasiRepository
  554.     ) {
  555.         $urusan $mUrusanRepo->findBy([], ['id' => 'asc']);
  556.         $sektor $mSektorRepository->findBy(['urusan' => $id]);
  557.         $dataset = [];
  558.         foreach ($sektor as $sk) {
  559.             $dataset[$sk->getId()] = $tPublikasiRepository->findBy(['sektor' => $sk->getId()], ['id' => 'desc'], 5);
  560.         }
  561.         // dump($sektor);
  562.         // exit;
  563.         return $this->render('/frontend/dataset/dataset_urusan.html.twig', [
  564.             'sektor' => $sektor,
  565.             'urusan' => $urusan,
  566.             'dataset' => $dataset,
  567.             // 'search' => array('judul'=>$request->get('judul', ''), 'opd'=>$request->get('opd'), 'sektor' => $request->get('sektor')),
  568.         ]);
  569.     }
  570.     /**
  571.      * @Route("/dataset/detail_urusan/{id}", name="detail_dataset_urusan", methods={"GET"})
  572.      */
  573.     public function detailDatasetUrusan(int $idRequest $requestMSektorRepository $mSektorRepositoryTPublikasiRepository $tPublikasiRepositoryPaginatorInterface $paginatorInterface)
  574.     {
  575.         $sektor $mSektorRepository->find($id);
  576.         $queryBuilder $this->getQueryBuilder(TPublikasi::class);
  577.         $queryBuilder $queryBuilder->andWhere("this.status = 3");
  578.         $queryBuilder $queryBuilder->andWhere("this.sektor = " $sektor->getId());
  579.         if ($request->get('judul')) {
  580.             $queryBuilder $queryBuilder->andWhere("lower(this.judul) LIKE lower('%" $request->get('judul''') . "%')");
  581.         }
  582.         $queryBuilder $queryBuilder->addOrderBy('this.id''desc');
  583.         // dump($queryBuilder->getQuery()->getResult());exit;
  584.         $pagination $paginatorInterface->paginate($queryBuilder$request->query->getInt('page'1), 10);
  585.         return $this->render('/frontend/dataset/detail_dataset_urusan.html.twig', [
  586.             'sektor' => $sektor,
  587.             'pagination' => $pagination
  588.         ]);
  589.     }
  590. }