Skip to content
Snippets Groups Projects
Commit f36fa5c5 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Reprise manuelle des dernières évolutions de l'Exporter dans unicaen/app

parent 18497c10
Branches
Tags
No related merge requests found
Pipeline #20309 failed
......@@ -2,15 +2,18 @@
namespace UnicaenPdf\Exporter;
use Mpdf\Mpdf as mPDF;
use Laminas\View\Renderer\PhpRenderer;
use Laminas\View\Resolver\TemplatePathStack;
use LogicException;
use Mpdf\Mpdf as mPDF;
use RuntimeException;
use Laminas\View\Renderer\PhpRenderer;
/**
* Classe utilitaire permettant de fabriquer un document PDF à partir
* de code HTML.
*
* NB: bibliothèque mPDF requise (http://www.mpdf1.com/mpdf/).
*
* @author Unicaen
*/
class PdfExporter implements ExporterInterface
......@@ -61,6 +64,14 @@ class PdfExporter implements ExporterInterface
* @var array
*/
private $scriptVars = [];
/**
* @var array
*/
private $footerVars = [];
/**
* @var array
*/
private $headerVars = [];
/**
* @var boolean
*/
......@@ -128,6 +139,13 @@ class PdfExporter implements ExporterInterface
*/
private $logo;
/**
* Chemin absolu du répertoire contenant les scripts de vue par défaut.
*
* @var string
*/
protected $defaultScriptsDirPath = __DIR__ . '/scripts';
/**
* Constructeur.
*
......@@ -150,6 +168,9 @@ class PdfExporter implements ExporterInterface
$this->orientationPaysage = $orientationPaysage;
$this->defaultFontSize = $defaultFontSize;
$this->setHeaderScriptToDefault();
$this->setFooterScriptToDefault();
// $this->setLogo(file_get_contents(__DIR__ . "/../../../public/unicaen/app/img/logo-unicaen.png"));
}
......@@ -161,7 +182,7 @@ class PdfExporter implements ExporterInterface
* @param string|null $oddOrEven 'O', 'E' ou null
* @return self
*/
public function setHeaderScript(string $script = null, string $oddOrEven = null): self
public function setHeaderScript(string $script = null, string $oddOrEven = null, array $scriptVars = []): self
{
if (!$script) {
$this->headerScripts = [];
......@@ -174,6 +195,36 @@ class PdfExporter implements ExporterInterface
$this->headerScripts['O'] = $script;
$this->headerScripts['E'] = $script;
}
if ($scriptVars) {
$this->headerVars = $scriptVars;
}
return $this;
}
/**
* Spécifie qu'aucun script ne soit utilisé pour les entêtes de pages.
* Autrement dit, les pages du document PDF n'auront pas d'entête !
*
* @return self
*/
public function setHeaderScriptToNone()
{
$this->headerScripts = array();
return $this;
}
/**
* Restaure le script de vue par défaut pour les entêtes de pages (pages paires et impaires).
*
* @return self
*/
public function setHeaderScriptToDefault()
{
$this->headerScripts['O'] = 'header-odd.phtml';
$this->headerScripts['E'] = 'header-even.phtml';
return $this;
}
......@@ -225,7 +276,7 @@ class PdfExporter implements ExporterInterface
* @param string|null $oddOrEven 'O' (pages impaires seulement), 'E' (pages paires seulement) ou null (pages paires et impaires)
* @return self
*/
public function setFooterScript(string $script = null, string $oddOrEven = null): self
public function setFooterScript(string $script = null, string $oddOrEven = null, array $scriptVars =[]): self
{
if (!$script) {
$this->footerScripts = [];
......@@ -237,6 +288,36 @@ class PdfExporter implements ExporterInterface
$this->footerScripts['O'] = $script;
$this->footerScripts['E'] = $script;
}
if ($scriptVars) {
$this->footerVars = $scriptVars;
}
return $this;
}
/**
* Restaure le script de vue par défaut pour les pieds de pages (pages paires et impaires).
*
* @return self
*/
public function setFooterScriptToDefault()
{
$this->footerScripts['O'] = 'footer-odd.phtml';
$this->footerScripts['E'] = 'footer-even.phtml';
return $this;
}
/**
* Spécifie qu'aucun script ne soit utilisé pour les pieds de pages.
* Autrement dit, les pages du document PDF n'auront pas de pied de page !
*
* @return self
*/
public function setFooterScriptToNone()
{
$this->footerScripts = array();
return $this;
}
......@@ -254,9 +335,10 @@ class PdfExporter implements ExporterInterface
* PdfExporter::DESTINATION_STRING :
* Return the document as a string. filename is ignored.
*
* @param string $destination Exemple : PdfExporter::self
* @param string|null $memoryLimit
* @param string $destination Exemple : PdfExporter::DESTINATION_BROWSER
* @param string|null $memoryLimit Quantité de mémoire maximum utilisée (memory_limit PHP), ex: '256M'
* @return string|null
*
* @throws \Mpdf\MpdfException
*/
public function export(string $filename = null, string $destination = PdfExporter::DESTINATION_BROWSER, string $memoryLimit = null)
......@@ -392,29 +474,22 @@ class PdfExporter implements ExporterInterface
{
$headerOdd = $headerEven = null;
$scriptVars = array(
$scriptVars = [
'headerTitle' => $this->headerTitle,
'headerSubtitle' => $this->headerSubtitle,
'logo' => $this->logo);
$scriptVars = array_merge($scriptVars, current($this->scriptVars) ?: []);
'logo' => $this->logo,
];
$scriptVars = array_merge($this->headerVars, $scriptVars);
// le logo doit être passé ainsi pour pouvoir être référencé dans la balise <img> sous la forme "var:logo"
$this->getMpdf()->imageVars['logo'] = $this->logo;
if (isset($this->headerScripts['O'])) {
$headerOdd = $this->getRenderer()->render($this->headerScripts['O'], $scriptVars);
} elseif (file_exists($filepath = $this->getDefaultScriptsPath() . '/header-odd.phtml')) {
ob_start();
include $filepath;
$headerOdd = ob_get_clean();
}
if (isset($this->headerScripts['E'])) {
$headerEven = $this->getRenderer()->render($this->headerScripts['E'], $scriptVars);
} elseif (file_exists($filepath = $this->getDefaultScriptsPath() . '/header-even.phtml')) {
ob_start();
include $filepath;
$headerEven = ob_get_clean();
}
if ($headerOdd) {
......@@ -482,24 +557,17 @@ class PdfExporter implements ExporterInterface
{
$footerOdd = $footerEven = null;
$scriptVars = array(
'footerTitle' => $this->footerTitle);
$scriptVars = array_merge($scriptVars, current($this->scriptVars) ?: []);
$scriptVars = [
'footerTitle' => $this->footerTitle,
];
$scriptVars = array_merge($this->footerVars, $scriptVars);
if (isset($this->footerScripts['O'])) {
$footerOdd = $this->getRenderer()->render($this->footerScripts['O'], $scriptVars);
} elseif (file_exists($filepath = $this->getDefaultScriptsPath() . '/footer-odd.phtml')) {
ob_start();
include $filepath;
$footerOdd = ob_get_clean();
}
if (isset($this->footerScripts['E'])) {
$footerEven = $this->getRenderer()->render($this->footerScripts['E'], $scriptVars);
} elseif (file_exists($filepath = $this->getDefaultScriptsPath() . '/footer-even.phtml')) {
ob_start();
include $filepath;
$footerEven = ob_get_clean();
}
if ($footerOdd) {
......@@ -521,6 +589,11 @@ class PdfExporter implements ExporterInterface
public function setRenderer(PhpRenderer $renderer): self
{
$this->renderer = $renderer;
$this->renderer->resolver()->attach(new TemplatePathStack(['script_paths' => [
$this->defaultScriptsDirPath,
]]));
return $this;
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment