Rename reporter->helper

This commit is contained in:
Dennis Eichhorn 2019-01-20 18:17:00 +01:00
commit 96981ae385
33 changed files with 2770 additions and 0 deletions

View File

@ -0,0 +1,63 @@
[
{
"id": 1002701001,
"pid": "/backend",
"type": 2,
"subtype": 1,
"name": "Helper",
"uri": "/{/lang}/backend/helper/list?{?}",
"target": "self",
"icon": null,
"order": 60,
"from": "Helper",
"permission": { "permission": 2, "type": null, "element": null },
"parent": 1003301001,
"children": [
{
"id": 1002702001,
"pid": "/backend/helper",
"type": 3,
"subtype": 1,
"name": "List",
"uri": "/{/lang}/backend/helper/list?{?}",
"target": "self",
"icon": null,
"order": 1,
"from": "Helper",
"permission": { "permission": 2, "type": null, "element": null },
"parent": 1002701001,
"children": []
},
{
"id": 1002703001,
"pid": "/backend/helper",
"type": 3,
"subtype": 5,
"name": "CreateReport",
"uri": "/{/lang}/backend/helper/report/create?{?}",
"target": "self",
"icon": null,
"order": 5,
"from": "Helper",
"permission": { "permission": 4, "type": null, "element": null },
"parent": 1002701001,
"children": []
},
{
"id": 1002704001,
"pid": "/backend/helper",
"type": 3,
"subtype": 5,
"name": "CreateTemplate",
"uri": "/{/lang}/backend/helper/template/create?{?}",
"target": "self",
"icon": null,
"order": 10,
"from": "Helper",
"permission": { "permission": 4, "type": null, "element": null },
"parent": 1002701001,
"children": []
}
]
}
]

View File

@ -0,0 +1,43 @@
<?php
/**
* Orange Management
*
* PHP Version 7.2
*
* @package Modules\Helper\Admin\Install
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://website.orange-management.de
*/
declare(strict_types=1);
namespace Modules\Helper\Admin\Install;
use phpOMS\DataStorage\Database\DatabasePool;
/**
* Navigation class.
*
* @package Modules\Helper\Admin\Install
* @license OMS License 1.0
* @link http://website.orange-management.de
* @since 1.0.0
*/
class Navigation
{
/**
* Install navigation providing
*
* @param string $path Module path
* @param DatabasePool $dbPool Database pool for database interaction
*
* @return void
*
* @since 1.0.0
*/
public static function install(string $path = null, DatabasePool $dbPool = null) : void
{
\Modules\Navigation\Admin\Installer::installExternal($dbPool, ['path' => __DIR__ . '/Navigation.install.json']);
}
}

126
Admin/Install/db.json Normal file
View File

@ -0,0 +1,126 @@
{
"helper_template": {
"name": "helper_template",
"fields": {
"helper_template_id": {
"name": "helper_template_id",
"type": "INT",
"null": false,
"primary": true,
"autoincrement": true
},
"helper_template_status": {
"name": "helper_template_status",
"type": "TINYINT",
"null": false
},
"helper_template_title": {
"name": "helper_template_title",
"type": "VARCHAR(255)",
"null": false
},
"helper_template_data": {
"name": "helper_template_data",
"type": "TINYINT",
"null": false
},
"helper_template_standalone": {
"name": "helper_template_standalone",
"type": "TINYINT",
"null": false
},
"helper_template_expected": {
"name": "helper_template_expected",
"type": "VARCHAR(255)",
"null": false
},
"helper_template_desc": {
"name": "helper_template_desc",
"type": "TEXT",
"null": false
},
"helper_template_desc_raw": {
"name": "helper_template_desc_raw",
"type": "TEXT",
"null": false
},
"helper_template_media": {
"name": "helper_template_media",
"type": "INT",
"null": false,
"foreignTable": "media",
"foreignKey": "media_id"
},
"helper_template_creator": {
"name": "helper_template_creator",
"type": "INT",
"null": false,
"foreignTable": "account",
"foreignKey": "account_id"
},
"helper_template_created": {
"name": "helper_template_created",
"type": "DATETIME",
"null": false
}
}
},
"helper_report": {
"name": "helper_report",
"fields": {
"helper_report_id": {
"name": "helper_report_id",
"type": "INT",
"null": false,
"primary": true,
"autoincrement": true
},
"helper_report_status": {
"name": "helper_report_status",
"type": "TINYINT",
"null": false
},
"helper_report_title": {
"name": "helper_report_title",
"type": "VARCHAR(255)",
"null": false
},
"helper_report_desc": {
"name": "helper_report_desc",
"type": "TEXT",
"null": false
},
"helper_report_desc_raw": {
"name": "helper_report_desc_raw",
"type": "TEXT",
"null": false
},
"helper_report_media": {
"name": "helper_report_media",
"type": "INT",
"null": false,
"foreignTable": "media",
"foreignKey": "media_id"
},
"helper_report_template": {
"name": "helper_report_template",
"type": "INT",
"null": false,
"foreignTable": "helper_template",
"foreignKey": "helper_template_id"
},
"helper_report_creator": {
"name": "helper_report_creator",
"type": "INT",
"null": false,
"foreignTable": "account",
"foreignKey": "account_id"
},
"helper_report_created": {
"name": "helper_report_created",
"type": "DATETIME",
"null": false
}
}
}
}

29
Admin/Installer.php Normal file
View File

@ -0,0 +1,29 @@
<?php
/**
* Orange Management
*
* PHP Version 7.2
*
* @package Modules\Helper\Admin
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://website.orange-management.de
*/
declare(strict_types=1);
namespace Modules\Helper\Admin;
use phpOMS\Module\InstallerAbstract;
/**
* Installer class.
*
* @package Modules\Helper\Admin
* @license OMS License 1.0
* @link http://website.orange-management.de
* @since 1.0.0
*/
class Installer extends InstallerAbstract
{
}

42
Admin/Routes/Web/Api.php Normal file
View File

@ -0,0 +1,42 @@
<?php
use Modules\Helper\Controller\ApiController;
use Modules\Helper\Models\PermissionState;
use phpOMS\Account\PermissionType;
use phpOMS\Router\RouteVerb;
return [
'^.*/api/helper/report/export.*$' => [
[
'dest' => '\Modules\Helper\Controller\ApiController:apiHelperExport',
'verb' => RouteVerb::GET,
'permission' => [
'module' => ApiController::MODULE_NAME,
'type' => PermissionType::READ,
'state' => PermissionState::REPORT,
],
],
],
'^.*/api/helper/report/template.*$' => [
[
'dest' => '\Modules\Helper\Controller\ApiController:apiTemplateCreate',
'verb' => RouteVerb::SET,
'permission' => [
'module' => ApiController::MODULE_NAME,
'type' => PermissionType::READ,
'state' => PermissionState::TEMPLATE,
],
],
],
'^.*/api/helper/report/report.*$' => [
[
'dest' => '\Modules\Helper\Controller\ApiController:apiReportCreate',
'verb' => RouteVerb::SET,
'permission' => [
'module' => ApiController::MODULE_NAME,
'type' => PermissionType::CREATE,
'state' => PermissionState::REPORT,
],
],
],
];

View File

@ -0,0 +1,71 @@
<?php
use Modules\Helper\Controller\BackendController;
use Modules\Helper\Models\PermissionState;
use phpOMS\Account\PermissionType;
use phpOMS\Router\RouteVerb;
return [
'^.*/backend/helper/template/create.*$' => [
[
'dest' => '\Modules\Media\Controller\BackendController::setUpFileUploader',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
'type' => PermissionType::CREATE,
'state' => PermissionState::TEMPLATE,
],
],
[
'dest' => '\Modules\Helper\Controller\BackendController:viewTemplateCreate',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
'type' => PermissionType::CREATE,
'state' => PermissionState::TEMPLATE,
],
],
],
'^.*/backend/helper/report/create.*$' => [
[
'dest' => '\Modules\Media\Controller\BackendController::setUpFileUploader',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
'type' => PermissionType::CREATE,
'state' => PermissionState::REPORT,
],
],
[
'dest' => '\Modules\Helper\Controller\BackendController:viewReportCreate',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
'type' => PermissionType::CREATE,
'state' => PermissionState::REPORT,
],
],
],
'^.*/backend/helper/list.*$' => [
[
'dest' => '\Modules\Helper\Controller\BackendController:viewTemplateList',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
'type' => PermissionType::READ,
'state' => PermissionState::REPORT,
],
],
],
'^.*/backend/helper/report/view.*$' => [
[
'dest' => '\Modules\Helper\Controller\BackendController:viewHelperReport',
'verb' => RouteVerb::GET,
'permission' => [
'module' => BackendController::MODULE_NAME,
'type' => PermissionType::READ,
'state' => PermissionState::REPORT,
],
],
],
];

30
Admin/Status.php Normal file
View File

@ -0,0 +1,30 @@
<?php
/**
* Orange Management
*
* PHP Version 7.2
*
* @package Modules\Helper\Admin
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://website.orange-management.de
*/
declare(strict_types=1);
namespace Modules\Helper\Admin;
use phpOMS\Module\StatusAbstract;
/**
* Navigation class.
*
* @package Modules\Helper\Admin
* @license OMS License 1.0
* @link http://website.orange-management.de
* @since 1.0.0
*/
class Status extends StatusAbstract
{
}

29
Admin/Uninstaller.php Normal file
View File

@ -0,0 +1,29 @@
<?php
/**
* Orange Management
*
* PHP Version 7.2
*
* @package Modules\Helper\Admin
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://website.orange-management.de
*/
declare(strict_types=1);
namespace Modules\Helper\Admin;
use phpOMS\Module\UninstallerAbstract;
/**
* Uninstaller class.
*
* @package Modules\Helper\Admin
* @license OMS License 1.0
* @link http://website.orange-management.de
* @since 1.0.0
*/
class Uninstaller extends UninstallerAbstract
{
}

30
Admin/Updater.php Normal file
View File

@ -0,0 +1,30 @@
<?php
/**
* Orange Management
*
* PHP Version 7.2
*
* @package Modules\Helper\Admin
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://website.orange-management.de
*/
declare(strict_types=1);
namespace Modules\Helper\Admin;
use phpOMS\Module\UpdaterAbstract;
/**
* Updater class.
*
* @package Modules\Helper\Admin
* @license OMS License 1.0
* @link http://website.orange-management.de
* @since 1.0.0
*/
class Updater extends UpdaterAbstract
{
}

View File

@ -0,0 +1,270 @@
<?php
/**
* Orange Management
*
* PHP Version 7.2
*
* @package Modules\Helper
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://website.orange-management.de
*/
declare(strict_types=1);
namespace Modules\Helper\Controller;
use Modules\Media\Models\Collection;
use Modules\Media\Models\CollectionMapper;
use Modules\Media\Models\MediaMapper;
use Modules\Helper\Models\PermissionState;
use Modules\Helper\Models\Report;
use Modules\Helper\Models\ReportMapper;
use Modules\Helper\Models\Template;
use Modules\Helper\Models\TemplateDataType;
use Modules\Helper\Models\TemplateMapper;
use phpOMS\Account\PermissionType;
use phpOMS\Message\Http\RequestStatusCode;
use phpOMS\Message\NotificationLevel;
use phpOMS\Message\RequestAbstract;
use phpOMS\Message\ResponseAbstract;
use phpOMS\System\MimeType;
use phpOMS\Utils\IO\Csv\CsvDatabaseMapper;
use phpOMS\Utils\IO\Excel\ExcelDatabaseMapper;
use phpOMS\Utils\Parser\Markdown\Markdown;
use phpOMS\Utils\StringUtils;
use phpOMS\Views\View;
/**
* TODO: Implement auto sqlite generator on upload
*/
/**
* Helper controller class.
*
* @package Modules\Helper
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.
* @link http://orange-managementcom
* @license OMS License 1.0
* @link http://website.orange-management.de
* @since 1.0.0
*/
final class ApiController extends Controller
{
/**
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiHelperSingle(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
{
// todo: check permission here
$template = TemplateMapper::get((int) $request->getData('id'));
$accountId = $request->getHeader()->getAccount();
if ($template->getCreatedBy()->getId() !== $accountId // todo: also check if report createdBy
&& !$this->app->accountManager->get($accountId)->hasPermission(
PermissionType::READ, $this->app->orgId, null, self::MODULE_NAME, PermissionState::REPORT, $template->getId())
) {
$response->getHeader()->setStatusCode(RequestStatusCode::R_403);
}
switch ($request->getData('type')) {
case 'pdf':
$response->getHeader()->set('Content-Type', MimeType::M_PDF, true);
break;
case 'csv':
$response->getHeader()->set('Content-Type', MimeType::M_CONF, true);
break;
case 'xlsx':
$response->getHeader()->set(
'Content-disposition', 'attachment; filename="'
. ((string) $request->getData('id')) . '.'
. ((string) $request->getData('type'))
. '"'
, true);
$response->getHeader()->set('Content-Type', MimeType::M_XLSX, true);
$response->getHeader()->set('Content-Type', MimeType::M_XLSX, true);
break;
case 'json':
$response->getHeader()->set('Content-Type', MimeType::M_JSON, true);
break;
default:
// TODO handle bad request
}
if ($request->getData('download') !== null) {
$response->getHeader()->set('Content-Type', MimeType::M_BIN, true);
$response->getHeader()->set('Content-Transfer-Encoding', 'Binary', true);
$response->getHeader()->set(
'Content-disposition', 'attachment; filename="'
. ((string) $request->getData('id')) . '.'
. ((string) $request->getData('type'))
. '"'
, true);
}
/** @var array $reportLanguage */
/** @noinspection PhpIncludeInspection */
include_once __DIR__ . '/Templates/' . $request->getData('id') . '/' . $request->getData('id') . '.lang.php';
$exportView = new View($this->app, $request, $response);
$exportView->addData('lang', $reportLanguage[$this->app->accountManager->get($request->getHeader()->getAccount())->getL11n()->getLanguage()]);
$exportView->setTemplate(
'/Modules/Helper/Templates/'
. ((string) $request->getData('id')) . '/'
. ((string) $request->getData('id')) . '.'
. ((string) $request->getData('type'))
);
$response->set('export', $exportView->render());
}
/**
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiTemplateCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
{
$collectionId = $this->createMediaCollectionFromRequest($request);
$template = $this->createTemplateFromRequest($request, $collectionId);
$this->createModel($request, $template, TemplateMapper::class, 'template');
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Template', 'Template successfully created', $template);
}
private function createMediaCollectionFromRequest(RequestAbstract $request) : int
{
if ($request->getData('media-list') === null) {
return -1;
}
$files = \json_decode((string) $request->getData('media-list'), true);
// TODO: make sure this user has permissions for provided files
/* Create collection */
$mediaCollection = new Collection();
$mediaCollection->setName((string) ($request->getData('name') ?? 'Empty'));
$mediaCollection->setDescription(Markdown::parse((string) ($request->getData('description') ?? '')));
$mediaCollection->setDescriptionRaw((string) ($request->getData('description') ?? ''));
$mediaCollection->setCreatedBy($request->getHeader()->getAccount());
$mediaCollection->setSources($files);
return (int) CollectionMapper::create($mediaCollection);
}
private function createTemplateFromRequest(RequestAbstract $request, int $collectionId) : Template
{
$expected = $request->getData('expected');
$helperTemplate = new Template();
$helperTemplate->setName($request->getData('name') ?? 'Empty');
$helperTemplate->setDescription(Markdown::parse((string) ($request->getData('description') ?? '')));
$helperTemplate->setDescriptionRaw((string) ($request->getData('description') ?? ''));
if ($collectionId > 0) {
$helperTemplate->setSource((int) $collectionId);
}
$helperTemplate->setStandalone((bool) $request->getData('standalone') ?? false);
$helperTemplate->setExpected(!empty($expected) ? \json_decode($expected, true) : []);
$helperTemplate->setCreatedBy($request->getHeader()->getAccount());
$helperTemplate->setDatatype((int) ($request->getData('datatype') ?? TemplateDataType::OTHER));
return $helperTemplate;
}
/**
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return void
*
* @api
*
* @since 1.0.0
*/
public function apiReportCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
{
// todo: check permission here
$this->handleTemplateDatabaseFromRequest($request);
$collectionId = $this->createMediaCollectionFromRequest($request);
$report = $this->createReportFromRequest($request, $response, $collectionId);
$this->createModel($request, $report, ReportMapper::class, 'report');
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Report', 'Report successfully created', $report);
}
private function createReportFromRequest(RequestAbstract $request, ResponseAbstract $response, int $collectionId) : Report
{
$helperReport = new Report();
$helperReport->setTitle((string) ($request->getData('name')));
$helperReport->setSource((int) $collectionId);
$helperReport->setTemplate((int) $request->getData('template'));
$helperReport->setCreatedBy($request->getHeader()->getAccount());
return $helperReport;
}
private function handleTemplateDatabaseFromRequest(RequestAbstract $request) : void
{
$files = \json_decode((string) ($request->getData('files')));
// TODO: make sure user has permission for files
// TODO: make sure user has permission for template
/* Init Template */
$template = TemplateMapper::get((int) $request->getData('template'));
if ($template->getDatatype() === TemplateDataType::GLOBAL_DB) {
$templateFiles = MediaMapper::get($template->getSource());
foreach ($templateFiles as $templateFile) {
$dbFile = MediaMapper::get($templateFile);
// Found centralized db
if ($dbFile->getExtension() === '.sqlite') {
$this->app->dbPool->create('helper_1', ['db' => 'sqlite', 'path' => $dbFile->getPath()]);
$csvDbMapper = new CsvDatabaseMapper($this->app->dbPool->get('helper_1'));
$excelDbMapper = new ExcelDatabaseMapper($this->app->dbPool->get('helper_1'));
$csvDbMapper->autoIdentifyCsvSettings(true);
foreach ($files as $file) {
$mediaFile = MediaMapper::get($file);
if (StringUtils::endsWith($mediaFile->getFilename(), '.db') && $mediaFile->getExtension() === '.csv') {
$csvDbMapper->addSource($mediaFile->getPath());
} elseif (StringUtils::endsWith($mediaFile->getFilename(), '.db') && ($mediaFile->getExtension() === '.xls' || $mediaFile->getExtension() === '.xlsx')) {
$excelDbMapper->addSource($mediaFile->getPath());
}
}
$csvDbMapper->insert();
$excelDbMapper->insert();
break;
}
}
}
}
}

View File

@ -0,0 +1,229 @@
<?php
/**
* Orange Management
*
* PHP Version 7.2
*
* @package Modules\Helper
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://website.orange-management.de
*/
declare(strict_types=1);
namespace Modules\Helper\Controller;
use Modules\Media\Models\Media;
use Modules\Media\Theme\Backend\Components\Upload\BaseView;
use Modules\Helper\Models\NullReport;
use Modules\Helper\Models\PermissionState;
use Modules\Helper\Models\Report;
use Modules\Helper\Models\ReportMapper;
use Modules\Helper\Models\Template;
use Modules\Helper\Models\TemplateMapper;
use phpOMS\Account\PermissionType;
use phpOMS\Asset\AssetType;
use phpOMS\DataStorage\Database\Query\Builder;
use phpOMS\Message\Http\RequestStatusCode;
use phpOMS\Message\RequestAbstract;
use phpOMS\Message\ResponseAbstract;
use phpOMS\Model\Html\Head;
use phpOMS\Utils\StringUtils;
use phpOMS\Views\View;
/**
* TODO: Implement auto sqlite generator on upload
*/
/**
* Helper controller class.
*
* @package Modules\Helper
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.
* @link http://orange-managementcom
* @license OMS License 1.0
* @link http://website.orange-management.de
* @since 1.0.0
*/
final class BackendController extends Controller
{
/**
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return \Serializable
*
* @since 1.0.0
* @codeCoverageIgnore
*/
public function viewTemplateList(RequestAbstract $request, ResponseAbstract $response, $data = null) : \Serializable
{
$view = new View($this->app, $request, $response);
$view->setTemplate('/Modules/Helper/Theme/Backend/helper-list');
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1002701001, $request, $response));
$reports = TemplateMapper::getNewest(25);
$view->addData('reports', $reports);
return $view;
}
/**
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return \Serializable
*
* @since 1.0.0
* @codeCoverageIgnore
*/
public function viewTemplateCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : \Serializable
{
$view = new View($this->app, $request, $response);
$view->setTemplate('/Modules/Helper/Theme/Backend/helper-template-create');
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1002701001, $request, $response));
$view->addData('media-upload', new BaseView($this->app, $request, $response));
$editor = new \Modules\Editor\Theme\Backend\Components\Editor\BaseView($this->app, $request, $response);
$view->addData('editor', $editor);
return $view;
}
/**
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return \Serializable
*
* @since 1.0.0
* @codeCoverageIgnore
*/
public function viewReportCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : \Serializable
{
$view = new View($this->app, $request, $response);
$view->setTemplate('/Modules/Helper/Theme/Backend/helper-create');
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1002701001, $request, $response));
$view->addData('media-upload', new BaseView($this->app, $request, $response));
$editor = new \Modules\Editor\Theme\Backend\Components\Editor\BaseView($this->app, $request, $response);
$view->addData('editor', $editor);
return $view;
}
/**
* @param RequestAbstract $request Request
* @param ResponseAbstract $response Response
* @param mixed $data Generic data
*
* @return \Serializable
*
* @throws \Exception
*
* @since 1.0.0
* @codeCoverageIgnore
*/
public function viewHelperReport(RequestAbstract $request, ResponseAbstract $response, $data = null) : \Serializable
{
$view = new View($this->app, $request, $response);
//$file = preg_replace('([^\w\s\d\-_~,;:\.\[\]\(\).])', '', $template->getName());
$template = TemplateMapper::get((int) $request->getData('id'));
$accountId = $request->getHeader()->getAccount();
if ($template->getCreatedBy()->getId() !== $accountId // todo: also check if report createdBy
&& !$this->app->accountManager->get($accountId)->hasPermission(
PermissionType::READ, $this->app->orgId, $this->app->appName, self::MODULE_NAME, PermissionState::REPORT, $template->getId())
) {
$view->setTemplate('/Web/Backend/Error/403_inline');
$response->getHeader()->setStatusCode(RequestStatusCode::R_403);
return $view;
}
$view->setTemplate('/Modules/Helper/Theme/Backend/helper-single');
$tcoll = [];
$files = $template->getSource()->getSources();
foreach ($files as $tMedia) {
$lowerPath = strtolower($tMedia->getPath());
if (StringUtils::endsWith($lowerPath, '.lang.php')) {
$tcoll['lang'] = $tMedia;
} elseif (StringUtils::endsWith($lowerPath, 'worker.php')) {
$tcoll['worker'] = $tMedia;
} elseif (StringUtils::endsWith($lowerPath, '.xlsx.php') || StringUtils::endsWith($lowerPath, '.xls.php')) {
$tcoll['excel'] = $tMedia;
} elseif (StringUtils::endsWith($lowerPath, '.docx.php') || StringUtils::endsWith($lowerPath, '.doc.php')) {
$tcoll['word'] = $tMedia;
} elseif (StringUtils::endsWith($lowerPath, '.pptx.php') || StringUtils::endsWith($lowerPath, '.ppt.php')) {
$tcoll['powerpoint'] = $tMedia;
} elseif (StringUtils::endsWith($lowerPath, '.pdf.php')) {
$tcoll['pdf'] = $tMedia;
} elseif (StringUtils::endsWith($lowerPath, '.csv.php')) {
$tcoll['csv'] = $tMedia;
} elseif (StringUtils::endsWith($lowerPath, '.json.php')) {
$tcoll['json'] = $tMedia;
} elseif (StringUtils::endsWith($lowerPath, '.tpl.php')) {
$tcoll['template'] = $tMedia;
} elseif (StringUtils::endsWith($lowerPath, '.css')) {
$tcoll['css'] = $tMedia;
/** @var Head $head */
$head = $response->get('Content')->getData('head');
$head->addAsset(AssetType::CSS, $request->getUri()->getBase() . $tMedia->getPath());
} elseif (StringUtils::endsWith($lowerPath, '.js')) {
$tcoll['js'] = $tMedia;
} elseif (StringUtils::endsWith($lowerPath, '.sqlite') || StringUtils::endsWith($lowerPath, '.db')) {
$tcoll['db'][] = $tMedia;
} else {
// Do nothing; only the creator knows how to deal with this type of file :)
}
}
if (!$template->isStandalone()) {
if (!isset($tcoll['template'])) {
throw new \Exception('No template file detected.');
}
$report = ReportMapper::getNewest(1,
(new Builder($this->app->dbPool->get()))->where('helper_report.helper_report_template', '=', $template->getId())
);
$rcoll = [];
$report = end($report);
$report = $report === false ? new NullReport() : $report;
if (!($report instanceof NullReport)) {
/** @var Media[] $files */
$files = $report->getSource()->getSources();
foreach ($files as $media) {
$rcoll[$media->getName() . '.' . $media->getExtension()] = $media;
}
}
$view->addData('report', $report);
$view->addData('rcoll', $rcoll);
}
$view->addData('tcoll', $tcoll);
$view->addData('lang', $request->getData('lang') ?? $request->getHeader()->getL11n()->getLanguage());
$view->addData('template', $template);
$view->addData('nav', $this->app->moduleManager->get('Navigation')->createNavigationMid(1002701001, $request, $response));
return $view;
}
}

86
Controller/Controller.php Normal file
View File

@ -0,0 +1,86 @@
<?php
/**
* Orange Management
*
* PHP Version 7.2
*
* @package Modules\Helper
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://website.orange-management.de
*/
declare(strict_types=1);
namespace Modules\Helper\Controller;
use phpOMS\Module\ModuleAbstract;
use phpOMS\Module\WebInterface;
/**
* TODO: Implement auto sqlite generator on upload
*/
/**
* Helper controller class.
*
* @package Modules\Helper
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.
* @link http://orange-managementcom
* @license OMS License 1.0
* @link http://website.orange-management.de
* @since 1.0.0
*/
class Controller extends ModuleAbstract implements WebInterface
{
/**
* Module path.
*
* @var string
* @since 1.0.0
*/
public const MODULE_PATH = __DIR__ . '/../';
/**
* Module version.
*
* @var string
* @since 1.0.0
*/
public const MODULE_VERSION = '1.0.0';
/**
* Module name.
*
* @var string
* @since 1.0.0
*/
public const MODULE_NAME = 'Helper';
/**
* Module id.
*
* @var int
* @since 1.0.0
*/
public const MODULE_ID = 1002700000;
/**
* Providing.
*
* @var string[]
* @since 1.0.0
*/
protected static $providing = [];
/**
* Dependencies.
*
* @var string[]
* @since 1.0.0
*/
protected static $dependencies = [];
}

31
Models/HelperStatus.php Normal file
View File

@ -0,0 +1,31 @@
<?php
/**
* Orange Management
*
* PHP Version 7.2
*
* @package Modules\Helper\Models
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://website.orange-management.de
*/
declare(strict_types=1);
namespace Modules\Helper\Models;
use phpOMS\Stdlib\Base\Enum;
/**
* Helper status.
*
* @package Modules\Helper\Models
* @license OMS License 1.0
* @link http://website.orange-management.de
* @since 1.0.0
*/
abstract class HelperStatus extends Enum
{
public const INACTIVE = 0;
public const ACTIVE = 1;
}

27
Models/NullReport.php Normal file
View File

@ -0,0 +1,27 @@
<?php
/**
* Orange Management
*
* PHP Version 7.2
*
* @package Modules\Helper\Models
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://website.orange-management.de
*/
declare(strict_types=1);
namespace Modules\Helper\Models;
/**
* Report model.
*
* @package Modules\Helper\Models
* @license OMS License 1.0
* @link http://website.orange-management.de
* @since 1.0.0
*/
class NullReport extends Report
{
}

27
Models/NullTemplate.php Normal file
View File

@ -0,0 +1,27 @@
<?php
/**
* Orange Management
*
* PHP Version 7.2
*
* @package Modules\Helper\Models
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://website.orange-management.de
*/
declare(strict_types=1);
namespace Modules\Helper\Models;
/**
* Report model.
*
* @package Modules\Helper\Models
* @license OMS License 1.0
* @link http://website.orange-management.de
* @since 1.0.0
*/
class NullTemplate extends Template
{
}

View File

@ -0,0 +1,31 @@
<?php
/**
* Orange Management
*
* PHP Version 7.2
*
* @package Modules\Helper
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://website.orange-management.de
*/
declare(strict_types=1);
namespace Modules\Helper\Models;
use phpOMS\Stdlib\Base\Enum;
/**
* Permision state enum.
*
* @package Modules\Helper
* @license OMS License 1.0
* @link http://website.orange-management.de
* @since 1.0.0
*/
abstract class PermissionState extends Enum
{
public const TEMPLATE = 1;
public const REPORT = 2;
}

300
Models/Report.php Normal file
View File

@ -0,0 +1,300 @@
<?php
/**
* Orange Management
*
* PHP Version 7.2
*
* @package Modules\Helper\Models
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://website.orange-management.de
*/
declare(strict_types=1);
namespace Modules\Helper\Models;
/**
* Report model.
*
* @package Modules\Helper\Models
* @license OMS License 1.0
* @link http://website.orange-management.de
* @since 1.0.0
*/
class Report implements \JsonSerializable
{
/**
* Report Id.
*
* @var int
* @since 1.0.0
*/
private $id = 0;
/**
* Report status.
*
* @var int
* @since 1.0.0
*/
private $status = HelperStatus::INACTIVE;
/**
* Report title.
*
* @var string
* @since 1.0.0
*/
private $title = '';
/**
* Report description.
*
* @var string
* @since 1.0.0
*/
private $description = '';
/**
* Report description.
*
* @var string
* @since 1.0.0
*/
private $descriptionRaw = '';
/**
* Report created at.
*
* @var \DateTime
* @since 1.0.0
*/
protected $createdAt = null;
/**
* Report created by.
*
* @var int
* @since 1.0.0
*/
private $createdBy = 0;
/**
* Report template.
*
* @var int
* @since 1.0.0
*/
private $template = 0;
/**
* Report source.
*
* @var int
* @since 1.0.0
*/
private $source = 0;
/**
* Constructor.
*
* @since 1.0.0
*/
public function __construct()
{
$this->createdAt = new \DateTime('now');
}
/**
* @return int
*
* @since 1.0.0
*/
public function getId() : int
{
return $this->id;
}
/**
* @return int
*
* @since 1.0.0
*/
public function getStatus() : int
{
return $this->status;
}
/**
* @param int $status Report status
*
* @return void
*
* @since 1.0.0
*/
public function setStatus(int $status) : void
{
$this->status = $status;
}
/**
* @return string
*
* @since 1.0.0
*/
public function getTitle() : string
{
return $this->title;
}
/**
* @param string $title Title
*
* @return void
*
* @since 1.0.0
*/
public function setTitle(string $title) : void
{
$this->title = $title;
}
/**
* @return string
*
* @since 1.0.0
*/
public function getDescription() : string
{
return $this->description;
}
/**
* @param string $description Description
*
* @return void
*
* @since 1.0.0
*/
public function setDescription(string $description) : void
{
$this->description = $description;
}
/**
* @return string
*
* @since 1.0.0
*/
public function getDescriptionRaw() : string
{
return $this->descriptionRaw;
}
/**
* @param string $descriptionRaw Description
*
* @return void
*
* @since 1.0.0
*/
public function setDescriptionRaw(string $descriptionRaw) : void
{
$this->descriptionRaw = $descriptionRaw;
}
/**
* @return \DateTime
*
* @since 1.0.0
*/
public function getCreatedAt() : \DateTime
{
return $this->createdAt ?? new \DateTime('now');
}
/**
* @return mixed
*
* @since 1.0.0
*/
public function getCreatedBy()
{
return $this->createdBy;
}
/**
* @param mixed $creator Created by
*
* @return void
*
* @since 1.0.0
*/
public function setCreatedBy($creator) : void
{
$this->createdBy = $creator;
}
/**
* @return mixed
*
* @since 1.0.0
*/
public function getTemplate()
{
return $this->template;
}
/**
* @param mixed $template Report template
*
* @return void
*
* @since 1.0.0
*/
public function setTemplate($template) : void
{
$this->template = $template;
}
/**
* @param mixed $source Report source
*
* @return void
*
* @since 1.0.0
*/
public function setSource($source) : void
{
$this->source = $source;
}
/**
* @return mixed
*
* @since 1.0.0
*/
public function getSource()
{
return $this->source;
}
public function toArray() : array
{
return [
'id' => $this->id,
'createdBy' => $this->createdBy,
'createdAt' => $this->createdAt->format('Y-m-d H:i:s'),
'name' => $this->title,
'description' => $this->description,
'status' => $this->status,
];
}
public function jsonSerialize()
{
return $this->toArray();
}
}

88
Models/ReportMapper.php Normal file
View File

@ -0,0 +1,88 @@
<?php
/**
* Orange Management
*
* PHP Version 7.2
*
* @package TBD
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://website.orange-management.de
*/
declare(strict_types=1);
namespace Modules\Helper\Models;
use Modules\Admin\Models\AccountMapper;
use phpOMS\DataStorage\Database\DataMapperAbstract;
final class ReportMapper extends DataMapperAbstract
{
/**
* Columns.
*
* @var array<string, array<string, bool|string>>
* @since 1.0.0
*/
protected static $columns = [
'helper_report_id' => ['name' => 'helper_report_id', 'type' => 'int', 'internal' => 'id'],
'helper_report_status' => ['name' => 'helper_report_status', 'type' => 'int', 'internal' => 'status'],
'helper_report_title' => ['name' => 'helper_report_title', 'type' => 'string', 'internal' => 'title'],
'helper_report_desc' => ['name' => 'helper_report_desc', 'type' => 'string', 'internal' => 'description'],
'helper_report_desc_raw' => ['name' => 'helper_report_desc_raw', 'type' => 'string', 'internal' => 'descriptionRaw'],
'helper_report_media' => ['name' => 'helper_report_media', 'type' => 'int', 'internal' => 'source'],
'helper_report_template' => ['name' => 'helper_report_template', 'type' => 'int', 'internal' => 'template'],
'helper_report_creator' => ['name' => 'helper_report_creator', 'type' => 'int', 'internal' => 'createdBy'],
'helper_report_created' => ['name' => 'helper_report_created', 'type' => 'DateTime', 'internal' => 'createdAt'],
];
/**
* Has one relation.
*
* @var array<string, array<string, string>>
* @since 1.0.0
*/
protected static $ownsOne = [
'source' => [
'mapper' => \Modules\Media\Models\CollectionMapper::class,
'src' => 'helper_report_media',
],
'template' => [
'mapper' => \Modules\Helper\Models\TemplateMapper::class,
'src' => 'helper_report_template',
],
];
protected static $belongsTo = [
'createdBy' => [
'mapper' => AccountMapper::class,
'src' => 'helper_report_creator',
],
];
/**
* Primary table.
*
* @var string
* @since 1.0.0
*/
protected static $table = 'helper_report';
/**
* Primary field name.
*
* @var string
* @since 1.0.0
*/
protected static $primaryField = 'helper_report_id';
/**
* Created at.
*
* @var string
* @since 1.0.0
*/
protected static $createdAt = 'helper_report_created';
}

391
Models/Template.php Normal file
View File

@ -0,0 +1,391 @@
<?php
/**
* Orange Management
*
* PHP Version 7.2
*
* @package Modules\Helper\Models
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://website.orange-management.de
*/
declare(strict_types=1);
namespace Modules\Helper\Models;
/**
* Template model.
*
* @package Modules\Helper\Models
* @license OMS License 1.0
* @link http://website.orange-management.de
* @since 1.0.0
*/
class Template implements \JsonSerializable
{
/**
* Template Id.
*
* @var int
* @since 1.0.0
*/
private $id = 0;
/**
* Template status.
*
* @var int
* @since 1.0.0
*/
private $status = HelperStatus::INACTIVE;
/**
* Template data source.
*
* @var int
* @since 1.0.0
*/
private $datatype = TemplateDataType::OTHER;
/**
* Template doesn't need reports.
*
* @var bool
* @since 1.0.0
*/
private $isStandalone = false;
/**
* Template name.
*
* @var string
* @since 1.0.0
*/
private $name = '';
/**
* Template description.
*
* @var string
* @since 1.0.0
*/
private $description = '';
/**
* Template description.
*
* @var string
* @since 1.0.0
*/
private $descriptionRaw = '';
/**
* Template created at.
*
* @var \DateTime
* @since 1.0.0
*/
protected $createdAt = null;
/**
* Template created by.
*
* @var int
* @since 1.0.0
*/
private $createdBy = 0;
/**
* Template source.
*
* @var int
* @since 1.0.0
*/
private $source = 0;
/**
* Expected files.
*
* @var array
* @since 1.0.0
*/
private $expected = [];
/**
* Reports.
*
* @var array
* @since 1.0.0
*/
private $reports = [];
/**
* Constructor
*
* @since 1.0.0
*/
public function __construct()
{
$this->createdAt = new \DateTime('now');
}
/**
* @return int
*
* @since 1.0.0
*/
public function getId() : int
{
return $this->id;
}
public function getNewestReport() : Report
{
if (!empty($this->reports)) {
return end($this->reports());
}
return new NullReport();
}
/**
* @param string $name Template name
*
* @return void
*
* @since 1.0.0
*/
public function setName(string $name) : void
{
$this->name = $name;
}
/**
* @return string
*
* @since 1.0.0
*/
public function getName() : string
{
return $this->name;
}
/**
* @param string $description Template description
*
* @return void
*
* @since 1.0.0
*/
public function setDescription(string $description) : void
{
$this->description = $description;
}
/**
* @return string
*
* @since 1.0.0
*/
public function getDescription() : string
{
return $this->description;
}
/**
* @param string $description Template description
*
* @return void
*
* @since 1.0.0
*/
public function setDescriptionRaw(string $description) : void
{
$this->descriptionRaw = $description;
}
/**
* @return string
*
* @since 1.0.0
*/
public function getDescriptionRaw() : string
{
return $this->descriptionRaw;
}
/**
* @param int $source Source
*
* @return mixed
*
* @since 1.0.0
*/
public function setSource($source)
{
$this->source = $source;
}
/**
* @return mixed
*
* @since 1.0.0
*/
public function getSource()
{
return $this->source;
}
/**
* @param mixed $createdBy Creator
*
* @return void
*
* @since 1.0.0
*/
public function setCreatedBy($createdBy) : void
{
$this->createdBy = $createdBy;
}
/**
* @return mixed
*
* @since 1.0.0
*/
public function getCreatedBy()
{
return $this->createdBy;
}
/**
* @return \DateTime
*
* @since 1.0.0
*/
public function getCreatedAt() : \DateTime
{
return $this->createdAt ?? new \DateTime('now');
}
/**
* @param array $expected Expected files
*
* @return void
*
* @since 1.0.0
*/
public function setExpected(array $expected) : void
{
$this->expected = $expected;
}
/**
* @return \array
*
* @since 1.0.0
*/
public function getExpected() : array
{
return $this->expected;
}
/**
* @param string $expected Expected file
*
* @return void
*
* @since 1.0.0
*/
public function addExpected(string $expected) : void
{
$this->expected[] = $expected;
}
/**
* @param int $status Template status (is active?)
*
* @return void
*
* @since 1.0.0
*/
public function setStatus(int $status) : void
{
$this->status = $status;
}
/**
* @return int
*
* @since 1.0.0
*/
public function getStatus() : int
{
return $this->status;
}
/**
* @param int $datatype Template datatype source
*
* @return void
*
* @since 1.0.0
*/
public function setDatatype(int $datatype) : void
{
$this->datatype = $datatype;
}
/**
* @return int
*
* @since 1.0.0
*/
public function getDatatype() : int
{
return $this->datatype;
}
/**
* @param bool $isStandalone Is template standalone
*
* @return void
*
* @since 1.0.0
*/
public function setStandalone(bool $isStandalone) : void
{
$this->isStandalone = $isStandalone;
}
/**
* @return bool
*
* @since 1.0.0
*/
public function isStandalone() : bool
{
return $this->isStandalone;
}
public function toArray() : array
{
return [
'id' => $this->id,
'createdBy' => $this->createdBy,
'createdAt' => $this->createdAt->format('Y-m-d H:i:s'),
'name' => $this->name,
'description' => $this->description,
'status' => $this->status,
'datatype' => $this->datatype,
'standalone' => $this->isStandalone,
];
}
public function jsonSerialize()
{
return $this->toArray();
}
}

View File

@ -0,0 +1,34 @@
<?php
/**
* Orange Management
*
* PHP Version 7.2
*
* @package Modules\Helper\Models
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://website.orange-management.de
*/
declare(strict_types=1);
namespace Modules\Helper\Models;
use phpOMS\Stdlib\Base\Enum;
/**
* Helper status.
*
* @package Modules\Helper\Models
* @license OMS License 1.0
* @link http://website.orange-management.de
* @since 1.0.0
*/
abstract class TemplateDataType extends Enum
{
public const OTHER = 0;
public const GLOBAL_DB = 1;
public const GLOBAL_FILE = 2;
}

99
Models/TemplateMapper.php Normal file
View File

@ -0,0 +1,99 @@
<?php
/**
* Orange Management
*
* PHP Version 7.2
*
* @package TBD
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://website.orange-management.de
*/
declare(strict_types=1);
namespace Modules\Helper\Models;
use Modules\Admin\Models\AccountMapper;
use Modules\Media\Models\CollectionMapper;
use phpOMS\DataStorage\Database\DataMapperAbstract;
final class TemplateMapper extends DataMapperAbstract
{
/**
* Columns.
*
* @var array<string, array<string, bool|string>>
* @since 1.0.0
*/
protected static $columns = [
'helper_template_id' => ['name' => 'helper_template_id', 'type' => 'int', 'internal' => 'id'],
'helper_template_status' => ['name' => 'helper_template_status', 'type' => 'int', 'internal' => 'status'],
'helper_template_title' => ['name' => 'helper_template_title', 'type' => 'string', 'internal' => 'name'],
'helper_template_data' => ['name' => 'helper_template_data', 'type' => 'int', 'internal' => 'datatype'],
'helper_template_standalone' => ['name' => 'helper_template_standalone', 'type' => 'bool', 'internal' => 'isStandalone'],
'helper_template_expected' => ['name' => 'helper_template_expected', 'type' => 'Json', 'internal' => 'expected'],
'helper_template_desc' => ['name' => 'helper_template_desc', 'type' => 'string', 'internal' => 'description'],
'helper_template_desc_raw' => ['name' => 'helper_template_desc_raw', 'type' => 'string', 'internal' => 'descriptionRaw'],
'helper_template_media' => ['name' => 'helper_template_media', 'type' => 'int', 'internal' => 'source'],
'helper_template_creator' => ['name' => 'helper_template_creator', 'type' => 'int',
'internal' => 'createdBy'],
'helper_template_created' => ['name' => 'helper_template_created', 'type' => 'DateTime',
'internal' => 'createdAt'],
];
/**
* Has one relation.
*
* @var array<string, array<string, string>>
* @since 1.0.0
*/
protected static $ownsOne = [
'source' => [
'mapper' => CollectionMapper::class,
'src' => 'helper_template_media',
],
];
protected static $belongsTo = [
'createdBy' => [
'mapper' => AccountMapper::class,
'src' => 'helper_template_creator',
],
];
protected static $hasMany = [
'reports' => [
'mapper' => ReportMapper::class,
'table' => 'helper_report',
'dst' => 'helper_report_template',
'src' => null,
],
];
/**
* Primary table.
*
* @var string
* @since 1.0.0
*/
protected static $table = 'helper_template';
/**
* Created at.
*
* @var string
* @since 1.0.0
*/
protected static $createdAt = 'helper_template_created';
/**
* Primary field name.
*
* @var string
* @since 1.0.0
*/
protected static $primaryField = 'helper_template_id';
}

11
README.md Normal file
View File

@ -0,0 +1,11 @@
# Helepr
The Data Evaluation module generates reporting based on provided data. The data can come from the database or csv files.
## Helepr Files ##
1. XYZ.pdf.tpl.php
2. XYZ.tpl.php
3. XYZ.lang.php
4. XYZ.css
5. XYZ.js

View File

@ -0,0 +1,20 @@
<?php
/**
* Orange Management
*
* PHP Version 7.2
*
* @package TBD
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://website.orange-management.de
*/
return ['Navigation' => [
'Create' => 'Create',
'CreateTemplate' => 'Create Template',
'CreateReport' => 'Create Report',
'List' => 'List',
'Helper' => 'Helper',
'Reporting' => 'Reporting',
]];

View File

@ -0,0 +1,14 @@
<?php
/**
* Orange Management
*
* PHP Version 7.2
*
* @package TBD
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://website.orange-management.de
*/
$MODLANG[27] = [
];

View File

@ -0,0 +1,53 @@
<?php
/**
* Orange Management
*
* PHP Version 7.2
*
* @package TBD
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://website.orange-management.de
*/
return ['Helper' => [
'Add' => 'Add',
'CentralizedDB' => 'Centralized DB',
'CentralizedFiles' => 'Centralized Files',
'Created' => 'Created',
'Creator' => 'Creator',
'CreatedBy' => 'Created By',
'Data' => 'Data',
'Database' => 'Database',
'Dataset' => 'Dataset',
'Datasets' => 'Datasets',
'Description' => 'Description',
'Expected' => 'Expected',
'Export' => 'Export',
'Edit' => 'Edit',
'Files' => 'Files',
'FileNames' => 'File Names',
'IndividualDB' => 'Individual DB',
'Info' => 'Info',
'Language' => 'Language',
'Media' => 'Media',
'MediaDirectory' => 'Media Directory',
'Modified' => 'Modified',
'Name' => 'Name',
'New' => 'New',
'Other' => 'Other',
'Overview' => 'Overview',
'Permission' => 'Permission',
'Helper' => 'Helper',
'Reports' => 'Reports',
'Report' => 'Report',
'Select' => 'Select',
'Storage' => 'Storage',
'Source' => 'Source',
'Sources' => 'Sources',
'Standalone' => 'Standalone',
'Template' => 'Template',
'Title' => 'Title',
'Type' => 'Type',
'Updated' => 'Updated',
]];

View File

@ -0,0 +1,3 @@
<section>
Reporter
</section>

View File

@ -0,0 +1,46 @@
<?php
/**
* Orange Management
*
* PHP Version 7.2
*
* @package TBD
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://website.orange-management.de
*/
/**
* @var \phpOMS\Views\View $this
*/
$templateList = \Modules\Helper\Models\TemplateMapper::getAll();
echo $this->getData('nav')->render(); ?>
<div class="row">
<div class="col-xs-12 col-md-6">
<section class="box wf-100">
<header><h1><?= $this->getHtml('Report'); ?></h1></header>
<div class="inner">
<form id="helper-report-create" action="<?= \phpOMS\Uri\UriFactory::build('/{/lang}/api/helper/report/report'); ?>" method="post">
<table class="layout wf-100">
<tbody>
<tr><td><label for="iTitle"><?= $this->getHtml('Title'); ?></label>
<tr><td><input id="iTitle" name="name" type="text" placeholder="&#xf040; P&L Reporting 2015 December v1.0" required>
<tr><td><label for="iTemplate"><?= $this->getHtml('Template'); ?></label>
<tr><td><select id="iTemplate" name="template">
<?php foreach ($templateList as $key => $value) : ?>
<option value="<?= $this->printHtml($key); ?>"><?= $this->printHtml($value->getName()); ?>
<?php endforeach; ?>
</select>
<tr><td><input type="submit" id="iReportCreateButton" name="reportCreateButton" value="<?= $this->getHtml('Create', 0, 0); ?>">
</table>
</form>
</div>
</section>
</div>
<div class="col-xs-12 col-md-6">
<?= $this->getData('media-upload')->render('helper-report-create'); ?>
</div>
</div>

View File

@ -0,0 +1,233 @@
<?php
/**
* Orange Management
*
* PHP Version 7.2
*
* @package TBD
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://website.orange-management.de
*/
/**
* @var \phpOMS\Views\View $this
*/
$tabView = new \Web\Views\Divider\TabularView($this->app, $this->request, $this->response);
$tabView->setTemplate('/Web/Templates/Divider/Tabular');
echo $this->getData('nav')->render(); ?>
<div class="b-7" id="i3-2-1">
<div class="b b-5 c3-2 c3" id="i3-2-5">
<div class="bc-1">
<ul class="l-1">
<li>
<a href="<?= \phpOMS\Uri\UriFactory::build('/{/lang}/backend/helper/single?{?}&id=' . $this->getData('name')); ?>"
class="button"><?= $this->getHtml('Report') ?></a>
</ul>
</div>
</div>
</div>
<div class="b-6">
<?php
/**
* @var \phpOMS\Views\View $this
*/
$overviwPanel = new \Web\Views\Panel\PanelView($this->app, $this->request, $this->response);
$permissionPanel = clone $overviwPanel;
$overviwPanel->setTitle($this->getHtml('Create'));
$permissionPanel->setTitle($this->getHtml('Permission'));
$this->addView('createFormPanel', $overviwPanel);
$this->getView('createFormPanel')->setTemplate('/Web/Templates/Panel/BoxHalf');
$this->addView('permissionFormPanel', $permissionPanel);
$this->getView('permissionFormPanel')->setTemplate('/Web/Templates/Panel/BoxHalf');
/*
* Overview
*/
$formOverview = new \Web\Views\Form\FormView($this->app, $this->request, $this->response);
$formOverview->setTemplate('/Web/Templates/Forms/FormFull');
$formOverview->setSubmit('submit1', $this->getHtml('Edit'));
$formOverview->setSubmit('submit2', $this->getHtml('Delete'));
$formOverview->setAction($this->request->getUri()->getScheme() . '://' . $this->request->getUri()->getHost());
$formOverview->setMethod(\phpOMS\Message\Http\RequestMethod::POST);
$formOverview->setElement(0, 0, [
'type' => \phpOMS\Html\TagType::INPUT,
'subtype' => 'text',
'name' => 'rname',
'label' => $this->getHtml('Name'),
]);
$formOverview->setElement(1, 0, [
'type' => \phpOMS\Html\TagType::INPUT,
'subtype' => 'text',
'name' => 'mdirectory',
'label' => $this->getHtml('MediaDirectory'),
'active' => false,
]);
$formOverview->setElement(1, 1, [
'type' => \phpOMS\Html\TagType::BUTTON,
'content' => $this->getHtml('Select'),
]);
$formOverview->setElement(2, 0, [
'type' => \phpOMS\Html\TagType::INPUT,
'subtype' => 'text',
'name' => 'template',
'label' => $this->getHtml('Template'),
'active' => false,
]);
$formOverview->setElement(2, 1, [
'type' => \phpOMS\Html\TagType::BUTTON,
'content' => $this->getHtml('Select'),
]);
$this->getView('createFormPanel')->addView('form', $formOverview);
/*
* Permission Add
*/
$formPermissionAdd = new \Web\Views\Form\FormView($this->app, $this->request, $this->response);
$formPermissionAdd->setTemplate('/Web/Templates/Forms/FormFull');
$formPermissionAdd->setSubmit('submit1', $this->getHtml('Add', 0, 0));
$formPermissionAdd->setAction($this->request->getUri()->getScheme() . '://' . $this->request->getUri()->getHost());
$formPermissionAdd->setMethod(\phpOMS\Message\Http\RequestMethod::POST);
$formPermissionAdd->setElement(0, 0, [
'type' => \phpOMS\Html\TagType::SELECT,
'options' => [
[
'value' => 0,
'content' => 'Group',
],
[
'value' => 1,
'content' => 'Account',
],
],
'selected' => '',
'label' => $this->getHtml('Type'),
'name' => 'type',
]);
$formPermissionAdd->setElement(1, 0, [
'type' => \phpOMS\Html\TagType::INPUT,
'subtype' => 'text',
'name' => 'id',
'label' => $this->getHtml('ID'),
]);
$formPermissionAdd->setElement(2, 0, [
'type' => \phpOMS\Html\TagType::INPUT,
'subtype' => 'text',
'name' => 'perm',
'label' => $this->getHtml('Permission'),
]);
$this->getView('permissionFormPanel')->addView('form', $formPermissionAdd);
/*
* Permission List
*/
$permissionListView = new \Web\Views\Lists\ListView($this->app, $this->request, $this->response);
$headerView = new \Web\Views\Lists\HeaderView($this->app, $this->request, $this->response);
$permissionListView->setTemplate('/Web/Templates/Lists/ListFull');
$headerView->setTemplate('/Web/Templates/Lists/Header/HeaderTable');
/*
* Header
*/
$headerView->setTitle($this->getHtml('Permission'));
$headerView->setHeader([
['title' => $this->getHtml('Type'), 'sortable' => true],
['title' => $this->getHtml('Name'), 'sortable' => true, 'full' => true],
['title' => $this->getHtml('Permission'), 'sortable' => true],
]);
$permissionListView->addView('header', $headerView);
$this->addView('permissionList', $permissionListView);
$tabView->addTab($this->getHtml('Overview'), $overviwPanel->render() . $permissionPanel->render() . $permissionListView->render(), 'Backend', 'overview');
/*
* UI Logic
*/
$sourceList = new \Web\Views\Lists\ListView($this->app, $this->request, $this->response);
$sourceListHeaderView = new \Web\Views\Lists\HeaderView($this->app, $this->request, $this->response);
$sourceList->setTemplate('/Web/Templates/Lists/ListFull');
$sourceListHeaderView->setTemplate('/Web/Templates/Lists/Header/HeaderTable');
/*
* Header
*/
$sourceListHeaderView->setTitle($this->getHtml('Sources'));
$sourceListHeaderView->setHeader([
['title' => $this->getHtml('ID'), 'sortable' => true],
['title' => $this->getHtml('Name'), 'sortable' => true, 'full' => true],
['title' => $this->getHtml('Created'), 'sortable' => true],
['title' => $this->getHtml('CreatedBy'), 'sortable' => true],
]);
$sourceList->setFreeze(3, 2);
$sourceList->addView('header', $sourceListHeaderView);
$tabView->addTab($this->getHtml('Helper', 'Sources'), $sourceList->render(), 'Backend', 'sources');
/*
* Create
*/
$createPanel = new \Web\Views\Panel\PanelView($this->app, $this->request, $this->response);
$mediaPanel = clone $createPanel;
$createPanel->setTitle($this->getHtml('Create'));
$mediaPanel->setTitle($this->getHtml('Media'));
$this->addView('createFormPanel', $createPanel);
$this->getView('createFormPanel')->setTemplate('/Web/Templates/Panel/BoxHalf');
$this->addView('permissionFormPanel', $mediaPanel);
$this->getView('permissionFormPanel')->setTemplate('/Web/Templates/Panel/BoxHalf');
$formCreateForm = new \Web\Views\Form\FormView($this->app, $this->request, $this->response);
$formCreateForm->setTemplate('/Web/Templates/Forms/FormFull');
$formCreateForm->setSubmit('submit1', $this->getHtml('Submit'));
$formCreateForm->setAction($this->request->getUri()->getScheme() . '://' . $this->request->getUri()->getHost());
$formCreateForm->setMethod(\phpOMS\Message\Http\RequestMethod::POST);
$formCreateForm->setElement(0, 0, [
'type' => \phpOMS\Html\TagType::INPUT,
'subtype' => 'text',
'name' => 'rname',
'label' => $this->getHtml('Name'),
]);
$createPanel->addView('createform', $formCreateForm);
/*
* Media Add
*/
// TODO: add media upload drop panel
$tabView->addTab($this->getHtml('Helper', 'New'), $createPanel->render() . $mediaPanel->render(), 'Backend', 'new');
?>
<?= $this->printHtml($tabView->render()); ?>
</div>
<script>
jsOMS.ready(function () {
assetManager.load(Url + '/Modules/Media/JS', 'MediaUpload.js', 'js');
});
</script>

View File

@ -0,0 +1,58 @@
<?php
/**
* Orange Management
*
* PHP Version 7.2
*
* @package TBD
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://website.orange-management.de
*/
/**
* @var \phpOMS\Views\View $this
*/
$templates = $this->getData('reports');
$footerView = new \phpOMS\Views\PaginationView($this->app, $this->request, $this->response);
$footerView->setTemplate('/Web/Templates/Lists/Footer/PaginationBig');
$footerView->setPages(count($templates) / 25);
$footerView->setPage(1);
$footerView->setResults(count($templates));
echo $this->getData('nav')->render(); ?>
<div class="row">
<div class="col-xs-12">
<div class="box wf-100">
<table class="table darkred">
<caption><?= $this->getHtml('Reports') ?></caption>
<thead>
<tr>
<td><?= $this->getHtml('ID', 0, 0); ?>
<td class="wf-100"><?= $this->getHtml('Name') ?>
<td><?= $this->getHtml('Creator') ?>
<td><?= $this->getHtml('Updated') ?>
<tfoot>
<tr>
<td colspan="4">
<tbody>
<?php if (count($templates) == 0) : ?>
<tr class="empty">
<td colspan="4"><?= $this->getHtml('Empty', 0, 0); ?>
<?php endif; ?>
<?php foreach ($templates as $key => $template) :
$url = \phpOMS\Uri\UriFactory::build('/{/lang}/backend/helper/report/view?{?}&id=' . $template->getId()); ?>
<tr data-href="<?= $url; ?>">
<td data-label="<?= $this->getHtml('ID', 0, 0) ?>"><a href="<?= $url; ?>"><?= $this->printHtml($template->getId()); ?></a>
<td data-label="<?= $this->getHtml('Name') ?>"><a href="<?= $url; ?>"><?= $this->printHtml($template->getName()); ?></a>
<td data-label="<?= $this->getHtml('Creator') ?>"><a href="<?= $url; ?>"><?= $this->printHtml($template->getCreatedBy()->getName1()); ?></a>
<td data-label="<?= $this->getHtml('Updated') ?>"><a href="<?= $url; ?>"><?= $this->printHtml($template->getCreatedAt()->format('Y-m-d')); ?></a>
<?php endforeach; ?>
</table>
</div>
</div>
</div>

View File

@ -0,0 +1,125 @@
<?php
/**
* Orange Management
*
* PHP Version 7.2
*
* @package TBD
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://website.orange-management.de
*/
/**
* @var \phpOMS\Views\View $this
*/
// TODO: load template in new view that doesn't get access to anything otherwise user can interact with app in bad ways
$tcoll = $this->getData('tcoll');
$rcoll = $this->getData('rcoll');
$cLang = $this->getData('lang');
$template = $this->getData('template');
$report = $this->getData('report');
/** @noinspection PhpIncludeInspection */
$reportLanguage = include __DIR__ . '/../../../' . \ltrim($tcoll['lang']->getPath(), '/');
$lang = $reportLanguage[$cLang];
echo $this->getData('nav')->render(); ?>
<div class="row">
<div class="col-xs-12 col-md-9">
<div class="wf-100">
<?php /** @noinspection PhpIncludeInspection */
include __DIR__ . '/../../../' . \ltrim($tcoll['template']->getPath(), '/'); ?>
</div>
</div>
<div class="col-xs-12 col-md-3">
<section class="box wf-100">
<header><h1><?= $this->getHtml('Reports') ?></h1></header>
<div class="inner">
<form action="<?= \phpOMS\Uri\UriFactory::build('/{/lang}/api/helper/template'); ?>" method="post">
<table class="layout wf-100">
<tbody>
<tr>
<td><label for="iLang"><?= $this->getHtml('Language'); ?></label>
<tr>
<td><select id="iLang" name="lang" data-action='[{"listener": "change", "action": [{"key": 1, "type": "redirect", "uri": "{%}&lang={#iLang}", "target": "self"}]}]'>
<?php foreach ($reportLanguage as $key => $langauge) : ?>
<option value="<?= $this->printHtml($key); ?>"<?= $this->printHtml($key === $cLang ? ' selected' : ''); ?>><?= $this->printHtml($langauge[':language'] ); ?>
<?php endforeach; ?>
</select>
<?php if (!$template->isStandalone()) : ?><tr>
<td><label for="iReport"><?= $this->getHtml('Report'); ?></label>
<tr>
<td><select id="iReport" name="report">
</select>
<?php endif; ?>
</table>
</form>
</div>
</section>
<section class="box wf-100">
<header><h1><?= $this->getHtml('Export') ?></h1></header>
<div class="inner">
<form action="<?= \phpOMS\Uri\UriFactory::build('/{/lang}/api/helper/template'); ?>" method="post">
<table class="layout wf-100">
<tbody>
<tr>
<td><label for="iExport"><?= $this->getHtml('Export'); ?></label>
<tr>
<td><select id="iExport" name="export-type">
<option value="select" disabled><?= $this->getHtml('Select'); ?>
<option value="excel"<?= $this->printHtml((!isset($tcoll['excel'])) ? ' disabled' : ''); ?>>Excel
<option value="pdf"<?= $this->printHtml((!isset($tcoll['pdf'])) ? ' disabled' : ''); ?>>Pdf
<option value="doc"<?= $this->printHtml((!isset($tcoll['word'])) ? ' disabled' : ''); ?>>Word
<option value="ppt"<?= $this->printHtml((!isset($tcoll['powerpoint'])) ? ' disabled' : ''); ?>>Powerpoint
<option value="csv"<?= $this->printHtml((!isset($tcoll['csv'])) ? ' disabled' : ''); ?>>Csv
<option value="json"<?= $this->printHtml((!isset($tcoll['json'])) ? ' disabled' : ''); ?>>Json
</select>
<tr>
<td><input type="button" value="<?= $this->getHtml('Export'); ?>"
data-ropen="/{#lang}/api/helper/export.php?{type=#iExport}{lang=#iLang}{QUERY}">
</table>
</form>
</div>
</section>
<section class="box wf-100">
<header><h1><?= $this->getHtml('Info') ?></h1></header>
<div class="inner">
<table class="list wf-100">
<tbody>
<?php if (!$template->isStandalone()) : ?>
<tr>
<th colspan="2"><?= $this->getHtml('Report') ?>
<tr>
<td><?= $this->getHtml('Name'); ?>
<td><?= $this->printHtml($report->getTitle()); ?>
<tr>
<td><?= $this->getHtml('Creator'); ?>
<td><?= $this->printHtml($report->getCreatedBy()->getName1()); ?>
<tr>
<td><?= $this->getHtml('Created'); ?>
<td><?= $report->getCreatedAt()->format('Y-m-d'); ?>
<?php endif; ?>
<tr>
<th colspan="2"><?= $this->getHtml('Template') ?>
<tr>
<td><?= $this->getHtml('Name'); ?>
<td><?= $this->printHtml($template->getName()); ?>
<tr>
<td><?= $this->getHtml('Creator'); ?>
<td><?= $this->printHtml($template->getCreatedBy()->getName1()); ?>
<tr>
<td><?= $this->getHtml('Created'); ?>
<td><?= $template->getCreatedAt()->format('Y-m-d'); ?>
</table>
</div>
</section>
</div>
</div>

View File

@ -0,0 +1,53 @@
<?php
/**
* Orange Management
*
* PHP Version 7.2
*
* @package TBD
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://website.orange-management.de
*/
/**
* @var \phpOMS\Views\View $this
*/
echo $this->getData('nav')->render(); ?>
<div class="row">
<div class="col-xs-12 col-md-6">
<section class="box wf-100">
<header><h1><?= $this->getHtml('Template'); ?></h1></header>
<div class="inner">
<form id="helper-template-create" action="<?= \phpOMS\Uri\UriFactory::build('/{/lang}/api/helper/report/template'); ?>" method="post">
<table class="layout wf-100" style="table-layout: fixed">
<tbody>
<tr><td><label for="iTitle"><?= $this->getHtml('Title'); ?></label>
<tr><td><input id="iTitle" name="name" type="text" placeholder="&#xf040; P&L Reporting" required>
<tr><td><label for="iDescription"><?= $this->getHtml('Description'); ?></label>
<tr><td><?= $this->getData('editor')->render('report-editor'); ?>
<tr><td><?= $this->getData('editor')->getData('text')->render('report-editor', 'description', 'helper-template-create'); ?>
<tr><td>
<span class="checkbox">
<input id="iStandalone" name="standalone" type="checkbox" value="1">
<label for="iStandalone"><?= $this->getHtml('Standalone'); ?></label>
</span>
<tr><td><label for="iExpected"><?= $this->getHtml('Expected'); ?></label>
<tr><td>
<div class="ipt-wrap">
<div class="ipt-first"><input id="iExpected" type="text" placeholder="&#xf15b; file.csv"><input name="expected" type="hidden"></div>
<div class="ipt-second"><button><?= $this->getHtml('Add', 0, 0); ?></button></div>
</div>
<tr><td><input type="submit" id="iReportTemplateCreateButton" name="reportTemplateCreateButton" value="<?= $this->getHtml('Create', 0, 0); ?>">
</table>
</form>
</div>
</section>
</div>
<div class="col-xs-12 col-md-6">
<?= $this->getData('media-upload')->render('helper-template-create'); ?>
</div>
</div>

31
Views/HelperView.php Normal file
View File

@ -0,0 +1,31 @@
<?php
/**
* Orange Management
*
* PHP Version 7.2
*
* @package Modules\Helper\Views
* @copyright Dennis Eichhorn
* @license OMS License 1.0
* @version 1.0.0
* @link http://website.orange-management.de
*/
declare(strict_types=1);
namespace Modules\Helper\Views;
use phpOMS\Views\View;
/**
* Helper view.
*
* @package Modules\Helper\Views
* @license OMS License 1.0
* @link http://website.orange-management.de
* @since 1.0.0
*/
class HelperView extends View
{
protected $dataSets = [];
protected $dataSet = null;
}

47
info.json Normal file
View File

@ -0,0 +1,47 @@
{
"name": {
"id": 1002700000,
"internal": "Helper",
"external": "Helper"
},
"category": "Tools",
"version": "1.0.0",
"requirements": {
"phpOMS": "1.0.0",
"phpOMS-db": "1.0.0"
},
"creator": {
"name": "Orange Management",
"website": "www.spl1nes.com"
},
"description": "The helper module supports creating static and dynamic reportings.",
"directory": "Helper",
"dependencies": {
"Admin": "1.0.0",
"Media": "1.0.0",
"Tools": "1.0.0"
},
"providing": {
"Navigation": "*"
},
"load": [
{
"pid": [
"/backend/helper"
],
"type": 4,
"for": "Content",
"file": "Helper",
"from": "Helper"
},
{
"pid": [
"/backend"
],
"type": 5,
"from": "Helper",
"for": "Navigation",
"file": "Navigation"
}
]
}