/** * Fuegt Person zu Dokument hinzu. * * HTTP Parameter: * - Dokument-ID (document) * - Rolle (role) */ public function assignAction() { $docId = $this->getRequest()->getParam('document'); $document = $this->__documentsHelper->getDocumentForId($docId); if (!isset($document)) { return $this->_redirectTo('index', array('failure' => 'admin_document_error_novalidid'), 'documents', 'admin'); } if (!$this->getRequest()->isPost()) { // Neues Formular anzeigen $form = new Admin_Form_Document_PersonAdd(); $role = $this->getRequest()->getParam('role', 'author'); $form->setSelectedRole($role); $this->view->form = $form; } else { // POST verarbeiten $post = $this->getRequest()->getPost(); $form = new Admin_Form_Document_PersonAdd(); $form->populate($post); $result = $form->processPost($post, $post); switch ($result) { case Admin_Form_Document_PersonAdd::RESULT_SAVE: case Admin_Form_Document_PersonAdd::RESULT_NEXT: if ($form->isValid($post)) { $person = $form->getModel(); $person->store(); $linkProps = $form->getPersonLinkProperties($person->getId()); $editSession = new Admin_Model_DocumentEditSession($docId); if ($result == Admin_Form_Document_PersonAdd::RESULT_SAVE) { // Zurück zum Metadaten-Formular springen if ($editSession->getPersonCount() > 0) { // Link Informationen durch Session übermitteln $editSession->addPerson($linkProps); return $this->_redirectToAndExit('edit', null, 'document', 'admin', array('id' => $docId, 'continue' => 'addperson')); } else { // Link Informationen direkt als Parameter übergeben return $this->_redirectToAndExit('edit', null, 'document', 'admin', array_merge(array('id' => $docId, 'continue' => 'addperson'), $linkProps)); } } else { // Person in Session merken $editSession->addPerson($linkProps); // Neues Formular erzeugen $role = $form->getSelectedRole(); $form = new Admin_Form_Document_PersonAdd(); $form->setSelectedRole($role); } } else { // TODO Validierungsfehlernachricht für Formular anzeigen $form->addError($this->view->translate('admin_document_error_validation')); } break; case Admin_Form_Document_PersonAdd::RESULT_CANCEL: // Aktuelle Person nicht speichern, aber eventuell gemerkte Personen hinzufügen return $this->_redirectToAndExit('edit', null, 'document', 'admin', array('id' => $docId, 'continue' => 'addperson')); default: break; } $this->view->form = $form; } $this->view->document = $document; $this->view->documentAdapter = new Util_DocumentAdapter($this->view, $document); // Beim wechseln der Sprache würden Änderungen in editierten Felder verloren gehen $this->view->languageSelectorDisabled = true; $this->view->breadcrumbsDisabled = true; }
public function testGetPersonLinkProperties2() { $form = new Admin_Form_Document_PersonAdd(); $subform = $form->getSubForm(Admin_Form_Document_PersonAdd::SUBFORM_DOCUMENT); $subform->getElement('Role')->setValue('advisor'); $subform->getElement('AllowContact')->setChecked(false); $personProps = $form->getPersonLinkProperties(312); $this->assertNotNull($personProps); $this->assertEquals(4, count($personProps)); $this->assertArrayHasKey('person', $personProps); $this->assertEquals(312, $personProps['person']); $this->assertArrayHasKey('role', $personProps); $this->assertEquals('advisor', $personProps['role']); $this->assertArrayHasKey('contact', $personProps); $this->assertEquals(0, $personProps['contact']); $this->assertArrayHasKey('order', $personProps); $this->assertNull($personProps['order']); }