Changeset 186 for Dev/trunk


Ignore:
Timestamp:
12/16/11 11:19:54 (13 years ago)
Author:
jkraaijeveld
Message:

Implemented lazy evaluation.

  • Initially, references to other database objects are now given as an ID rather than an object.
  • Every model class now has an evaluate() function, which gets all the objects that object has references to. Returns true if it got all the values correctly, false if there are invalid references.
  • Every connector now first evaluates an object before storing, to make sure only objects with valid references get stored.
Location:
Dev/trunk
Files:
15 edited

Legend:

Unmodified
Added
Removed
  • Dev/trunk/classes/Answer.php

    r157 r186  
    88class Answer extends ResearchToolObject {
    99    public $question;
    10     public $values;
     10        public $values;
    1111   
    1212    /**
     
    2424      $this->question = $question;
    2525      $this->values = $values;
    26     }
     26        }
     27       
     28        /**
     29         * function evaluate()
     30         * Evaluates the references and fills in the objects for them instead.
     31         */
     32        public function evaluate()
     33        {
     34                if(is_string($this->question))
     35                {
     36                        $dbi = new DatabaseInterface();
     37                        $result = $dbi->get("question", array("code" => $this->question));
     38                        if(!isset($result[0]))
     39                                return false;
     40                        $this->question = $result[0];
     41                }
     42                return true;
     43
     44        }
    2745}
    2846
  • Dev/trunk/classes/AnswerConnector.php

    r171 r186  
    1111 */
    1212class AnswerConnector extends Connector{
    13         protected $db;
    1413   
    1514    /**
     
    5150                if(!empty($results))
    5251                {
    53             $this->db = new DatabaseInterface();
    5452                        foreach($results as $result)
    5553                        {
    56                                 $questionResult = $this->db->get("question", array("code" => $result['?question_code']->label));
    57                                 $answers[] = new Answer($result['?uid']->label, $questionResult[0], $this->getValues($result['?uid']->label));
     54                                $answers[] = new Answer($result['?uid']->label, $result['?question_code']->label, $this->getValues($result['?uid']->label));
    5855                        }
    5956                }
     
    8481    public function set($rToolObject)
    8582    {
    86         $this->load();
    87        
     83                $this->load();
     84                //If evaluation fails, some references are incorrect.
     85                //We shouldn't save in this case. Instead - let the user know. This function returns false if the evaluation has failed.
     86                //TODO: Decide how to fix invalid references graciously.
     87                if(!$rToolObject->evaluate())
     88                        return false;
    8889        $resourceAnswer = new Resource(ANSWER.'/'.$rToolObject->uid);       
    8990        //Remove the old value stored with the given id
     
    112113                        }
    113114                }
    114         $this->save();
     115                $this->save();
     116                return true;
    115117    }
    116118}
  • Dev/trunk/classes/AnswerSet.php

    r149 r186  
    1313         * Constructor for an AnswerSet object
    1414         * @param type $uid
    15          * @param type $question
    16          * @param type $values
     15         * @param type $survey
     16         * @param type $respondent
     17         * @param type $answers
    1718         */
    1819        public function __construct($uid=null, $survey=null, $respondent=null, $answers=null)
     
    2728                $this->answers = $answers;
    2829        }
     30
     31        /**
     32         * function evaluate()
     33         * evaluates the references of survey, respondent and answers.
     34         */
     35        public function evaluate()
     36        {
     37                $dbi = new DatabaseInterface();
     38                if(is_string($this->survey))
     39                {
     40                        $result = $dbi->get("survey", array("uid" => $this->survey));
     41                        if(!isset($result[0]))
     42                                return false;
     43                        $this->survey = $result[0];
     44                }
     45                if(is_string($this->respondent))
     46                {
     47                        $result = $dbi->get("respondent", array("uid" => $this->respondent));
     48                        if(!isset($result[0]))
     49                                return false;
     50                        $this->respondent = $result[0];
     51                }
     52                if(!empty($this->answers) && is_string($this->answers[0]))
     53                {
     54                        $newanswers = array();
     55                        foreach($this->answers as $answer)
     56                        {
     57                                $result = $dbi->get("answer", array("uid" => $answer));
     58                                if(!isset($result[0]))
     59                                        return false;
     60                                $newanswers[] = $result[0];
     61                        }
     62                        $this->answers = $newanswers;
     63                }
     64                return true;
     65        }
    2966}
    3067
  • Dev/trunk/classes/AnswerSetConnector.php

    r171 r186  
    5050                        foreach($results as $result)
    5151                        {
    52                                 $survey = $this->db->get("survey", array("uid" => $result['?for_survey']->label));
    53                                 $respondent = $this->db->get("respondent", array("uid" => $result['?by_respondent']->label));
     52                                $survey = $result['?for_survey']->label;
     53                                $respondent = $result['?by_respondent']->label;
    5454                                $answers =      $this->getAnswers($result['?uid']->label);
    5555                                $answerSets[] = new AnswerSet($result['?uid']->label, $survey[0], $respondent[0], $answers);
     
    7171                {
    7272                        $element = $iterator->next();
    73                         $answersR = $this->db->get("answer", array("uid" => $element->getLabelObject()));
    74                         $answers[] = $answersR[0];
     73                        $answers[] = $element->getLabelObject();
    7574                }
    7675                return $answers;
     
    8483        {
    8584                $this->load();
     85                //If evaluation fails, some references are incorrect.
     86                //We shouldn't save in this case. Instead - let the user know. This function returns false if the evaluation has failed.
     87                //TODO: Decide how to fix invalid references graciously.
     88                if(!$rToolObject->evaluate())
     89                        return false;
     90
    8691                $resourceAnswerSet = new Resource(ANSWERSET . '/' . $rToolObject->uid);
    8792                //Remove the old value stored with the given id
     
    115120                }
    116121                $this->save();
     122                return true;
    117123        }
    118124}
  • Dev/trunk/classes/Application.php

    r158 r186  
    2828        $this->title = $title;
    2929        $this->description = $description;
    30         $this->style = $style;
    31     }
     30                $this->style = $style;
     31        }
     32       
     33        public function evaluate()
     34        {
     35                //Do nothing, there are no references in application.
     36        }
    3237
    3338}
  • Dev/trunk/classes/Question.php

    r149 r186  
    3939        $this->category =  $category;
    4040        $this->answers = $answers;
    41     }
     41        }
     42
     43        /**
     44         * function evaluate()
     45         * evaluates all the references of this object.
     46         */
     47        public function evaluate()
     48        {
     49                //Do nothing since Question does not contain any references
     50        }
    4251}
    4352
  • Dev/trunk/classes/ResearchToolObject.php

    r158 r186  
    66 */
    77abstract class ResearchToolObject {
    8     public $uid;
     8        public $uid;
     9//Uncomment when done with creating all evaluation methods \o/////
     10//      public abstract function evaluate();
    911}
    1012
  • Dev/trunk/classes/Respondent.php

    r161 r186  
    2626      $this->password = $password;
    2727   }
     28
     29   /*
     30        * function evaluate()
     31        * evaluates all the references.
     32        */
     33   public function evaluate()
     34   {
     35                //Do nothing since Respondent does not contain any references.
     36   }
    2837   
    2938}
  • Dev/trunk/classes/Session.php

    r174 r186  
    3737        }
    3838
     39        /*
     40         * function evaluate(()
     41         * Evaluates all the references of this object.
     42         */
     43        public function evaluate()
     44        {
     45                $dbi = new DatabaseInterface();
     46                if(is_string($this->creator))
     47                {
     48                        $result = $dbi->get("user", array("uid" => $this->creator));
     49                        if(!isset($result[0]))
     50                                return false;
     51                        $this->creator = $result[0];
     52                }
     53                if(!empty($this->pipeline) && is_string($this->pipeline[0]))
     54                {
     55                        $newPipeline = array();
     56                        foreach($this->pipeline as $element)
     57                        {
     58                                //Check if the element's UID can be found in surveys, if not:
     59                                //Check applications. If it isn't in either: invalid reference.
     60                                $result = $dbi->get("survey", array("uid" => $element));
     61                                if(!isset($result[0]))
     62                                        $result = $dbi->get("application", array("uid" => $element));
     63                                if(!isset($result[0]))
     64                                        return false;
     65                                $newPipeline[] = $result[0];
     66                        }
     67                        $this->pipeline = $newPipeline;
     68                }
     69                if(!empty($this->answersets) && is_string($this->answersets[0]))
     70                {
     71                        $newAnswerSets = array();
     72                        foreach($this->answersets as $element)
     73                        {
     74                                $result = $dbi->get("answerset", array("uid" => $element));
     75                                if(!isset($result[0]))
     76                                        return false;
     77                                $newAnswerSets[] = $result[0];
     78                        }
     79                        $this->answersets = $newAnswerSets;
     80                }
     81                return true;
     82        }
     83
    3984        /**
    4085         * function toSPSS
    4186         * @param type $location
    4287         * Writes an SPSS parseable file at the given location, named '$datetime_$title.txt'
     88         * One big note about toSPSS: If this session contains multiple instances of THE SAME Survey,
     89         * the world burns, people die, etcetera. (or, in a more fortunate case, the latest values
     90         * are written to the file whilst the others get lost.
    4391         */
    4492        public function toSPSS($location)
    4593        {
     94                $this->evaluate();
    4695                if(!is_dir($location))
    4796                {
     
    58107                        if(get_class($element) == "Survey")
    59108                        {
     109                                $element->evaluate();
    60110                                foreach($element->questions as $question)
    61111                                {
     112                                        //TODO: This might need fixing after lazy initialization refactoring.
    62113                                        $headers[] = $element->title . '_' . $question->uid;
    63114                                }
  • Dev/trunk/classes/SessionConnector.php

    r173 r186  
    5959                                $pipeline = $this->getPipeline($result['?uid']->label);
    6060                                $answersets = $this->getAnswerSets($result['?uid']->label);
    61                                 $creator = $this->db->get("User", array("uid" => $result['?creator']->label));
     61                                $creator = $result['?creator']->label;
    6262                                $datetime = new DateTime();
    6363                                $datetime->setTimestamp(intval($result['?datetime']->label));
    64                                 $sessions[] = new Session($result['?uid']->label, $result['?title']->label, $creator[0], $datetime, $pipeline, $answersets);
     64                                $sessions[] = new Session($result['?uid']->label, $result['?title']->label, $creator, $datetime, $pipeline, $answersets);
    6565                        }
    6666                }
     
    7979                {
    8080                        $element = $iterator->next();
    81                         if(strpos($element->getLabelPredicate(), "has_application") != false)
    82                         {
    83                                 $applications = $this->db->get("application", array("uid" => $element->getLabelObject()));
    84                                 $pipeline[] = $applications[0];
    85                         }
    86                         else
    87                         {
    88                                 $surveys = $this->db->get("survey", array("uid" => $element->getLabelObject()));
    89                                 $pipeline[] = $surveys[0];
    90                         }
     81                        $pipeline[] = $element->getLabelObject();
    9182                }
    9283                return $pipeline;
     
    10596                {
    10697                        $element = $iterator->next();
    107                         $resultsets = $this->db->get("answerset", array("uid" => $element->getLabelObject()));
    108                         $answersets[] = $resultsets[0];
     98                        $answersets[] = $element->getLabelObject();
    10999                }
    110100                return $answersets;
     
    118108        {
    119109                $this->load();
     110                //If evaluation fails, some references are incorrect.
     111                //We shouldn't save in this case. Instead - let the user know. This function returns false if the evaluation has failed.
     112                //TODO: Decide how to fix invalid references graciously.
     113                if(!$rToolObject->evaluate())
     114                        return false;
     115
    120116                $resourceSession = new Resource(SESSION . '/' . $rToolObject->uid);
    121117                //Remove the old value stored with the given id
     
    171167
    172168                $this->save();
     169                return true;
    173170        }
    174171}
  • Dev/trunk/classes/Survey.php

    r149 r186  
    2222                $this->creator = $creator;
    2323        $this->questions = $questions;
    24     }
     24        }
     25
     26        /**
     27         * function evaluate()
     28         * Evaluates the references
     29         */
     30        public function evaluate()
     31        {
     32                $dbi = new DatabaseInterface();
     33                if(is_string($this->creator))
     34                {
     35                        $result = $dbi->get("user", array("uid" => $this->creator));   
     36                        if(!isset($result[0]))
     37                                return false;
     38                        $this->creator = $result[0];
     39                }
     40
     41                if(!empty($this->questions) && is_string($this->questions[0]))
     42                {
     43                        $newQuestions = array();
     44                        foreach($this->questions as $question)
     45                        {
     46                                $result = $dbi->get("question", array("uid" => $question));
     47                                if(!isset($result[0]))
     48                                        return false;
     49                                $newQuestions[] = $result[0];                   
     50                        }
     51                        $this->questions = newQuestions;
     52                }
     53                return true;
     54        }
    2555}
    2656
  • Dev/trunk/classes/SurveyConnector.php

    r171 r186  
    5757            {
    5858                                $questions = $this->getQuestions($result['?uid']->label);
    59                                 $creator = $this->db->get("user", array("uid" => $result['?creator']->label));
     59                                $creator = $result['?creator']->label;
    6060                $surveys[] = new Survey($result['?uid']->label, $result['?title']->label, $result['?description']->label, $creator[0], $questions);
    6161            }
     
    7676                {
    7777                        $element = $iterator->next();
    78                         $result = $this->db->get("question", array("code" => $element->getLabelObject()));
    79                         $questions[] = $result[0];
     78                        $questions[] = $element->getLabelObject();
    8079                }
    8180                return $questions;
     
    9089        $this->load();
    9190       
     91                //If evaluation fails, some references are incorrect.
     92                //We shouldn't save in this case. Instead - let the user know. This function returns false if the evaluation has failed.
     93                //TODO: Decide how to fix invalid references graciously.
     94                if(!$rToolObject->evaluate())
     95                        return false;
     96
    9297        $resourceSurvey = new Resource(SURVEY.'/'.$rToolObject->uid);
    9398        //Remove the old value stored with the given id
     
    122127                $this->model->add(new Statement($resourceSurvey,$predicateQuid,$questionUid));
    123128            }
    124         }
    125         $this->save();
     129                }
     130                $this->save();
     131                return true;
    126132    }
    127133}
  • Dev/trunk/classes/User.php

    r131 r186  
    2424        $this->name = $name;
    2525        $this->password = $password;
    26     }
     26        }
     27
     28        /**
     29         * function evaluate()
     30         * Evaluates all the references of this object.
     31         */
     32        public function evaluate()
     33        {
     34                //Do nothing.
     35        }
     36
    2737}
    2838
  • Dev/trunk/classes/master.php

    r58 r186  
    1515session_start();  // Start the session
    1616
    17 
    18 
    1917function __autoload($class_name) {
    2018    require 'classes/' . $class_name . '.php';
     
    3129        exit();
    3230}
     31
     32
     33?>
  • Dev/trunk/getInfo.php

    r185 r186  
    3737    case "Session":
    3838        $returnString .= "<span class='property'>Title: </span><span class='value'>$result->title</span>";
    39         $returnString .= "<span class='property'>Created: </span><span class='value'>" . $result->datetime->format("H:i:s, d-m-Y") . " by " . $result->creator[0]->name . "</span>";
     39        $returnString .= "<span class='property'>Created: </span><span class='value'>" . $result->datetime->format("H:i:s, d-m-Y") . " by " . $result->creator->name . "</span>";
    4040        $cS = 0; $cD = 0; $cA = 0;
    4141        foreach ($result->pipeline as $step) {
Note: See TracChangeset for help on using the changeset viewer.