From b26dab36a838c845f1748a45f2a7acbd2d849fc7 Mon Sep 17 00:00:00 2001 From: Dennis Eichhorn Date: Sat, 6 May 2023 23:15:54 +0000 Subject: [PATCH] add template list, fix template install bug --- Admin/Install/Navigation.install.json | 15 ++++ Admin/Install/db.json | 5 ++ Admin/Installer.php | 1 + Admin/Routes/Web/Backend.php | 11 +++ Controller/ApiController.php | 2 + Controller/BackendController.php | 32 ++++++++ Models/Email.php | 4 +- Models/EmailL11n.php | 2 +- Models/EmailMapper.php | 1 + Theme/Backend/Lang/Navigation.en.lang.php | 1 + Theme/Backend/mail-templates.tpl.php | 89 +++++++++++++++++++++++ 11 files changed, 161 insertions(+), 2 deletions(-) create mode 100755 Theme/Backend/mail-templates.tpl.php diff --git a/Admin/Install/Navigation.install.json b/Admin/Install/Navigation.install.json index c850cfc..0fc3aca 100755 --- a/Admin/Install/Navigation.install.json +++ b/Admin/Install/Navigation.install.json @@ -93,6 +93,21 @@ "pid": "/", "type": 3, "subtype": 1, + "name": "Templates", + "uri": "{/base}/messages/templates?{?}", + "target": "self", + "icon": null, + "order": 30, + "from": "Messages", + "permission": { "permission": 2, "category": null, "element": null }, + "parent": 1001201001, + "children": [] + }, + { + "id": 1001208001, + "pid": "/", + "type": 3, + "subtype": 1, "name": "Settings", "uri": "{/base}/messages/settings?{?}", "target": "self", diff --git a/Admin/Install/db.json b/Admin/Install/db.json index dbf8541..683cf96 100755 --- a/Admin/Install/db.json +++ b/Admin/Install/db.json @@ -118,6 +118,11 @@ "name": "messages_mail_charset", "type": "VARCHAR(255)", "null": false + }, + "messages_mail_template": { + "name": "messages_mail_template", + "type": "TINYINT(1)", + "null": false } } }, diff --git a/Admin/Installer.php b/Admin/Installer.php index 85eb0d9..d78564a 100755 --- a/Admin/Installer.php +++ b/Admin/Installer.php @@ -133,6 +133,7 @@ final class Installer extends InstallerAbstract $request->setData('body', $data['body'] ?? ''); $request->setData('bodyalt', $data['bodyalt'] ?? ''); $request->setData('send', $data['send'] ?? false); + $request->setData('template', true); $module->apiEmailCreate($request, $response); diff --git a/Admin/Routes/Web/Backend.php b/Admin/Routes/Web/Backend.php index f596f39..14da9bc 100755 --- a/Admin/Routes/Web/Backend.php +++ b/Admin/Routes/Web/Backend.php @@ -73,6 +73,17 @@ return [ ], ], ], + '^.*/messages/templates.*$' => [ + [ + 'dest' => '\Modules\Messages\Controller\BackendController:viewMessageTemplates', + 'verb' => RouteVerb::GET, + 'permission' => [ + 'module' => BackendController::NAME, + 'type' => PermissionType::READ, + 'state' => PermissionCategory::MESSAGE, + ], + ], + ], '^.*/messages/mail/create.*$' => [ [ 'dest' => '\Modules\Messages\Controller\BackendController:viewMessageCreate', diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 7b011f7..62013cb 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -97,6 +97,8 @@ final class ApiController extends Controller { $email = new Email(); + $email->isTemplate = $request->getData('template') ?? false; + if ($request->hasData('from')) { $from = $request->getDataJson('from'); $email->setFrom($from['address'] ?? '', $from['name'] ?? ''); diff --git a/Controller/BackendController.php b/Controller/BackendController.php index df402a1..ae1fc02 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -14,6 +14,8 @@ declare(strict_types=1); namespace Modules\Messages\Controller; +use Modules\Messages\Models\EmailL11nMapper; +use Modules\Messages\Models\EmailMapper; use phpOMS\Contract\RenderableInterface; use phpOMS\Message\RequestAbstract; use phpOMS\Message\ResponseAbstract; @@ -51,6 +53,36 @@ final class BackendController extends Controller return $view; } + /** + * Routing end-point for application behaviour. + * + * @param RequestAbstract $request Request + * @param ResponseAbstract $response Response + * @param mixed $data Generic data + * + * @return RenderableInterface + * + * @since 1.0.0 + * @codeCoverageIgnore + */ + public function viewMessageTemplates(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : RenderableInterface + { + $view = new View($this->app->l11nManager, $request, $response); + $view->setTemplate('/Modules/Messages/Theme/Backend/mail-templates'); + $view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1001201001, $request, $response)); + + $templates = EmailMapper::getAll() + ->with('l11n') + ->where('isTemplate', true) + ->where('account', $request->header->account) + ->where('l11n/language', $response->getLanguage()) + ->execute(); + + $view->setData('templates', $templates); + + return $view; + } + /** * Routing end-point for application behaviour. * diff --git a/Models/Email.php b/Models/Email.php index 1078754..217f977 100755 --- a/Models/Email.php +++ b/Models/Email.php @@ -46,6 +46,8 @@ class Email extends MailEmail implements \JsonSerializable public array $l11n = []; + public bool $isTemplate = false; + /** * Constructor. * @@ -72,7 +74,7 @@ class Email extends MailEmail implements \JsonSerializable public function getL11nByLanguage(string $language) : EmailL11n { foreach ($this->l11n as $l11n) { - if ($l11n->language->getLanguage() === $language) { + if ($l11n->language === $language) { return $l11n; } } diff --git a/Models/EmailL11n.php b/Models/EmailL11n.php index e34c057..4acf605 100644 --- a/Models/EmailL11n.php +++ b/Models/EmailL11n.php @@ -48,7 +48,7 @@ class EmailL11n implements \JsonSerializable * @var string * @since 1.0.0 */ - protected string $language = ISO639x1Enum::_EN; + public string $language = ISO639x1Enum::_EN; /** * Title. diff --git a/Models/EmailMapper.php b/Models/EmailMapper.php index 80a68d0..3bdf28b 100755 --- a/Models/EmailMapper.php +++ b/Models/EmailMapper.php @@ -60,6 +60,7 @@ final class EmailMapper extends DataMapperFactory 'messages_mail_encoding' => ['name' => 'messages_mail_encoding', 'type' => 'string', 'internal' => 'encoding'], 'messages_mail_contenttype' => ['name' => 'messages_mail_contenttype', 'type' => 'string', 'internal' => 'contentType'], 'messages_mail_charset' => ['name' => 'messages_mail_charset', 'type' => 'string', 'internal' => 'charset'], + 'messages_mail_template' => ['name' => 'messages_mail_template', 'type' => 'bool', 'internal' => 'isTemplate'], ]; /** diff --git a/Theme/Backend/Lang/Navigation.en.lang.php b/Theme/Backend/Lang/Navigation.en.lang.php index 9c922b5..39cca51 100755 --- a/Theme/Backend/Lang/Navigation.en.lang.php +++ b/Theme/Backend/Lang/Navigation.en.lang.php @@ -20,4 +20,5 @@ return ['Navigation' => [ 'Settings' => 'Settings', 'Spam' => 'Spam', 'Trash' => 'Trash', + 'Templates' => 'Templates', ]]; diff --git a/Theme/Backend/mail-templates.tpl.php b/Theme/Backend/mail-templates.tpl.php new file mode 100755 index 0000000..fcfa0c5 --- /dev/null +++ b/Theme/Backend/mail-templates.tpl.php @@ -0,0 +1,89 @@ +connect('{imap.gmail.com:993/imap/ssl}INBOX', 'dev.orange.management@gmail.com', 'DEV_PASSWORD'); +$unseen = $mail->getInboxUnseen(); +$seen = $mail->getInboxSeen(); +$quota = $mail->getQuota(); +*/ + +$messages = $this->getData('templates') ?? []; + +$previous = empty($messages) ? 'messages/dashboard' : 'messages/dashboard?{?}&id=' . \reset($messages)->id . '&ptype=p'; +$next = empty($messages) ? 'messages/dashboard' : 'messages/dashboard?{?}&id=' . \end($messages)->id . '&ptype=n'; + +echo $this->getData('nav')->render(); ?> + +
+
+
+
getHtml('Templates'); ?>
+ + + + + $value) : ++$count; + $url = UriFactory::build('{/base}/messages/template/single?{?}&id=' . $value->id); ?> + + +
+ getHtml('Subject'); ?> + getHtml('Date'); ?> +
+ printHtml(empty($value->subject) ? $value->getL11nByLanguage($this->response->getLanguage())->subject : $value->subject); ?> + printHtml($value->createdAt->format('Y-m-d')); ?> + + +
getHtml('Empty', '0', '0'); ?> + +
+ +
+
+ +
+ + +
+
getHtml('Channels'); ?>
+
+ asdf +
+
+ +
+
getHtml('Email'); ?>
+
+ asdf +
+
+ +
+
getHtml('Chat'); ?>
+
+ asdf +
+
+
+