bundles/KVBundle/Controller/DefaultController.php line 118

Open in your IDE?
  1. <?php
  2. namespace KVBundle\Controller;
  3. use Symfony\Component\HttpFoundation\Request;
  4. use Symfony\Component\HttpFoundation\Response;
  5. use Symfony\Component\Routing\Annotation\Route;
  6. use Pimcore\Model\DataObject\LadeeinheitArt;
  7. use Pimcore\Model\DataObject\AuftragStatus;
  8. use Pimcore\Model\DataObject\TransportlaufStatus;
  9. use Pimcore\Model\DataObject\Bahnhof;
  10. use Pimcore\Model\DataObject\SavedFilter;
  11. use Symfony\Contracts\Translation\TranslatorInterface;
  12. use Pimcore\Model\DataObject\SavedFilterZuege;
  13. use Carbon\Carbon;
  14. class DefaultController extends KombiVerkehrController
  15. {
  16.     public function mobileAction(Request $requestTranslatorInterface $translator): Response
  17.     {
  18.         $appMode 'mobile';
  19.         $userLoggedIn $this->checkUserLoggedIn($request);
  20.         if ($userLoggedIn)
  21.         {
  22.             $userSessionData $this->getUserSessionData();
  23.             $viewModel = [
  24.                 'auftragStatusArray'        => $this->getAuftragStatusArray($translator),
  25.                 'transportlaufStatusArray'  => $this->getTransportlaufStatusArray($translator),
  26.                 'ladeeinheitArray'          => $this->getLadeeinheitArray(),
  27.                 'bahnhoefe'                 => $this->getBahnhofArray(),
  28.                 'savedFilter'               => $this->getSavedFilter(),
  29.                 'savedFilterZuege'          => $this->getSavedFilterZuege(),
  30.                 'userPermissions'           => json_encode($userSessionData['data']['PERMISSIONS']),
  31.                 'geschaeftspartnerId'       => $this->getGeschaeftspartnerId(),
  32.                 'ansprechpartnerId'         => $this->getLoginUserId(),
  33.                 'email'                     => $userSessionData['catData']['email'],
  34.                 'name'                      => $userSessionData['catData']['name'],
  35.                 'appMode'                   => $appMode,
  36.             ];
  37.             return $this->render("bundles/KVBundle/layouts/mobile/default-mobile.html.twig"$viewModel);
  38.         }
  39.         $redirect_suffix '';
  40.         if ($request->getLocale() == 'en') {
  41.             $redirect_suffix '_en';
  42.         }
  43.         return $this->login($request$this->getParameter('kv_mobile_url') . $redirect_suffix"Mobile" $redirect_suffix$appMode);
  44.     }
  45.     public function desktopAction(Request $requestTranslatorInterface $translator): Response
  46.     {
  47.         $appMode 'desktop';
  48.         $userLoggedIn $this->checkUserLoggedIn($request);
  49.         if ($userLoggedIn) {
  50.             // $translator->setlocale("en");
  51.             $userSessionData $this->getUserSessionData();
  52.             $viewModel = [
  53.                 'auftragStatusArray'        => $this->getAuftragStatusArray($translator),
  54.                 'transportlaufStatusArray'  => $this->getTransportlaufStatusArray($translator),
  55.                 'ladeeinheitArray'          => $this->getLadeeinheitArray(),
  56.                 'bahnhoefe'                 => $this->getBahnhofArray(),
  57.                 'savedFilter'               => $this->getSavedFilter(),
  58.                 'savedFilterZuege'          => $this->getSavedFilterZuege(),
  59.                 'userPermissions'           => json_encode($userSessionData['data']['PERMISSIONS']),
  60.                 'geschaeftspartnerId'       => $this->getGeschaeftspartnerId(),
  61.                 'ansprechpartnerId'         => $this->getLoginUserId(),
  62.                 'email'                     => $userSessionData['catData']['email'],
  63.                 'name'                      => $userSessionData['catData']['name'],
  64.                 'appMode'                   => $appMode,
  65.             ];
  66.             return $this->render("bundles/KVBundle/layouts/default.html.twig"$viewModel);
  67.         }
  68.         $redirect_suffix '';
  69.         if ($request->getLocale() == 'en') {
  70.             $redirect_suffix '_en';
  71.         }
  72.         return $this->login($request$this->getParameter('kv_desktop_url') . $redirect_suffix'Desktop' $redirect_suffix$appMode);
  73.     }
  74.     public function login(Request $request$redirect_uri$redirect_name$appMode){
  75.         if ($request->query->get('code'))
  76.         {
  77.             $content $this->hwi->getAccessToken($request$redirect_uri);
  78.             if(isset($content["access_token"]))
  79.             {
  80.                 $access_token = array("access_token" =>$content["access_token"]);
  81.                 $info $this->hwi->getUserInformation($access_token);
  82.                 $this->setLoggedInSessionKey($info);
  83.             }
  84.             else
  85.             {
  86.                 //TODO think about a useful response/error when no token is received
  87.                 return new Response('did not receive user auth token');
  88.             }
  89.             return $this->redirectToRoute($redirect_name);
  90.         }
  91.         else
  92.         {
  93.             $redirect_suffix '';
  94.             if ($request->getLocale() == 'en') {
  95.                 $redirect_suffix '_en';
  96.             }
  97.             return $this->redirectToRoute("hwi_oauth_service_redirect", array("service" => "next_tuesday_" $appMode $redirect_suffix));
  98.         }
  99.     }
  100.     /**
  101.      * @Route("/logout", name="Logout")
  102.      */
  103.     public function logoutAction(Request $request): Response
  104.     {
  105.         if ($request->getMethod() == "POST")
  106.         {
  107.             $userLoggedIn $this->checkUserLoggedIn($request);
  108.             if ($userLoggedIn)
  109.             {
  110.                 $this->removeUserSessionData();
  111.                 return new Response(''Response::HTTP_OK);
  112.             }
  113.             return new Response(''Response::HTTP_NO_CONTENT);
  114.         }
  115.         return new Response(''Response::HTTP_METHOD_NOT_ALLOWED);
  116.     }
  117.     private function getAuftragStatusArray(TranslatorInterface $translator)
  118.     {
  119.         $auftragStatusListing = new AuftragStatus\Listing();
  120.         $auftragStatusArray = [];
  121.         foreach ($auftragStatusListing as $auftrag) {
  122.             $auftragStatusArray[$auftrag->getkv_id()]['auftragNameFormated'] = $translator->trans($auftrag->getName());
  123.             $auftragStatusArray[$auftrag->getkv_id()]['kv_id'] = $auftrag->getkv_id();
  124.         }
  125.         return $auftragStatusArray;
  126.     }
  127.     private function getTransportlaufStatusArray(TranslatorInterface $translator)
  128.     {
  129.         $transportlaufStatusListing = new TransportlaufStatus\Listing();
  130.         $transportlaufStatusArray = [];
  131.         foreach ($transportlaufStatusListing as $transportlauf) {
  132.             // Folgende Transportlaufstatus werden nicht genutzt als Filter: ABBESTELLT (6), AUSFALL_FTR (7), DEAKTIVIERT (8), ZWISCHENHALT (9)
  133.             if (in_array($transportlauf->getkv_id(), array(6789))) {
  134.                 continue;
  135.             }
  136.             $transportlaufStatusArray[$transportlauf->getkv_id()]['auftragNameFormated'] = $translator->trans($transportlauf->getName());
  137.             $transportlaufStatusArray[$transportlauf->getkv_id()]['kv_id'] = $transportlauf->getkv_id();
  138.         }
  139.         return $transportlaufStatusArray;
  140.     }
  141.     private function getLadeeinheitArray()
  142.     {
  143.         $ladeeinheitListing = new LadeeinheitArt\Listing();
  144.         $ladeeinheitArray = [];
  145.         foreach ($ladeeinheitListing as $ladeeinheit) {
  146.             $ladeeinheitArray[$ladeeinheit->getCode()]['Code'] =  $ladeeinheit->getCode();
  147.             $ladeeinheitArray[$ladeeinheit->getCode()]['kv_id'] = $ladeeinheit->getkv_id();
  148.         }
  149.         ksort($ladeeinheitArray);
  150.         return $ladeeinheitArray;
  151.     }
  152.     private function getBahnhofArray()
  153.     {
  154.         $bahnhofsListing = new Bahnhof\Listing();
  155.         $bahnhofsListing->setOrderKey("Langname");
  156.         $bahnhofsListing->setOrder("asc");
  157.         $bahnhofContainer   = [];
  158.         foreach ($bahnhofsListing as $b) {
  159.             array_push($bahnhofContainer, array( "kv_id" => $b->getkv_id(), "label" =>  $b->getLangname() ));
  160.         }
  161.         $bahnhoefe json_encode($bahnhofContainerJSON_THROW_ON_ERROR512);
  162.         return $bahnhoefe;
  163.     }
  164.     private function getSavedFilter()
  165.     {
  166.         $loginUserId $this->getLoginUserId();
  167.         $savedFilterListing = new SavedFilter\Listing();
  168.         $savedFilterListing->setCondition("user_id = $loginUserId");
  169.         $savedFilterListing->setOrderKey("Name");
  170.         $savedFilterListing->setOrder("asc");
  171.         $savedFilterContainer   = [];
  172.         foreach ($savedFilterListing as $filter) {
  173.             $startdate substr($filter->getStartdate(),0,10);
  174.             $enddate substr($filter->getEnddate(),0,10);
  175.             $startdate_indikator false;
  176.             $enddate_indikator false;
  177.             // KV-129:
  178.             $creationDate Carbon::createFromTimestamp($filter->getModificationDate(), 'Europe/Berlin')->format('Y-m-d');
  179.             if (!empty($startdate)) {
  180.                 $startdate_indikator $this->daysDiff($startdate$creationDate);
  181.                 $startdate Carbon::createFromTimestamp(time(), 'Europe/Berlin') ->addDays($startdate_indikator)->format('Y-m-d');
  182.             }
  183.             if (!empty($enddate)) {
  184.                 $enddate_indikator $this->daysDiff($enddate$creationDate);
  185.                 $enddate Carbon::createFromTimestamp(time(), 'Europe/Berlin')->addDays($enddate_indikator)->format('Y-m-d');
  186.             }
  187.             array_push($savedFilterContainer, array(
  188.                 "id" => $filter->getId(),
  189.                 "name" => $filter->getName(),
  190.                 "uid" => $filter->getUser_id(),
  191.                 "startdate" => $startdate,
  192.                 "enddate" =>  $enddate,
  193.                 "auftragStatus" =>  $filter->getAuftragStatus(),
  194.                 "laufende" =>  $filter->getLaufende(),
  195.                 "verspaetete" =>  $filter->getVerspaetete(),
  196.                 "startterminalterm" =>  $filter->getStartterminalterm(),
  197.                 "zielterminalterm" =>  $filter->getZielterminalterm(),
  198.                 "startterminals" =>  $filter->getStartterminals(),
  199.                 "zielterminals" =>  $filter->getZielterminals(),
  200.                 "abholbereitSeit" =>  $filter->getAbholbereitSeit(),
  201.                 "leArt" =>  $filter->getLeArt(),
  202.                 "gefahrgut" =>  $filter->getGefahrgut(),
  203.                 "abfall" =>  $filter->getAbfall(),
  204.                 "zollpflicht" =>  $filter->getZollpflicht(),
  205.                 "temperaturgefuehrt" =>  $filter->getTemperaturgefuehrt(),
  206.                 "meineAuftraege" =>  $filter->getMeineAuftraege(),
  207.                 "favorit" =>  $filter->getFavorit(),
  208.                 "startdate_indikator" => $startdate_indikator,
  209.                 "enddate_indikator" => $enddate_indikator
  210.             ));
  211.         }
  212.         $savedFilter json_encode($savedFilterContainerJSON_THROW_ON_ERROR512);
  213.         return $savedFilter;
  214.     }
  215.     public function daysDiffToNow($date) {
  216.         $now time();
  217.         $then strtotime($date);
  218.         $datediff $now $then;
  219.         return round($datediff / (60 60 24));
  220.     }
  221.     public function daysDiff($date1$date2) {
  222.         $date1 strtotime($date1);
  223.         $date2 strtotime($date2);
  224.         $datediff $date1 $date2;
  225.         return round($datediff / (60 60 24));
  226.     }
  227.     private function getSavedFilterZuege()
  228.     {
  229.         $loginUserId $this->getLoginUserId();
  230.         $savedFilterZuegeListing = new SavedFilterZuege\Listing();
  231.         $savedFilterZuegeListing->setCondition("user_id = $loginUserId");
  232.         $savedFilterZuegeListing->setOrderKey("Name");
  233.         $savedFilterZuegeListing->setOrder("asc");
  234.         $savedFilterZuegeContainer   = [];
  235.         foreach ($savedFilterZuegeListing as $filter) {
  236.             array_push($savedFilterZuegeContainer, array(
  237.                 "id" => $filter->getId(),
  238.                 "name" => $filter->getName(),
  239.                 "uid" => $filter->getUser_id(),
  240.                 "startdate" => substr($filter->getStartdate(),0,10),
  241.                 "enddate" =>  substr($filter->getEnddate(),0,10) ,
  242.                 "startterminalterm" =>  $filter->getStartterminalterm(),
  243.                 "zielterminalterm" =>  $filter->getZielterminalterm(),
  244.                 "startterminals" =>  $filter->getStartterminals(),
  245.                 "zielterminals" =>  $filter->getZielterminals(),
  246.                 "transportlaufStatus" =>  $filter->getTransportlaufStatus(),
  247.                 "favorit" =>  $filter->getFavorit()
  248.             ));
  249.             }
  250.         $savedFilterZuege json_encode($savedFilterZuegeContainerJSON_THROW_ON_ERROR512);
  251.         return $savedFilterZuege;
  252.     }
  253.     public function statisticAction(Request $requestTranslatorInterface $translator): Response
  254.     {
  255.         $userSessionData $this->getUserSessionData();
  256.         $userLoggedIn $this->checkUserLoggedIn($request);
  257.         if (empty($userLoggedIn)) {
  258.             http_response_code(401);
  259.             die;
  260.         }
  261.         $emailAddress $userSessionData['data']['LOGIN'];
  262.         if ($userLoggedIn && strstr($emailAddress'krankikom.de') !== false)
  263.         {
  264.             $userSessionData $this->getUserSessionData();
  265.             $viewModel = [
  266.             ];
  267.             return $this->render("bundles/KVBundle/layouts/statistic.html.twig"$viewModel);
  268.         }
  269.         http_response_code(404);
  270.         die;
  271.     }
  272.     public function helpdeskAction(Request $request): Response
  273.     {
  274.         $userSessionData $this->getUserSessionData();
  275.         $userLoggedIn $this->checkUserLoggedIn($request);
  276.         if (empty($userLoggedIn) || ($userSessionData['data']['PERMISSIONS']['krankikom-orders-view-customers-orders'] !== true && $userSessionData['data']['LOGIN'] !== 'service.kombiverkehr@krankikom.de')) {
  277.             http_response_code(401);
  278.             die('Not authorized...');
  279.         }
  280.         $locale 'de';
  281.         if ($request->getPathInfo() == '/helpdesk_en') {
  282.             $locale 'en';
  283.         }
  284.         if ($userLoggedIn) {
  285.             $userSessionData $this->getUserSessionData();
  286.             $this->catJsonWebservice->fetchGeschaeftspartnerCsvFromCat();
  287.             $sessionId sha1(session_id());
  288.             $helpdeskData = [];
  289.             if (($handle fopen("/tmp/gp.csv""r")) !== FALSE) {
  290.                 while (($data fgetcsv($handle1000",")) !== FALSE) {
  291.                     $urlString '#'.$data[0].'#'.$data[1]; //  # + geschaeftspartnerId + # + loginUserId
  292.                     $randomString $this->getRandomString(20);
  293.                     $urlString $randomString base64_encode($sessionId $urlString);
  294.                     $helpdeskData[$data[3].' - '.$data[2].' - '.$data[4].' ('.$data[0].' / '.$data[1].') '] = $urlString;
  295.                 }
  296.                 fclose($handle);
  297.             }
  298.             $viewModel = [
  299.                 'users' => $helpdeskData,
  300.                 'locale' => $locale
  301.             ];
  302.             return $this->render("bundles/KVBundle/layouts/helpdesk.html.twig"$viewModel);
  303.         }
  304.         http_response_code(404);
  305.         die('Not found...');
  306.     }
  307.     public function getRandomString($random_string_length 10): string
  308.     {
  309.         $characters 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  310.         $string '';
  311.         $max strlen($characters) - 1;
  312.         for ($i 0$i $random_string_length$i++) {
  313.             $string .= $characters[mt_rand(0$max)];
  314.         }
  315.         return $string;
  316.     }
  317. }