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

Documentation generated on Tue, 14 Jun 2011 20:16:13 +0300 by phpDocumentor 1.4.1