src/Controller/Base/BaseController.php line 160

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Base;
  3. use App\Entity\MKategori;
  4. use App\Entity\MKategoriDetail;
  5. use App\Entity\PtiGroup;
  6. use App\Entity\PtiRule;
  7. use App\Entity\TData;
  8. use App\Entity\TDokumen;
  9. use App\Entity\TGrafik;
  10. use App\Entity\TPublikasi;
  11. use App\Entity\TVariabel;
  12. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  13. use App\Utils\ObjectManager;
  14. use App\Utils\Breadcrumb\BreadcrumbBuilder;
  15. use Doctrine\DBAL\Driver\PDO\PgSQL\Driver;
  16. use Doctrine\DBAL\DriverManager;
  17. use Symfony\Contracts\Translation\TranslatorInterface;
  18. use Lexik\Bundle\FormFilterBundle\Filter\FilterBuilderUpdaterInterface;
  19. use Symfony\Component\Form\FormInterface;
  20. use Symfony\Component\HttpFoundation\Request;
  21. use Doctrine\ORM\QueryBuilder;
  22. use Doctrine\ORM\Query;
  23. use Doctrine\Persistence\ManagerRegistry;
  24. use Pagerfanta\Adapter\DoctrineORMAdapter;
  25. use Pagerfanta\Pagerfanta;
  26. use Ob\HighchartsBundle\Highcharts\Highchart;
  27. use Symfony\Component\Security\Core\Security;
  28. use Doctrine\Common\Proxy\Proxy;
  29. class BaseController extends AbstractController
  30. {
  31.     /**
  32.      * @var limit
  33.      */
  34.     private $limit 10;
  35.     /**
  36.      * @var max_per_page
  37.      */
  38.     private $max_per_page = array(1050100);
  39.     private $translation;
  40.     private $filterBuilder;
  41.     private $objectManager;
  42.     private $breadcrumbBuilder;
  43.     private $managerRegistry;
  44.     public function __construct(
  45.         ObjectManager $objectManager,
  46.         TranslatorInterface $translation,
  47.         FilterBuilderUpdaterInterface $filterBuilder,
  48.         BreadcrumbBuilder $breadcrumbBuilder,
  49.         ManagerRegistry $managerRegistry
  50.     ) {
  51.         $this->translation $translation;
  52.         $this->filterBuilder $filterBuilder;
  53.         $this->objectManager $objectManager;
  54.         $this->breadcrumbBuilder $breadcrumbBuilder;
  55.         $this->managerRegistry $managerRegistry;
  56.     }
  57.     protected function getBreadcrumb()
  58.     {
  59.         return $this->breadcrumbBuilder;
  60.     }
  61.     /**
  62.      * @return Symfony\Component\Translation\TranslatorInterface
  63.      */
  64.     public function getTranslator(): TranslatorInterface
  65.     {
  66.         return $this->translation;
  67.     }
  68.     public function getQueryBuilder(string $entityClassName): QueryBuilder
  69.     {
  70.         $queryBuilder $this->getDoctrine()->getManager()->createQueryBuilder()
  71.             ->select('this')
  72.             ->from($entityClassName'this');
  73.         return $queryBuilder;
  74.     }
  75.     protected function buildFilter(Request $requestFormInterface $formQueryBuilder $queryBuilder): QueryBuilder
  76.     {
  77.         if ($request->get('_reset')) {
  78.             $this->setFilters(null$form->getName());
  79.         }
  80.         $filters $request->get($form->getName());
  81.         if ($filters) {
  82.             $form->submit($filters);
  83.             $this->setFilters($form->getData(), $form->getName());
  84.         }
  85.         return $this->getFilterAdapter()->addFilterConditions($form$queryBuilder);
  86.     }
  87.     public function createPaginator(Request $requestQuery $query): Pagerfanta
  88.     {
  89.         if ($request->get('_limit') && is_numeric($request->get('_limit'))) {
  90.             $request->getSession()->set('limit'$request->get('_limit'));
  91.         } else {
  92.             $request->getSession()->set('limit'$this->limit);
  93.         }
  94.         // if(!$request->getSession()->get("limit")) {
  95.         //     $request->getSession()->set('limit', $this->limit);
  96.         // }
  97.         $adapter = new DoctrineORMAdapter($queryfalse);
  98.         $paginator = new Pagerfanta($adapter);
  99.         $paginator->setAllowOutOfRangePages(true);
  100.         //  Set pages based on the request parameters.
  101.         $paginator->setMaxPerPage($request->getSession()->get("limit"));
  102.         $paginator->setCurrentPage($request->query->get('page'1));
  103.         return $paginator;
  104.     }
  105.     public function setSessionLimit($request)
  106.     {
  107.         if ($request->get('_limit') && is_numeric($request->get('_limit'))) {
  108.             $request->getSession()->set('limit'$request->get('_limit'));
  109.             $this->limit $request->getSession()->get('limit');
  110.             // } else {
  111.             // $request->getSession()->set('limit', $this->limit);
  112.         }
  113.     }
  114.     public function getLimit()
  115.     {
  116.         return $this->limit;
  117.     }
  118.     public function setMaxPerPage($max_page = array())
  119.     {
  120.         $this->max_per_page $max_page;
  121.     }
  122.     public function getMaxPerPage()
  123.     {
  124.         return $this->max_per_page;
  125.     }
  126.     public function setFilters($filters = array(), $name)
  127.     {
  128.         $this->get('session')->set($name$filters);
  129.     }
  130.     public function getFilters($name)
  131.     {
  132.         $filters $this->get('session')->get($namenull);
  133.         if (!is_array($filters)) {
  134.             
  135.             return null;
  136.         }
  137.         
  138.         foreach($filters as $k => $v)  {
  139.             if (!is_object ($v)) {
  140.                 continue;
  141.             }
  142.             $manager $this->getDoctrine()->getManager();
  143.             if (!$manager->getMetadataFactory()->isTransient(get_class($v)) or $v instanceof Proxy) {
  144.                 $filters[$k] = $manager->getRepository(get_class($v))->find($v->getId());
  145.             }
  146.         }
  147.         
  148.         return $filters;
  149.     }
  150.     public function getFilterAdapter()
  151.     {
  152.         return $this->filterBuilder;
  153.     }
  154.     protected function processFormAjax(FormInterface $formRequest $request)
  155.     {
  156.         $form->handleRequest($request);
  157.         if ($form->isSubmitted()) {
  158.             $type = ($form->getData() && !is_array($form->getData()) && $form->getData()->getId()) ? "update" "add";
  159.             if ($form->isValid()) {
  160.                 $result $this->objectManager->save($form->getData());
  161.                 if ($result) {
  162.                     return ["process" => true"status" => true"message" => $this->getTranslator()->trans('messages.' $type '.success'), "errors" => null];
  163.                 } else {
  164.                     return ["process" => true"status" => false"message" => $this->getTranslator()->trans('messages.' $type '.error'), "errors" => 'error while saved data.'];
  165.                 }
  166.             } else {
  167.                 $errors $this->getErrorsFromForm($form);
  168.                 return ["process" => true"status" => false"message" => $this->getTranslator()->trans('messages.' $type '.error'), "errors" => implode(", "$errors)];
  169.             }
  170.         }
  171.         return ["process" => false];
  172.     }
  173.     protected function getErrorsFromForm(FormInterface $form)
  174.     {
  175.         $errors = array();
  176.         foreach ($form->getErrors() as $error) {
  177.             $errors[] = $error->getMessage();
  178.         }
  179.         foreach ($form->all() as $childForm) {
  180.             if ($childForm instanceof FormInterface) {
  181.                 if ($childErrors $this->getErrorsFromForm($childForm)) {
  182.                     $errors[$childForm->getName()] = $childForm->getName() . ': ' implode(", "$childErrors);
  183.                 }
  184.             }
  185.         }
  186.         return $errors;
  187.     }
  188.     protected function doDelete($object)
  189.     {
  190.         return $this->objectManager->delete($object);
  191.     }
  192.     public function addSelected(Request $request)
  193.     {
  194.         $sessionName $request->get("name");
  195.         $this->get('session')->set($sessionName$request->get('selected'));
  196.         $selected = (!empty($this->get('session')->get($sessionName))) ? $this->get('session')->get($sessionName) : [];
  197.         return $this->json($selected);
  198.     }
  199.     public function actionSelected($classNameRequest $requestObjectManager $objectManager)
  200.     {
  201.         $sessionName $request->get("name");
  202.         if ($this->isCsrfTokenValid($sessionName '_action_selected'$request->request->get('_token'))) {
  203.             $selected = (!empty($this->get('session')->get($sessionName))) ? $this->get('session')->get($sessionName) : [];
  204.             $deleted $objectManager->deleteByIds($className$selected);
  205.             if ($deleted) {
  206.                 $this->get('session')->set($sessionName, []);
  207.                 $this->addFlash('success'$this->getTranslator()->trans('messages.deleted.success'));
  208.             } else {
  209.                 $this->addFlash('error'$this->getTranslator()->trans('messages.deleted.error'));
  210.             }
  211.         }
  212.     }
  213.     public function doDeleted(Request $request$objectObjectManager $objectManager)
  214.     {
  215.         if ($this->isCsrfTokenValid('delete' $object->getId(), $request->request->get('_token'))) {
  216.             if ($this->doDelete($object$objectManager)) {
  217.                 $this->addFlash('success'$this->getTranslator()->trans('messages.deleted.success'));
  218.             } else {
  219.                 $this->addFlash('error'$this->getTranslator()->trans('messages.deleted.error'));
  220.             }
  221.         } else {
  222.             $this->addFlash('error'$this->getTranslator()->trans('messages.deleted.error'));
  223.         }
  224.     }
  225.     public function getHeaderKategori()
  226.     {
  227.         $mKategoriRepo $this->getDoctrine()->getRepository(MKategori::class);
  228.         $kategori $mKategoriRepo->findBy([], ['id' => 'asc']);
  229.         return $kategori;
  230.     }
  231.     public function getDataTable($id$limit$page$get$state null$row null)
  232.     {
  233.         $connection $this->managerRegistry->getConnection();
  234.         // $connection = DriverManager::getConnection($this->connParams);
  235.         $tbl_func "CREATE EXTENSION IF NOT EXISTS tablefunc; ";
  236.         $stmt $connection->prepare($tbl_func);
  237.         $stmt->execute();
  238.         $variabel_repo $this->managerRegistry->getRepository(TVariabel::class);
  239.         $variabel $variabel_repo->findBy(['pub' => $id'is_tampil' => true], ['id' => 'asc']);
  240.         $as_columns "";
  241.         foreach ($variabel as $var) {
  242.             $as_columns .= ", " $var->getNama() . " text";
  243.         }
  244.         $sql "SELECT * FROM crosstab('select a.row_id, b.id, a.isi 
  245.                 from t_data a 
  246.                 join t_variabel b 
  247.                 on a.variabel_id = b.id 
  248.                 where a.pub_id = " $id " and b.is_tampil is true ";
  249.         $sql .= " order by 1, 2')
  250.                 AS ct (row_id int" $as_columns ") where 1=1";
  251.         if ($row) {
  252.             $sql .= " and row_id = " .$row;
  253.         }
  254.         if ($get) {
  255.             foreach($variabel as $var){
  256.                 if ($value $get[$var->getNama()]) {
  257.                     $sql .= " and " .$var->getNama(). " ILIKE '%" .$value"%'";
  258.                 }
  259.             }
  260.         }
  261.         
  262.         if ($limit) {
  263.             $sql .= " LIMIT " $limit;
  264.         }
  265.         if ($page) {
  266.             $sql .= " OFFSET " $page;
  267.         }
  268.         $stmt $connection->prepare($sql);
  269.         $stmt->execute();
  270.         $result = array();
  271.         foreach ($stmt->fetchAll() as $data) {
  272.             $temp = array();
  273.             if ($state) {
  274.                 $temp['id'] = $data['row_id'];
  275.             }
  276.             foreach ($variabel as $var) {
  277.                 $temp[] = $data[$var->getNama()];
  278.             }
  279.             $result[] = $temp;
  280.         }
  281.         // print_r($result);exit;
  282.         return $result;
  283.     }
  284.     public function highlight()
  285.     {
  286.         $connection $this->getDoctrine()->getConnection();
  287.         // $connection = DriverManager::getConnection($this->connParams);
  288.         $sql "SELECT id, judul, 'INFOGRAFIK'::text as tipe, created_at as tanggal, 'detail_infografik' as link FROM t_infografik
  289.                 WHERE is_arsip is false
  290.                 UNION ALL
  291.                 SELECT id, judul, 'DATASET'::text as tipe, updated_at as tanggal, 'dataset_detail' as link FROM t_publikasi
  292.                 WHERE status_id = 3
  293.                 ORDER BY
  294.                 tanggal DESC
  295.                 LIMIT 5
  296.                 ";
  297.         $stmt $connection->query($sql);
  298.         // $stmt->execute();
  299.         $result $stmt->fetchAllAssociative();
  300.         $TDokumenRepo $this->getDoctrine()->getRepository(TDokumen::class);
  301.         $mKategoriDetailRepo $this->getDoctrine()->getRepository(MKategoriDetail::class);
  302.         foreach($result as $k => $rs){
  303.             $result[$k]['icon'] = '';
  304.             if ($rs['tipe'] == 'INFOGRAFIK') {
  305.                 $dokumen $TDokumenRepo->findBy(['reff_id' => $rs['id'], 'reff_name' => 'INFOGRAFIK'], ['id' => 'asc'], 1);
  306.                 if ($dokumen) {
  307.                     $result[$k]['icon'] = $dokumen[0]->getPath();
  308.                 }
  309.             }
  310.             else {
  311.                 $kategori $mKategoriDetailRepo->findBy(['reff_id' => $rs['id'], 'reff_name' => 'PUBLIKASI'], ['id' => 'asc'], 1);
  312.                 if ($kategori) {
  313.                     $result[$k]['icon'] = $kategori[0]->getKategori()->getIcon();
  314.                 }
  315.             }
  316.         }
  317.         return $result;
  318.     }
  319.     public function getGrafikDataset(TPublikasi $detail$p_order)
  320.     {
  321.         $tGrafikRepo $this->getDoctrine()->getRepository(TGrafik::class);
  322.         $tDataRepo $this->getDoctrine()->getRepository(TData::class);
  323.         $tVariabelRepo $this->getDoctrine()->getRepository(TVariabel::class);
  324.         $grafik $tGrafikRepo->findOneBy(['pub'=>$detail->getId()]);
  325.         if ($grafik) {
  326.             $tdataIsi $tDataRepo->findBy(['pub'=>$detail->getId(), 'variabel'=>$grafik->getAxisX()], ['id'=>'asc']);
  327.             $tdataKategori $tDataRepo->findBy(['pub'=>$detail->getId(), 'variabel'=>$grafik->getAxisY()], ['id'=>'asc']);
  328.             $variabel_x $tVariabelRepo->find($grafik->getAxisX());
  329.             $variabel_y $tVariabelRepo->find($grafik->getAxisY());
  330.             $data_chart $this->getTabelGrafik($detail->getId(), $variabel_x->getNama(), $p_order);
  331.             // dump($test); exit;
  332.     
  333.             // $data_chart = array();
  334.             // foreach($tdataIsi as $td){
  335.             //     $data_chart[] = floatval($td->getIsi());
  336.             // }
  337.             $data_kategori = array();
  338.             foreach($tdataKategori as $td){
  339.                 $data_kategori[] = $td->getIsi();
  340.             }
  341.     
  342.             // Chart
  343.             $series = array(
  344.                 array("name" => $variabel_x->getNama(), "data" => $data_chart)
  345.             );
  346.     
  347.             $ob = new Highchart();
  348.             $ob->chart->renderTo('linechart');  // The #id of the div where to render the chart
  349.             $ob->chart->type($grafik->getTipe());
  350.             $ob->title->text($grafik->getJudul());
  351.             $ob->xAxis->title(array('text'  => ""));
  352.             $ob->xAxis->categories($data_kategori);
  353.             $ob->yAxis->title(array('text'  => ""));
  354.             $ob->series($series);
  355.             return $ob;
  356.         }
  357.         return false;
  358.     }
  359.     public function dashboardSearch($search)
  360.     {
  361.         $connection $this->getDoctrine()->getConnection();
  362.         $sql 
  363.             "SELECT * from
  364.             (
  365.                 select distinct on (x.tipe, x.id) b.nama as kategori, x.*
  366.                 from m_kategori_detail a
  367.                 join m_kategori b
  368.                 on a.kategori_id = b.id
  369.                 right join
  370.                 (
  371.                     select * from (
  372.                         -- select 'DATASET'::text as tipe, a.id as id, a.judul as judul, a.deskripsi as deskripsi, c.nama as urusan, d.nama as sektor, b.div_nama as div, a.updated_at as tanggal
  373.                         select 'DATASET'::text as tipe, a.id as id, a.judul as judul, a.deskripsi as deskripsi, b.div_nama as div, a.updated_at as tanggal
  374.                         from t_publikasi a
  375.                         join t_div b
  376.                         on a.div_id = b.id
  377.                         -- join m_urusan c
  378.                         -- on a.urusan_id = c.id
  379.                         -- join m_sektor d
  380.                         -- on a.sektor_id = d.id
  381.                         where a.status_id = 3
  382.                         UNION ALL
  383.                         -- select 'INFOGRAFIK'::text as tipe, a.id as id, a.judul as judul, a.deskripsi as deskripsi, ''::text as urusan, ''::text as sektor, a.sumber::text as div, a.created_at as tanggal
  384.                         select 'INFOGRAFIK'::text as tipe, a.id as id, a.judul as judul, a.deskripsi as deskripsi, a.sumber::text as div, a.created_at as tanggal
  385.                         from t_infografik a
  386.                         where a.is_arsip = false
  387.                     ) as search
  388.                 ) as x
  389.                 on a.reff_id = x.id and a.reff_name = x.tipe 
  390.             ) as fix
  391.             -- where judul ilike '%$search%' or tipe ilike '%$search%' or deskripsi ilike '%$search%' or urusan ilike '%$search%' or sektor ilike '%$search%' or div ilike '%$search%'
  392.             where judul ilike '%$search%' or tipe ilike '%$search%' or deskripsi ilike '%$search%' or div ilike '%$search%'
  393.             order by tanggal desc
  394.             limit 5";
  395.         $stmt $connection->prepare($sql);
  396.         $stmt->execute();
  397.         $result $stmt->fetchAll();
  398.         return $result;
  399.     }
  400.     public function buttonCredentials()
  401.     {
  402.         $ptiRuleRepo $this->getDoctrine()->getRepository(PtiRule::class);
  403.         $ptiGroupRepo $this->getDoctrine()->getRepository(PtiGroup::class);
  404.         $user_group $this->getUser()->getRoles()[0];
  405.         $group $ptiGroupRepo->findOneBy(['credential' => $user_group]);
  406.         $rules $ptiRuleRepo->findBy(['groups' => $group'is_allowed' => true]);
  407.         $credentials = [];
  408.         foreach ($rules as $rule) {
  409.             $credentials[$rule->getModuleAction()->getModule()->getUrl()][$rule->getModuleAction()->getAction()] = $rule->getId();
  410.         }
  411.         return $credentials;
  412.     }
  413.     public function getPeriodeName($pId) {
  414.         $tipex = array();
  415.         // Hari
  416.         // if ($pId == 5) {
  417.         //     return intval($key);
  418.         // }
  419.         // Bulan
  420.         if ($pId == 6) {
  421.             $tipex = array(
  422.                 => 'Januari',
  423.                 => 'Februari',
  424.                 => 'Maret',
  425.                 => 'April',
  426.                 => 'Mei',
  427.                 => 'Juni',
  428.                 => 'Juli',
  429.                 => 'Agustus',
  430.                 => 'September',
  431.                 10 => 'Oktober',
  432.                 11 => 'November',
  433.                 12 => 'Desember'
  434.             );
  435.         }
  436.         // Triwulan
  437.         else if ($pId == 7) {
  438.             $tipex = array(
  439.                 => 'Triwulan I',
  440.                 => 'Triwulan II',
  441.                 => 'Triwulan III',
  442.                 => 'Triwulan IV',
  443.             );
  444.         }
  445.         // Semester
  446.         else if ($pId == 8) {
  447.             $tipex = array(
  448.                 => 'Semester I',
  449.                 => 'Semester II',
  450.             );
  451.         }
  452.         // Tahun
  453.         else if ($pId == 9) {
  454.             $tipex = array(
  455.                 => 'Tahun',
  456.             );
  457.         }
  458.         return $tipex;
  459.     }
  460.     public function getTabelGrafik($id$cols$p_order)
  461.     {
  462.         $connection $this->getDoctrine()->getConnection();
  463.         // dump($p_order); exit;
  464.         $tbl_func "CREATE EXTENSION IF NOT EXISTS tablefunc; ";
  465.         $stmt $connection->prepare($tbl_func);
  466.         $stmt->execute();
  467.         $variabel_repo $this->getDoctrine()->getRepository(TVariabel::class);
  468.         $variabel $variabel_repo->findBy(['pub' => $id], ['id' => 'asc']);
  469.         $pub_repo $this->getDoctrine()->getRepository(TPublikasi::class);
  470.         $publikasi $pub_repo->find($id);
  471.         $as_columns "";
  472.         foreach ($variabel as $var) {
  473.             $as_columns .= ", " $var->getNama() . " text";
  474.         }
  475.         $selCols = [];
  476.         foreach ($cols as $col) {
  477.             $selCols[] = "ct." $col->getNama();
  478.         }
  479.         $selCols implode(", "$selCols);
  480.         if($publikasi->getJenis() == 1){
  481.             $sql "SELECT $selCols, ct.periode_order, ct.periode_update
  482.                 FROM crosstab('select a.row_id, b.id, a.isi 
  483.                 from t_data a 
  484.                 join t_variabel b 
  485.                 on a.variabel_id = b.id 
  486.                 where a.pub_id = " $id;
  487.         $sql .= " order by 1, 2')
  488.                 AS ct (row_id int" $as_columns ") where 1=1";
  489.         $sql .= " and ct.periode_update = '$p_order'";
  490.         }else{
  491.             $tah explode(" ",$p_order);
  492.             $sql "SELECT $selCols
  493.                 FROM crosstab('select a.row_id, b.id, a.isi 
  494.                 from t_data a 
  495.                 join t_variabel b 
  496.                 on a.variabel_id = b.id 
  497.                 where a.pub_id = " $id;
  498.         $sql .= " order by 1, 2')
  499.                 AS ct (row_id int" $as_columns ") where 1=1";
  500.         // $sql .= " and ct.tahun = '$p_order'";
  501.         if($tah[1] == 'All'){
  502.         }else{
  503.             $sql .= " and ct.tahun = '$tah[1]'";
  504.         }
  505.         }
  506.         
  507.         $stmt $connection->prepare($sql);
  508.         $stmt->execute();
  509.         $result $stmt->fetchAll();
  510.         // foreach ($stmt->fetchAll() as $data) {
  511.         //     $result[] = floatval($data[$col]);
  512.         // }
  513.         return $result;
  514.     }
  515.     public function getBulan()
  516.     {
  517.         return array('01'=>'Januari''02'=>'Februari','03'=>'Maret','04'=>'April','05'=>'Mei','06'=>'Juni','07'=>'Juli','08'=>'Agustus','09'=>'September','10'=>'Oktober','11'=>'Nopember','12'=>'Desember');
  518.     }
  519.     public function getArrayPeriode($id=null)
  520.     {
  521.         $arr = [
  522.             => [
  523.                 '01-01/01-31' => 'Januari',
  524.                 '02-01/02-28' => 'Februari',
  525.                 '03-01/03-31' => 'Maret',
  526.                 '04-01/04-30' => 'April',
  527.                 '05-01/05-31' => 'Mei',
  528.                 '06-01/06-30' => 'Juni',
  529.                 '07-01/07-31' => 'Juli',
  530.                 '08-01/08-31' => 'Agustus',
  531.                 '09-01/09-30' => 'September',
  532.                 '10-01/10-31' => 'Oktober',
  533.                 '11-01/11-30' => 'November',
  534.                 '12-01/12-31' => 'Desember'
  535.             ],
  536.             => [
  537.                 '01-01/03-31' => 'Triwulan I',
  538.                 '04-01/06-30' => 'Triwulan II',
  539.                 '07-01/09-30' => 'Triwulan III',
  540.                 '10-01/12-31' => 'Triwulan IV'
  541.             ],
  542.             => [
  543.                 '01-01/06-30' => 'Semester I',
  544.                 '07-01/12-31' => 'Semester II'
  545.             ],
  546.             => [
  547.                 '01-01/12-31' => '1 Januari s/d 31 Desember'
  548.             ]
  549.         ];
  550.         if ($id) {
  551.             return $arr[$id];
  552.         }
  553.         return $arr;
  554.     }
  555.     public function getPeriodeOrder($tipe$key) {
  556.         if ($tipe == 5) {
  557.             return intval($key);
  558.         } else if($tipe == 6) {
  559.             $tipex = array(
  560.                 '01-01/01-31' => 1,
  561.                 '02-01/02-28' => 2,
  562.                 '03-01/03-31' => 3,
  563.                 '04-01/04-30' => 4,
  564.                 '05-01/05-31' => 5,
  565.                 '06-01/06-30' => 6,
  566.                 '07-01/07-31' => 7,
  567.                 '08-01/08-31' => 8,
  568.                 '09-01/09-30' => 9,
  569.                 '10-01/10-31' => 10,
  570.                 '11-01/11-30' => 11,
  571.                 '12-01/12-31' => 12
  572.             );
  573.             return $tipex[$key];
  574.         }else if($tipe == 7){
  575.             $tipex = array(
  576.                 '01-01/03-31' => 1,
  577.                 '04-01/06-30' => 2,
  578.                 '07-01/09-30' => 3,
  579.                 '10-01/12-31' => 4,
  580.             );
  581.             return $tipex[$key];
  582.         }else if($tipe == 8){
  583.             $tipex = array(
  584.                 '01-01/06-30' => 1,
  585.                 '07-01/12-31' => 2,
  586.             );
  587.             return $tipex[$key];
  588.         }else{
  589.             $tipex = array(
  590.                 '01-01/12-31' => 1,
  591.             );
  592.             return $tipex[$key];
  593.         }
  594.         return null;
  595.     }
  596.     public function generateKode($sektor$urusan$last)
  597.     {
  598.         $urutan $last 1;
  599.         $urutan str_pad($urutan4"0"STR_PAD_LEFT);
  600.         return "$sektor.$urusan.$urutan";
  601.     }
  602.     public function base_url($link=''$image false)
  603.     {
  604.         $host = (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : $_SERVER['HTTP_HOST'];
  605.         $url = ((isset($_SERVER['HTTPS'])) ? 'https' 'http') . "://" $host;
  606.         if($image){
  607.             $url .= preg_replace('@/+$@','',dirname($_SERVER['SCRIPT_NAME']));
  608.         }else{
  609.             $url .= $_SERVER['SCRIPT_NAME'];
  610.         }
  611.         $url .= $link;
  612.         return $url;
  613.     }
  614. }