Source for file ScriptController.php

Documentation is available at ScriptController.php

  1. <?php
  2. /**
  3.  * Controller class for automated script logic and all other actions/methods
  4.  * that are needed to make this portal function.
  5.  * 
  6.  * @author Margus Sellin <margus@bitweb.ee>
  7.  * @copyright Copyright (C) 2011. All rights reserved. Margus Sellin
  8.  * @project olymp
  9.  * 
  10.  */
  11. class ScriptController extends Zend_Controller_Action
  12. {
  13.     /**
  14.      * Init method.
  15.      * Built-in method in Zend Framework that applies to all actions in given controller.
  16.      * In this very controller it restricts common user who are not logged in to access
  17.      * administrative actions and functions of this portal.
  18.      * 
  19.      * If user is not logged in and tries to access actions/methods that are meant
  20.      * for administrators only, he/she is redirected to login page.
  21.      */
  22.     public function init()
  23.     {
  24.         if(!Zend_Auth::getInstance()->hasIdentity()) {
  25.             $this->_redirect('/login');
  26.         }
  27.     }
  28.  
  29.     public function indexAction()
  30.     {
  31.         $modelPiirkondKoond new Model_Piirkondkoond();
  32.         $modelValikKoond new Model_Valikkoond();
  33.         $modelLoppKoond new Model_Loppkoond();
  34.         $modelLahtineKoond new Model_Lahtinekoond();
  35.         
  36.         if($this->_request->isPost()) {
  37.             $competition $this->_getParam('competition');
  38.             $year $this->_getParam('year');
  39.             $class $this->_getParam('class');
  40.             
  41.             if($competition != 0{
  42.                 switch($competition{
  43.                     case 11$stats $modelPiirkondKoond->fetchAreaStatistics($year$class)break;
  44.                     case 13$stats $modelValikKoond->fetchAreaStatistics($year$class)break;
  45.                     case 2$stats $modelLoppKoond->fetchAreaStatistics($year$class)break;
  46.                     case 15$stats $modelLahtineKoond->fetchAreaStatistics($year$class)break;
  47.                 }
  48.                 $this->view->stats $stats;
  49.             }
  50.         }
  51.     }
  52.     
  53.     public function homeAction({
  54.         
  55.     }
  56.     
  57.     public function menuAction({
  58.         
  59.     }
  60.     
  61.     public function pagesAction({
  62.         $modelPage new Model_Page();
  63.         $pages $modelPage->fetchAll();
  64.         
  65.         $this->view->pages $pages;
  66.     }
  67.     
  68.     public function editPageAction({
  69.         $form new Form_Page();
  70.         
  71.         $pageId $this->_getParam('pageId');
  72.         $modelPage new Model_Page();
  73.         $page $modelPage->fetchRow('id=' . (int)$pageId);
  74.         
  75.         if($pageId != null{
  76.             $page $modelPage->fetchRow('id=' . (int)$pageId);
  77.             $form->populate($page->toArray());
  78.         else {
  79.             $page $modelPage->createRow();
  80.         }
  81.         if($this->_request->isPost()) {
  82.             if ($form->isValid($this->_request->getPost())) {
  83.                 $page->title $form->title->getValue();
  84.                 $page->value $form->value->getValue();
  85.                 $page->save();
  86.                 $this->_helper->redirector('pages''script');
  87.             }
  88.         }
  89.         $this->view->form $form;
  90.     }
  91.     
  92.      public function addResultsAction()
  93.     {
  94.  
  95.     }
  96.     
  97.     public function addFileAction({
  98.         $message '';
  99.         
  100.         if($this->_request->isPost()) {
  101.             $url $this->_getParam('url');
  102.             $date $this->_getParam('date');
  103.             $filename $this->_getParam('file');
  104.             set_time_limit(0);
  105.             
  106.             if(file_exists($filename)) {
  107.                 $firstFile file($filename);
  108.                 foreach($firstFile as $file{
  109.                     $file trim($file);
  110.                     if(file_exists($file)) {
  111.                         $date basename($file'.txt');
  112.                         $dateID $this->fetchDateID($date);
  113.                         $fileLines file($file);
  114.                         foreach($fileLines as $url{
  115.                             $str explode('/'$url);
  116.                             $competition $str[4];
  117.                             switch ($competition{
  118.                                 case 'lahtine'$this->saveLahtine($dateIDtrim($url))break;
  119.                                 case 'piirk'$this->savePiirk($dateIDtrim($url))break;
  120.                                 case 'valik'$this->saveValik($dateIDtrim($url))break;
  121.                                 case 'loppv'$this->saveLopp($dateIDtrim($url))break;
  122.                             }
  123.                         }
  124.                         $message 'Andmed edukalt lisatud.';
  125.                     else {
  126.                         $message =  'Faili nimega '.$file.' ei leitud.';
  127.                     }
  128.                 }
  129.             }
  130.         }
  131.         $this->view->message $message;
  132.     }
  133.     
  134.      public function addTableAction({
  135.         $modelDates new Model_Dates();
  136.         $form new Form_Result();
  137.         
  138.         $dates $modelDates->fetchByDates();
  139.         $form->populate($form->getValues());
  140.         
  141.         $message '';
  142.         
  143.         set_time_limit(0);
  144.         $url $this->_getParam('url');
  145.         $date $this->_getParam('date');
  146.         
  147.         if($this->_request->isPost(&& $form->isValid($this->_request->getPost())) {
  148.             if($date == 0{
  149.                 $year $this->_getParam('year');
  150.                 $month $this->_getParam('month');
  151.                 $day $this->_getParam('day');
  152.                 $date $year.'-'.$month.'-'.$day;
  153.             }
  154.             $dateID $this->fetchDateID2($date);
  155.             set_time_limit(0);
  156.  
  157.             $str explode('/'$url);
  158.             $competition $str[4];
  159.  
  160.             switch ($competition{
  161.                 case 'lahtine'$this->saveLahtine($dateIDtrim($url))break;
  162.                 case 'piirk'$this->savePiirk($dateIDtrim($url))break;
  163.                 case 'valik'$this->saveValik($dateIDtrim($url))break;
  164.                 case 'loppv'$this->saveLopp($dateIDtrim($url))break;
  165.             }
  166.             $message 'Andmed edukalt lisatud.';
  167.         }
  168.         $this->view->message $message;
  169.         $this->view->dates $dates;
  170.         $this->view->form $form;
  171.     }
  172.     
  173.     private function saveValik($date$url)
  174.     {
  175.         $modelPunktid new Model_Valikpunktid();
  176.         
  177.         $dateID $date;
  178.         $tableRows $this->fetchTableRows($url);
  179.         
  180.         foreach($tableRows as $i => $tableRow{
  181.             if($i 0{
  182.                 $points $modelPunktid->createRow();
  183.                 foreach ($tableRow->childNodes as $j => $dataItem{
  184.                     $length $tableRow->childNodes->length;
  185.                     $length ($length 14)?$length*2:$length;
  186.                     $j ($tableRow->childNodes->length 14)?$j*2:$j;
  187.                     $k $length-18;
  188.                     $data trim($dataItem->nodeValue);
  189.                     if($i == count($tableRows)-&& $tableRow->childNodes->item(0)->nodeValue == ''{
  190.                         $break true;
  191.                         break;
  192.                     }
  193.                     switch($j{
  194.                         case ((int)($length/22))*2$personID $this->fetchPersonID($data)break;
  195.                         case (((int)($length/22))*2)+2$schoolID $this->fetchSchoolID2($data)break;
  196.                         case (((int)($length/22))*2)+4$classID ($length != 18)?$this->fetchClassID2($data):0;
  197.                         case $k+4$points->p1 = (int)$databreak;
  198.                         case $k+6$points->p2 = (int)$databreak;
  199.                         case $k+8$points->p3 = (int)$databreak;
  200.                         case $k+10$points->p4 = (int)$databreak;
  201.                         case $k+12$points->p5 = (int)$databreak;
  202.                         case $k+14$points->p6 = (int)$databreak;
  203.                         case $k+16$points->summa = (int)$databreak
  204.                     }
  205.                 }
  206.                 if(!isset($break)) {
  207.                     if(!$this->checkValikExistance($dateID$personID$schoolID$classID)) {
  208.                         
  209.                         $points->save();
  210.                         $this->saveValikOverall($personID$dateID$points->id$classID$schoolID);
  211.                     }
  212.                 }
  213.             }    
  214.         }
  215.     }
  216.  
  217.     private function saveLahtine($date$url)
  218.     {
  219.         $modelPunktid new Model_Lahtinepunktid();
  220.  
  221.         $dateID $date;
  222.         $groupID $this->fetchGroupID($url);
  223.  
  224.         $tableRows $this->fetchTableRows($url);
  225.         
  226.         foreach($tableRows as $i => $tableRow{
  227.             if($i 0{
  228.                 $points $modelPunktid->createRow();
  229.                 foreach ($tableRow->childNodes as $j => $dataItem{
  230.                     $length $tableRow->childNodes->length;
  231.                     $length ($length 14)?$length*2:$length;
  232.                     $j ($tableRow->childNodes->length 14)?$j*2:$j;
  233.                     $k $length-20;
  234.                     $data trim($dataItem->nodeValue);
  235.                     if($i == count($tableRows)-&& $tableRow->childNodes->item(0)->nodeValue == ''{
  236.                         $break true;
  237.                         break;
  238.                     }
  239.                     switch($j{
  240.                         case $k+0$personID $this->fetchPersonID($data);
  241.                         case $k+2$schoolID $this->fetchSchoolID2($data);
  242.                         case $k+4$classID $this->fetchClassID2($data);
  243.                         case $k+6$points->p1 = (int)$databreak;
  244.                         case $k+8$points->p2 = (int)$databreak;
  245.                         case $k+10$points->p3 = (int)$databreak;
  246.                         case $k+12$points->p4 = (int)$databreak;
  247.                         case $k+14$points->p5 = (int)$databreak;
  248.                         case $k+16$points->summa = (int)$databreak
  249.                     }
  250.                 }
  251.                 if(!isset($break)) {
  252.                     if(!$this->checkLahtineExistance($dateID$personID$schoolID$classID)) {
  253.                         $points->save();
  254.                         $this->saveLahtineOverall($personID$dateID$points->id$classID$groupID$schoolID);
  255.                     }
  256.                 }
  257.             }
  258.         }
  259.     }
  260.     
  261.     private function saveLopp($date$url)
  262.     {
  263.         $modelPunktid new Model_Lopppunktid();
  264.  
  265.         $classID $this->fetchClassID($url);
  266.          $dateID $date;
  267.         
  268.         $tableRows $this->fetchTableRows($url);
  269.         
  270.         foreach($tableRows as $i => $tableRow{
  271.             if($i 0{
  272.                 $points $modelPunktid->createRow();
  273.                 foreach ($tableRow->childNodes as $j => $dataItem{
  274.                     $length $tableRow->childNodes->length;
  275.                     $length ($length 14)?$length*2:$length;
  276.                     $j ($tableRow->childNodes->length 14)?$j*2:$j;
  277.                     $data trim($dataItem->nodeValue);
  278.                     if($i >= count($tableRows)-&& $tableRow->childNodes->item(0)->nodeValue == ''{
  279.                         $break true;
  280.                         break;
  281.                     }
  282.                     switch($j{
  283.                         case 0$personID $this->fetchPersonID($data);
  284.                         case 2$schoolID $this->fetchSchoolID2($data);
  285.                         case 4$points->p1 = (int)$databreak;
  286.                         case 6$points->p2 = (int)$databreak;
  287.                         case 8$points->p3 = (int)$databreak;
  288.                         case 10$points->p4 = (int)$databreak;
  289.                         case 12$points->p5 = (int)$databreak;
  290.                         case 14$points->summa = (int)$databreak
  291.                     }
  292.                 }
  293.                 if(!isset($break)) {
  294.                     if(!$this->checkLoppExistance($dateID$personID$schoolID$classID)) {
  295.                         $points->save();
  296.                         $this->saveLoppOverall($personID$dateID$points->id$classID$schoolID);
  297.                     }
  298.                 }
  299.             }
  300.         }
  301.     }
  302.     
  303.     private function savePiirk($date$url)
  304.     {
  305.         $modelPunktid new Model_Piirkondpunktid();
  306.         $dateID $date;
  307.         $classID $this->fetchClassID($url);
  308.         
  309.         $tableRows $this->fetchTableRows($url);
  310.         
  311.         
  312.         $class $this->classByID($classID);
  313.         
  314.         foreach($tableRows as $i => $tableRow{
  315.             if($i 0{
  316.                 $points $modelPunktid->createRow();
  317.                 foreach ($tableRow->childNodes as $k => $dataItem{
  318.                     $data trim($dataItem->nodeValue);
  319.                     $k ($tableRow->childNodes->length 20)?$k*2:$k;
  320.                     switch($k{
  321.                         case 0$personID $this->fetchPersonID($data)break;
  322.                         case 2$areaID $this->fetchAreaID($data)break;
  323.                         case 4$schoolID $this->fetchSchoolID($data$areaID)break;
  324.                     }
  325.                     if($k == && $this->checkPiirkondExistance($dateID$personID$schoolID$classID)) {
  326.                         break;
  327.                     }
  328.                     
  329.                     if($class 9{
  330.                         switch($k{
  331.                             case 6$points->test = (int)$databreak;
  332.                             case 10$points->p1 = (int)$databreak;
  333.                             case 14$points->p2 = (int)$databreak;
  334.                             case 18$points->p3 = (int)$databreak;
  335.                             case 22$points->summa = (int)$databreak;
  336.                         }
  337.                     else if($class == 9{
  338.                         switch($k{
  339.                             case 6$points->test = (int)$databreak;
  340.                             case 10$points->p1 = (int)$databreak;
  341.                             case 14$points->p2 = (int)$databreak;
  342.                             case 18$points->p3 = (int)$databreak;
  343.                             case 22$points->p4 = (int)$databreak;
  344.                             case 26$points->summa = (int)$databreak;
  345.                         }
  346.                     else {
  347.                         switch($k{
  348.                             case 6$points->p1 = (int)$databreak;
  349.                             case 10$points->p2 = (int)$databreak;
  350.                             case 14$points->p3 = (int)$databreak;
  351.                             case 18$points->p4 = (int)$databreak;
  352.                             case 22$points->p5 = (int)$databreak;
  353.                             case 26:
  354.                                 if($tableRow->childNodes->length%15 == 0{
  355.                                     $points->summa = (int)$data;
  356.                                 else {
  357.                                     $points->p6 = (int)$data;
  358.                                 break;
  359.                             case 30$points->summa = (int)$databreak;
  360.                         }
  361.                     }
  362.                     
  363.                 }
  364.                 $points->save();
  365.                 $this->savePiirkondOverall($personID$dateID$points->id$classID$schoolID);
  366.             }
  367.         }
  368.     }
  369.     
  370.     private function fetchDateID($date)
  371.     {
  372.         $modelDates new Model_Dates();
  373.            $result $modelDates->fetchByDate($date);
  374.         if($result == null{
  375.             $result $modelDates->createRow();
  376.             $result->AineID 1;
  377.             $result->VoistluseID 2;
  378.             $result->Kuupaev $date;
  379.             $result->save();
  380.         }
  381.         return $result->VoistluseKuupaevaID;
  382.     }
  383.     
  384.     private function fetchDateID2($date)
  385.     {
  386.         $modelDates new Model_Dates();
  387.            $result $modelDates->fetchRow('VoistluseKuupaevaID=' . (int)$date);
  388.         if($result == null{
  389.             $result $modelDates->createRow();
  390.             $result->AineID 1;
  391.             $result->VoistluseID 2;
  392.             $result->Kuupaev $date;
  393.             $result->save();
  394.         }
  395.         return $result->VoistluseKuupaevaID;
  396.     }
  397.     
  398.     private function fetchGroupID($url{
  399.         $group explode('_'$url);
  400.         $group substr($group[1]0,1);
  401.         
  402.         return ($group == 'n')?1:2;
  403.     }
  404.     
  405.     private function fetchClassID($url)
  406.     {
  407.         $modelKlass new Model_Klass();
  408.         $data explode('/'$url);
  409.         $data explode('klass'$data[6]);
  410.         $data $data[0];
  411.         $class $modelKlass->fetchByName($data);
  412.         if($class == null{
  413.             $class $modelKlass->createRow();
  414.             $class->number = (int)$data;
  415.             $class->save();
  416.         }
  417.         
  418.         return $class->id;
  419.     }
  420.     
  421.     private function fetchClassID2($data)
  422.     {
  423.         $modelKlass new Model_Klass();
  424.         $class $modelKlass->fetchByName($data);
  425.         if($class == null{
  426.             $class $modelKlass->createRow();
  427.             $class->number = (int)$data;
  428.             $class->save();
  429.         }
  430.         return $class->id;
  431.     }
  432.     
  433.     private function fetchPersonID($data)
  434.     {
  435.                 
  436.         $modelOsaleja new Model_Osaleja();
  437.         $person $modelOsaleja->fetchByName($data);
  438.         if($person == null{
  439.             $person $modelOsaleja->createRow();
  440.             $person->nimi $data;
  441.             $person->save();
  442.         }
  443.         return $person->id;
  444.     }
  445.     
  446.     private function fetchAreaID($data)
  447.     {
  448.         $modelPiirkond new Model_Piirkond();
  449.         if(strpos($data'Tallinn'!== false{
  450.             return 1;
  451.         }
  452.         $area $modelPiirkond->fetchByName($data);
  453.         if($area == null{
  454.             $area $modelPiirkond->createRow();
  455.             $area->nimetus $data;
  456.             $area->save();
  457.         }
  458.         return $area->id;
  459.     }
  460.     
  461.     private function fetchSchoolID($data$areaID)
  462.     {
  463.         $modelKool new Model_Kool();
  464.           $school $modelKool->fetchByName($data);
  465.         if($school == null{
  466.             $school $modelKool->createRow();
  467.             $school->nimi $data;
  468.             if($school->piirkondID == ''{
  469.                 $school->piirkondID $areaID;
  470.             }
  471.             $school->save();
  472.         }
  473.         return $school->id;
  474.     }
  475.     
  476.     private function fetchSchoolID2($data)
  477.     {
  478.         $modelKool new Model_Kool();
  479.           $school $modelKool->fetchByName($data);
  480.         if($school == null{
  481.             $school $modelKool->createRow();
  482.             $school->nimi $data;
  483.             $school->save();
  484.         }
  485.         return $school->id;
  486.     }
  487.     
  488.     private function savePiirkondOverall($personID$dateID$pointsID$classID$schoolID)
  489.     {
  490.         $modelKoond new Model_Piirkondkoond();
  491.         $overall $modelKoond->createRow();
  492.         $overall->osalejaID $personID;
  493.         $overall->kuupaevID $dateID;
  494.         $overall->punktidID $pointsID;
  495.         $overall->klassID $classID;
  496.         $overall->koolID $schoolID;
  497.         $overall->save();
  498.     }
  499.     
  500.     private function saveValikOverall($personID$dateID$pointsID$classID$schoolID)
  501.     {
  502.         $modelKoond new Model_Valikkoond();
  503.         $overall $modelKoond->createRow();
  504.         $overall->osalejaID $personID;
  505.         $overall->kuupaevID $dateID;
  506.         $overall->punktidID $pointsID;
  507.         $overall->klassID $classID;
  508.         $overall->koolID $schoolID;
  509.         $overall->save();
  510.     }
  511.     
  512.     private function saveLahtineOverall($personID$dateID$pointsID$classID$groupID$schoolID)
  513.     {
  514.         $modelKoond new Model_Lahtinekoond();
  515.         $overall $modelKoond->createRow();
  516.         $overall->osalejaID $personID;
  517.         $overall->kuupaevID $dateID;
  518.         $overall->punktidID $pointsID;
  519.         $overall->klassID $classID;
  520.         $overall->ryhmID $groupID;
  521.         $overall->koolID $schoolID;
  522.         $overall->save();
  523.     }
  524.     
  525.     private function saveLoppOverall($personID$dateID$pointsID$classID$schoolID)
  526.     {
  527.         $modelKoond new Model_Loppkoond();
  528.         $overall $modelKoond->createRow();
  529.         $overall->osalejaID $personID;
  530.         $overall->kuupaevID $dateID;
  531.         $overall->punktidID $pointsID;
  532.         $overall->klassID $classID;
  533.         $overall->koolID $schoolID;
  534.         $overall->save();
  535.     }
  536.     
  537.     private function fetchTableRows($url)
  538.     {
  539.         $client new Zend_Http_Client($url);
  540.         $dom new Zend_Dom_Query($client->request()->getBody());
  541.         return $dom->query('tr');
  542.     }
  543.     
  544.     private function classByID($classID{
  545.         $modelKlass new Model_Klass();
  546.         $class $modelKlass->fetchRow('id=' . (int)$classID);
  547.         return $class->number;
  548.     }
  549.     
  550.     private function checkPiirkondExistance($dateID$personID$schoolID$classID{
  551.         $modelKoond new Model_Piirkondkoond();
  552.         $exists $modelKoond->fetchResult($dateID$personID$schoolID$classID);
  553.         if(count($exists!= 0{
  554.             return true;
  555.         }
  556.         return false;
  557.     }
  558.     
  559.     private function checkLoppExistance($dateID$personID$schoolID$classID{
  560.         $modelKoond new Model_Loppkoond();
  561.         $exists $modelKoond->fetchResult($dateID$personID$schoolID$classID);
  562.         if(count($exists!= 0{
  563.             return true;
  564.         }
  565.         return false;
  566.     }
  567.     
  568.     private function checkValikExistance($dateID$personID$schoolID$classID{
  569.         $modelKoond new Model_Valikkoond();
  570.         $exists $modelKoond->fetchResult($dateID$personID$schoolID$classID);
  571.         if(count($exists!= 0{
  572.             return true;
  573.         }
  574.         return false;
  575.     }
  576.     private function checkLahtineExistance($dateID$personID$schoolID$classID{
  577.         $modelKoond new Model_Lahtinekoond();
  578.         $exists $modelKoond->fetchResult($dateID$personID$schoolID$classID);
  579.         if(count($exists!= 0{
  580.             return true;
  581.         }
  582.         return false;
  583.     }
  584.  
  585.  
  586. }

Documentation generated on Tue, 14 Jun 2011 16:02:27 +0300 by phpDocumentor 1.4.1