Beispiel #1
0
 /**
  * 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');
 }
Beispiel #4
0
 /**
  * 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');
 }
Beispiel #6
0
 /**
  * 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;
 }
Beispiel #8
0
 /**
  * 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');
 }
Beispiel #10
0
 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);
 }
Beispiel #11
0
 /**
  * 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);
 }
Beispiel #14
0
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);