/** * 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(); } }