This commit is contained in:
Dennis Eichhorn 2023-05-09 16:07:43 +00:00
parent 757930be9c
commit 09698caa0a
3 changed files with 199 additions and 0 deletions

View File

@ -27,6 +27,7 @@ use Modules\Media\Models\CollectionMapper;
use Modules\Media\Models\MediaMapper;
use Modules\Media\Models\NullMedia;
use Modules\Media\Models\PathSettings;
use Modules\Admin\Models\SettingsEnum as AdminSettingsEnum;
use Modules\Media\Models\Reference;
use Modules\Media\Models\ReferenceMapper;
use Modules\Tag\Models\NullTag;
@ -37,7 +38,9 @@ use phpOMS\Message\NotificationLevel;
use phpOMS\Message\RequestAbstract;
use phpOMS\Message\ResponseAbstract;
use phpOMS\Model\Message\FormValidation;
use phpOMS\System\MimeType;
use phpOMS\Utils\Parser\Markdown\Markdown;
use phpOMS\Views\View;
/**
* Calendar controller class.
@ -624,4 +627,87 @@ final class ApiController extends Controller
return [];
}
public function apiEditorExport(RequestAbstract $request, ResponseAbstract $response, mixed $data = null) : void
{
/** @var \Modules\Editor\Models\EditorDoc $doc */
$doc = EditorDocMapper::get()
->with('media')
->where('id', (int) $request->getData('id'))
->execute();
$type = $request->getDataString('type');
$mimes = $type === null ? $request->header->get('content-type') : [$type];
foreach ($mimes as $mime) {
if ($mime === MimeType::M_TEXT) {
$response->header->set('Content-Type', $mime);
$response->set('', $doc->plain);
return;
} elseif ($mime === MimeType::M_HTML) {
$response->header->set('Content-Type', $mime);
$response->set('', Markdown::parse($doc->plain));
return;
} elseif ($mime === MimeType::M_PDF) {
$response->header->set('Content-Type', $mime);
require_once __DIR__ . '/../../../Resources/tcpdf/tcpdf.php';
$view = new View($this->app->l11nManager, $request, $response);
$view->setTemplate('/Modules/Editor/Theme/Api/editor-pdf');
/** @var \Model\Setting[] $settings */
$settings = $this->app->appSettings->get(null,
[
AdminSettingsEnum::DEFAULT_TEMPLATES,
AdminSettingsEnum::DEFAULT_ASSETS,
],
unit: $this->app->unitId,
module: 'Admin'
);
if (empty($settings)) {
/** @var \Model\Setting[] $settings */
$settings = $this->app->appSettings->get(null,
[
AdminSettingsEnum::DEFAULT_TEMPLATES,
AdminSettingsEnum::DEFAULT_ASSETS,
],
unit: null,
module: 'Admin'
);
}
/** @var \Modules\Media\Models\Collection $defaultTemplates */
$defaultTemplates = CollectionMapper::get()
->with('sources')
->where('id', (int) $settings[AdminSettingsEnum::DEFAULT_TEMPLATES]->content)
->execute();
/** @var \Modules\Media\Models\Collection $defaultAssets */
$defaultAssets = CollectionMapper::get()
->with('sources')
->where('id', (int) $settings[AdminSettingsEnum::DEFAULT_ASSETS]->content)
->execute();
$view->setData('defaultTemplates', $defaultTemplates);
$view->setData('defaultAssets', $defaultAssets);
$view->setData('pdf', $pdf);
$view->setData('doc', $doc);
$response->set('', $view->render());
return;
} elseif ($mime === MimeType::M_DOC || $mime === MimeType::M_DOCX) {
$response->header->set('Content-Type', $mime);
return;
}
}
$response->header->set('Content-Type', MimeType::M_TEXT);
$response->set('', $doc->plain);
}
}

View File

@ -0,0 +1,41 @@
<?php
/**
* Karaka
*
* PHP Version 8.1
*
* @package Modules\Media
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
use Modules\Editor\Models\NullEditorDoc;
use phpOMS\Utils\Parser\Markdown\Markdown;
/** @var \phpOMS\Views\View $this */
require_once $this->getData('defaultTemplates')
->findFile('.pdf.php')
->getAbsolutePath();
/** @var \Modules\Editor\Models\EditorDoc $doc */
$doc = $this->getData('doc') ?? new NullEditorDoc();
// Set up default pdf template
/** @phpstan-import-type DefaultPdf from ../../../../Admin/Install/Media/PdfDefaultTemplate/pdfTemplate.pdf.php */
$word = new DefaultWord();
$section = $word->createFirstPage();
\PhpOffice\PhpWord\Shared\Html::addHtml($section, Markdown::parse($doc->plain));
$file = \tempnam(\sys_get_temp_dir(), 'oms_');
$word->save($file, 'Word2007');
$content = \file_get_contents($file);
if ($content !== false) {
echo $content;
}
\unlink($file);

View File

@ -0,0 +1,72 @@
<?php
/**
* Karaka
*
* PHP Version 8.1
*
* @package Modules\Media
* @copyright Dennis Eichhorn
* @license OMS License 2.0
* @version 1.0.0
* @link https://jingga.app
*/
declare(strict_types=1);
use Modules\Editor\Models\NullEditorDoc;
use phpOMS\Utils\Parser\Markdown\Markdown;
/** @var \phpOMS\Views\View $this */
require_once $this->getData('defaultTemplates')
->findFile('.pdf.php')
->getAbsolutePath();
/** @var \Modules\Editor\Models\EditorDoc $doc */
$doc = $this->getData('doc') ?? new NullEditorDoc();
// Set up default pdf template
/** @phpstan-import-type DefaultPdf from ../../../../Admin/Install/Media/PdfDefaultTemplate/pdfTemplate.pdf.php */
$pdf = new DefaultPdf();
$pdf->setHeaderData(
$this->getData('defaultTemplates')->findFile('logo.png')->getAbsolutePath(), 15,
$this->getData('logo_name') ?? 'Jingga',
$this->getData('slogan') ?? 'Business solutions made simple.'
);
$pdf->setCreator($this->getData('creator') ?? 'Jingga');
$pdf->setAuthor($this->getData('creator') ?? 'Jingga');
$pdf->setTitle($this->getData('title') ?? $bill->type->getL11n());
$pdf->setSubject($this->getData('subtitle') ?? '');
$pdf->setKeywords(\implode(', ', $this->getData('keywords') ?? []));
$pdf->language = $bill->getLanguage();
$pdf->attributes['legal_name'] = $this->getData('legal_company_name') ?? 'Jingga e.K.';
$pdf->attributes['address'] = $this->getData('company_address') ?? 'Gartenstr. 26';
$pdf->attributes['city'] = $this->getData('company_city') ?? '61206 Woellstadt';
$pdf->attributes['ceo'] = $this->getData('company_ceo') ?? 'Dennis Eichhorn';
$pdf->attributes['tax_office'] = $this->getData('company_tax_office') ?? 'HRB ???';
$pdf->attributes['tax_number'] = $this->getData('company_tax_id') ?? '123456789';
$pdf->attributes['bank_name'] = $this->getData('company_bank_name') ?? 'Volksbank Mittelhessen';
$pdf->attributes['swift'] = $this->getData('company_swift') ?? '.....';
$pdf->attributes['bank_account'] = $this->getData('company_bank_account') ?? '.....';
$pdf->attributes['website'] = $this->getData('company_website') ?? 'www.jingga.app';
$pdf->attributes['email'] = $this->getData('company_email') ?? 'info@jingga.app';
$pdf->attributes['phone'] = $this->getData('company_phone') ?? '+49 0152 ????';
$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
// add a page
$pdf->AddPage();
$topPos = $pdf->getY();
$doc = $this->getData('doc') ?? new NullEditorDoc();
$pdf->writeHTML(Markdown::parse($doc->plain));
//Close and output PDF document
$pdf->Output(
$this->getData('path') ?? ($doc->createdAt->format('Y-m-d') . '_' . $doc->id . '.pdf'),
'I'
);