make id public, organigram impl. media password/encryption, settings bug fix, Money->FloatInt change, ...

This commit is contained in:
Dennis Eichhorn 2023-05-06 11:42:06 +00:00
parent 55a93f6513
commit 707f2243f0
9 changed files with 400 additions and 12 deletions

View File

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

View File

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

View File

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

View File

@ -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
View 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();
}
}

View 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';
}

View File

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

View File

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