Exemplo n.º 1
0
 /**
  * Edit Note
  *
  * @return \Zend\View\Model\ViewModel
  */
 public function editAction()
 {
     $id = $this->getEvent()->getRouteMatch()->getParam('id');
     if (empty($id) || !is_numeric($id)) {
         return $this->redirect()->toRoute('secretary/note');
     }
     // Permission Check
     $permissionCheck = $this->noteService->checkNoteEditPermission($this->identity->getId(), $id);
     if (false === $permissionCheck) {
         // @todo log stuff here?
         return $this->redirect()->toRoute('secretary/note');
     }
     $viewModel = new ViewModel();
     $keyRequestForm = $this->getKeyRequestForm($id, 'edit');
     // View Vars
     $viewModel->setVariable('showKeyRequestForm', true);
     $viewModel->setVariable('keyRequestForm', $keyRequestForm);
     // Render Key Request form
     if (!$this->getRequest()->isPost()) {
         return $viewModel;
     }
     // Key Request Form Validation
     if ($this->getRequest()->isPost() && $this->getRequest()->getPost('key-request')) {
         $keyRequestForm->setData($this->getRequest()->getPost());
         if (!$keyRequestForm->isValid()) {
             return new ViewModel($viewModel);
         }
         // Do Note Encryption
         try {
             $formValues = $keyRequestForm->getData();
             $noteDecrypted = $this->getNoteService()->doNoteEncryption($id, $this->identity->getId(), $formValues['key'], $formValues['passphrase']);
         } catch (\LogicException $e) {
             $viewModel->setVariable('msg', array('error', $e->getMessage()));
             return $viewModel;
         }
     }
     $noteRecord = $this->getNoteService()->fetchNote($id);
     $groupMembers = null;
     if (false === $noteRecord->getPrivate()) {
         $groupMembers = $this->groupService->fetchNoteGroupMembers($noteRecord->getId(), $noteRecord->getGroup()->getId(), $this->identity->getId());
         $viewModel->setVariable('groupMembers', $groupMembers);
         $groupMembersUnselected = $this->groupService->fetchNoteGroupMembersUnselected($noteRecord->getId(), $noteRecord->getGroup()->getId(), $this->identity->getId());
         $viewModel->setVariable('groupMembersUnselected', $groupMembersUnselected);
     }
     $form = $this->getNoteForm($noteRecord, 'edit', $id, $groupMembers);
     $viewModel->setVariable('noteForm', $form);
     $viewModel->setVariable('editMode', true);
     $viewModel->setVariable('noteRecord', $noteRecord);
     $viewModel->setVariable('noteFormLegend', 'Modify Note');
     $viewModel->setVariable('showKeyRequestForm', false);
     if (!$this->getRequest()->getPost('title')) {
         $form->get('content')->setValue($noteDecrypted['decrypted']);
         return $viewModel;
     }
     if ($this->getRequest()->getPost('title')) {
         $form->setData($this->getRequest()->getPost());
         if ($form->isValid()) {
             $group = $this->getRequest()->getPost('groupHidden');
             if (!empty($group)) {
                 if ($group != $noteRecord->getGroup()->getId()) {
                     $this->events->trigger('logViolation', __METHOD__ . '::l42', array('message' => sprintf('User: %s wants to change GroupID from: %s to: %s', $this->identity->getEmail(), $noteRecord->getGroup()->getId(), $group)));
                     $viewVars['msg'] = array('error', 'You cannot change the group');
                     return new ViewModel($viewVars);
                 }
                 $members = $this->getRequest()->getPost('members');
                 if (empty($members)) {
                     $viewVars['msg'] = array('error', 'Please select a group member to share note with');
                     return new ViewModel($viewVars);
                 }
                 $this->noteService->updateGroupNote($this->identity, $form->getData(), $noteRecord->getGroup()->getId(), $members);
             } else {
                 $this->noteService->updateUserNote($this->identity, $form->getData());
             }
             $this->flashMessenger()->addSuccessMessage($this->translator->translate('Note was updated successfully'));
             return $this->redirect()->toRoute('secretary/note');
         }
     }
     $viewModel->setVariable('msg', 'An error occurred');
     return $viewModel;
 }