diff --git a/Admin/Install/Media.install.json b/Admin/Install/Media.install.json new file mode 100644 index 0000000..d9d8638 --- /dev/null +++ b/Admin/Install/Media.install.json @@ -0,0 +1,71 @@ +[ + { + "type": "collection", + "create_directory": true, + "name": "Admin", + "virtualPath": "/Modules", + "user": 1 + }, + { + "type": "collection", + "create_directory": true, + "name": "Templates", + "virtualPath": "/Modules/Admin", + "user": 1 + }, + { + "type": "upload", + "create_collection": true, + "name": "Pdf Exporter", + "virtualPath": "/Modules/Admin/Templates", + "path": "/Modules/Admin/Templates/Pdf Exporter", + "files": [ + "/Modules/Admin/Admin/Install/Media/PdfExporter" + ], + "user": 1 + }, + { + "type": "upload", + "create_collection": true, + "name": "Excel Exporter", + "virtualPath": "/Modules/Admin/Templates", + "path": "/Modules/Admin/Templates/Excel Exporter", + "files": [ + "/Modules/Admin/Admin/Install/Media/ExcelExporter" + ], + "user": 1 + }, + { + "type": "upload", + "create_collection": true, + "name": "Csv Exporter", + "virtualPath": "/Modules/Admin/Templates", + "path": "/Modules/Admin/Templates/Csv Exporter", + "files": [ + "/Modules/Admin/Admin/Install/Media/CsvExporter" + ], + "user": 1 + }, + { + "type": "upload", + "create_collection": true, + "name": "Word Exporter", + "virtualPath": "/Modules/Admin/Templates", + "path": "/Modules/Admin/Templates/Word Exporter", + "files": [ + "/Modules/Admin/Admin/Install/Media/WordExporter" + ], + "user": 1 + }, + { + "type": "upload", + "create_collection": true, + "name": "Email Exporter", + "virtualPath": "/Modules/Admin/Templates", + "path": "/Modules/Admin/Templates/Email Exporter", + "files": [ + "/Modules/Admin/Admin/Install/Media/EmailExporter" + ], + "user": 1 + } +] \ No newline at end of file diff --git a/Admin/Install/Media.php b/Admin/Install/Media.php new file mode 100644 index 0000000..e086aeb --- /dev/null +++ b/Admin/Install/Media.php @@ -0,0 +1,68 @@ + __DIR__ . '/Media.install.json']); + + $defaultPdfExport = (int) \reset($media['upload'][0]); + $defaultExcelExport = (int) \reset($media['upload'][1]); + $defaultCsvExport = (int) \reset($media['upload'][2]); + $defaultWordExport = (int) \reset($media['upload'][3]); + $defaultEmailExport = (int) \reset($media['upload'][4]); + + SettingMapper::create()->execute( + new Setting(0, SettingsEnum::DEFAULT_PDF_EXPORT_TEMPLATE, (string) $defaultPdfExport, '\\d+', 1, 'Admin') + ); + SettingMapper::create()->execute( + new Setting(0, SettingsEnum::DEFAULT_EXCEL_EXPORT_TEMPLATE, (string) $defaultExcelExport, '\\d+', 1, 'Admin') + ); + SettingMapper::create()->execute( + new Setting(0, SettingsEnum::DEFAULT_CSV_EXPORT_TEMPLATE, (string) $defaultCsvExport, '\\d+', 1, 'Admin') + ); + SettingMapper::create()->execute( + new Setting(0, SettingsEnum::DEFAULT_WORD_EXPORT_TEMPLATE, (string) $defaultWordExport, '\\d+', 1, 'Admin') + ); + SettingMapper::create()->execute( + new Setting(0, SettingsEnum::DEFAULT_EMAIL_EXPORT_TEMPLATE, (string) $defaultEmailExport, '\\d+', 1, 'Admin') + ); + } +} diff --git a/Admin/Install/Media/CsvExporter/defaultCsvExporter.csv.php b/Admin/Install/Media/CsvExporter/defaultCsvExporter.csv.php new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Admin/Install/Media/CsvExporter/defaultCsvExporter.csv.php @@ -0,0 +1 @@ + diff --git a/Admin/Install/Media/EmailExporter/defaultEmailExporter.mail.php b/Admin/Install/Media/EmailExporter/defaultEmailExporter.mail.php new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Admin/Install/Media/EmailExporter/defaultEmailExporter.mail.php @@ -0,0 +1 @@ + diff --git a/Admin/Install/Media/ExcelExporter/defaultExcelExporter.xls.php b/Admin/Install/Media/ExcelExporter/defaultExcelExporter.xls.php new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Admin/Install/Media/ExcelExporter/defaultExcelExporter.xls.php @@ -0,0 +1 @@ + diff --git a/Admin/Install/Media/PdfExporter/defaultPdfExporter.pdf.php b/Admin/Install/Media/PdfExporter/defaultPdfExporter.pdf.php new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Admin/Install/Media/PdfExporter/defaultPdfExporter.pdf.php @@ -0,0 +1 @@ + diff --git a/Admin/Install/Media/WordExporter/defaultWordExporter.doc.php b/Admin/Install/Media/WordExporter/defaultWordExporter.doc.php new file mode 100644 index 0000000..8d1c8b6 --- /dev/null +++ b/Admin/Install/Media/WordExporter/defaultWordExporter.doc.php @@ -0,0 +1 @@ + diff --git a/Admin/Installer.php b/Admin/Installer.php index 6cd059d..9fbda86 100755 --- a/Admin/Installer.php +++ b/Admin/Installer.php @@ -16,8 +16,8 @@ namespace Modules\Admin\Admin; use Model\Setting; use Model\SettingMapper; -use Model\SettingsEnum; use Modules\Admin\Models\LocalizationMapper; +use Modules\Admin\Models\SettingsEnum; use phpOMS\Application\ApplicationAbstract; use phpOMS\Config\SettingsInterface; use phpOMS\DataStorage\Database\Connection\SQLiteConnection; @@ -78,19 +78,19 @@ final class Installer extends InstallerAbstract **/ private static function installDefaultSettings() : void { - SettingMapper::create()->execute(new Setting(0, SettingsEnum::PASSWORD_PATTERN, '')); - SettingMapper::create()->execute(new Setting(0, SettingsEnum::LOGIN_TRIES, '3', '\\d+')); - SettingMapper::create()->execute(new Setting(0, SettingsEnum::LOGIN_TIMEOUT, '3', '\\d+')); - SettingMapper::create()->execute(new Setting(0, SettingsEnum::PASSWORD_INTERVAL, '90', '\\d+')); - SettingMapper::create()->execute(new Setting(0, SettingsEnum::PASSWORD_HISTORY, '3', '\\d+')); - SettingMapper::create()->execute(new Setting(0, SettingsEnum::LOGGING_STATUS, '1', '[0-3]')); - SettingMapper::create()->execute(new Setting(0, SettingsEnum::LOGGING_PATH, '')); + SettingMapper::create()->execute(new Setting(0, SettingsEnum::PASSWORD_PATTERN, '', module: 'Admin')); + SettingMapper::create()->execute(new Setting(0, SettingsEnum::LOGIN_TRIES, '3', '\\d+', module: 'Admin')); + SettingMapper::create()->execute(new Setting(0, SettingsEnum::LOGIN_TIMEOUT, '3', '\\d+', module: 'Admin')); + SettingMapper::create()->execute(new Setting(0, SettingsEnum::PASSWORD_INTERVAL, '90', '\\d+', module: 'Admin')); + SettingMapper::create()->execute(new Setting(0, SettingsEnum::PASSWORD_HISTORY, '3', '\\d+', module: 'Admin')); + SettingMapper::create()->execute(new Setting(0, SettingsEnum::LOGGING_STATUS, '1', '[0-3]', module: 'Admin')); + SettingMapper::create()->execute(new Setting(0, SettingsEnum::LOGGING_PATH, '', module: 'Admin')); - SettingMapper::create()->execute(new Setting(0, SettingsEnum::DEFAULT_ORGANIZATION, '1', '\\d+')); + SettingMapper::create()->execute(new Setting(0, SettingsEnum::DEFAULT_ORGANIZATION, '1', '\\d+', module: 'Admin')); - SettingMapper::create()->execute(new Setting(0, SettingsEnum::LOGIN_STATUS, '1', '[0-3]')); + SettingMapper::create()->execute(new Setting(0, SettingsEnum::LOGIN_STATUS, '1', '[0-3]', module: 'Admin')); - SettingMapper::create()->execute(new Setting(0, SettingsEnum::DEFAULT_LOCALIZATION, '1', '\\d+')); + SettingMapper::create()->execute(new Setting(0, SettingsEnum::DEFAULT_LOCALIZATION, '1', '\\d+', module: 'Admin')); SettingMapper::create()->execute(new Setting(0, SettingsEnum::MAIL_SERVER_ADDR, 'admin@karaka.email', "(?:[a-z0-9!#$%&'*+\/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+\/=?^_`{|}~-]+)*|\"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])", module: 'Admin')); SettingMapper::create()->execute(new Setting(0, SettingsEnum::MAIL_SERVER_TYPE, SubmitType::MAIL, module: 'Admin')); diff --git a/Admin/Routes/Web/Backend.php b/Admin/Routes/Web/Backend.php index cc8067c..a782de5 100755 --- a/Admin/Routes/Web/Backend.php +++ b/Admin/Routes/Web/Backend.php @@ -27,7 +27,7 @@ return [ ], ], - '^.*/admin/module/settings\?id=Admin.*$' => [ + '^.*/admin/module/settings.*$' => [ [ 'dest' => '\Modules\Admin\Controller\BackendController:viewModuleSettings', 'verb' => RouteVerb::GET, diff --git a/Controller/ApiController.php b/Controller/ApiController.php index 315c184..64345a3 100755 --- a/Controller/ApiController.php +++ b/Controller/ApiController.php @@ -14,7 +14,7 @@ declare(strict_types=1); namespace Modules\Admin\Controller; -use Model\SettingsEnum; +use Modules\Admin\Models\SettingsEnum; use Modules\Admin\Models\Account; use Modules\Admin\Models\AccountCredentialMapper; use Modules\Admin\Models\AccountMapper; @@ -509,7 +509,7 @@ final class ApiController extends Controller ->execute() ->l11n; - if ((bool) ($request->getData('load') ?? false)) { + if (($request->getData('localization_load') ?? '-1') !== '-1') { $locale = \explode('_', $request->getData('localization_load')); $l11n->loadFromLanguage($locale[0], $locale[1]); diff --git a/Controller/BackendController.php b/Controller/BackendController.php index 097c014..e2104dd 100755 --- a/Controller/BackendController.php +++ b/Controller/BackendController.php @@ -16,7 +16,6 @@ namespace Modules\Admin\Controller; use Model\NullSetting; use Model\SettingMapper; -use Model\SettingsEnum; use Modules\Admin\Models\AccountMapper; use Modules\Admin\Models\AccountPermissionMapper; use Modules\Admin\Models\GroupMapper; @@ -24,6 +23,7 @@ use Modules\Admin\Models\GroupPermissionMapper; use Modules\Admin\Models\LocalizationMapper; use Modules\Admin\Models\NullAccountPermission; use Modules\Admin\Models\NullGroupPermission; +use Modules\Admin\Models\SettingsEnum; use Modules\Auditor\Models\AuditMapper; use phpOMS\Contract\RenderableInterface; use phpOMS\Localization\NullLocalization; @@ -529,18 +529,21 @@ final class BackendController extends Controller if ($request->getData('id') === 'Admin') { $view->setTemplate('/Modules/' . ($request->getData('id') ?? '') . '/Admin/Settings/Theme/Backend/settings'); } elseif (\is_file(__DIR__ . '/../../' . ($request->getData('id') ?? '') . '/Admin/Settings/Theme/Backend/settings.tpl.php')) { - return new NullView(); + return $this->app->moduleManager->get($request->getData('id'))->viewModuleSettings($request, $response, $data); } else { $view->setTemplate('/Modules/Admin/Theme/Backend/modules-settings'); } - $generalSettings = $this->app->appSettings->get(null, [ + $generalSettings = $this->app->appSettings->get( + names: [ SettingsEnum::PASSWORD_PATTERN, SettingsEnum::LOGIN_TIMEOUT, SettingsEnum::PASSWORD_INTERVAL, SettingsEnum::PASSWORD_HISTORY, SettingsEnum::LOGIN_TRIES, SettingsEnum::LOGGING_STATUS, SettingsEnum::LOGGING_PATH, SettingsEnum::DEFAULT_ORGANIZATION, SettingsEnum::LOGIN_STATUS, SettingsEnum::DEFAULT_LOCALIZATION, SettingsEnum::MAIL_SERVER_ADDR, - ]); + ], + module: 'Admin' + ); $view->setData('generalSettings', $generalSettings); - $view->setData('defaultlocalization', LocalizationMapper::get()->where('id', (int) $generalSettings[SettingsEnum::DEFAULT_LOCALIZATION]->content)->execute()); + $view->setData('defaultlocalization', LocalizationMapper::get()->where('id', (int) $generalSettings[SettingsEnum::DEFAULT_LOCALIZATION . '::Admin']->content)->execute()); return $view; } diff --git a/Models/SettingsEnum.php b/Models/SettingsEnum.php new file mode 100644 index 0000000..1450bd2 --- /dev/null +++ b/Models/SettingsEnum.php @@ -0,0 +1,90 @@ +getData('nav')->render(); ?> $value) : ++$c; - $url = UriFactory::build('{/prefix}admin/account/settings?{?}&id=' . $value->getId()); - $color = 'darkred'; + $c = 0; + foreach ($accounts as $key => $value) : ++$c; + $url = UriFactory::build('{/prefix}admin/account/settings?{?}&id=' . $value->getId()); + $color = 'darkred'; - if ($value->getStatus() === AccountStatus::ACTIVE) { $color = 'green'; } - elseif ($value->getStatus() === AccountStatus::INACTIVE) { $color = 'darkblue'; } - elseif ($value->getStatus() === AccountStatus::TIMEOUT) { $color = 'purple'; } - elseif ($value->getStatus() === AccountStatus::BANNED) { $color = 'red'; } ?> + if ($value->getStatus() === AccountStatus::ACTIVE) { $color = 'green'; } + elseif ($value->getStatus() === AccountStatus::INACTIVE) { $color = 'darkblue'; } + elseif ($value->getStatus() === AccountStatus::TIMEOUT) { $color = 'purple'; } + elseif ($value->getStatus() === AccountStatus::BANNED) { $color = 'red'; } + ?> getId(); ?> getHtml('Status'. $value->getStatus()); ?> diff --git a/Theme/Backend/groups-single.tpl.php b/Theme/Backend/groups-single.tpl.php index 5dc40d1..b937355 100755 --- a/Theme/Backend/groups-single.tpl.php +++ b/Theme/Backend/groups-single.tpl.php @@ -272,7 +272,7 @@ echo $this->getData('nav')->render(); ?> getUnit(); ?> getApp(); ?> getModule(); ?> - getType(); ?> + getCategory(); ?> getElement(); ?> getComponent(); ?> diff --git a/info.json b/info.json index 60b2c9f..60b4a47 100755 --- a/info.json +++ b/info.json @@ -18,6 +18,7 @@ "directory": "Admin", "dependencies": {}, "providing": { + "Media": "*", "Navigation": "*" }, "load": [ diff --git a/tests/Controller/Api/ApiControllerSettingsTrait.php b/tests/Controller/Api/ApiControllerSettingsTrait.php index ef16978..71461dd 100755 --- a/tests/Controller/Api/ApiControllerSettingsTrait.php +++ b/tests/Controller/Api/ApiControllerSettingsTrait.php @@ -14,7 +14,7 @@ declare(strict_types=1); namespace Modules\Admin\tests\Controller\Api; -use Model\SettingsEnum; +use Modules\Admin\Models\SettingsEnum; use phpOMS\Message\Http\HttpRequest; use phpOMS\Message\Http\HttpResponse; use phpOMS\Message\Http\RequestStatusCode;