Advertisement
Guest User

Analyze

a guest
Nov 23rd, 2014
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 9.07 KB | None | 0 0
  1. <?php
  2. /**
  3.  * Analyze - třída pro výběr sanktorálu a temporálu z databáze a jejich analýzu
  4.  *
  5.  * Vybere z databáze za pomocí dibi všechny události, seřadí je a vrátí DibiObject k dalšímu porovnání
  6.  * záznamů a jejich filtraci.
  7.  *
  8.  * @author    Honza Kafka   <akfak.naj@gmail.com>
  9.  * @licence   CC BY-NC-SA
  10.  * @link      http://kalendar.farnostnm.cz/wiki/
  11.  * @version   1.1.0
  12.  * @date      2014-11-11 19:09    Červený Kostelec (rev.)    
  13.  * @date      2013-07-19 15:34    Červený Kostelec    
  14.  */
  15.  
  16. class Analyze extends Nette\Object {
  17.  
  18.   public $connection;
  19.  
  20.   private $analyzeLiturgicYear;
  21.  
  22.   private $analyzeDay;
  23.  
  24.   private $date;  
  25.  
  26.   /** konkrétní data vytažená z databáze */
  27.   private $data;
  28.  
  29.   /** ID záznamů, které se budou zobrazovat */
  30.   private $resultData;
  31.  
  32.  
  33.  
  34.  
  35.   /**
  36.    * Spustí výběr temporálu / sanktorálu z databáze, zanalyzuje přednosti slavení
  37.    * Temporál potřebuje proměnné: $week, $season, $sundayCycle, $yearCycle, $weekday
  38.    * Sanktorál potřebuje proměnné: $day, $month
  39.    * Proměnné události potřebují jako kód pro vyhledávání konstantu třídy Enum (uloženo v AnalyzeDay::eventName::private)  
  40.    */    
  41.   public function __construct(Nette\Database\Context $connection){
  42.   $this->connection = $connection;
  43.   $this->resultData = array();
  44.   }
  45.  
  46.  
  47.  
  48.   /**
  49.    * Nastaví do proměnné analýzu liturgického roku
  50.    */    
  51.   public function setAnalyzeLiturgicYear(AnalyzeLiturgicYear $analyzeLiturgicYear){
  52.   $this->analyzeLiturgicYear = $analyzeLiturgicYear;
  53.   return $this;
  54.   }
  55.  
  56.  
  57.  
  58.   /**
  59.    * Nastaví do proměnné analýzu konkrétního dne + totéž pro datum konkrétního dne
  60.    */    
  61.   public function setAnalyzeDay(AnalyzeDay $analyzeDay){
  62.   $this->analyzeDay = $analyzeDay;
  63.   $this->date = $this->analyzeDay->getDate();
  64.   return $this;
  65.   }
  66.  
  67.  
  68.  
  69.   /**
  70.    * Získání temporálu a sanktorálu z databáze.
  71.    * ------------------------------------------
  72.    * Dotaz je podmíněný existencí názvu liturgické slavnosti (nevím, jak jednodušejc to napsat v nette, proto je to
  73.    * přes podmínku. Určitě by šla nějaká podmínka v SQL, ale do toho se fakt nechci pouštět).                
  74.    */
  75.   public function getEvents(){
  76.     if($this->analyzeDay->getEventName()){    
  77.     return $this->connection->table("liturgical_celebration")
  78.           ->where('(week = ? AND season = ? AND (cycle = ? OR cycle = ? OR cycle IS NULL) AND weekday = ?)
  79.                  OR
  80.                   (month = ? AND day = ? AND (season = ? OR season IS NULL))
  81.                  OR
  82.                   ( (cycle = ? OR cycle = ? OR cycle IS NULL) AND (pattern = ? OR title LIKE ?) )',
  83.                   $this->analyzeDay->getWeek(),
  84.                   $this->analyzeDay->getSeason(),
  85.                   $this->analyzeLiturgicYear->getSundayCycle(),
  86.                   $this->analyzeLiturgicYear->getYearCycle(),
  87.                   $this->analyzeDay->getWeekday(),
  88.                  
  89.                   $this->analyzeDay->getMonth(),
  90.                   $this->analyzeDay->getDay(),
  91.                   $this->analyzeDay->getSeason(),
  92.                  
  93.                   $this->analyzeLiturgicYear->getSundayCycle(),
  94.                   $this->analyzeLiturgicYear->getYearCycle(),
  95.                   $this->analyzeDay->getEventName(),
  96.                   constant("Enum::".$this->analyzeDay->getEventName())
  97.                   )
  98.           ->order('generic_number DESC, sequence_number DESC, weekday');  
  99.                
  100.     }else{
  101.     return $this->connection->table("liturgical_celebration")
  102.           ->where('(week = ? AND season = ? AND (cycle = ? OR cycle = ? OR cycle IS NULL) AND weekday = ?)
  103.                  OR
  104.                   (month = ? AND day = ? AND (season = ? OR season IS NULL))',
  105.                   $this->analyzeDay->getWeek(),
  106.                   $this->analyzeDay->getSeason(),
  107.                   $this->analyzeLiturgicYear->getSundayCycle(),
  108.                   $this->analyzeLiturgicYear->getYearCycle(),
  109.                   $this->analyzeDay->getWeekday(),
  110.                  
  111.                   $this->analyzeDay->getMonth(),
  112.                   $this->analyzeDay->getDay(),
  113.                   $this->analyzeDay->getSeason()
  114.                   )
  115.           ->order('generic_number DESC, sequence_number DESC, weekday');
  116.     }
  117.   }
  118.  
  119.  
  120.  
  121.   /**
  122.    * Porovná výsledky temporálu a sanktorálu z databáze
  123.    * --------------------------------------------------
  124.    * Do této funkce doporučuji nehrabat, dalo to příšerně moc práce to vymyslet!!!        
  125.    */    
  126.   public function compare(){
  127.   $this->data = $this->getEvents()->fetchAll();     // výsledky z databáze převede do pole
  128.  
  129.   $generic_number = 0;         // nula je kvůli prvnímu průchodu, aby šel správně
  130.    
  131.     foreach($this->data as $item){      
  132.    
  133.       if($item['generic_number'] > $generic_number){
  134.         if(isset($this->resultData)){
  135.         unset($this->resultData);     // vyprázdní paměť výsledků
  136.         }
  137.       $generic_number = $item['generic_number'];
  138.       }
  139.      
  140.     $this->resultData[] = $item['id'];
  141.     }
  142.    
  143.   }
  144.  
  145.      
  146.      
  147.    
  148.  
  149.  
  150.  
  151. /*  
  152.   public function compare(){
  153.   $this->data = $this->getEvents()->fetchAll();     // výsledky z databáze převede do pole
  154.  
  155.  
  156.   // hodnoty slavení (bloky důležitosti)
  157.   $type = array(Enum::COMMON_TIME => 1, Enum::OPTIONAL_MEMORY => 1, Enum::MEMORY => 2, Enum::FEAST => 3, Enum::SUNDAY => 4, Enum::CELEBRATION => 5);
  158.   $max = 1;    
  159.  
  160.     //for($i = 0; $i < count($this->data); $i++){
  161.     foreach($this->data as $item){
  162.     //$item = $this->data[$i];      
  163.    
  164.       if( ($type[$item['type']] >= $max) or (isset($item['type_diocese']) or isset($item['type_cathedral']) or isset($item['type_area'])) ){
  165.      
  166.         // NEchceme zobrazit ferii doby adventní po 17. prosinci
  167.         if($this->date->format("d") < 17 or $this->date->format("m") <> 12 or $item['season'] <> Enum::ADVENT or $item['type'] <> Enum::COMMON_TIME or $item['month'] <> null or $item['day'] <> null){                    
  168.        
  169.           // NEzobrazit ani nezávazné památky a památky v době postní
  170.           if( ($item['season'] == Enum::LENT or $this->analyzeDay->getSeason() == Enum::LENT) and ($item['type'] == Enum::MEMORY or $item['type'] == Enum::OPTIONAL_MEMORY)){
  171.           }else{
  172.           $this->resultData[] = $item['id'];
  173.           }
  174.          
  175.           // slavení týkající se území, diecéze nebo katedrály považujeme jako ferii, abychom mohli zobrazovat další záznamy
  176.           if(isset($item['type_diocese']) or isset($item['type_cathedral']) or isset($item['type_area'])){
  177.           $max = 1;
  178.           }else{
  179.           $max = $type[$item['type']];
  180.           }
  181.                  
  182.         }
  183.        
  184.       }      
  185.        
  186.     }
  187.  
  188.   }
  189. */
  190.  
  191.  
  192.  
  193.  
  194.  
  195.   /**
  196.    * Zapíše výslednou analýzu dne do databáze
  197.    */
  198.   public function insertResults(){
  199.     if(count($this->resultData) >= 1){
  200.       foreach($this->resultData as $value){
  201.       $insert[] = array(
  202.         'year'    => $this->date->format("Y"),
  203.         'month'   => $this->date->format("m"),
  204.         'day'     => $this->date->format("d"),
  205.         'liturgical_celebration_id'   => $value
  206.         );
  207.       }
  208.                  
  209.     $this->connection->table("generated_days")->insert($insert);
  210.     $this->resultData = array();
  211.     }  
  212.   }
  213.  
  214.  
  215.        
  216.   /**
  217.    * Vrátí hotové výsledky pro další použí (např. zapsání do databáze)
  218.    * @return  array  
  219.    */    
  220.   public function getResults(){
  221.   return $this->resultData;
  222.   }
  223.  
  224.    
  225.  
  226. /*
  227.  
  228. id 
  229. cyklus           cycle
  230. tyden              week
  231. mesic              month
  232. den              day
  233. mesic_den          month_day
  234. obdobi           season
  235. den_v_tydnu      weekday
  236. zobrazit_od      display_from
  237. zobrazit_do      display_to
  238. zaltar           psalter
  239. barva              color
  240. 1_cteni          1_reading
  241. 1_cteni_text       1_reading_text
  242. zalm               psalm
  243. zalm_antifona      psalm_antiphon
  244. zalm_text          psalm_text
  245. 2_cteni          2_reading
  246. 2_cteni_text   
  247. 2_cteni_zalm   
  248. 2_cteni_zalm_antifona  
  249. 2_cteni_zalm_text  
  250. 3_cteni
  251. 3_cteni_text   
  252. 3_cteni_zalm   
  253. 3_cteni_zalm_antifona  
  254. 3_cteni_zalm_text  
  255. 4_cteni
  256. 4_cteni_text   
  257. 4_cteni_zalm   
  258. 4_cteni_zalm_antifona  
  259. 4_cteni_zalm_text  
  260. 5_cteni
  261. 5_cteni_text   
  262. 5_cteni_zalm   
  263. 5_cteni_zalm_antifona  
  264. 5_cteni_zalm_text  
  265. 6_cteni
  266. 6_cteni_text   
  267. 6_cteni_zalm   
  268. 6_cteni_zalm_antifona  
  269. 6_cteni_zalm_text  
  270. 7_cteni
  271. 7_cteni_text   
  272. 7_cteni_zalm   
  273. 7_cteni_zalm_antifona  
  274. 7_cteni_zalm_text  
  275. 8_cteni
  276. 8_cteni_text   
  277. 8_cteni_zalm   
  278. 8_cteni_zalm_antifona  
  279. 8_cteni_zalm_text  
  280. evangelium          gospel
  281. evangelium_text     gospel_text
  282. nazev                 title
  283. cast                  part
  284. typ                 type
  285. typ_dieceze         type_diocese
  286. typ_katedrala         type_cathedral
  287. typ_oblast          type_area
  288. druhove_cislo         generic_number
  289. poradove_cislo      sequence_number
  290. vzorec              pattern
  291. update              update
  292. opraveno            revision
  293.  
  294. */  
  295.  
  296.  
  297.  
  298.  
  299. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement