/** @noinspection PhpUnusedPrivateMethodInspection * @param Request $request * * @return bool|mixed * @throws PermissionRequiredException * @throws exceptions\LoginRequiredException */ private function addCitation(Request $request) { if (!$this->auth->checkPermission(Auth::EDIT_PUBLICATION)) { throw new PermissionRequiredException(Auth::EDIT_PUBLICATION); } // Here I did not used a CitationModel validator, since this would // require publication_id to be present $id = Validator::sanitizeNumber($request->get('id')); if (!$id) { throw new UnexpectedValueException(); } $validator = new Validator($this->db); $validator->addRule('citation_id', 'number', true, 'Citation is required but invalid'); if ($validator->validate($request->post())) { $data = $validator->getSanitizedResult(); try { $this->model->addCitation($id, $data['citation_id']); return true; } catch (DBDuplicateEntryException $e) { $this->errors[] = 'This citation is already assigned to this publication'; return false; } } else { $this->errors = array_merge($this->errors, $validator->getErrors()); return false; } }