Example #1
0
 /**
  * Update article.
  *
  * @return HttpResponse|ViewModel
  */
 public function updateAction()
 {
     $sm = $this->getServiceLocator();
     $userService = $sm->get('Stjornvisi\\Service\\User');
     $articleService = $sm->get('Stjornvisi\\Service\\Article');
     $auth = new AuthenticationService();
     $access = $userService->getType($auth->hasIdentity() ? $auth->getIdentity()->id : null);
     //ACCESS GRANTED
     //
     if ($access->is_admin) {
         $id = $this->params()->fromRoute('id', 0);
         //ARTICLE FOUND
         //	article in database
         if (($article = $articleService->get($this->params()->fromRoute('id', 0))) != false) {
             $form = new ArticleForm($articleService->fetchAllAuthors());
             $form->setAttribute('action', $this->url()->fromRoute('greinar/update', ['id' => $id]));
             //POST
             //	post request
             if ($this->request->isPost()) {
                 $form->setData($this->request->getPost());
                 //VALID FORM
                 //	form is valid
                 if ($form->isValid()) {
                     $articleService->update($id, $form->getData());
                     return $this->redirect()->toRoute('greinar/index', ['id' => $id]);
                     //INVALID FORM
                     //	form is invalid
                 } else {
                     $this->getResponse()->setStatusCode(400);
                     return new ViewModel(['form' => $form]);
                 }
                 //QUERY
                 //	get request
             } else {
                 $form->bind(new \ArrayObject($article));
                 return new ViewModel(['form' => $form]);
             }
             //NOT FOUND
             //	404
         } else {
             return $this->notFoundAction();
         }
         //ACCESS DENIED
         //
     } else {
         $this->getResponse()->setStatusCode(401);
         $model = new ViewModel();
         $model->setTemplate('error/401');
         return $model;
     }
 }