Esempio n. 1
0
 /**
  * Loads Model Pages
  */
 private function _loadModelPages()
 {
     $auth = Zend_Auth::getInstance();
     if ($auth->hasIdentity()) {
         $user = DbUserModel::findByUsername($auth->getIdentity());
     } else {
         throw new Exception("Hey, no loading pages without being logged in");
     }
     $rows = self::$pageTable->fetchRows('instanceID', $this->instance->instanceID, 'seqNumber', $this->instance->instanceID);
     $this->modelPages = array();
     foreach ($rows as $row) {
         $page = new PageModel(array('pageID' => $row->pageID, 'depth' => 'page'));
         $modelPage = new ModelPageModel(array('modelID' => $this->modelRow->modelID, 'pageID' => $row->pageID, 'depth' => $this->depth, 'instance' => $this->compareInstance));
         if ($user->hasAnyAccess($page)) {
             $this->modelPages[] = $modelPage;
         }
     }
 }
Esempio n. 2
0
 /**
  * Returns comparison information based on criteria arguments. Virtual questions always return an empty array.
  * 
  * @param array See argument array below
  * @return array Following this structure:
  *               array($criteria_term => array(array('question' => QuestionModel,
  *                                                   'messages' => array(string)
  *                                                  )
  *                                            )
  *               )
  */
 public function compare($args = array())
 {
     // Comparison criteria
     $args = array_merge(array('model_fail' => true, 'model_pass' => false, 'additional_information' => false), $args);
     if ($this->question->virtualQuestion) {
         return array();
     }
     if ($this->compareInstance->depth !== 'response') {
         throw new Exception('Comparison not possible since compare instance depth not set to response');
     }
     if ($this->depth !== 'response') {
         throw new Exception('Comparison not possible since depth not set to response');
     }
     $modelPageRows = self::$pageTable->fetchRows('pageID', $this->question->pageID, null, $this->question->instanceID);
     $modelPageRow = $modelPageRows[0];
     $pageGUID = $modelPageRow->pageGUID;
     $comparePageRows = self::$pageTable->fetchRows('pageGUID', $pageGUID, null, $this->compareInstance->instanceID);
     $comparePageRow = $comparePageRows[0];
     $compareQuestionRows = self::$questionTable->fetchRows('questionGUID', $this->question->questionGUID, null, $comparePageRow->pageID);
     $compareQuestionRow = $compareQuestionRows[0];
     $compareQuestion = new QuestionModel(array('questionID' => $compareQuestionRow->questionID, 'depth' => 'response'));
     $response = $compareQuestion->getResponse();
     $result = array();
     foreach ($args as $key => $value) {
         $result[$key] = array();
     }
     if ($args['model_fail'] || $args['model_pass']) {
         $messages = array();
         $remediationInfo = '';
         $pass = null;
         while ($modelResponse = $this->nextModelResponse()) {
             switch ($modelResponse->type) {
                 case "no preference":
                     break;
                 case "match":
                     if ($modelResponse->target == $response->responseText) {
                         $messages['pass'][] = "Matches " . $modelResponse->target;
                         $pass = true;
                     } else {
                         $messages['fail'][] = "Does not match " . $modelResponse->target;
                         $pass = false;
                         break;
                     }
                     break;
                 case "selected":
                     if ($modelResponse->promptText() == $response->promptText()) {
                         $messages['pass'][] = "Prompt selected: " . $modelResponse->promptText();
                         $pass = true;
                     } else {
                         $messages['fail'][] = "Prompt not selected: " . $modelResponse->promptText();
                         $pass = false;
                         break;
                     }
                     break;
                 case "not selected":
                     if ($modelResponse->promptText() == $response->promptText()) {
                         $messages['fail'][] = "Prompt selected: " . $modelResponse->promptText();
                         $pass = false;
                         break;
                     } else {
                         $messages['pass'][] = "Prompt not selected: " . $modelResponse->promptText();
                         $pass = true;
                     }
                     break;
                 case "or selected":
                     if ($modelResponse->promptText() == $response->promptText()) {
                         $messages['pass'][] = "Or prompt selected: " . $modelResponse->promptText();
                         $pass = true;
                     } else {
                         if ($pass !== TRUE) {
                             $messages['fail'][] = "And prompt not selected: " . $modelResponse->promptText();
                             $pass = false;
                         }
                     }
                     break;
                 case "remediation info":
                     $remediationInfo = $modelResponse->info;
                     break;
                 case "require attachment":
                     $file = new FileModel($compareQuestion);
                     if ($file->hasAttachment()) {
                         $pass = true;
                         $messages['pass'][] = 'Has attachment';
                     } else {
                         $pass = false;
                         $messages['fail'][] = 'No attachment';
                     }
                     break;
                 default:
                     throw new Exception('Unknown model response type');
             }
         }
         if ($pass === TRUE && $args['model_pass']) {
             $result['model_pass'][] = array('question' => $compareQuestion, 'messages' => $messages['pass'], 'remediation_info' => $remediationInfo);
         }
         if ($pass === FALSE && $args['model_fail']) {
             $result['model_fail'][] = array('question' => $compareQuestion, 'messages' => $messages['fail'], 'remediation_info' => $remediationInfo);
         }
     }
     if ($args['additional_information'] && (!$args['model_fail'] || count($result['model_fail']) === 0) && strlen($response->additionalInfo) > 0) {
         if ($args['model_pass'] === TRUE) {
             $result['model_pass'] = array();
         }
         $result['additional_information'][] = array('question' => $compareQuestion);
     }
     return $result;
 }