Quick backup before crash

This commit is contained in:
Dennis Eichhorn 2023-06-13 18:55:51 +00:00
parent 1e5b0336bc
commit 9834a132de
16 changed files with 178 additions and 107 deletions

View File

@ -12,7 +12,8 @@
*/
declare(strict_types=1);
$data = $this->getData('data') ?? [];
/** @var \phpOMS\Views\View $this */
$data = $this->data['data'] ?? [];
$out = \fopen('php://output', 'w');
if ($out !== false) {

View File

@ -18,6 +18,11 @@ use PhpOffice\PhpSpreadsheet\Worksheet\PageSetup;
class DefaultExcel extends \PhpOffice\PhpSpreadsheet\Spreadsheet
{
/**
* Constructor.
*
* @since 1.0.0
*/
public function __construct()
{
parent::__construct();

View File

@ -35,13 +35,14 @@ foreach ($data as $i => $row) {
}
$file = \tempnam(\sys_get_temp_dir(), 'oms_');
if ($file !== false) {
$writer = IOFactory::createWriter($excel, 'Xlsx');
$writer->save($file);
$writer = IOFactory::createWriter($excel, 'Xlsx');
$writer->save($file);
$content = \file_get_contents($file);
if ($content !== false) {
echo $content;
}
$content = \file_get_contents($file);
if ($content !== false) {
echo $content;
\unlink($file);
}
\unlink($file);

View File

@ -15,12 +15,14 @@ declare(strict_types=1);
/**
* Default PDF class.
*
* The TCPDF class must be included previously in the parent code.
*
* @package Modules\Media
* @license OMS License 2.0
* @link https://jingga.app
* @since 1.0.0
*
* @phpstan-import-type TCPDF from ../../../../../Resources/tcpdf/tcpdf.php
* @link ../../../../../../Resources/tcpdf/tcpdf.php
*/
class DefaultPdf extends TCPDF
{

View File

@ -38,8 +38,20 @@ class DefaultWord extends \PhpOffice\PhpWord\PhpWord
*/
public int $fontSize = 8;
/**
* Doc language
*
* @var string
* @since 1.0.0
*/
public string $language = 'en';
/**
* Localization
*
* @var array
* @since 1.0.0
*/
public array $lang = [
'en' => [
'Page' => 'Page',
@ -59,6 +71,12 @@ class DefaultWord extends \PhpOffice\PhpWord\PhpWord
],
];
/**
* Attributes
*
* @var string[]
* @since 1.0.0
*/
public array $attributes = [
'logo' => __DIR__ . '/../Web/Backend/img/logo.png',
'title_name' => 'Jingga',
@ -91,6 +109,13 @@ class DefaultWord extends \PhpOffice\PhpWord\PhpWord
$this->addTableStyle('FooterTableStyle', $generalTableStyle);
}
/**
* Create the first page
*
* @return \PhpOffice\PhpWord\Element\Section
*
* @since 1.0.0
*/
public function createFirstPage()
{
$section = $this->addSection([
@ -167,6 +192,13 @@ class DefaultWord extends \PhpOffice\PhpWord\PhpWord
return $section;
}
/**
* Create second page
*
* @return \PhpOffice\PhpWord\Element\Section
*
* @since 1.0.0
*/
public function createSecondPage()
{
$section = $this->addSection([

View File

@ -30,9 +30,11 @@ $section = $word->createFirstPage();
$file = \tempnam(\sys_get_temp_dir(), 'oms_');
//$writer->save($file);
$content = \file_get_contents($file);
if ($content !== false) {
echo $content;
}
if ($file !== false) {
$content = \file_get_contents($file);
if ($content !== false) {
echo $content;
}
\unlink($file);
\unlink($file);
}

View File

@ -52,6 +52,10 @@ $tbl .= '</table>';
\PhpOffice\PhpWord\Shared\Html::addHtml($section, $tbl, false, false);
$file = \tempnam(\sys_get_temp_dir(), 'oms_');
if ($file === false) {
return '';
}
$writer->save($file);
echo \file_get_contents($file);

View File

@ -35,6 +35,6 @@ if ($file !== false) {
if ($content !== false) {
echo $content;
}
}
\unlink($file);
\unlink($file);
}

View File

@ -800,7 +800,7 @@ final class ApiController extends Controller
->execute();
if (($request->getData('localization_load') ?? '-1') !== '-1') {
$locale = \explode('_', $request->getData('localization_load'));
$locale = \explode('_', $request->getData('localization_load') ?? '');
$old = clone $account->l11n;
$account->l11n->loadFromLanguage($locale[0], $locale[1]);
@ -1458,7 +1458,12 @@ final class ApiController extends Controller
);
if (!empty($defaultGroupSettings)) {
$defaultGroupIds = \array_merge($defaultGroupIds, \json_decode($defaultGroupSettings->content, true));
$temp = \json_decode($defaultGroupSettings->content, true);
if (!\is_array($temp)) {
$temp = [];
}
$defaultGroupIds = \array_merge($defaultGroupIds, $temp);
}
}
@ -1471,7 +1476,12 @@ final class ApiController extends Controller
);
if (!empty($defaultGroupSettings)) {
$defaultGroupIds = \array_merge($defaultGroupIds, \json_decode($defaultGroupSettings->content, true));
$temp = \json_decode($defaultGroupSettings->content, true);
if (!\is_array($temp)) {
$temp = [];
}
$defaultGroupIds = \array_merge($defaultGroupIds, $temp);
}
}
@ -1668,9 +1678,14 @@ final class ApiController extends Controller
);
if (!empty($defaultGroupSettings)) {
$temp = \json_decode($defaultGroupSettings->content, true);
if (!\is_array($temp)) {
$temp = [];
}
$defaultGroupIds = \array_merge(
$defaultGroupIds,
\json_decode($defaultGroupSettings->content, true)
$temp
);
}
}
@ -1684,9 +1699,14 @@ final class ApiController extends Controller
);
if (!empty($defaultGroupSettings)) {
$temp = \json_decode($defaultGroupSettings->content, true);
if (!\is_array($temp)) {
$temp = [];
}
$defaultGroupIds = \array_merge(
$defaultGroupIds,
\json_decode($defaultGroupSettings->content, true)
$temp
);
}
}
@ -1736,7 +1756,7 @@ final class ApiController extends Controller
$request->setData('create_profile', (string) true);
$request->setData('name1', !$request->hasData('name1')
? (!$request->hasData('user')
? \explode('@', $request->getDataString('email'))[0]
? \explode('@', $request->getDataString('email') ?? '')[0]
: $request->getDataString('user')
)
: $request->getDataString('name1')
@ -1768,6 +1788,61 @@ final class ApiController extends Controller
++$tries;
} while ($dataChange->id === 0 && $tries < 5);
$handler = $this->setUpServerMailHandler();
/** @var \Model\Setting[] $emailSettings */
$emailSettings = $this->app->appSettings->get(
names: [SettingsEnum::MAIL_SERVER_ADDR, SettingsEnum::LOGIN_MAIL_REGISTRATION_TEMPLATE],
module: 'Admin'
);
/** @var \Modules\Messages\Models\Email $mail */
$mail = EmailMapper::get()
->with('l11n')
->where('id', (int) $emailSettings[SettingsEnum::LOGIN_MAIL_REGISTRATION_TEMPLATE]->content)
->where('l11n/language', $response->header->l11n->language)
->execute();
$mail->setFrom($emailSettings[SettingsEnum::MAIL_SERVER_ADDR]->content);
$mail->addTo((string) $request->getData('email'));
// @todo: load default l11n if no translation is available
$mailL11n = $mail->getL11nByLanguage($response->header->l11n->language);
$mail->subject = $mailL11n->subject;
// @todo: improve, the /tld link could be api.myurl.com which of course is not the url of the respective app.
// Maybe store the uri in the $app model? or store all urls in the config file
$mail->body = \str_replace(
[
'{confirmation_link}',
'{user_name}',
],
[
UriFactory::hasQuery('/' . \strtolower($app->name))
? UriFactory::build('{/' . \strtolower($app->name) . '}/' . \strtolower($app->name) . '/signup/confirmation?hash=' . $dataChange->getHash())
: UriFactory::build('{/tld}/{/lang}/' . \strtolower($app->name) . '/signup/confirmation?hash=' . $dataChange->getHash()),
$account->login,
],
$mailL11n->body
);
$mail->bodyAlt = \str_replace(
[
'{confirmation_link}',
'{user_name}',
],
[
UriFactory::hasQuery('/' . \strtolower($app->name))
? UriFactory::build('{/' . \strtolower($app->name) . '}/' . \strtolower($app->name) . '/signup/confirmation?hash=' . $dataChange->getHash())
: UriFactory::build('{/tld}/{/lang}/' . \strtolower($app->name) . '/signup/confirmation?hash=' . $dataChange->getHash()),
$account->login,
],
$mailL11n->bodyAlt
);
$handler->send($mail);
}
// Create client
@ -1794,60 +1869,6 @@ final class ApiController extends Controller
}
}
$handler = $this->setUpServerMailHandler();
$emailSettings = $this->app->appSettings->get(
names: [SettingsEnum::MAIL_SERVER_ADDR, SettingsEnum::LOGIN_MAIL_REGISTRATION_TEMPLATE],
module: 'Admin'
);
/** @var \Modules\Messages\Models\Email $mail */
$mail = EmailMapper::get()
->with('l11n')
->where('id', (int) $emailSettings[SettingsEnum::LOGIN_MAIL_REGISTRATION_TEMPLATE]->content)
->where('l11n/language', $response->header->l11n->language)
->execute();
$mail->setFrom($emailSettings[SettingsEnum::MAIL_SERVER_ADDR]->content);
$mail->addTo((string) $request->getData('email'));
// @todo: load default l11n if no translation is available
$mailL11n = $mail->getL11nByLanguage($response->header->l11n->language);
$mail->subject = $mailL11n->subject;
// @todo: improve, the /tld link could be api.myurl.com which of course is not the url of the respective app.
// Maybe store the uri in the $app model? or store all urls in the config file
$mail->body = \str_replace(
[
'{confirmation_link}',
'{user_name}',
],
[
UriFactory::hasQuery('/' . \strtolower($app->name))
? UriFactory::build('{/' . \strtolower($app->name) . '}/' . \strtolower($app->name) . '/signup/confirmation?hash=' . $dataChange->getHash())
: UriFactory::build('{/tld}/{/lang}/' . \strtolower($app->name) . '/signup/confirmation?hash=' . $dataChange->getHash()),
$account->login,
],
$mailL11n->body
);
$mail->bodyAlt = \str_replace(
[
'{confirmation_link}',
'{user_name}',
],
[
UriFactory::hasQuery('/' . \strtolower($app->name))
? UriFactory::build('{/' . \strtolower($app->name) . '}/' . \strtolower($app->name) . '/signup/confirmation?hash=' . $dataChange->getHash())
: UriFactory::build('{/tld}/{/lang}/' . \strtolower($app->name) . '/signup/confirmation?hash=' . $dataChange->getHash()),
$account->login,
],
$mailL11n->bodyAlt
);
$handler->send($mail);
$this->fillJsonResponse(
$request,
$response,
@ -2029,7 +2050,7 @@ final class ApiController extends Controller
$account->l11n
->loadFromLanguage(
$locale[0] ?? $this->app->l11nServer->language,
$locale[1] ?? $this->app->l11nServer->getCountry()
$locale[1] ?? $this->app->l11nServer->country
);
}
@ -2527,12 +2548,12 @@ final class ApiController extends Controller
? new GroupPermission((int) $request->getData('permissionref'))
: new AccountPermission((int) $request->getData('permissionref'));
$permission->setUnit($request->getDataInt('permissionunit'));
$permission->setApp($request->getDataInt('permissionapp'));
$permission->setModule($request->getDataString('permissionmodule'));
$permission->setCategory($request->getDataInt('permissioncategory'));
$permission->setElement($request->getDataInt('permissionelement'));
$permission->setComponent($request->getDataInt('permissioncomponent'));
$permission->unit = $request->getDataInt('permissionunit');
$permission->app = $request->getDataInt('permissionapp');
$permission->module = $request->getDataString('permissionmodule');
$permission->category = $request->getDataInt('permissioncategory');
$permission->element = $request->getDataInt('permissionelement');
$permission->component = $request->getDataInt('permissioncomponent');
$permission->setPermission(
($request->getDataInt('permissionread') ?? 0)
| ($request->getDataInt('permissioncreate') ?? 0)
@ -2613,12 +2634,12 @@ final class ApiController extends Controller
*/
private function updatePermissionFromRequest(RequestAbstract $request, PermissionAbstract $permission) : PermissionAbstract
{
$permission->setUnit($request->getDataInt('permissionunit') ?? $permission->getUnit());
$permission->setApp($request->getDataInt('permissionapp') ?? $permission->getApp());
$permission->setModule($request->getDataString('permissionmodule') ?? $permission->getModule());
$permission->setCategory($request->getDataInt('permissioncategory') ?? $permission->getCategory());
$permission->setElement($request->getDataInt('permissionelement') ?? $permission->getElement());
$permission->setComponent($request->getDataInt('permissioncomponent') ?? $permission->getComponent());
$permission->unit = $request->getDataInt('permissionunit') ?? $permission->unit;
$permission->app = $request->getDataInt('permissionapp') ?? $permission->app;
$permission->module = $request->getDataString('permissionmodule') ?? $permission->module;
$permission->category = $request->getDataInt('permissioncategory') ?? $permission->category;
$permission->element = $request->getDataInt('permissionelement') ?? $permission->element;
$permission->component = $request->getDataInt('permissioncomponent') ?? $permission->component;
$permission->setPermission(($request->getDataInt('permissioncreate') ?? 0)
| ($request->getDataInt('permissionread') ?? 0)
| ($request->getDataInt('permissionupdate') ?? 0)

View File

@ -694,10 +694,10 @@ final class BackendController extends Controller
$id = $request->getDataString('id') ?? '';
/** @var null|\Model\NullSetting|\Model\Setting[] $settings */
/** @var \Model\Setting[] $settings */
$settings = SettingMapper::getAll()->where('module', $id)->execute();
if ($settings->id > 0) {
$view->data['settings'] = \is_array($settings) ? $settings : [$settings];
if (empty($settings)) {
$view->data['settings'] = $settings;
}
$class = '\\Modules\\' . $request->getData('id') . '\\Models\\SettingsEnum';

View File

@ -21,6 +21,9 @@ namespace Modules\Admin\Models;
* @license OMS License 2.0
* @link https://jingga.app
* @since 1.0.0
*
* @template T of Account
* @extends AccountMapper<T>
*/
final class AccountCredentialMapper extends AccountMapper
{

View File

@ -46,7 +46,7 @@ class AccountExternal
* @var int
* @since 1.0.0
*/
private int $subtype = AccountExternalSubtype::STRIPE;
public int $subtype = AccountExternalSubtype::STRIPE;
/**
* External status.

View File

@ -24,7 +24,7 @@ use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
* @link https://jingga.app
* @since 1.0.0
*
* @template T of AccoutExternal
* @template T of AccountExternal
* @extends DataMapperFactory<T>
*/
class AccountExternalMapper extends DataMapperFactory

View File

@ -25,7 +25,7 @@ use phpOMS\DataStorage\Database\Mapper\DataMapperFactory;
* @link https://jingga.app
* @since 1.0.0
*
* @template T of PermissionAbstract
* @template T of \phpOMS\Account\PermissionAbstract
* @extends DataMapperFactory<T>
*/
final class PermissionAbstractMapper extends DataMapperFactory

View File

@ -318,12 +318,12 @@ echo $this->data['nav']->render(); ?>
<td><a href="#"><i class="fa fa-times"></i></a>
<td><a href="#"><i class="fa fa-cogs"></i></a>
<td><?= $value->id; ?>
<td><?= $value->getUnit(); ?>
<td><?= $value->getApp(); ?>
<td><?= $value->getModule(); ?>
<td><?= $value->getCategory(); ?>
<td><?= $value->getElement(); ?>
<td><?= $value->getComponent(); ?>
<td><?= $this->printHtml($value->unit); ?>
<td><?= $this->printHtml($value->app); ?>
<td><?= $this->printHtml($value->module); ?>
<td><?= $this->printHtml($value->category); ?>
<td><?= $this->printHtml($value->element); ?>
<td><?= $this->printHtml($value->component); ?>
<td>
<?= (PermissionType::CREATE | $permission) === $permission ? 'C' : ''; ?>
<?= (PermissionType::READ | $permission) === $permission ? 'R' : ''; ?>

View File

@ -269,12 +269,12 @@ echo $this->data['nav']->render(); ?>
<td><a href="#"><i class="fa fa-times"></i></a>
<td><i class="fa fa-cogs update btn"></i>
<td><?= $value->id; ?>
<td data-tpl-text="/unit" data-tpl-value="/unit"><?= $value->getUnit(); ?>
<td data-tpl-text="/app" data-tpl-value="/app"><?= $value->getApp(); ?>
<td data-tpl-text="/module" data-tpl-value="/module"><?= $value->getModule(); ?>
<td data-tpl-text="/type" data-tpl-value="/type"><?= $value->getCategory(); ?>
<td data-tpl-text="/ele" data-tpl-value="/ele"><?= $value->getElement(); ?>
<td data-tpl-text="/comp" data-tpl-value="/comp"><?= $value->getComponent(); ?>
<td data-tpl-text="/unit" data-tpl-value="/unit"><?= $this->printHtml($value->unit); ?>
<td data-tpl-text="/app" data-tpl-value="/app"><?= $this->printHtml($value->app); ?>
<td data-tpl-text="/module" data-tpl-value="/module"><?= $this->printHtml($value->module); ?>
<td data-tpl-text="/type" data-tpl-value="/type"><?= $this->printHtml($value->category); ?>
<td data-tpl-text="/ele" data-tpl-value="/ele"><?= $this->printHtml($value->element); ?>
<td data-tpl-text="/comp" data-tpl-value="/comp"><?= $this->printHtml($value->component); ?>
<td>
<?php if ((PermissionType::CREATE | $permission) === $permission) : ?>
<span data-tpl-text="/perm/c" data-tpl-value="/perm/c" data-value="<?= PermissionType::CREATE; ?>">C</span>