From 0c954cf19ff4f9b1d81e7e4a89ab99136276c5f6 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sat, 17 Feb 2018 18:31:04 +0100 Subject: [PATCH] docblocks+api functions --- Controller.php | 164 +++++++++++++++++++++++++++++++++++++++-- Models/NewsArticle.php | 97 +++++++++++++++++++----- 2 files changed, 236 insertions(+), 25 deletions(-) diff --git a/Controller.php b/Controller.php index ab50195..09133c4 100644 --- a/Controller.php +++ b/Controller.php @@ -238,6 +238,15 @@ class Controller extends ModuleAbstract implements WebInterface return $view; } + /** + * Validate news create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ private function validateNewsCreate(RequestAbstract $request) : array { $val = []; @@ -263,13 +272,73 @@ class Controller extends ModuleAbstract implements WebInterface } /** + * Api method to create news article + * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param mixed $data Generic data + * + * @return void * * @since 1.0.0 */ - public function apiNewsCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) + public function apiNewsUpdate(RequestAbstract $request, ResponseAbstract $response, $data = null) /* : void */ + { + if (!$this->app->accountManager->get($request->getHeader()->getAccount())->hasPermission( + PermissionType::MODIFY, $this->app->orgId, $this->app->appName, self::MODULE_ID, PermissionState::ARTICLE) + ) { + $response->set('news_update', null); + $response->getHeader()->setStatusCode(RequestStatusCode::R_403); + return; + } + + $news = $this->updateNewsFromRequest($request); + + NewsArticleMapper::update($news); + $response->set($request->__toString(), [ + 'status' => 'ok', + 'title' => 'Group', + 'message' => 'Group successfully updated.', + 'response' => $news->jsonSerialize() + ]); + } + + /** + * Method to update news from request. + * + * @param RequestAbstract $request Request + * + * @return NewsArticle + * + * @since 1.0.0 + */ + private function updateNewsFromRequest(RequestAbstract $request) : NewsArticle + { + $newsArticle = NewsArticleMapper::get((int) $request->getData('id')); + $newsArticle->setPublish(new \DateTime((string) ($request->getData('publish') ?? $newsArticle->getPublish()->format('Y-m-d H:i:s')))); + $newsArticle->setTitle((string) ($request->getData('title') ?? $newsArticle->getTitle())); + $newsArticle->setPlain($request->getData('plain') ?? $newsArticle->getPlain()); + $newsArticle->setContent(Markdown::parse((string) ($request->getData('plain') ?? $newsArticle->getPlain()))); + $newsArticle->setLanguage(strtolower((string) ($request->getData('lang') ?? $newsArticle->getLanguage()))); + $newsArticle->setType((int) ($request->getData('type') ?? $newsArticle->getType())); + $newsArticle->setStatus((int) ($request->getData('status') ?? $newsArticle->getStatus())); + $newsArticle->setFeatured((bool) ($request->getData('featured') ?? $newsArticle->isFeatured())); + + return $newsArticle; + } + + /** + * Api method to create news article + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @since 1.0.0 + */ + public function apiNewsCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) /* : void */ { if (!$this->app->accountManager->get($request->getHeader()->getAccount())->hasPermission( PermissionType::CREATE, $this->app->orgId, $this->app->appName, self::MODULE_ID, PermissionState::ARTICLE) @@ -291,15 +360,22 @@ class Controller extends ModuleAbstract implements WebInterface $response->set($request->__toString(), $newsArticle->jsonSerialize()); } + /** + * Method to create news article from request. + * + * @param RequestAbstract $request Request + * + * @return NewsArticle + * + * @since 1.0.0 + */ private function createNewsArticleFromRequest(RequestAbstract $request) : NewsArticle { - $mardkownParser = new Markdown(); - $newsArticle = new NewsArticle(); $newsArticle->setCreatedBy($request->getHeader()->getAccount()); $newsArticle->setPublish(new \DateTime((string) ($request->getData('publish') ?? 'now'))); $newsArticle->setTitle((string) ($request->getData('title') ?? '')); - $newsArticle->setPlain($mardkownParser->parse($request->getData('plain') ?? '')); + $newsArticle->setPlain($request->getData('plain') ?? ''); $newsArticle->setContent(Markdown::parse((string) ($request->getData('plain') ?? ''))); $newsArticle->setLanguage(strtolower((string) ($request->getData('lang') ?? $request->getHeader()->getL11n()->getLanguage()))); $newsArticle->setType((int) ($request->getData('type') ?? 1)); @@ -309,6 +385,45 @@ class Controller extends ModuleAbstract implements WebInterface return $newsArticle; } + /** + * Api method for getting a news article + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @since 1.0.0 + */ + public function apiNewsGet(RequestAbstract $request, ResponseAbstract $response, $data = null) /* : void */ + { + if (!$this->app->accountManager->get($request->getHeader()->getAccount())->hasPermission( + PermissionType::READ, $this->app->orgId, $this->app->appName, self::MODULE_ID, PermissionState::News) + ) { + $response->set('news_read', null); + $response->getHeader()->setStatusCode(RequestStatusCode::R_403); + return; + } + + $news = NewsArticleMapper::get((int) $request->getData('id')); + $response->set($request->__toString(), [ + 'status' => 'ok', + 'title' => 'News', + 'message' => 'News successfully returned.', + 'response' => $news->jsonSerialize() + ]); + } + + /** + * Validate badge create request + * + * @param RequestAbstract $request Request + * + * @return array + * + * @since 1.0.0 + */ private function validateBadgeCreate(RequestAbstract $request) : array { $val = []; @@ -321,13 +436,17 @@ class Controller extends ModuleAbstract implements WebInterface } /** + * Api method to create Badge + * * @param RequestAbstract $request Request * @param ResponseAbstract $response Response * @param mixed $data Generic data + * + * @return void * * @since 1.0.0 */ - public function apiBadgeCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) + public function apiBadgeCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) /* : void */ { if (!$this->app->accountManager->get($request->getHeader()->getAccount())->hasPermission( PermissionType::CREATE, $this->app->orgId, $this->app->appName, self::MODULE_ID, PermissionState::BADGE) @@ -349,6 +468,15 @@ class Controller extends ModuleAbstract implements WebInterface $response->set('badge', $badge->jsonSerialize()); } + /** + * Method to create badge from request. + * + * @param RequestAbstract $request Request + * + * @return NewsArticle + * + * @since 1.0.0 + */ private function createBadgeFromRequest(RequestAbstract $request) : Badge { $mardkownParser = new Markdown(); @@ -409,7 +537,18 @@ class Controller extends ModuleAbstract implements WebInterface return NewsArticleMapper::getAllByQuery($query); } - public function apiDeleteNewsArticle(RequestAbstract $request, ResponseAbstract $response, $data = null) + /** + * Api method to delete news article + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @since 1.0.0 + */ + public function apiDeleteNewsArticle(RequestAbstract $request, ResponseAbstract $response, $data = null) /* : void */ { if (!$this->app->accountManager->get($request->getHeader()->getAccount())->hasPermission( PermissionType::DELETE, $this->app->orgId, $this->app->appName, self::MODULE_ID, PermissionState::ARTICLE) @@ -423,7 +562,18 @@ class Controller extends ModuleAbstract implements WebInterface $response->set('news_delete', (int) $request->getData('id')); } - public function apiDeleteNewsBadge(RequestAbstract $request, ResponseAbstract $response, $data = null) + /** + * Api method to delete badge + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return void + * + * @since 1.0.0 + */ + public function apiDeleteNewsBadge(RequestAbstract $request, ResponseAbstract $response, $data = null) /* : void */ { if (!$this->app->accountManager->get($request->getHeader()->getAccount())->hasPermission( PermissionType::DELETE, $this->app->orgId, $this->app->appName, self::MODULE_ID, PermissionState::BADGE) diff --git a/Models/NewsArticle.php b/Models/NewsArticle.php index 17071fc..16fd1ad 100644 --- a/Models/NewsArticle.php +++ b/Models/NewsArticle.php @@ -136,17 +136,35 @@ class NewsArticle implements ArrayableInterface, \JsonSerializable $this->publish = new \DateTime('now'); } + /** + * Get badges + * + * @return array + * + * @since 1.0.0 + */ public function getBadges() : array { return $this->badges; } + /** + * Add badge + * + * @param Badge $badge Badge to add + * + * @return void + * + * @since 1.0.0 + */ public function addBadge(Badge $badge) /* : void */ { $this->badges[] = $badge; } /** + * Get content + * * @return string * * @since 1.0.0 @@ -157,19 +175,23 @@ class NewsArticle implements ArrayableInterface, \JsonSerializable } /** - * @param string $content + * Set content + * + * @param string $content News article content * * @return void * * @since 1.0.0 */ - public function setContent(string $content) + public function setContent(string $content) /* : void */ { $this->content = $content; } /** - * @param string $plain + * Set plain content + * + * @param string $plain Plain/raw content * * @return void * @@ -181,6 +203,8 @@ class NewsArticle implements ArrayableInterface, \JsonSerializable } /** + * Get plain/raw content + * * @return string * * @since 1.0.0 @@ -191,6 +215,8 @@ class NewsArticle implements ArrayableInterface, \JsonSerializable } /** + * Get date of creation + * * @return \DateTime * * @since 1.0.0 @@ -201,6 +227,8 @@ class NewsArticle implements ArrayableInterface, \JsonSerializable } /** + * Get id + * * @return int * * @since 1.0.0 @@ -211,6 +239,8 @@ class NewsArticle implements ArrayableInterface, \JsonSerializable } /** + * Get news language + * * @return string * * @since 1.0.0 @@ -221,6 +251,8 @@ class NewsArticle implements ArrayableInterface, \JsonSerializable } /** + * Get publish date + * * @return \DateTime * * @since 1.0.0 @@ -231,13 +263,15 @@ class NewsArticle implements ArrayableInterface, \JsonSerializable } /** - * @param string $language + * Set language + * + * @param string $language News article language * * @return void * * @since 1.0.0 */ - public function setLanguage(string $language) + public function setLanguage(string $language) /* : void */ { if (!ISO639x1Enum::isValidValue($language)) { throw new InvalidEnumValue($language); @@ -247,19 +281,23 @@ class NewsArticle implements ArrayableInterface, \JsonSerializable } /** - * @param \DateTime $publish + * Set publish date + * + * @param \DateTime $publish Publish date * * @return void * * @since 1.0.0 */ - public function setPublish(\DateTime $publish) + public function setPublish(\DateTime $publish) /* : void */ { $this->publish = $publish; } /** - * @return int + * Get created by + * + * @return mixed * * @since 1.0.0 */ @@ -269,11 +307,15 @@ class NewsArticle implements ArrayableInterface, \JsonSerializable } /** - * @param int $id + * Set created by + * + * @param int $id Created by + * + * @return void * * @since 1.0.0 */ - public function setCreatedBy($id) + public function setCreatedBy($id) /* : void */ { $this->createdBy = $id; } @@ -289,18 +331,22 @@ class NewsArticle implements ArrayableInterface, \JsonSerializable } /** - * @param string $title + * Set news article title + * + * @param string $title News article title * * @return mixed * * @since 1.0.0 */ - public function setTitle(string $title) + public function setTitle(string $title) /* : void */ { $this->title = $title; } /** + * Get news article type + * * @return int * * @since 1.0.0 @@ -311,13 +357,15 @@ class NewsArticle implements ArrayableInterface, \JsonSerializable } /** - * @param int $type + * Set news article type + * + * @param int $type News article type * * @return void * * @since 1.0.0 */ - public function setType(int $type) + public function setType(int $type) /* : void */ { if (!NewsType::isValidValue($type)) { throw new InvalidEnumValue((string) $type); @@ -327,6 +375,8 @@ class NewsArticle implements ArrayableInterface, \JsonSerializable } /** + * Get news article status + * * @return int * * @since 1.0.0 @@ -337,7 +387,7 @@ class NewsArticle implements ArrayableInterface, \JsonSerializable } /** - * @param int $status + * @param int $status News status * * @return void * @@ -345,7 +395,7 @@ class NewsArticle implements ArrayableInterface, \JsonSerializable * * @since 1.0.0 */ - public function setStatus(int $status) + public function setStatus(int $status) /* : void */ { if (!NewsStatus::isValidValue($status)) { throw new InvalidEnumValue((string) $status); @@ -365,17 +415,22 @@ class NewsArticle implements ArrayableInterface, \JsonSerializable } /** - * @param bool $featured + * Set featured + * + * @param bool $featured Is featured * * @return void * * @since 1.0.0 */ - public function setFeatured(bool $featured) + public function setFeatured(bool $featured) /* : void */ { $this->featured = $featured; } + /** + * {@inheritdoc} + */ public function toArray() : array { return [ @@ -392,11 +447,17 @@ class NewsArticle implements ArrayableInterface, \JsonSerializable ]; } + /** + * {@inheritdoc} + */ public function __toString() { return json_encode($this->toArray()); } + /** + * {@inheritdoc} + */ public function jsonSerialize() { return $this->toArray();