/** * Saves the given NewsCategory object to the db * * @param NewsCategory * @throws \Exception */ public function saveNewsCategory(NewsCategory $nc) { $data = ['name' => $nc->getName()]; $id = (int) $nc->getId(); if ($id == 0) { $this->tableGateway->insert($data); } else { if ($this->getNewsCategoryBy(['id' => $id])) { $this->tableGateway->update($data, ['id' => $id]); } else { throw new \Ȩxception('NewsCategory id does not exist'); } } }
/** * Handles a given form for the add and edit action * @return array Array for the view, containing the form and maybe id and errors */ private function handleForm(Request &$request, NewsCategoryForm &$form, NewsCategory &$nc, $id = 0) { $form->setInputFilter($nc->getInputFilter()); $post = array_merge_recursive($request->getPost()->toArray(), $request->getFiles()->toArray()); $form->setData($post); if ($form->isValid()) { $nc->exchangeArray($post); $old = $this->getNewsCategoryTable()->getNewsCategoryBy(['id' => $id]); if ($this->getNewsCategoryTable()->getNewsCategoryBy(['name' => $nc->getName()]) && ($id === 0 || $nc->getName() !== $old->getName())) { $errors['name'] = ['exists' => 'A category with this name already exists']; $form->get('name')->setMessages($errors); if (!$id) { return ['form' => $form, 'errors' => $errors]; } return ['form' => $form, 'errors' => $errors, 'id' => $id]; } $size = new Size(['min' => 20, 'max' => 20000]); $adapter = new Http(); $adapter->setValidators([$size], $post['path']); //Only throw error if a new category is created. New Categories need an image if (!$adapter->isValid() && $id === 0) { $errors = $adapter->getMessages(); return ['form' => $form, 'errors' => $errors]; } $dir = getcwd() . '/public/news_cat/'; //A file was given, so it will be saved on the server if ($adapter->isValid()) { if (!file_exists($dir)) { mkdir($dir); } $pic = $post['path']; $file = file_get_contents($pic['tmp_name']); file_put_contents($dir . $nc->getName() . '.png', $file); } else { //No new file was given, so update the filename to the new name rename($dir . $old->getName() . '.png', $dir . $nc->getName() . '.png'); } $this->getNewsCategoryTable()->saveNewsCategory($nc); return $this->redirect()->toRoute('newscategory'); } $errors = $form->getMessages(); if ($id) { return ['form' => $form, 'errors' => $errors, 'id' => $id]; } return ['form' => $form, 'errors' => $errors]; }