m('putDoArticle', new AnnoPut()); // } #[Inject] private ArticleDao $articleDao; #[Inject] private CategoryDao $categoryDao; function prepare(): void { if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') { header('Access-Control-Allow-Origin: *'); header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS'); header('Access-Control-Allow-Headers: Content-Type, Authorization'); header('Access-Control-Max-Age: 86400'); // cache preflight http_response_code(204); // No Content exit; } $this->getResponse()->setHeader("Access-Control-Allow-Headers: X-Requested-With, Content-Type,Accept, Origin"); $this->getResponse()->setHeader("Access-Control-Allow-Origin: http://localhost:4200"); $this->getResponse()->setHeader('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, HEAD, OPTIONS'); } /** * Gibt den {@see Article} mit der entsprechenden id im JSON Format zurück. * * * * @param int $articleId * @return void * @throws ForbiddenException if article 1 is queried (for testing). * @throws PageNotFoundException if Article could not be found. */ function getDoArticle(int $articleId): void { $article = $this->articleDao->getArticleById($articleId); if ($article === null) { throw new PageNotFoundException('Article does not exist'); } $this->sendJson($article,true); } /** * Diese Methode kannst du im Browser testen. Pfad: localhost/[ordner name vom projekt]/src-php/public/api/articles * * * * @param null | string $categoryName * @return void * @throws PageNotFoundException if category could not be found. */ function getDoArticles(string $categoryName = null): void { if ($categoryName === null) { $articles = $this->articleDao->getArticles(); $this->sendJson($articles); return; } $articles = $this->articleDao->getArticlesByCategoryName($categoryName); if (empty($articles)) { throw new PageNotFoundException('category name was not found!'); } $this->sendJson($articles); } /** * Speichere einen Artikel. Es wird die id (fremdschlüssel) der kategorie übergeben. * Dieses wird in den namen der kategorie aufgelöst * * * * Nenne die Methode {@see saveArticle(Article $article)} * * * @param ParamBody $body * @return void * @throws BadRequestException if category is not 'Travel', 'Health' oder 'Finance' * @throws StatusException */ function postDoArticle(ParamBody $body): void { $httpData = $body->parseJsonToHttpData(); $title = $httpData->reqString('title'); $text = $httpData->optString('text','',true); $categoryId = $httpData->reqInt('categoryId'); $category = $this->categoryDao->getCategoryById($categoryId); if ($category === null) { throw new BadRequestException('category id has no corresponding category!'); } $article = new Article(); $article->setCategory($category); $article->setTitle($title); $article->setText($text ); $this->beginTransaction(); $this->articleDao->saveArticle($article); $this->commit(); $this->sendJson($article); // echo 'article saved successfully.'; } /** * Editiere einen Artikel. * * * * @param int $articleId * @param ParamBody $body * @return void * @throws BadRequestException if category is not 'Travel', 'Health' oder 'Finance' * @throws PageNotFoundException * @throws StatusException */ function putDoArticle(int $articleId, ParamBody $body): void { $this->beginTransaction(); $article = $this->articleDao->getArticleById($articleId); if ($article === null) { throw new PageNotFoundException('article does not exist'); } $httpData = $body->parseJsonToHttpData(); $title = $httpData->optString('title'); $text = $httpData->optString('text'); $categoryId = $httpData->reqInt('categoryId'); $category = $this->categoryDao->getCategoryById($categoryId); if ($category === null) { throw new PageNotFoundException('category id has no corresponding category!'); } if ($title !== null) { $article->setTitle($title); } if ($text !== null) { $article->setText($text ); } $article->setCategory($category); // $this->articleDao->saveArticle($article); $this->commit(); $this->sendJson($article); // echo 'article with id: '.$articleId.' edited successfully.'; } /** * Löscht den {@see Article} mit der dazugehörigen Id. * *