/** * Index action, either allows you to pick a model, or, if a model is selected already, * redirects to the edit action */ public function indexAction() { $session = new Zend_Session_Namespace('login'); if (isset($session->compareModelID)) { } $this->view->questionnaires = QuestionnaireModel::getAllQuestionnaires(); $this->view->selected = $this->_getParam('questionnaire'); if ($this->view->selected === null) { $this->view->models = null; } else { $questionnaire = new QuestionnaireModel(array('questionnaireID' => $this->view->selected, 'depth' => 'page')); $this->view->models = ModelModel::getAllModels($questionnaire); while ($instance = $questionnaire->nextInstance()) { while ($page = $instance->nextPage()) { if ($this->_user->hasAnyAccess($page)) { $allowedInstances[] = $instance; break; } } } if (isset($allowedInstances)) { $this->view->instances = $allowedInstances; } } }
/** * Refresh all questionnaire signatures */ private function refreshSignatures() { $this->auth(); $questionnaires = QuestionnaireModel::getAllQuestionnaires(); foreach ($questionnaires as $questionnaire) { $questionnaire->refreshSignature(); } QFrame_Db_Table::reset('questionnaire'); }
public function up() { // reset db metadata cache QFrame_Db_Table::scanDb(); QFrame_Db_Table::resetAll(); $this->auth(); $xml = file_get_contents(_path(PROJECT_PATH, 'xml', 'sig-4-0-questionnaire-definition.xml')); QuestionnaireModel::importXML($xml); InstanceModel::importXML($xml, 'Sample SIG Instance'); }
/** * Build the normal menu (list of pages) and return an array of menu elements * * @param string (optional) prefix for menu links * @return string */ protected function buildMenu($prefix = '/page/show/') { $menus = array(); if ($this->_instance !== null) { while ($page = $this->_instance->nextPage()) { $menus[] = array('label' => $page->pageHeader, 'url' => Zend_Controller_Front::getInstance()->getBaseUrl() . "{$prefix}{$page->pageID}", 'current' => isset($this->view->currentPageID) && $this->view->currentPageID == $page->pageID, 'locked' => LockModel::isLocked($page), 'page' => $page); } } return $menus; }
public function down() { // remove any default instances that exist $this->auth(); foreach (QuestionnaireModel::getAllQuestionnaires('instance') as $questionnaire) { $default = $questionnaire->getDefaultInstance(); if ($default !== null) { $default->delete(); } } // now actually remove the column $this->removeColumn('instance', 'hidden'); }
/** * Generates a drop down box listing all questionnaires * * @param integer current questionnaire (or null if no current questionnaire) * @param string element name * @return string */ public function questionnaireSelect($questionnaireID = null, $name = 'questionnaire') { if ($questionnaireID === null) { $options[0] = ' '; } $questionnaires = QuestionnaireModel::getAllQuestionnaires(); foreach ($questionnaires as $questionnaire) { $questionnaireName = $this->view->h($questionnaire->questionnaireName); $questionnaireVersion = $this->view->h($questionnaire->questionnaireVersion); $revision = $this->view->h($questionnaire->revision); if (!isset($options[$questionnaire->questionnaireID])) { $options[$questionnaire->questionnaireID] = "{$questionnaireName} {$questionnaireVersion}"; if ($revision != 1) { $options[$questionnaire->questionnaireID] .= " r. {$revision}"; } } } return $this->view->formSelect($name, $questionnaireID, null, $options); }
/** * Index action. Presents the dashboard to the user. */ public function indexAction() { $instanceID = $this->_hasParam('instance') ? $this->_getParam('instance') : null; $questionnaireID = $this->_hasParam('questionnaire') ? $this->_getParam('questionnaire') : null; if (is_numeric($instanceID) && $instanceID != 0) { $session = new Zend_Session_Namespace('login'); $session->instanceID = intVal($instanceID); $this->_redirector->gotoRouteAndExit(array('controller' => 'index'), null, true); } $questionnaires = QuestionnaireModel::getAllQuestionnaires('page'); $allowedInstances = array(); foreach ($questionnaires as $questionnaire) { while ($instance = $questionnaire->nextInstance()) { while ($page = $instance->nextPage()) { if ($this->_user->hasAnyAccess($page)) { $allowedInstances[] = $instance; break; } } } } $this->view->instances = $allowedInstances; $this->view->questionnaire = $questionnaireID; }
/** * Generates a signature for an questionnaire definition * * @param questionnaire definition xml dom object * @return string md5 hash */ public static function generateSignature($dom) { $questionnaireID = QuestionnaireModel::importXML($dom, array('SkipQuestionnaireExistCheck' => 1, 'SkipFileAttachments' => 1)); $instanceID = InstanceModel::importXML($dom, '_generateSignature', array('questionnaireID' => $questionnaireID)); $instance = new InstanceModel(array('instanceID' => $instanceID, 'depth' => 'instance')); $questionnaire = new QuestionnaireModel(array('questionnaireID' => $questionnaireID, 'depth' => 'questionnaire')); $signature = md5($instance->toXML(1)); $instance->delete(); $questionnaire->delete(); return $signature; }
public function testDeletingRemovesHiddenInstances() { $this->auth(); $xml = file_get_contents(PROJECT_PATH . "/test/data/xml/test1-questionnaire-definition.xml"); QuestionnaireModel::importXML($xml); $questionnaire = new QuestionnaireModel(array('questionnaireName' => 'Test1 Questionnaire', 'questionnaireVersion' => '3.00', 'revision' => 1, 'depth' => 'instance')); $instanceID = $questionnaire->getDefaultInstance()->instanceID; $questionnaire->delete(); QFrame_Db_Table::resetAll(); try { new InstanceModel(array('instanceID' => $instanceID)); } catch (Exception $e) { $this->assertTrue(preg_match('/^Instance not found/', $e->getMessage()) > 0); return; } $this->fail('Fetching hidden instance after questionnaire deletion should throw an exception'); }
public function testNoResponsesInstanceWithMergedResponsesExportEqualsResponsesInstanceExport() { $this->auth(); $xml = file_get_contents(PROJECT_PATH . "/test/data/xml/responses-questionnaire-definition.xml"); QuestionnaireModel::importXML($xml); InstanceModel::importXML($xml, 'Test1 Resp. Company', array('pageResponses' => array('all' => 1))); $instance1 = new InstanceModel(array('questionnaireName' => 'Test1 Questionnaire', 'questionnaireVersion' => '3.00', 'revision' => 1, 'instanceName' => 'Test1 Resp. Company')); $xml = file_get_contents(PROJECT_PATH . "/test/data/xml/no-responses-questionnaire-definition.xml"); InstanceModel::importXML($xml, 'Test1 Company', array('instanceID' => $instance1->instanceID)); $instance2 = new InstanceModel(array('questionnaireName' => 'Test1 Questionnaire', 'questionnaireVersion' => '3.00', 'revision' => 1, 'instanceName' => 'Test1 Company')); $xml1 = $instance1->toXML(1); $xml2 = $instance2->toXML(1); $xml1 = preg_replace("/Test1 Resp. Company/", "Test1 Company", $xml1); $xml1 = preg_replace("/<csi:responseDate>.+<\\/csi:responseDate>/", "", $xml1); $xml2 = preg_replace("/<csi:responseDate>.+<\\/csi:responseDate>/", "", $xml2); $this->assertEquals($xml1, $xml2); }
/** * Permissions action. Presents a list of permissions that can be assigned * to a role. */ public function permissionsAction() { // if this is a post request, just go ahead and update permissions if ($this->getRequest()->isPost()) { $this->updatePermissions(); } $session = new Zend_Session_Namespace('login'); $origQuestionnaireID = $session->questionnaireID; $origInstanceID = $session->instanceID; if ($this->_hasParam('questionnaire')) { $session->questionnaireID = $this->_getParam('questionnaire'); if ($this->_hasParam('instance') && is_numeric($this->_getParam('instance')) && $this->_getParam('instance') > 0) { $session->instanceID = $this->_getParam('instance'); } else { unset($session->instanceID); } if ($origQuestionnaireID != $this->_getParam('questionnaire')) { unset($session->instanceID); } $this->_redirector->gotoRoute(array('action' => 'permissions', 'id' => $this->_getParam('id'))); } $questionnaires = QuestionnaireModel::getAllQuestionnaires('page'); $allowedInstances = array(); foreach ($questionnaires as $questionnaire) { while ($instance = $questionnaire->nextInstance()) { while ($page = $instance->nextPage()) { if ($this->_user->hasAnyAccess($page)) { $allowedInstances[] = $instance; break; } } } } $this->view->instances = $allowedInstances; $this->view->questionnaire = $session->questionnaireID; $this->view->instance = $session->instanceID; $this->view->role = RoleModel::find($this->_getParam('id')); }
/** * Action for importing an instance */ public function importInstanceAction() { $session = new Zend_Session_Namespace('login'); $instanceID = $session->importResponsesInstanceID; $instanceName = $this->_getParam('instanceName'); $importResponses = $this->_getParam('importResponsesRadioButton'); $decryptID = $this->_hasParam('decryptID') ? $this->_getParam('decryptID') : null; if (is_numeric($instanceID)) { $session->importResponsesInstanceID = intVal($instanceID); } elseif (isset($importResponses) && $importResponses === 'importInstanceResponses') { $this->_redirector->gotoRouteAndExit(array('action' => 'index')); } $uploadErrors = array(UPLOAD_ERR_INI_SIZE => 'The uploaded file exceeds the upload_max_filesize directive in php.ini.', UPLOAD_ERR_FORM_SIZE => 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.', UPLOAD_ERR_PARTIAL => 'The uploaded file was only partially uploaded.', UPLOAD_ERR_NO_FILE => 'No file was uploaded.', UPLOAD_ERR_NO_TMP_DIR => 'Missing a temporary folder.', UPLOAD_ERR_CANT_WRITE => 'Failed to write file to disk.', UPLOAD_ERR_EXTENSION => 'File upload stopped by extension.'); $errorCode = $_FILES['instanceFile']['error']; if ($errorCode !== UPLOAD_ERR_OK) { if (isset($uploadErrors[$errorCode])) { throw new Exception($uploadErrors[$errorCode]); } else { throw new Exception("Unknown error uploading file."); } } $file = $_FILES['instanceFile']['tmp_name']; $filename = $_FILES['instanceFile']['name']; if (preg_match('/\\.enc$/i', $filename)) { if (!isset($decryptID) || $decryptID == 0) { throw new Exception('Key not specified for encrypted file'); } $crypto = new CryptoModel(array('cryptoID' => $decryptID)); if (preg_match('/\\.zip\\.enc$/i', $filename)) { $decrypted = $crypto->decrypt(file_get_contents($file), false); $tempfile = tempnam(PROJECT_PATH . DIRECTORY_SEPARATOR . 'tmp', 'zip'); unlink($tempfile); file_put_contents($tempfile, $decrypted); $import = new ZipArchiveModel(null, array('filename' => $tempfile)); } elseif (preg_match('/\\.xml.enc$/i', $filename)) { $decrypted = $crypto->decrypt(file_get_contents($file)); $import = $decrypted; } else { throw new Exception('Unrecognized file extension [' . $filename . ']'); } } elseif (preg_match('/\\.zip$/i', $filename)) { $import = new ZipArchiveModel(null, array('filename' => $file)); } elseif (preg_match('/\\.xml$/i', $filename)) { $import = file_get_contents($file); } else { throw new Exception('Unrecognized file extension [' . $filename . ']'); } // Import the questionnaire definition if it doesn't already exist QuestionnaireModel::importXML($import); if ($importResponses === 'importInstanceResponses') { $importResponsesInstanceID = $this->_getParam('importResponsesInstanceSelect'); InstanceModel::importXML($import, $instanceName, array('instanceID' => $importResponsesInstanceID)); } elseif ($importResponses === 'importXMLResponses') { InstanceModel::importXML($import, $instanceName, array('pageResponses' => array('all' => 1))); } else { InstanceModel::importXML($import, $instanceName); } $this->flash('notice', 'Import Complete'); $this->_redirector->gotoRoute(array('action' => 'index')); }
public function CompletedResponsesXMLSchemaDownloadAction() { $session = new Zend_Session_Namespace('login'); $questionnaire = new QuestionnaireModel(array('questionnaireID' => $session->dataQuestionnaireID, 'depth' => 'questionnaire')); $cryptoID = $this->_hasParam('cryptoID') ? $this->_getParam('cryptoID') : null; if (isset($cryptoID) && $cryptoID != 0) { $crypto = new CryptoModel(array('cryptoID' => $cryptoID)); $this->view->xml = $crypto->encrypt($questionnaire->fetchCompletedResponseSchema()); $this->view->cryptoID = $cryptoID; } else { $this->view->xml = $questionnaire->fetchCompletedResponseSchema(); } $this->view->setRenderLayout(false); }
include implode(DIRECTORY_SEPARATOR, array(dirname(__FILE__), '..', 'core', 'utility.php')); $core_path = _path(dirname(__FILE__), '..', 'core'); /* * Set up a bunch of path constants that the application will use to refer * to various application directories */ include _path(dirname(__FILE__), '..', 'core', 'paths.php'); /* * Deal with environment stuff including determining the current environment * and loading the configuration stuff for that environment */ include _path(CORE_PATH, 'env.php'); /* * Include file that contains pure configuration (used for testing) * as well as routing. Also include the file that sets up database * "stuff". */ include _path(CORE_PATH, 'database.php'); /* * Set up any dynamic properties (properties that rely on current environment configuration) */ include _path($core_path, 'dynamic.php'); // perform mock authentication $auth_adapter = new QFrame_Auth_Adapter('', '', true); $auth = Zend_Auth::getInstance(); $auth->authenticate($auth_adapter); $content = file_get_contents(_path(PROJECT_PATH, 'xml', 'sig-4-0-questionnaire-definition.xml')); QuestionnaireModel::importXML($content); $options['pageResponses']['all'] = 1; // import all responses InstanceModel::importXML($content, 'Acme Vendor', $options);