Exemplo n.º 1
0
 /**
  * Create a new InstanceModel object
  *
  * @param array containing instanceID or questionnaireName,questionnaireVersion,revision,instanceName
  */
 function __construct($args = array())
 {
     $args = array_merge(array('depth' => 'page'), $args);
     $this->depth = $args['depth'];
     if (!isset(self::$questionnaireTable)) {
         self::$questionnaireTable = QFrame_Db_Table::getTable('questionnaire');
     }
     if (!isset(self::$instanceTable)) {
         self::$instanceTable = QFrame_Db_Table::getTable('instance');
     }
     if (!isset(self::$pageTable)) {
         self::$pageTable = QFrame_Db_Table::getTable('page');
     }
     if (!isset(self::$questionTable)) {
         self::$questionTable = QFrame_Db_Table::getTable('question');
     }
     if (!isset(self::$ruleTable)) {
         self::$ruleTable = QFrame_Db_Table::getTable('rule');
     }
     if (!isset(self::$questionTypeTable)) {
         self::$questionTypeTable = QFrame_Db_Table::getTable('question_type');
     }
     if (!isset(self::$questionPromptTable)) {
         self::$questionPromptTable = QFrame_Db_Table::getTable('question_prompt');
     }
     if (!isset(self::$questionReferenceTable)) {
         self::$questionReferenceTable = QFrame_Db_Table::getTable('question_reference');
     }
     if (!isset(self::$referenceTable)) {
         self::$referenceTable = QFrame_Db_Table::getTable('reference');
     }
     if (!isset(self::$referenceDetailTable)) {
         self::$referenceDetailTable = QFrame_Db_Table::getTable('reference_detail');
     }
     if (!isset(self::$responseTable)) {
         self::$responseTable = QFrame_Db_Table::getTable('response');
     }
     if (!isset(self::$sectionReferenceTable)) {
         self::$sectionReferenceTable = QFrame_Db_Table::getTable('section_reference');
     }
     if (!isset(self::$pageReferenceTable)) {
         self::$pageReferenceTable = QFrame_Db_Table::getTable('page_reference');
     }
     if (!isset(self::$sectionTable)) {
         self::$sectionTable = QFrame_Db_Table::getTable('section');
     }
     if (isset($args['instanceID'])) {
         $rows = self::$instanceTable->fetchRows('instanceID', $args['instanceID']);
         // instance row assertion
         if (!isset($rows[0])) {
             throw new Exception('Instance not found [' . $args['instanceID'] . ']');
         }
         $this->instanceRow = $rows[0];
         $this->parent = new QuestionnaireModel(array('questionnaireID' => $this->instanceRow->questionnaireID, 'depth' => 'questionnaire'));
     } elseif (isset($args['questionnaireName']) && isset($args['questionnaireVersion']) && isset($args['revision']) && isset($args['instanceName'])) {
         $this->parent = new QuestionnaireModel(array('questionnaireName' => $args['questionnaireName'], 'questionnaireVersion' => $args['questionnaireVersion'], 'revision' => $args['revision'], 'depth' => 'questionnaire'));
         $where = self::$instanceTable->getAdapter()->quoteInto('questionnaireID = ?', $this->parent->questionnaireID);
         $where .= self::$instanceTable->getAdapter()->quoteInto(' AND instanceName = ?', $args['instanceName']);
         $this->instanceRow = self::$instanceTable->fetchRow($where);
         // instance row assertion
         if (!isset($this->instanceRow)) {
             throw new Exception('Instance not found');
         }
     } elseif (isset($args['questionnaireID']) && isset($args['instanceName'])) {
         $where = self::$instanceTable->getAdapter()->quoteInto('questionnaireID = ?', $args['questionnaireID']) . self::$instanceTable->getAdapter()->quoteInto(' AND instanceName = ?', $args['instanceName']);
         $this->instanceRow = self::$instanceTable->fetchRow($where);
         // instance row assertion
         if (!isset($this->instanceRow)) {
             throw new Exception('Instance not found');
         }
     } else {
         throw new InvalidArgumentException('Missing arguments to InstanceModel constructor');
     }
     if ($args['depth'] !== 'instance') {
         $this->_loadPages();
     }
 }