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