diff --git a/Admin/Routes/http.php b/Admin/Routes/http.php index 9d7e386..09312f9 100644 --- a/Admin/Routes/http.php +++ b/Admin/Routes/http.php @@ -27,4 +27,11 @@ return [ 'verb' => RouteVerb::GET, ], ], + + '^.*/api/news.*$' => [ + [ + 'dest' => '\Modules\News\Controller:apiNewsCreate', + 'verb' => RouteVerb::SET, + ], + ], ]; diff --git a/Controller.php b/Controller.php index 6e6a234..8c705c0 100644 --- a/Controller.php +++ b/Controller.php @@ -162,30 +162,30 @@ class Controller extends ModuleAbstract implements WebInterface } /** - * Creating news. - * - * @param array $articleElements Article elements - * - * @return NewsArticle + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data * * @since 1.0.0 * @author Dennis Eichhorn */ - public function createNews(...$articleElements) + public function apiNewsCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) { $newsArticle = new NewsArticle(); - $newsArticle->setCreatedBy($articleElements[0]); - $newsArticle->setCreatedAt($articleElements[1]); - $newsArticle->setPublish($articleElements[2]); - $newsArticle->setTitle($articleElements[3]); - $newsArticle->setPlain($articleElements[4]); - $newsArticle->setContent($articleElements[5]); - $newsArticle->setLanguage($articleElements[6]); - $newsArticle->setType($articleElements[7]); - $newsArticle->setStatus($articleElements[8]); - $newsArticle->setFeatured($articleElements[9]); + $newsArticle->setCreatedBy($requst->getAccount()->getId()); + $newsArticle->setCreatedAt(new \DateTime('now')); + $newsArticle->setPublish((bool) ($request->getData('publish') ?? false)); + $newsArticle->setTitle($request->getData('title') ?? ''); + $newsArticle->setPlain($request->getData('plain') ?? ''); + $newsArticle->setContent($request->getData('content') ?? ''); + $newsArticle->setLanguage($request->getData('lang') ?? $request->getL11n()->getLanguage()); + $newsArticle->setType((int) ($requst->getData('type') ?? 1)); + $newsArticle->setStatus((int) ($request->getData('status') ?? 1)); + $newsArticle->setFeatured((bool) ($request->getData('featured') ?? true)); - return NewsArticleMapper::create($newsArticle); + NewsArticleMapper::create($newsArticle); + + $response->set('news', $newsArticle->jsonSerialize()); } /** diff --git a/Models/NewsArticle.php b/Models/NewsArticle.php index 4e09e28..6da293b 100644 --- a/Models/NewsArticle.php +++ b/Models/NewsArticle.php @@ -29,7 +29,7 @@ use phpOMS\Localization\ISO639x1Enum; * @link http://orange-management.com * @since 1.0.0 */ -class NewsArticle +class NewsArticle implements ArrayableInterface, \JsonSerializable { /** @@ -362,4 +362,30 @@ class NewsArticle { $this->featured = $featured; } + + public function toArray() : array + { + return [ + 'id' => $this->id, + 'title' => $this->title, + 'plain' => $this->plain, + 'content' => $this->content, + 'type' => $this->type, + 'status' => $this->status, + 'featured' => $this->featured, + 'publish' => $this->publish, + 'createdAt' => $this->createdAt, + 'createdBy' => $this->createdBy, + ]; + } + + public function __toString() + { + return $this->jsonSerialize(); + } + + public function jsonSerialize() + { + return json_encode($this->toArray()); + } }