Advertisement
Guest User

Untitled

a guest
May 18th, 2012
35
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.45 KB | None | 0 0
  1. <?php
  2.  
  3. class BookSelectionController{
  4.  
  5.     private $books;
  6.     private $difficulty;
  7.     private $rules = array();
  8.  
  9.     public function __construct(array $books){
  10.         $this->books = $books;
  11.     }
  12.  
  13.     public function setDifficulty($diff){
  14.         $this->difficulty = $diff;
  15.     }
  16.  
  17.     private function getRules(){
  18.         $manager = new FileDBManager();
  19.         $db = $manager->table("pickrules");
  20.         $pickrules = $db->select(array("difficulty"=>$this->difficulty));
  21.         while($pickrule = $pickrules->getRow()){
  22.             $rule = $pickrule->getArray();
  23.             $rule['count'] = 0;
  24.             $rule['ok'] = false;
  25.             $rules[$pickrule->parent_id][$rule['id']] = $this->getRuleText($rule);     
  26.         }
  27.         $this->rules = $rules;
  28.     }
  29.  
  30.     private function getRuleText($rule){
  31.         foreach($this->books as $section){
  32.             foreach($section as $book){
  33.                 if($book[$rule['attribute']] == $rule['value'] and array_key_exists($rule['text'],$book)){
  34.                     $rule['text'] = $book[$rule['text']];
  35.                     return $rule;
  36.                 }
  37.             }
  38.         }
  39.         return $rule;
  40.     }
  41.  
  42.     public function countMissing(){
  43.         $this->getRules();
  44.         $result = $this->execRules($this->rules,$this->books,0);
  45.         return $this->rules = $result['rules'];
  46.     }
  47.    
  48.     private function execRules($rules,$books,$parent){ 
  49.         $result['result'] = true;
  50.         foreach($rules[$parent] as $rule_id => $rule){
  51.             foreach($books as $section){
  52.                 foreach($section as $book){
  53.                     if(array_key_exists($rule['attribute'],$book)){
  54.                         if($book['marked'] == true and $book[$rule['attribute']] == $rule['value']){
  55.                             $rules[$parent][$rule_id]['count']++;
  56.                             $books_passed[$book['section_name']][] = $book;
  57.                         }elseif($book['marked'] == true and $rule['value'] == 'count'){
  58.                             $count[$book[$rule['attribute']]] = true;
  59.                         }
  60.                     }
  61.                 }
  62.             }
  63.             if(isset($count) and $rule['value'] == 'count'){
  64.                 $rules[$parent][$rule_id]['count'] =  count($count);
  65.             }
  66.             if($rules[$parent][$rule_id]['count'] >= $rules[$parent][$rule_id]['number']){
  67.                 $rules[$parent][$rule_id]['ok'] = true;
  68.             }else{
  69.                 $result['result'] = false;
  70.             }
  71.             if(isset($books_passed) and array_key_exists($rule['id'],$rules)){
  72.                 $child_result = $this->execRules($rules,$books_passed,$rule['id']);
  73.                 $rules = $child_result['rules'];
  74.                 $rules[$parent][$rule_id]['ok'] = $child_result['result'];
  75.             }
  76.         }
  77.         $result['rules'] = $rules;
  78.         return  $result;
  79.     }
  80.  
  81.     public function checkPassed(){
  82.         foreach($this->rules[0] as $rule){
  83.             if($rule['ok'] != true) return false;      
  84.         }
  85.         return true;
  86.     }
  87.  
  88. }
  89.  
  90. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement