add template list, fix template install bug

This commit is contained in:
Dennis Eichhorn 2023-05-06 23:15:54 +00:00
parent 707f2243f0
commit b26dab36a8
11 changed files with 161 additions and 2 deletions

View File

@ -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",

View File

@ -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
}
}
},

View File

@ -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);

View File

@ -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',

View File

@ -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'] ?? '');

View File

@ -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.
*

View File

@ -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;
}
}

View File

@ -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.

View File

@ -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'],
];
/**

View File

@ -20,4 +20,5 @@ return ['Navigation' => [
'Settings' => 'Settings',
'Spam' => 'Spam',
'Trash' => 'Trash',
'Templates' => 'Templates',
]];

View File

@ -0,0 +1,89 @@
<?php
/**
* Karaka
*
* PHP Version 8.1
*
* @package Modules\Messages
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
use phpOMS\Uri\UriFactory;
/*
$mail = new \phpOMS\Message\Mail\Imap();
$mail->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(); ?>
<div class="row">
<div class="col-xs-12 col-md-9">
<div class="portlet">
<div class="portlet-head"><?= $this->getHtml('Templates'); ?><i class="fa fa-download floatRight download btn"></i></div>
<table id="profileList" class="default">
<thead>
<tr>
<td><span class="check"><input type="checkbox" name="profile-list"></span>
<td class="wf-100"><?= $this->getHtml('Subject'); ?>
<td><?= $this->getHtml('Date'); ?>
<tbody>
<?php $count = 0;
foreach ($messages as $key => $value) : ++$count;
$url = UriFactory::build('{/base}/messages/template/single?{?}&id=' . $value->id); ?>
<tr>
<td><span class="check"><input type="checkbox" name=""></span>
<td><a href="<?= $url; ?>"><?= $this->printHtml(empty($value->subject) ? $value->getL11nByLanguage($this->response->getLanguage())->subject : $value->subject); ?></a>
<td><a href="<?= $url; ?>"><?= $this->printHtml($value->createdAt->format('Y-m-d')); ?></a>
<?php endforeach; ?>
<?php if ($count === 0) : ?>
<tr>
<td colspan="5" class="empty"><?= $this->getHtml('Empty', '0', '0'); ?>
<?php endif; ?>
</table>
<div class="portlet-foot">
<a tabindex="0" class="button" href="<?= UriFactory::build($previous); ?>"><?= $this->getHtml('Previous', '0', '0'); ?></a>
<a tabindex="0" class="button" href="<?= UriFactory::build($next); ?>"><?= $this->getHtml('Next', '0', '0'); ?></a>
</div>
</div>
</div>
<div class="col-xs-12 col-md-3">
<div class="box">
<a tabindex="0" class="button" href="<?= UriFactory::build('{/base}/messages/template/create'); ?>"><i class="fa fa-pencil"></i> <?= $this->getHtml('Create', '0', '0'); ?></a>
</div>
<div class="portlet">
<div class="portlet-head"><?= $this->getHtml('Channels'); ?></div>
<div class="portlet-body">
asdf
</div>
</div>
<div class="portlet">
<div class="portlet-head"><?= $this->getHtml('Email'); ?></div>
<div class="portlet-body">
asdf
</div>
</div>
<div class="portlet">
<div class="portlet-head"><?= $this->getHtml('Chat'); ?></div>
<div class="portlet-body">
asdf
</div>
</div>
</div>
</div>