Advertisement
Guest User

Untitled

a guest
Dec 3rd, 2014
275
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 20.48 KB | None | 0 0
  1. <?php
  2.  
  3. namespace Chris\TestBundle\Controller;
  4.  
  5. use Chris\TestBundle\Entity\Zusatzstoff;
  6. use Symfony\Component\DomCrawler\Form;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Bundle\FrameworkBundle\Controller\Controller;
  9.  
  10. use Chris\TestBundle\Entity\KW;
  11. use Chris\TestBundle\Form\KWType;
  12. use Symfony\Component\HttpFoundation\Session\Session;
  13. use Doctrine\ORM\Query;
  14.  
  15. /**
  16.  * Admin controller.
  17.  *
  18.  */
  19. class AdminController extends Controller
  20. {
  21.  
  22.  
  23.     public $year;
  24.     public $kw;
  25.  
  26.     public function __construct(){
  27.  
  28.  
  29.  
  30.  
  31.     }
  32.  
  33.     /**
  34.      * Lists all KW entities.
  35.      *
  36.      */
  37.     public function adminAction(Request $request)
  38.     {
  39.  
  40.         $session = $request->getSession();
  41.         if(isset($_SERVER['HTTP_REFERER'])) {
  42.             if (strpos($_SERVER["HTTP_REFERER"], 'speiseplanAdmin') == false) {
  43.                 $session->set('year', date("Y"));
  44.                 $session->set('kw', date("W"));
  45.             }
  46.         }
  47.  
  48.  
  49.  
  50.         // $_GET parameters
  51.  
  52.         $jahrwechsel = false;
  53.         $vor = false;
  54.         $query = [];
  55.         // Änderung
  56.  
  57.  
  58.  
  59.         // Fülle das Array mit Zusatzstoffen und gebe es an die Form weiter
  60.         $zusaetze = $this->zusatzstoffe();
  61.  
  62.  
  63.         // Array mit allen Zusatzstoffen: Zuordnung ID => Name WICHTIG!
  64.         $zusaetzeArray = array();
  65.         $alleZusaetzeName = array();
  66.         for ($i = 0; $i < count($zusaetze); $i++) {
  67.             $zusaetzeArray += array($zusaetze[$i]["id"] => $zusaetze[$i]['name']);
  68.             //$alleZusaetzeName[] = $zusaetze[$i]['name'];
  69.         }
  70.  
  71.  
  72.  
  73.  
  74.         // @TODO
  75.         // Checken ob ein Datensatz mit Jahr und KW schon existiert in DB (Query)
  76.         $repo = $this->getDoctrine()->getRepository('ChrisTestBundle:KW');
  77.  
  78.         $qb = $repo->createQueryBuilder('kw');
  79.  
  80.         var_dump($session->get('kw'));
  81.         /***
  82.          * DB Querys
  83.          * Finde die Speisen einer KW Heraus
  84.          ***/
  85.         $qb->add('select', 'kw')
  86.             ->where('kw.kw = :kw')
  87.             ->andWhere('kw.jahr = :jahr')
  88.             ->setParameter('kw', $session->get('kw'))
  89.             ->setParameter('jahr', date("Y"));
  90.  
  91.  
  92.         $query = $qb->getQuery();
  93.         $query = $query->getArrayResult();
  94.  
  95.         var_dump($query);
  96.  
  97.         $form = $form = $this->getEmptyForm(date("Y"), $session->get('kw'), $session);
  98.  
  99.  
  100.  
  101.         if (count($query)  > 0){
  102.             $form = $this->getNormalForm(date("Y"), $session->get('kw'), $query, $session);
  103.         }
  104.  
  105.  
  106.         $form->handleRequest($request);
  107.  
  108.  
  109.  
  110.         if ($form->get('Eintragen')->isClicked()) {
  111.             $result = $this->eintragen($form, $query, $session);
  112.             $form = $result[0];
  113.             $query = $result[1];
  114.  
  115.         }
  116.  
  117.  
  118.  
  119.         else if ($form->get('vor')->isClicked()) {
  120.             $result = $this->get_vor($form, $session);
  121.             $form = $result[0];
  122.             $query = $result[1];
  123.             //return $this->redirect($this->generateUrl('admin'));
  124.         }
  125.  
  126.  
  127.         else if ($form->get('zurueck')->isClicked()) {
  128.             $result = $this->get_back($session);
  129.             $form = $result[0];
  130.             $query = $result[1];
  131.             //return $this->redirect($this->generateUrl('admin'));
  132.  
  133.         }
  134.  
  135.         else if ($form->get('edit')->isClicked()) {
  136.             $result = $this->get_edit($form, $session);
  137.             $form = $result[0];
  138.             $query = $result[1];
  139.         }
  140.  
  141.         else {
  142.             $this->getEmptyForm(date("Y"), $session->get('kw'), $session);
  143.         }
  144.  
  145.  
  146.         $this->kw = $session->get('kw');
  147.         $this->year = $session->get('year');
  148.         echo $this->kw;
  149.         echo $this->year;
  150.  
  151.         //$zusaetze = $this->zusatzstoffe();
  152.         //var_dump($query);
  153.         return $this->render('ChrisTestBundle:KW:admin.html.twig', array(
  154.             'form' => $form->createView(), 'kw' => $session->get('kw'), 'zusaetze' => $zusaetze, 'alleZusaetze' => $zusaetzeArray, 'query' => $query
  155.         ));
  156.     }
  157.  
  158.     public function eintragen ($form, $query, $session){
  159.  
  160.  
  161.         /**
  162.          * Datensatz soll eingetragen werden
  163.          */
  164.  
  165.             // Alten Datensatz löschen
  166.             if (count($query) > 0) {
  167.                 echo '<div class="bg-danger">Speiseplan f&uuml;r diese KW im Jahr bereits vorhanden!</div>';
  168.                 $em = $this->getDoctrine()->getManager();
  169.                 $deleteThis = $this->getDoctrine()
  170.                     ->getRepository('ChrisTestBundle:KW')->find($query[0]['id']);
  171.                 $em->remove($deleteThis);
  172.                 $em->flush();
  173.  
  174.             }
  175.             // zusMontagHauptgericht
  176.             $tage = array("Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag");
  177.             $gerichte = array("Hauptgericht", "Nachtisch");
  178.             $eingetragendeZusatzstoffeArray = array();
  179.             $hg = new KW();
  180.  
  181.             // Adde die Zusatzstoffe
  182.  
  183.             /***
  184.              * DIESER Abschnitt überprüft die vom Formular erhaltenden eingegebenden Zusatzsoffe, ob sie bereits in der
  185.              * DB existieren. Sie werden dann eingetragen.
  186.              */
  187.             foreach ($tage as $tag) {
  188.                 foreach ($gerichte as $gericht) {
  189.                     $idsDieEingetragenWerden = array();
  190.                     $data = $form->getData()["zus" . $tag . $gericht];
  191.                     $data = explode(",", $data);
  192.                     foreach ($data as $d) {
  193.                         // Zusatzstoff existiert schon und kann so übernommen werden
  194.                         // ist kein vorhandener Zusatzstoff (also noch nicht mit ID in der DB)
  195.                         if (!is_numeric($d)) {
  196.  
  197.                             if ($d != ""){
  198.  
  199.                                 // Ist der Zusatzstoff schon in der DB?
  200.                                 $alleZ = $this->getDoctrine()->getRepository('ChrisTestBundle:Zusatzstoff');
  201.                                 // Der Zusatzstoff wurde noch nicht eingetragen also trag ihn ein
  202.                                 if ($alleZ->findZusatzstoffByName($d) == NULL){
  203.                                     $z = new Zusatzstoff();
  204.                                     $z->setName($d);
  205.                                     $em = $this->getDoctrine()->getManager();
  206.                                     $em->persist($z);
  207.                                     $em->flush();
  208.                                     $idsDieEingetragenWerden[] = $z->getId();
  209.                                 }
  210.                                 // Zusatzstoff ist eingetragen, schreibe die ID rein
  211.                                 else {
  212.                                     $ddd =  $alleZ->findZusatzstoffByName($d);
  213.                                     $idsDieEingetragenWerden[] =  $ddd->getId();
  214.                                 }
  215.  
  216.  
  217.                             }
  218.  
  219.                         }
  220.                         // ZusatzstoffID schon bekannt (durch Javascript)
  221.                         else {
  222.                             $idsDieEingetragenWerden[] = $d;
  223.                         }
  224.  
  225.  
  226.                     }
  227.  
  228.                     $eingetragendeZusatzstoffeArray[] =  implode(",", $idsDieEingetragenWerden);
  229.  
  230.                 }
  231.             }
  232.  
  233.             //var_dump($eingetragendeZusatzstoffeArray);
  234.             $hg->setMontagHauptgericht($form->getData()['montagHauptgericht']);
  235.             $hg->setDienstagHauptgericht($form->getData()['dienstagHauptgericht']);
  236.             $hg->setMittwochHauptgericht($form->getData()['mittwochHauptgericht']);
  237.             $hg->setDonnerstagHauptgericht($form->getData()['donnerstagHauptgericht']);
  238.             $hg->setFreitagHauptgericht($form->getData()['freitagHauptgericht']);
  239.             $hg->setMontagNachtisch($form->getData()['montagNachtisch']);
  240.             $hg->setDienstagNachtisch($form->getData()['dienstagNachtisch']);
  241.             $hg->setMittwochNachtisch($form->getData()['mittwochNachtisch']);
  242.             $hg->setDonnerstagNachtisch($form->getData()['donnerstagNachtisch']);
  243.             $hg->setFreitagNachtisch($form->getData()['freitagNachtisch']);
  244.             $hg->setJahr($session->get('year'));
  245.             $hg->setKW($session->get('kw'));
  246.  
  247.             $hg->setMontagHauptgerichtZusatz($eingetragendeZusatzstoffeArray[0]);
  248.             $hg->setMontagNachtischZusatz($eingetragendeZusatzstoffeArray[1]);
  249.             $hg->setDienstagHauptgerichtZusatz($eingetragendeZusatzstoffeArray[2]);
  250.             $hg->setDienstagNachtischZusatz($eingetragendeZusatzstoffeArray[3]);
  251.             $hg->setMittwochHauptgerichtZusatz($eingetragendeZusatzstoffeArray[4]);
  252.             $hg->setMittwochNachtischZusatz($eingetragendeZusatzstoffeArray[5]);
  253.             $hg->setDonnerstagHauptgerichtZusatz($eingetragendeZusatzstoffeArray[6]);
  254.             $hg->setDonnerstagNachtischZusatz($eingetragendeZusatzstoffeArray[7]);
  255.             $hg->setFreitagHauptgerichtZusatz($eingetragendeZusatzstoffeArray[8]);
  256.             $hg->setFreitagNachtischZusatz($eingetragendeZusatzstoffeArray[9]);
  257.  
  258.  
  259.  
  260.             //$hg->setMontagHauptgerichtZusatz(implode(",", $form->getData()['zusMontagHauptgericht']));
  261.  
  262.  
  263.             $em = $this->getDoctrine()->getManager();
  264.             $em->persist($hg);
  265.             $em->flush();
  266.  
  267.             echo '<div class="bg-success">Datensatz eingetragen</div>';
  268.  
  269.             //$this->kw = $form->getData()['kw'];
  270.             //$this->year = $form->getData()['jahr'];
  271.  
  272.             // ... further modify the response or return it directly
  273.  
  274.  
  275.         return array($form, $query);
  276.     }
  277.  
  278.     public function getNormalForm($year, $kw, $query, $session){
  279.         //ladybug_dump($query);
  280.  
  281.         $form = $this->createFormBuilder()
  282.             ->add('jahr', 'text', array('data' => $session->get('year')))
  283.             ->add('kw', 'text', array('data' => $session->get('kw')))
  284.             ->add('montagHauptgericht', 'text', array(
  285.                 'data' => $query[0]['montagHauptgericht']))
  286.             ->add('montagNachtisch', 'text', array(
  287.                 'data' => $query[0]['montagNachtisch']))
  288.             ->add('dienstagHauptgericht', 'text', array(
  289.                 'data' => $query[0]['dienstagHauptgericht']))
  290.             ->add('dienstagNachtisch', 'text', array(
  291.                 'data' => $query[0]['dienstagNachtisch']))
  292.             ->add('mittwochHauptgericht', 'text', array(
  293.                 'data' => $query[0]['mittwochHauptgericht']))
  294.             ->add('mittwochNachtisch', 'text', array(
  295.                 'data' => $query[0]['mittwochNachtisch']))
  296.             ->add('donnerstagHauptgericht', 'text', array(
  297.                 'data' => $query[0]['donnerstagHauptgericht']))
  298.             ->add('donnerstagNachtisch', 'text', array(
  299.                 'data' => $query[0]['donnerstagNachtisch']))
  300.             ->add('freitagHauptgericht', 'text', array(
  301.                 'data' => $query[0]['freitagHauptgericht']))
  302.             ->add('freitagNachtisch', 'text', array(
  303.                 'data' => $query[0]['freitagNachtisch']))
  304.             ->add('zusMontagHauptgericht', 'text', array('required' => false))
  305.             ->add('zusDienstagHauptgericht', 'text', array('required' => false))
  306.             ->add('zusMittwochHauptgericht', 'text', array('required' => false))
  307.             ->add('zusDonnerstagHauptgericht', 'text', array('required' => false))
  308.             ->add('zusFreitagHauptgericht', 'text', array('required' => false))
  309.             ->add('zusMontagNachtisch', 'text', array('required' => false))
  310.             ->add('zusDienstagNachtisch', 'text', array('required' => false))
  311.             ->add('zusMittwochNachtisch', 'text', array('required' => false))
  312.             ->add('zusDonnerstagNachtisch', 'text', array('required' => false))
  313.             ->add('zusFreitagNachtisch', 'text', array('required' => false))
  314.             ->add('Eintragen', 'submit')
  315.             ->add('edit', 'submit')
  316.             ->add('vor', 'submit')
  317.             ->add('zurueck', 'submit')
  318.             ->getForm();
  319.         return $form;
  320.     }
  321.     public function getEmptyForm($year, $kw, $session){
  322.         $form = $this->createFormBuilder()
  323.             ->add('jahr', 'text', array('data' => $session->get('year')))
  324.             ->add('kw', 'text', array('data' => $session->get('kw')))
  325.             ->add('montagHauptgericht', 'text', array(
  326.                 'data' => ""))
  327.             ->add('montagNachtisch', 'text', array(
  328.                 'data' => ""))
  329.             ->add('dienstagHauptgericht', 'text', array(
  330.                 'data' =>""))
  331.             ->add('dienstagNachtisch', 'text', array(
  332.                 'data' =>""))
  333.             ->add('mittwochHauptgericht', 'text', array(
  334.                 'data' => ""))
  335.             ->add('mittwochNachtisch', 'text', array(
  336.                 'data' => ""))
  337.             ->add('donnerstagHauptgericht', 'text', array(
  338.                 'data' => ""))
  339.             ->add('donnerstagNachtisch', 'text', array(
  340.                 'data' => ""))
  341.             ->add('freitagHauptgericht', 'text', array(
  342.                 'data' => ""))
  343.             ->add('freitagNachtisch', 'text', array(
  344.                 'data' => ""))
  345.             ->add('zusMontagHauptgericht', 'text', array('required' => false))
  346.             ->add('zusDienstagHauptgericht', 'text', array('required' => false))
  347.             ->add('zusMittwochHauptgericht', 'text', array('required' => false))
  348.             ->add('zusDonnerstagHauptgericht', 'text', array('required' => false))
  349.             ->add('zusFreitagHauptgericht', 'text', array('required' => false))
  350.             ->add('zusMontagNachtisch', 'text', array('required' => false))
  351.             ->add('zusDienstagNachtisch', 'text', array('required' => false))
  352.             ->add('zusMittwochNachtisch', 'text', array('required' => false))
  353.             ->add('zusDonnerstagNachtisch', 'text', array('required' => false))
  354.             ->add('zusFreitagNachtisch', 'text', array('required' => false))
  355.             ->add('Eintragen', 'submit')
  356.             ->add('edit', 'submit')
  357.             ->add('vor', 'submit')
  358.             ->add('zurueck', 'submit')
  359.             ->getForm();
  360.  
  361.         return $form;
  362.     }
  363.  
  364.  
  365.  
  366.     public function get_vor($form, $session){
  367.  
  368.  
  369.  
  370.             $repo = $this->getDoctrine()->getRepository('ChrisTestBundle:KW');
  371.             $qb = $repo->createQueryBuilder('kw');
  372.  
  373.             // Erhöhe aktuelle KW
  374.             $session->set('kw', $session->get('kw')+1);
  375.  
  376.             $qb->add('select', 'kw')
  377.                 ->where('kw.kw = :kw')
  378.                 ->andWhere('kw.jahr = :jahr')
  379.                 ->setParameter('kw', $session->get('kw'))
  380.                 ->setParameter('jahr', $session->get('year'));
  381.  
  382.  
  383.             $query = $qb->getQuery();
  384.             $query = $query->getArrayResult();
  385.  
  386.  
  387.  
  388.             if (count($query) > 0){
  389.                 $form = $this->getNormalForm($session->get('year'),$session->get('kw'), $query, $session);
  390.  
  391.             }
  392.             else {
  393.                 $form = $this->getEmptyForm($session->get('year'), $session->get('kw'), $session);
  394.             }
  395.  
  396.  
  397.  
  398.             // Es wurde so weit geklickt, dass das Jahr wechselt (nach vorne)
  399.             if ($session->get('kw') >= $this->anzahlKalenderWochen($session->get('year'))){
  400.                 $session->set('year', $session->get('year')+1 );
  401.                 $session->set('kw', 1);
  402.  
  403.                 $qb->add('select', 'kw')
  404.                     ->where('kw.kw = :kw')
  405.                     ->andWhere('kw.jahr = :jahr')
  406.                     ->setParameter('kw', $session->get('kw'))
  407.                     ->setParameter('jahr', $session->get('year'));
  408.  
  409.  
  410.                 $query = $qb->getQuery();
  411.                 $query = $query->getArrayResult();
  412.  
  413.                 if (count($query) > 0){
  414.                     $form = $this->getNormalForm($session->get('year'), $session->get('kw'), $query, $session);
  415.                 }
  416.                 else {
  417.                     $form = $this->getEmptyForm($session->get('year'), $session->get('kw'), $session);
  418.                 }
  419.  
  420.             }
  421.  
  422.         return array ($form,$query);
  423.  
  424.     }
  425.  
  426.     public function get_back ($session){
  427.  
  428.             // Erniedrige aktuelle KW
  429.             $session->set('kw', $session->get('kw')-1);
  430.  
  431.             $repo = $this->getDoctrine()->getRepository('ChrisTestBundle:KW');
  432.             $qb = $repo->createQueryBuilder('kw');
  433.  
  434.  
  435.  
  436.             $qb->add('select', 'kw')
  437.                 ->where('kw.kw = :kw')
  438.                 ->andWhere('kw.jahr = :jahr')
  439.                 ->setParameter('kw', $session->get('kw'))
  440.                 ->setParameter('jahr',$session->get('year'));
  441.  
  442.  
  443.             $query = $qb->getQuery();
  444.             $query = $query->getArrayResult();
  445.  
  446.  
  447.  
  448.             if (count($query) > 0){
  449.                 $form = $this->getNormalForm($session->get('year'),$session->get('kw'), $query, $session);
  450.  
  451.             }
  452.             else {
  453.                 $form = $this->getEmptyForm($session->get('year'), $session->get('kw'), $session);
  454.             }
  455.  
  456.  
  457.             // Es wurde soweit geklickt, dass das Jahr wechselt
  458.             if (intval($session->get('kw')) == 0){
  459.                 $session->set('year', $session->get('year')-1);
  460.                 $session->set('kw', 52);
  461.  
  462.                 $qb->add('select', 'kw')
  463.                     ->where('kw.kw = :kw')
  464.                     ->andWhere('kw.jahr = :jahr')
  465.                     ->setParameter('kw', $session->get('kw'))
  466.                     ->setParameter('jahr', $session->get('year'));
  467.  
  468.  
  469.                 $query = $qb->getQuery();
  470.                 $query = $query->getArrayResult();
  471.  
  472.                 if (count($query) > 0){
  473.                     $form = $this->getNormalForm($session->get('year'), $session->get('kw'), $query, $session);
  474.                 }
  475.                 else {
  476.                     $form = $this->getEmptyForm($session->get('year'), $session->get('kw'), $session);
  477.                 }
  478.  
  479.             }
  480.  
  481.  
  482.         return array ($form, $query);
  483.     }
  484.  
  485.  
  486.     public function get_edit ($form, $session){
  487.         $this->kw = $form->getData()['kw'];
  488.  
  489.         $session->set('kw', $form->getData()['kw']);
  490.         $session->set('year', $form->getData()['jahr']);
  491.  
  492.  
  493.         // Lade aktuelle KW und Jahr aus Form und suche den Datensatz in der DB und stelle ihn dar
  494.             // @TODO
  495.             // Checken ob ein Datensatz mit Jahr und KW schon existiert in DB (Query)
  496.             $repo = $this->getDoctrine()->getRepository('ChrisTestBundle:KW');
  497.  
  498.             $qb = $repo->createQueryBuilder('kw');
  499.             /***
  500.              * DB Querys
  501.              * Finde die Speisen einer KW Heraus
  502.              ***/
  503.             $qb->add('select', 'kw')
  504.                 ->where('kw.kw = :kw')
  505.                 ->andWhere('kw.jahr = :jahr')
  506.                 ->setParameter('kw', $session->get('kw'))
  507.                 ->setParameter('jahr', $session->get('year'));
  508.  
  509.  
  510.             $query = $qb->getQuery();
  511.             $query = $query->getArrayResult();
  512.  
  513.             //var_dump($query);
  514.  
  515.             // Datensatz schon vorhanden, also Felder füllen zum editieren
  516.             if (count($query) > 0) {
  517.  
  518.  
  519.                 $form = $this->getNormalForm($session->get('year'),$session->get('kw'), $query, $session);
  520.  
  521.                 /**
  522.                  * ->add('zusMontagHauptgericht', 'choice', array(
  523.                  * 'choices'   => $zusaetzeArray,
  524.                  * 'required'  => false,
  525.                  * 'multiple' => true
  526.                  * ))
  527.                  */
  528.  
  529.             } // Kein Datensatz vorhanden, abspeichern
  530.             else {
  531.                 echo '<div class="bg-danger">Keinen Speiseplan in diesen Jahr mit KW gefunden!</div>';
  532.  
  533.  
  534.                 $form = $this->getEmptyForm($session->get('year'),$session->get('kw'), $session);
  535.  
  536.             }
  537.  
  538.  
  539.         return array($form,$query);
  540.  
  541.  
  542.  
  543.     }
  544.  
  545.     public function zusatzstoffe()
  546.     {
  547.         // 1. Array mit ID=>Zusatzstoff an die Renderform
  548.  
  549.         $repo = $this->getDoctrine()->getRepository('ChrisTestBundle:Zusatzstoff');
  550.  
  551.         $qb = $repo->createQueryBuilder('z');
  552.         $qb->add('select', 'z')
  553.             ->where('z.name IS NOT null')
  554.             ->orderBy('z.name', 'ASC');
  555.         $result = $qb->getQuery()->getArrayResult();
  556.         //$res = $qb->getQuery()->getResult(Query::HYDRATE_ARRAY);
  557.  
  558.         return $result;
  559.         // 2. Form mit Zusatztoff zurück und eintragen
  560.  
  561.     }
  562.  
  563.     function anzahlKalenderWochen($jahr) // Gibt die Anzahl der Kalenderwochen eines gegebenen Jahrs (Format YYYY) zurück
  564.     {
  565.         $letzteKW = date("W",strtotime("31.12.".$jahr));
  566.         $anzahlKW = ($letzteKW == 1) ? 52 : $letzteKW;
  567.         return $anzahlKW;
  568.     } // function anzahlKalenderWochen($jahr)
  569.  
  570. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement