From c1b8b582d45f48d53def099df52fce3257c176d4 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sun, 2 Oct 2016 12:07:05 +0200 Subject: [PATCH 01/12] Core adjustments for pending issues --- Admin/Routes/Web/Api.php | 12 ++++++++ Admin/Routes/Web/Backend.php | 7 ----- Controller.php | 6 ++-- Models/NewsArticle.php | 33 +++++++++++++++++++++ Models/NewsArticleMapper.php | 44 ++++++++++++++++------------ Theme/Backend/news-create.tpl.php | 44 ++++++++++++---------------- Theme/Backend/news-dashboard.tpl.php | 28 +++++++++--------- Theme/backend/news-dashboard.tpl.php | 28 +++++++++--------- 8 files changed, 121 insertions(+), 81 deletions(-) create mode 100644 Admin/Routes/Web/Api.php diff --git a/Admin/Routes/Web/Api.php b/Admin/Routes/Web/Api.php new file mode 100644 index 0000000..e8069bf --- /dev/null +++ b/Admin/Routes/Web/Api.php @@ -0,0 +1,12 @@ + [ + [ + 'dest' => '\Modules\News\Controller:apiNewsCreate', + 'verb' => RouteVerb::SET, + ], + ], +]; diff --git a/Admin/Routes/Web/Backend.php b/Admin/Routes/Web/Backend.php index 09312f9..9d7e386 100644 --- a/Admin/Routes/Web/Backend.php +++ b/Admin/Routes/Web/Backend.php @@ -27,11 +27,4 @@ return [ 'verb' => RouteVerb::GET, ], ], - - '^.*/api/news.*$' => [ - [ - 'dest' => '\Modules\News\Controller:apiNewsCreate', - 'verb' => RouteVerb::SET, - ], - ], ]; diff --git a/Controller.php b/Controller.php index 8c705c0..5082971 100644 --- a/Controller.php +++ b/Controller.php @@ -172,14 +172,14 @@ class Controller extends ModuleAbstract implements WebInterface public function apiNewsCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) { $newsArticle = new NewsArticle(); - $newsArticle->setCreatedBy($requst->getAccount()->getId()); + $newsArticle->setCreatedBy($request->getAccount()->getId()); $newsArticle->setCreatedAt(new \DateTime('now')); - $newsArticle->setPublish((bool) ($request->getData('publish') ?? false)); + $newsArticle->setPublish(new \DateTime($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->setType((int) ($request->getData('type') ?? 1)); $newsArticle->setStatus((int) ($request->getData('status') ?? 1)); $newsArticle->setFeatured((bool) ($request->getData('featured') ?? true)); diff --git a/Models/NewsArticle.php b/Models/NewsArticle.php index 6da293b..92edd1e 100644 --- a/Models/NewsArticle.php +++ b/Models/NewsArticle.php @@ -15,6 +15,7 @@ */ namespace Modules\News\Models; +use phpOMS\Contract\ArrayableInterface; use phpOMS\Datatypes\Exception\InvalidEnumValue; use phpOMS\Localization\ISO639x1Enum; @@ -56,6 +57,14 @@ class NewsArticle implements ArrayableInterface, \JsonSerializable */ private $content = ''; + /** + * Unparsed. + * + * @var string + * @since 1.0.0 + */ + private $plain = ''; + /** * News type. * @@ -148,6 +157,30 @@ class NewsArticle implements ArrayableInterface, \JsonSerializable $this->content = $content; } + /** + * @param string $plain + * + * @return void + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function setPlain(string $plain) + { + $this->plain = $plain; + } + + /** + * @return string + * + * @since 1.0.0 + * @author Dennis Eichhorn + */ + public function getPlain() : string + { + return $this->plain; + } + /** * @return \DateTime * diff --git a/Models/NewsArticleMapper.php b/Models/NewsArticleMapper.php index 04f9d3f..955f0df 100644 --- a/Models/NewsArticleMapper.php +++ b/Models/NewsArticleMapper.php @@ -15,6 +15,7 @@ */ namespace Modules\News\Models; +use Modules\Admin\Models\AccountMapper; use phpOMS\DataStorage\Database\DataMapperAbstract; use phpOMS\DataStorage\Database\Query\Builder; use phpOMS\DataStorage\Database\Query\Column; @@ -42,6 +43,13 @@ class NewsArticleMapper extends DataMapperAbstract 'news_created_at' => ['name' => 'news_created_at', 'type' => 'DateTime', 'internal' => 'createdAt'], ]; + static protected $belongsTo = [ + 'createdBy' => [ + 'mapper' => AccountMapper::class, + 'src' => 'news_created_by', + ], + ]; + /** * Primary table. * @@ -83,20 +91,20 @@ class NewsArticleMapper extends DataMapperAbstract $objId = parent::create($obj, $relations); $query = new Builder(self::$db); $query->prefix(self::$db->getPrefix()) - ->insert( - 'account_permission_account', - 'account_permission_from', - 'account_permission_for', - 'account_permission_id1', - 'account_permission_id2', - 'account_permission_r', - 'account_permission_w', - 'account_permission_m', - 'account_permission_d', - 'account_permission_p' - ) - ->into('account_permission') - ->values($obj->getCreatedBy(), 'news', 'news', 1, $objId, 1, 1, 1, 1, 1); + ->insert( + 'account_permission_account', + 'account_permission_from', + 'account_permission_for', + 'account_permission_id1', + 'account_permission_id2', + 'account_permission_r', + 'account_permission_w', + 'account_permission_m', + 'account_permission_d', + 'account_permission_p' + ) + ->into('account_permission') + ->values($obj->getCreatedBy(), 'news', 'news', 1, $objId, 1, 1, 1, 1, 1); self::$db->con->prepare($query->toSql())->execute(); } catch (\Exception $e) { @@ -119,9 +127,9 @@ class NewsArticleMapper extends DataMapperAbstract public static function find(...$columns) : Builder { return parent::find(...$columns)->from('account_permission') - ->where('account_permission.account_permission_for', '=', 'news') - ->where('account_permission.account_permission_id1', '=', 1) - ->where('news.news_id', '=', new Column('account_permission.account_permission_id2')) - ->where('account_permission.account_permission_r', '=', 1); + ->where('account_permission.account_permission_for', '=', 'news') + ->where('account_permission.account_permission_id1', '=', 1) + ->where('news.news_id', '=', new Column('account_permission.account_permission_id2')) + ->where('account_permission.account_permission_r', '=', 1); } } diff --git a/Theme/Backend/news-create.tpl.php b/Theme/Backend/news-create.tpl.php index 763997c..85e7ca0 100644 --- a/Theme/Backend/news-create.tpl.php +++ b/Theme/Backend/news-create.tpl.php @@ -19,12 +19,12 @@ echo $this->getData('nav')->render(); ?>
- +
-
+
-
+
-
- -
-
-
-
-
-
+ +
+
+
+
+
-
- -
-
-
-
-
+ +
+
+
+
-
- -
-
-
-
-
+ +
+
+
+
diff --git a/Theme/Backend/news-dashboard.tpl.php b/Theme/Backend/news-dashboard.tpl.php index d0245ae..dc92950 100644 --- a/Theme/Backend/news-dashboard.tpl.php +++ b/Theme/Backend/news-dashboard.tpl.php @@ -31,20 +31,20 @@ echo $this->getData('nav')->render(); ?> getText('Title'); ?> getText('Author'); ?> getText('Date'); ?> - - $news) : $count++; - $url = \phpOMS\Uri\UriFactory::build('/{/lang}/backend/news/article?id=' . $news->getId()); - $color = 'darkred'; - if($news->getType() === \Modules\News\Models\NewsType::ARTICLE) { $color = 'green'; } - elseif($news->getType() === \Modules\News\Models\NewsType::HEADLINE) { $color = 'purple'; } - elseif($news->getType() === \Modules\News\Models\NewsType::LINK) { $color = 'yellow'; } - ?> - - isFeatured() ? '' : ''; ?> - getText('TYPE' . $news->getType()); ?> - getTitle(); ?> - getCreatedBy(); ?> - getPublish()->format('Y-m-d'); ?> + + $news) : $count++; + $url = \phpOMS\Uri\UriFactory::build('/{/lang}/backend/news/article?id=' . $news->getId()); + $color = 'darkred'; + if($news->getType() === \Modules\News\Models\NewsType::ARTICLE) { $color = 'green'; } + elseif($news->getType() === \Modules\News\Models\NewsType::HEADLINE) { $color = 'purple'; } + elseif($news->getType() === \Modules\News\Models\NewsType::LINK) { $color = 'yellow'; } + ?> + + isFeatured() ? '' : ''; ?> + getText('TYPE' . $news->getType()); ?> + getTitle(); ?> + getCreatedBy(); ?> + getPublish()->format('Y-m-d'); ?> getText('Empty', 0, 0); ?> diff --git a/Theme/backend/news-dashboard.tpl.php b/Theme/backend/news-dashboard.tpl.php index d0245ae..dc92950 100644 --- a/Theme/backend/news-dashboard.tpl.php +++ b/Theme/backend/news-dashboard.tpl.php @@ -31,20 +31,20 @@ echo $this->getData('nav')->render(); ?> getText('Title'); ?> getText('Author'); ?> getText('Date'); ?> - - $news) : $count++; - $url = \phpOMS\Uri\UriFactory::build('/{/lang}/backend/news/article?id=' . $news->getId()); - $color = 'darkred'; - if($news->getType() === \Modules\News\Models\NewsType::ARTICLE) { $color = 'green'; } - elseif($news->getType() === \Modules\News\Models\NewsType::HEADLINE) { $color = 'purple'; } - elseif($news->getType() === \Modules\News\Models\NewsType::LINK) { $color = 'yellow'; } - ?> - - isFeatured() ? '' : ''; ?> - getText('TYPE' . $news->getType()); ?> - getTitle(); ?> - getCreatedBy(); ?> - getPublish()->format('Y-m-d'); ?> + + $news) : $count++; + $url = \phpOMS\Uri\UriFactory::build('/{/lang}/backend/news/article?id=' . $news->getId()); + $color = 'darkred'; + if($news->getType() === \Modules\News\Models\NewsType::ARTICLE) { $color = 'green'; } + elseif($news->getType() === \Modules\News\Models\NewsType::HEADLINE) { $color = 'purple'; } + elseif($news->getType() === \Modules\News\Models\NewsType::LINK) { $color = 'yellow'; } + ?> + + isFeatured() ? '' : ''; ?> + getText('TYPE' . $news->getType()); ?> + getTitle(); ?> + getCreatedBy(); ?> + getPublish()->format('Y-m-d'); ?> getText('Empty', 0, 0); ?> From cf1f0b43be010bdde0fb46538b5f33f4e649caf4 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sun, 9 Oct 2016 20:07:30 +0200 Subject: [PATCH 02/12] Fix install --- Admin/Install/Navigation.php | 2 +- Admin/Installer.php | 4 ++-- Controller.php | 28 +++++++++++++++++++++++++++- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/Admin/Install/Navigation.php b/Admin/Install/Navigation.php index e2e8bc8..3c68583 100644 --- a/Admin/Install/Navigation.php +++ b/Admin/Install/Navigation.php @@ -29,7 +29,7 @@ use phpOMS\DataStorage\Database\Pool; */ class Navigation { - public static function install(Pool $dbPool) + public static function install(string $path, Pool $dbPool) { $navData = json_decode(file_get_contents(__DIR__ . '/Navigation.install.json'), true); diff --git a/Admin/Installer.php b/Admin/Installer.php index 6c7ac8c..ab5f51d 100644 --- a/Admin/Installer.php +++ b/Admin/Installer.php @@ -37,9 +37,9 @@ class Installer extends InstallerAbstract /** * {@inheritdoc} */ - public static function install(Pool $dbPool, InfoManager $info) + public static function install(string $path, Pool $dbPool, InfoManager $info) { - parent::install($dbPool, $info); + parent::install($path, $dbPool, $info); switch ($dbPool->get('core')->getType()) { case DatabaseType::MYSQL: diff --git a/Controller.php b/Controller.php index 5082971..2322020 100644 --- a/Controller.php +++ b/Controller.php @@ -15,9 +15,13 @@ */ namespace Modules\News; +use Model\Message\FormValidation; use Modules\News\Models\NewsArticle; use Modules\News\Models\NewsArticleMapper; +use Modules\News\Models\NewsStatus; +use Modules\News\Models\NewsType; use phpOMS\Account\Account; +use phpOMS\Localization\ISO639Enum; use phpOMS\Message\RequestAbstract; use phpOMS\Message\ResponseAbstract; use phpOMS\Module\ModuleAbstract; @@ -171,6 +175,28 @@ class Controller extends ModuleAbstract implements WebInterface */ public function apiNewsCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) { + $val = []; + if ( + ($val['title'] = empty($request->getData('title'))) + || ($val['plain'] = empty($request->getData('plain'))) + || ($val['lang'] = ( + $request->getData('lang') !== null + && !ISO639Enum::isValidValue(strtolower($request->getData('lang'))) + )) + || ($val['type'] = ( + $request->getData('type') === null + || !NewsType::isValidValue((int) $request->getData('type')) + )) + || ($val['status'] = ( + $request->getData('status') === null + || !NewsStatus::isValidValue((int) $request->getData('status')) + )) + ) { + $response->set('news_create', new FormValidation($val)); + + return; + } + $newsArticle = new NewsArticle(); $newsArticle->setCreatedBy($request->getAccount()->getId()); $newsArticle->setCreatedAt(new \DateTime('now')); @@ -178,7 +204,7 @@ class Controller extends ModuleAbstract implements WebInterface $newsArticle->setTitle($request->getData('title') ?? ''); $newsArticle->setPlain($request->getData('plain') ?? ''); $newsArticle->setContent($request->getData('content') ?? ''); - $newsArticle->setLanguage($request->getData('lang') ?? $request->getL11n()->getLanguage()); + $newsArticle->setLanguage(strtolower($request->getData('lang') ?? $request->getL11n()->getLanguage())); $newsArticle->setType((int) ($request->getData('type') ?? 1)); $newsArticle->setStatus((int) ($request->getData('status') ?? 1)); $newsArticle->setFeatured((bool) ($request->getData('featured') ?? true)); From 07804359bb6ce08036823085f13febb8f42e51ae Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Mon, 17 Oct 2016 22:00:09 +0200 Subject: [PATCH 03/12] Localization fix --- Theme/Backend/news-create.tpl.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Theme/Backend/news-create.tpl.php b/Theme/Backend/news-create.tpl.php index 85e7ca0..34cb575 100644 --- a/Theme/Backend/news-create.tpl.php +++ b/Theme/Backend/news-create.tpl.php @@ -32,7 +32,7 @@ echo $this->getData('nav')->render(); ?>