mirror of
https://github.com/Karaka-Management/oms-Messages.git
synced 2026-02-08 21:48:41 +00:00
make id public, organigram impl. media password/encryption, settings bug fix, Money->FloatInt change, ...
This commit is contained in:
parent
55a93f6513
commit
707f2243f0
|
|
@ -147,6 +147,47 @@
|
|||
}
|
||||
}
|
||||
},
|
||||
"messages_mail_l11n": {
|
||||
"name": "messages_mail_l11n",
|
||||
"fields": {
|
||||
"messages_mail_l11n_id": {
|
||||
"name": "messages_mail_l11n_id",
|
||||
"type": "INT",
|
||||
"null": false,
|
||||
"primary": true,
|
||||
"autoincrement": true
|
||||
},
|
||||
"messages_mail_l11n_subject": {
|
||||
"name": "messages_mail_l11n_subject",
|
||||
"type": "TEXT",
|
||||
"null": false
|
||||
},
|
||||
"messages_mail_l11n_body": {
|
||||
"name": "messages_mail_l11n_body",
|
||||
"type": "TEXT",
|
||||
"null": false
|
||||
},
|
||||
"messages_mail_l11n_bodyalt": {
|
||||
"name": "messages_mail_l11n_bodyalt",
|
||||
"type": "TEXT",
|
||||
"null": false
|
||||
},
|
||||
"messages_mail_l11n_message": {
|
||||
"name": "messages_mail_l11n_message",
|
||||
"type": "INT(11)",
|
||||
"null": false,
|
||||
"foreignTable": "messages_mail",
|
||||
"foreignKey": "messages_mail_id"
|
||||
},
|
||||
"messages_mail_l11n_lang": {
|
||||
"name": "messages_mail_l11n_lang",
|
||||
"type": "VARCHAR(2)",
|
||||
"null": false,
|
||||
"foreignTable": "language",
|
||||
"foreignKey": "language_639_1"
|
||||
}
|
||||
}
|
||||
},
|
||||
"messages_channel": {
|
||||
"description": "Only for internal purposes, can be a server or group chat or 1v1 chat",
|
||||
"name": "messages_channel",
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ use phpOMS\Application\ApplicationAbstract;
|
|||
use phpOMS\Message\Http\HttpRequest;
|
||||
use phpOMS\Message\Http\HttpResponse;
|
||||
use phpOMS\Module\InstallerAbstract;
|
||||
use phpOMS\Module\ModuleInfo;
|
||||
use phpOMS\System\File\PathException;
|
||||
use phpOMS\Uri\HttpUri;
|
||||
|
||||
|
|
@ -58,7 +57,7 @@ final class Installer extends InstallerAbstract
|
|||
public static function installExternal(ApplicationAbstract $app, array $data) : array
|
||||
{
|
||||
try {
|
||||
$app->dbPool->get()->con->query('select 1 from `editor_doc`');
|
||||
$app->dbPool->get()->con->query('select 1 from `messages_mail`');
|
||||
} catch (\Exception $e) {
|
||||
return []; // @codeCoverageIgnore
|
||||
}
|
||||
|
|
@ -142,6 +141,22 @@ final class Installer extends InstallerAbstract
|
|||
return [];
|
||||
}
|
||||
|
||||
$emailId = $responseData['response']->id;
|
||||
|
||||
foreach ($data['l11n'] as $language => $l11n) {
|
||||
$l11nResponse = new HttpResponse();
|
||||
$l11nRequest = new HttpRequest(new HttpUri(''));
|
||||
|
||||
$l11nRequest->header->account = 1;
|
||||
$l11nRequest->setData('email', $emailId);
|
||||
$l11nRequest->setData('language', $language);
|
||||
$l11nRequest->setData('subject', $l11n['subject'] ?? '');
|
||||
$l11nRequest->setData('body', $l11n['body'] ?? '');
|
||||
$l11nRequest->setData('bodyalt', $l11n['bodyalt'] ?? '');
|
||||
|
||||
$module->apiEmailL11nCreate($l11nRequest, $l11nResponse);
|
||||
}
|
||||
|
||||
return !\is_array($responseData['response'])
|
||||
? $responseData['response']->toArray()
|
||||
: $responseData['response'];
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@ namespace Modules\Messages\Controller;
|
|||
|
||||
use Modules\Admin\Models\NullAccount;
|
||||
use Modules\Messages\Models\Email;
|
||||
use Modules\Messages\Models\EmailL11n;
|
||||
use Modules\Messages\Models\EmailL11nMapper;
|
||||
use Modules\Messages\Models\EmailMapper;
|
||||
use phpOMS\Message\Http\RequestStatusCode;
|
||||
use phpOMS\Message\NotificationLevel;
|
||||
|
|
@ -74,8 +76,7 @@ final class ApiController extends Controller
|
|||
private function validateEmailCreate(RequestAbstract $request) : array
|
||||
{
|
||||
$val = [];
|
||||
if (($val['subject'] = !$request->hasData('subject'))
|
||||
|| ($val['body'] = !$request->hasData('body'))
|
||||
if (false
|
||||
) {
|
||||
return $val;
|
||||
}
|
||||
|
|
@ -128,17 +129,88 @@ final class ApiController extends Controller
|
|||
$email->account = new NullAccount($request->getDataInt('account') ?? $request->header->account);
|
||||
|
||||
$email->setHtml($request->getDataBool('ishtml') ?? false);
|
||||
|
||||
$email->subject = $request->getDataString('subject') ?? '';
|
||||
|
||||
if ($request->getDataBool('ishtml') ?? false) {
|
||||
$email->msgHTML($request->getDataString('body') ?? '');
|
||||
} else {
|
||||
$email->body = $request->getDataString('body') ?? '';
|
||||
if ($request->hasData('body')) {
|
||||
if ($request->getDataBool('ishtml') ?? false) {
|
||||
$email->msgHTML($request->getDataString('body') ?? '');
|
||||
} else {
|
||||
$email->body = $request->getDataString('body') ?? '';
|
||||
}
|
||||
}
|
||||
|
||||
$email->bodyAlt = $request->getDataString('bodyalt') ?? '';
|
||||
|
||||
return $email;
|
||||
}
|
||||
|
||||
/**
|
||||
* Api method to create item l11n
|
||||
*
|
||||
* @param RequestAbstract $request Request
|
||||
* @param ResponseAbstract $response Response
|
||||
* @param mixed $data Generic data
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @api
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public function apiEmailL11nCreate(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
|
||||
{
|
||||
if (!empty($val = $this->validateEmailL11nCreate($request))) {
|
||||
$response->set('email_l11n_create', new FormValidation($val));
|
||||
$response->header->status = RequestStatusCode::R_400;
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
$emailL11n = $this->createEmailL11nFromRequest($request);
|
||||
$this->createModel($request->header->account, $emailL11n, EmailL11nMapper::class, 'message_l11n', $request->getOrigin());
|
||||
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Localization', 'Localization successfully created', $emailL11n);
|
||||
}
|
||||
|
||||
/**
|
||||
* Method to create item l11n from request.
|
||||
*
|
||||
* @param RequestAbstract $request Request
|
||||
*
|
||||
* @return EmailL11n
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
private function createEmailL11nFromRequest(RequestAbstract $request) : EmailL11n
|
||||
{
|
||||
$itemL11n = new EmailL11n();
|
||||
$itemL11n->email = $request->getDataInt('email') ?? 0;
|
||||
$itemL11n->setLanguage(
|
||||
$request->getDataString('language') ?? $request->getLanguage()
|
||||
);
|
||||
$itemL11n->subject = $request->getDataString('subject') ?? '';
|
||||
$itemL11n->body = $request->getDataString('body') ?? '';
|
||||
$itemL11n->bodyAlt = $request->getDataString('bodyalt') ?? '';
|
||||
|
||||
return $itemL11n;
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate item l11n create request
|
||||
*
|
||||
* @param RequestAbstract $request Request
|
||||
*
|
||||
* @return array<string, bool>
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
private function validateEmailL11nCreate(RequestAbstract $request) : array
|
||||
{
|
||||
$val = [];
|
||||
if (($val['email'] = !$request->hasData('email'))
|
||||
) {
|
||||
return $val;
|
||||
}
|
||||
|
||||
return [];
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ class Email extends MailEmail implements \JsonSerializable
|
|||
* @var int
|
||||
* @since 1.0.0
|
||||
*/
|
||||
protected int $id = 0;
|
||||
public int $id = 0;
|
||||
|
||||
public Account $account;
|
||||
|
||||
|
|
@ -44,6 +44,8 @@ class Email extends MailEmail implements \JsonSerializable
|
|||
|
||||
private array $media = [];
|
||||
|
||||
public array $l11n = [];
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
*
|
||||
|
|
@ -67,6 +69,17 @@ class Email extends MailEmail implements \JsonSerializable
|
|||
return $this->id;
|
||||
}
|
||||
|
||||
public function getL11nByLanguage(string $language) : EmailL11n
|
||||
{
|
||||
foreach ($this->l11n as $l11n) {
|
||||
if ($l11n->language->getLanguage() === $language) {
|
||||
return $l11n;
|
||||
}
|
||||
}
|
||||
|
||||
return new NullEmailL11n();
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
|
|
|
|||
133
Models/EmailL11n.php
Normal file
133
Models/EmailL11n.php
Normal file
|
|
@ -0,0 +1,133 @@
|
|||
<?php
|
||||
/**
|
||||
* Karaka
|
||||
*
|
||||
* PHP Version 8.1
|
||||
*
|
||||
* @package Modules\Messages\Models
|
||||
* @copyright Dennis Eichhorn
|
||||
* @license OMS License 2.0
|
||||
* @version 1.0.0
|
||||
* @link https://jingga.app
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Modules\Messages\Models;
|
||||
|
||||
use phpOMS\Localization\ISO639x1Enum;
|
||||
|
||||
/**
|
||||
* Localization of the item class.
|
||||
*
|
||||
* @package Modules\Messages\Models
|
||||
* @license OMS License 2.0
|
||||
* @link https://jingga.app
|
||||
* @since 1.0.0
|
||||
*/
|
||||
class EmailL11n implements \JsonSerializable
|
||||
{
|
||||
/**
|
||||
* Article ID.
|
||||
*
|
||||
* @var int
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public int $id = 0;
|
||||
|
||||
/**
|
||||
* Email ID.
|
||||
*
|
||||
* @var int
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public int $email = 0;
|
||||
|
||||
/**
|
||||
* Language.
|
||||
*
|
||||
* @var string
|
||||
* @since 1.0.0
|
||||
*/
|
||||
protected string $language = ISO639x1Enum::_EN;
|
||||
|
||||
/**
|
||||
* Title.
|
||||
*
|
||||
* @var string
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public string $subject = '';
|
||||
|
||||
/**
|
||||
* Title.
|
||||
*
|
||||
* @var string
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public string $body = '';
|
||||
|
||||
/**
|
||||
* Title.
|
||||
*
|
||||
* @var string
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public string $bodyAlt = '';
|
||||
|
||||
/**
|
||||
* Get id
|
||||
*
|
||||
* @return int
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public function getId() : int
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get language
|
||||
*
|
||||
* @return string
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public function getLanguage() : string
|
||||
{
|
||||
return $this->language;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set language
|
||||
*
|
||||
* @param string $language Language
|
||||
*
|
||||
* @return void
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public function setLanguage(string $language) : void
|
||||
{
|
||||
$this->language = $language;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function toArray() : array
|
||||
{
|
||||
return [
|
||||
'id' => $this->id,
|
||||
'language' => $this->language,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function jsonSerialize() : mixed
|
||||
{
|
||||
return $this->toArray();
|
||||
}
|
||||
}
|
||||
62
Models/EmailL11nMapper.php
Normal file
62
Models/EmailL11nMapper.php
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
<?php
|
||||
/**
|
||||
* Karaka
|
||||
*
|
||||
* PHP Version 8.1
|
||||
*
|
||||
* @package Modules\Messages\Models
|
||||
* @copyright Dennis Eichhorn
|
||||
* @license OMS License 2.0
|
||||
* @version 1.0.0
|
||||
* @link https://jingga.app
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Modules\Messages\Models;
|
||||
|
||||
use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
|
||||
|
||||
/**
|
||||
* Email mapper class.
|
||||
*
|
||||
* @package Modules\Messages\Models
|
||||
* @license OMS License 2.0
|
||||
* @link https://jingga.app
|
||||
* @since 1.0.0
|
||||
*
|
||||
* @template T of EmailL11n
|
||||
* @extends DataMapperFactory<T>
|
||||
*/
|
||||
final class EmailL11nMapper extends DataMapperFactory
|
||||
{
|
||||
/**
|
||||
* Columns.
|
||||
*
|
||||
* @var array<string, array{name:string, type:string, internal:string, autocomplete?:bool, readonly?:bool, writeonly?:bool, annotations?:array}>
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public const COLUMNS = [
|
||||
'messages_mail_l11n_id' => ['name' => 'messages_mail_l11n_id', 'type' => 'int', 'internal' => 'id'],
|
||||
'messages_mail_l11n_subject' => ['name' => 'messages_mail_l11n_subject', 'type' => 'string', 'internal' => 'subject'],
|
||||
'messages_mail_l11n_body' => ['name' => 'messages_mail_l11n_body', 'type' => 'string', 'internal' => 'body'],
|
||||
'messages_mail_l11n_bodyalt' => ['name' => 'messages_mail_l11n_bodyalt', 'type' => 'string', 'internal' => 'bodyAlt'],
|
||||
'messages_mail_l11n_message' => ['name' => 'messages_mail_l11n_message', 'type' => 'int', 'internal' => 'email'],
|
||||
'messages_mail_l11n_lang' => ['name' => 'messages_mail_l11n_lang', 'type' => 'string', 'internal' => 'language'],
|
||||
];
|
||||
|
||||
/**
|
||||
* Primary table.
|
||||
*
|
||||
* @var string
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public const TABLE = 'messages_mail_l11n';
|
||||
|
||||
/**
|
||||
* Primary field name.
|
||||
*
|
||||
* @var string
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public const PRIMARYFIELD = 'messages_mail_l11n_id';
|
||||
}
|
||||
|
|
@ -75,6 +75,12 @@ final class EmailMapper extends DataMapperFactory
|
|||
'external' => 'messages_mail_media_dst',
|
||||
'self' => 'messages_mail_media_src',
|
||||
],
|
||||
'l11n' => [
|
||||
'mapper' => EmailL11nMapper::class,
|
||||
'table' => 'messages_mail_l11n',
|
||||
'self' => 'messages_mail_l11n_message',
|
||||
'external' => null,
|
||||
],
|
||||
];
|
||||
|
||||
/**
|
||||
|
|
|
|||
46
Models/NullEmailL11n.php
Normal file
46
Models/NullEmailL11n.php
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
<?php
|
||||
/**
|
||||
* Karaka
|
||||
*
|
||||
* PHP Version 8.1
|
||||
*
|
||||
* @package Modules\Messages\Models
|
||||
* @copyright Dennis Eichhorn
|
||||
* @license OMS License 2.0
|
||||
* @version 1.0.0
|
||||
* @link https://jingga.app
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Modules\Messages\Models;
|
||||
|
||||
/**
|
||||
* Null model
|
||||
*
|
||||
* @package Modules\Messages\Models
|
||||
* @license OMS License 2.0
|
||||
* @link https://jingga.app
|
||||
* @since 1.0.0
|
||||
*/
|
||||
final class NullEmailL11n extends EmailL11n
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*
|
||||
* @param int $id Model id
|
||||
*
|
||||
* @since 1.0.0
|
||||
*/
|
||||
public function __construct(int $id = 0)
|
||||
{
|
||||
$this->id = $id;
|
||||
}
|
||||
|
||||
/**
|
||||
* {@inheritdoc}
|
||||
*/
|
||||
public function jsonSerialize() : mixed
|
||||
{
|
||||
return ['id' => $this->id];
|
||||
}
|
||||
}
|
||||
|
|
@ -24,8 +24,8 @@ $quota = $mail->getQuota();
|
|||
|
||||
$messages = $this->getData('messages') ?? [];
|
||||
|
||||
$previous = empty($messages) ? 'messages/dashboard' : 'messages/dashboard?{?}&id=' . \reset($messages)->getId() . '&ptype=p';
|
||||
$next = empty($messages) ? 'messages/dashboard' : 'messages/dashboard?{?}&id=' . \end($messages)->getId() . '&ptype=n';
|
||||
$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(); ?>
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user