mirror of
https://github.com/Karaka-Management/oms-Script.git
synced 2026-02-09 09:58:40 +00:00
Draft uploader
This commit is contained in:
parent
cc3b997f92
commit
5e25c7160a
|
|
@ -16,10 +16,13 @@ namespace Modules\Helper\Controller;
|
||||||
|
|
||||||
use Modules\Media\Models\Collection;
|
use Modules\Media\Models\Collection;
|
||||||
use Modules\Media\Models\CollectionMapper;
|
use Modules\Media\Models\CollectionMapper;
|
||||||
|
use Modules\Media\Models\NullCollection;
|
||||||
use Modules\Media\Models\MediaMapper;
|
use Modules\Media\Models\MediaMapper;
|
||||||
use Modules\Helper\Models\PermissionState;
|
use Modules\Helper\Models\PermissionState;
|
||||||
|
use Modules\Helper\Models\NullReport;
|
||||||
use Modules\Helper\Models\Report;
|
use Modules\Helper\Models\Report;
|
||||||
use Modules\Helper\Models\ReportMapper;
|
use Modules\Helper\Models\ReportMapper;
|
||||||
|
use Modules\Helper\Models\NullTemplate;
|
||||||
use Modules\Helper\Models\Template;
|
use Modules\Helper\Models\Template;
|
||||||
use Modules\Helper\Models\TemplateDataType;
|
use Modules\Helper\Models\TemplateDataType;
|
||||||
use Modules\Helper\Models\TemplateMapper;
|
use Modules\Helper\Models\TemplateMapper;
|
||||||
|
|
@ -82,6 +85,31 @@ final class ApiController extends Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
$view = $this->createView($template, $request, $response);
|
$view = $this->createView($template, $request, $response);
|
||||||
|
$this->setHelperResponseHeader($view, $template->getName(), $request, $response);
|
||||||
|
|
||||||
|
if ($request->getData('download') !== null) {
|
||||||
|
$response->getHeader()->setDownloadable($template->getName(), (string) $request->getData('type'));
|
||||||
|
}
|
||||||
|
|
||||||
|
$response->set('export', $view);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set header for report/template
|
||||||
|
*
|
||||||
|
* @param View $view Template view
|
||||||
|
* @param string $name Template name
|
||||||
|
* @param RequestAbstract $request Request
|
||||||
|
* @param ResponseAbstract $response Response
|
||||||
|
*
|
||||||
|
* @return void
|
||||||
|
*
|
||||||
|
* @api
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
private function setHelperResponseHeader(View $view, string $name, RequestAbstract $request, ResponseAbstract $response) : void
|
||||||
|
{
|
||||||
switch ($request->getData('type')) {
|
switch ($request->getData('type')) {
|
||||||
case 'pdf':
|
case 'pdf':
|
||||||
$response->getHeader()->set('Content-Type', MimeType::M_PDF, true);
|
$response->getHeader()->set('Content-Type', MimeType::M_PDF, true);
|
||||||
|
|
@ -92,7 +120,7 @@ final class ApiController extends Controller
|
||||||
case 'xlsx':
|
case 'xlsx':
|
||||||
$response->getHeader()->set(
|
$response->getHeader()->set(
|
||||||
'Content-disposition', 'attachment; filename="'
|
'Content-disposition', 'attachment; filename="'
|
||||||
. $template->getName() . '.'
|
. $name . '.'
|
||||||
. ((string) $request->getData('type'))
|
. ((string) $request->getData('type'))
|
||||||
. '"'
|
. '"'
|
||||||
, true);
|
, true);
|
||||||
|
|
@ -107,21 +135,21 @@ final class ApiController extends Controller
|
||||||
$response->getHeader()->set('Content-Type', 'text/html; charset=utf-8');
|
$response->getHeader()->set('Content-Type', 'text/html; charset=utf-8');
|
||||||
$view->setTemplate('/' . \substr($view->getData('tcoll')['template']->getPath(), 0, -8));
|
$view->setTemplate('/' . \substr($view->getData('tcoll')['template']->getPath(), 0, -8));
|
||||||
}
|
}
|
||||||
|
|
||||||
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="'
|
|
||||||
. $template->getName() . '.'
|
|
||||||
. ((string) $request->getData('type'))
|
|
||||||
. '"'
|
|
||||||
, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
$response->set('export', $view);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create view from template
|
||||||
|
*
|
||||||
|
* @param Template $template Template to create view from
|
||||||
|
* @param RequestAbstract $request Request
|
||||||
|
* @param ResponseAbstract $response Response
|
||||||
|
*
|
||||||
|
* @return View
|
||||||
|
*
|
||||||
|
* @api
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
private function createView(Template $template, RequestAbstract $request, ResponseAbstract $response) : View
|
private function createView(Template $template, RequestAbstract $request, ResponseAbstract $response) : View
|
||||||
{
|
{
|
||||||
$tcoll = [];
|
$tcoll = [];
|
||||||
|
|
@ -170,7 +198,6 @@ final class ApiController extends Controller
|
||||||
$report = $report === false ? new NullReport() : $report;
|
$report = $report === false ? new NullReport() : $report;
|
||||||
|
|
||||||
if (!($report instanceof NullReport)) {
|
if (!($report instanceof NullReport)) {
|
||||||
/** @var Media[] $files */
|
|
||||||
$files = $report->getSource()->getSources();
|
$files = $report->getSource()->getSources();
|
||||||
|
|
||||||
foreach ($files as $media) {
|
foreach ($files as $media) {
|
||||||
|
|
@ -202,20 +229,40 @@ final class ApiController extends Controller
|
||||||
*/
|
*/
|
||||||
public function apiTemplateCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
|
public function apiTemplateCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
|
||||||
{
|
{
|
||||||
$collectionId = $this->createMediaCollectionFromRequest($request);
|
$collection = $this->createMediaCollectionFromRequest($request);
|
||||||
$template = $this->createTemplateFromRequest($request, $collectionId);
|
$template = $this->createTemplateFromRequest($request, $collection->getId());
|
||||||
|
|
||||||
$this->createModel($request, $template, TemplateMapper::class, 'template');
|
$this->createModel($request, $template, TemplateMapper::class, 'template');
|
||||||
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Template', 'Template successfully created', $template);
|
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Template', 'Template successfully created', $template);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function createMediaCollectionFromRequest(RequestAbstract $request) : int
|
/**
|
||||||
|
* Method to create media collection from request.
|
||||||
|
*
|
||||||
|
* @param RequestAbstract $request Request
|
||||||
|
*
|
||||||
|
* @return Collection
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
|
private function createMediaCollectionFromRequest(RequestAbstract $request) : Collection
|
||||||
{
|
{
|
||||||
if ($request->getData('media-list') === null) {
|
if ($request->getData('media-list') === null) {
|
||||||
return -1;
|
return new NullCollection();
|
||||||
|
}
|
||||||
|
|
||||||
|
$files = $request->getData('media-list');
|
||||||
|
if (\is_array($files)) {
|
||||||
|
if (\stripos($files[0] ?? '', '[') === 0) {
|
||||||
|
$files = \array_merge($files, \json_decode($files[0], true));
|
||||||
|
unset($files[0]);
|
||||||
|
} elseif ($files[0] === '') {
|
||||||
|
unset($files[0]);
|
||||||
|
}
|
||||||
|
} elseif (\is_string($files)) {
|
||||||
|
$files = \json_decode($files, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
$files = \json_decode((string) $request->getData('media-list'), true);
|
|
||||||
// TODO: make sure this user has permissions for provided files
|
// TODO: make sure this user has permissions for provided files
|
||||||
|
|
||||||
/* Create collection */
|
/* Create collection */
|
||||||
|
|
@ -226,9 +273,20 @@ final class ApiController extends Controller
|
||||||
$mediaCollection->setCreatedBy($request->getHeader()->getAccount());
|
$mediaCollection->setCreatedBy($request->getHeader()->getAccount());
|
||||||
$mediaCollection->setSources($files);
|
$mediaCollection->setSources($files);
|
||||||
|
|
||||||
return (int) CollectionMapper::create($mediaCollection);
|
CollectionMapper::create($mediaCollection);
|
||||||
|
|
||||||
|
return $mediaCollection;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to create template from request.
|
||||||
|
*
|
||||||
|
* @param RequestAbstract $request Request
|
||||||
|
*
|
||||||
|
* @return Template
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
private function createTemplateFromRequest(RequestAbstract $request, int $collectionId) : Template
|
private function createTemplateFromRequest(RequestAbstract $request, int $collectionId) : Template
|
||||||
{
|
{
|
||||||
$expected = $request->getData('expected');
|
$expected = $request->getData('expected');
|
||||||
|
|
@ -239,7 +297,7 @@ final class ApiController extends Controller
|
||||||
$helperTemplate->setDescriptionRaw((string) ($request->getData('description') ?? ''));
|
$helperTemplate->setDescriptionRaw((string) ($request->getData('description') ?? ''));
|
||||||
|
|
||||||
if ($collectionId > 0) {
|
if ($collectionId > 0) {
|
||||||
$helperTemplate->setSource((int) $collectionId);
|
$helperTemplate->setSource($collectionId);
|
||||||
}
|
}
|
||||||
|
|
||||||
$helperTemplate->setStandalone((bool) $request->getData('standalone') ?? false);
|
$helperTemplate->setStandalone((bool) $request->getData('standalone') ?? false);
|
||||||
|
|
@ -264,65 +322,32 @@ final class ApiController extends Controller
|
||||||
public function apiReportCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
|
public function apiReportCreate(RequestAbstract $request, ResponseAbstract $response, $data = null) : void
|
||||||
{
|
{
|
||||||
// todo: check permission here
|
// todo: check permission here
|
||||||
|
$collection = $this->createMediaCollectionFromRequest($request);
|
||||||
|
|
||||||
$this->handleTemplateDatabaseFromRequest($request);
|
$report = $this->createReportFromRequest($request, $response, $collection->getId());
|
||||||
$collectionId = $this->createMediaCollectionFromRequest($request);
|
|
||||||
|
|
||||||
$report = $this->createReportFromRequest($request, $response, $collectionId);
|
|
||||||
$this->createModel($request, $report, ReportMapper::class, 'report');
|
$this->createModel($request, $report, ReportMapper::class, 'report');
|
||||||
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Report', 'Report successfully created', $report);
|
$this->fillJsonResponse($request, $response, NotificationLevel::OK, 'Report', 'Report successfully created', $report);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to create report from request.
|
||||||
|
*
|
||||||
|
* @param RequestAbstract $request Request
|
||||||
|
* @param ResponseAbstract $response Response
|
||||||
|
* @param int $collectionId Id of media collection
|
||||||
|
*
|
||||||
|
* @return Report
|
||||||
|
*
|
||||||
|
* @since 1.0.0
|
||||||
|
*/
|
||||||
private function createReportFromRequest(RequestAbstract $request, ResponseAbstract $response, int $collectionId) : Report
|
private function createReportFromRequest(RequestAbstract $request, ResponseAbstract $response, int $collectionId) : Report
|
||||||
{
|
{
|
||||||
$helperReport = new Report();
|
$helperReport = new Report();
|
||||||
$helperReport->setTitle((string) ($request->getData('name')));
|
$helperReport->setTitle((string) ($request->getData('name')));
|
||||||
$helperReport->setSource((int) $collectionId);
|
$helperReport->setSource($collectionId);
|
||||||
$helperReport->setTemplate((int) $request->getData('template'));
|
$helperReport->setTemplate((int) $request->getData('template'));
|
||||||
$helperReport->setCreatedBy($request->getHeader()->getAccount());
|
$helperReport->setCreatedBy($request->getHeader()->getAccount());
|
||||||
|
|
||||||
return $helperReport;
|
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -260,7 +260,7 @@ class Report implements \JsonSerializable
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param mixed $source Report source
|
* @param \Modules\Media\Models\Collection|int $source Report source
|
||||||
*
|
*
|
||||||
* @return void
|
* @return void
|
||||||
*
|
*
|
||||||
|
|
@ -272,7 +272,7 @@ class Report implements \JsonSerializable
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return mixed
|
* @return \Modules\Media\Models\Collection|int
|
||||||
*
|
*
|
||||||
* @since 1.0.0
|
* @since 1.0.0
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ echo $this->getData('nav')->render(); ?>
|
||||||
<div class="row" style="height: calc(100% - 85px);">
|
<div class="row" style="height: calc(100% - 85px);">
|
||||||
<div class="col-xs-12 col-md-9">
|
<div class="col-xs-12 col-md-9">
|
||||||
<div class="wf-100" style="height: 100%;">
|
<div class="wf-100" style="height: 100%;">
|
||||||
<iframe src="<?= \phpOMS\Uri\UriFactory::build('/{/lang}/api/helper/report/export/?id=' . $template->getId()); ?>" allowfullscreen></iframe>
|
<iframe src="<?= \phpOMS\Uri\UriFactory::build('/{/lang}/api/helper/report/export/?id=' . $template->getId()); ?>" allowfullscreen></iframe>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user