Пример #1
0
 /**
  * Saves the page currently being edited
  */
 public function saveAction()
 {
     try {
         $page = new PageModel(array('pageID' => $this->_getParam('id'), 'depth' => 'page'));
         $lock = $this->lockPage($page, 'edit');
         $attachments = array();
         $auth = Zend_Auth::getInstance();
         $user = DbUserModel::findByUsername($auth->getIdentity());
         $responses = array();
         foreach ($this->_getAllParams() as $key => $value) {
             // if the element's name begins 'qXXX' where X is a digit
             if (preg_match('/^q(\\d+)(.*)$/', $key, $matches)) {
                 $questionID = intval($matches[1]);
                 $remainder = $matches[2];
                 // if the element name consists of *only* 'qXXX' or qXXX_mXXX for multiple select question types
                 if ($remainder == '' || preg_match('/^_m(\\d+)$/', $remainder)) {
                     $q = new QuestionModel(array('questionID' => $questionID));
                     $response = $q->getResponse();
                     if ($response->state == 2) {
                         $this->flash('error', 'You cannot modify a response that has been approved');
                         $this->_redirector->gotoRouteAndExit(array('action' => 'view', 'id' => $page->pageID));
                     }
                     if (strlen($value) > 0) {
                         $responses[$questionID]['value'][] = $value;
                     }
                 } elseif ($remainder == "_addl_mod" && intval($this->_getParam("q{$questionID}_addl_mod"))) {
                     $responses[$questionID]['addl'] = $this->_getParam("q{$questionID}_addl");
                 } elseif ($remainder == "_privateNote_mod" && intval($this->_getParam("q{$questionID}_privateNote_mod"))) {
                     $responses[$questionID]['pNote'] = $this->_getParam("q{$questionID}_privateNote");
                 } elseif ($remainder == '_attachments') {
                     $question = new QuestionModel(array('questionID' => $questionID));
                     foreach ($value as $file) {
                         $fileModel = new FileModel($question);
                         $properties = Spyc::YAMLLoad(PROJECT_PATH . '/tmp/.' . $file);
                         $fileModel->storeFilename(PROJECT_PATH . '/tmp/' . $file, $properties);
                     }
                 } elseif (preg_match('/^_file(\\d+)_delete$/', $remainder, $matches) && $value === 'true') {
                     $question = new QuestionModel(array('questionID' => $questionID));
                     $fileModel = new FileModel($question);
                     $fileModel->delete(intval($matches[1]));
                 }
             }
         }
         foreach ($responses as $questionID => $data) {
             $q = new QuestionModel(array('questionID' => $questionID));
             $response = $q->getResponse();
             if (isset($data['value'])) {
                 $response->responseText = join(',', $data['value']);
             }
             if (isset($data['addl'])) {
                 $response->additionalInfo = $data['addl'];
             }
             if (isset($data['pNote'])) {
                 $response->privateNote = $data['pNote'];
             }
             $response->save($user);
         }
         /* If there are any file uploads that didn't auto-upload before the user saved */
         foreach ($_FILES as $name => $file) {
             if ($file['size'] > 0) {
                 $question = new QuestionModel(array('questionID' => intVal($name)));
                 $fileModel = new FileModel($question);
                 $properties = array('filename' => $file['name'], 'mime' => $file['type']);
                 $fileModel->storeFilename($file['tmp_name'], $properties);
             }
         }
         $page = new PageModel(array('pageID' => $this->_getParam('id'), 'depth' => 'response'));
         $page->save();
         $instance = new InstanceModel(array('instanceID' => $page->instanceID, 'depth' => 'page'));
         $instance->save();
     } catch (Exception $e) {
         $this->view->error = $e->getMessage();
     }
     $this->view->setRenderLayout(false);
 }
Пример #2
0
 public function testFetchObjectIdsByInstance()
 {
     $properties = array('filename' => 'sample.pdf', 'mime' => 'application/pdf');
     $filesNoId = new FileModel(new NoInstanceFoo());
     $filesNoId->storeFilename(TEST_PATH . '/fixtures/sample.pdf', $properties);
     $filesId = new FileModel(new InstanceFoo());
     $filesId->storeFilename(TEST_PATH . '/fixtures/sample.pdf', $properties);
     $objectIds = FileModel::fetchObjectIdsByInstance(1);
     $this->assertTrue(is_array($objectIds));
     $this->assertEquals(count($objectIds), 1);
     $this->assertTrue(isset($objectIds['InstanceFoo']));
     $this->assertTrue(is_array($objectIds['InstanceFoo']));
     $this->assertEquals(count($objectIds['InstanceFoo']), 1);
 }