ILIAS  release_8 Revision v8.23
class.ilXlsFoParser.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
25 {
33 
34  public function __construct(
35  ilSetting $settings,
36  ilPageFormats $pageFormats,
37  ?ilXMLChecker $xmlChecker = null,
38  ?ilCertificateUtilHelper $utilHelper = null,
39  ?ilCertificateXlstProcess $xlstProcess = null,
40  ?ilLanguage $language = null,
41  ?ilCertificateXlsFileLoader $certificateXlsFileLoader = null
42  ) {
43  $this->settings = $settings;
44  $this->pageFormats = $pageFormats;
45 
46  if (null === $xmlChecker) {
47  $xmlChecker = new ilXMLChecker(new ILIAS\Data\Factory());
48  }
49  $this->xmlChecker = $xmlChecker;
50 
51  if (null === $utilHelper) {
52  $utilHelper = new ilCertificateUtilHelper();
53  }
54  $this->utilHelper = $utilHelper;
55 
56  if (null === $xlstProcess) {
57  $xlstProcess = new ilCertificateXlstProcess();
58  }
59  $this->xlstProcess = $xlstProcess;
60 
61  if (null === $language) {
62  global $DIC;
63  $language = $DIC->language();
64  }
65  $this->language = $language;
66 
67  if (null === $certificateXlsFileLoader) {
68  $certificateXlsFileLoader = new ilCertificateXlsFileLoader();
69  }
70  $this->certificateXlsFileLoader = $certificateXlsFileLoader;
71  }
72 
78  public function parse(array $formData): string
79  {
80  $content = "<html><body>" . $formData['certificate_text'] . "</body></html>";
81  $content = preg_replace("/<p>(&nbsp;){1,}<\\/p>/", "<p></p>", $content);
82  $content = preg_replace("/<p>(\\s)*?<\\/p>/", "<p></p>", $content);
83  $content = str_replace(["<p></p>", "&nbsp;"], ["<p class=\"emptyrow\"></p>", "&#160;"], $content);
84  $content = preg_replace("//", "", $content);
85 
86  $this->xmlChecker->parse($content);
87  if ($this->xmlChecker->result()->isError()) {
88  throw new Exception($this->language->txt("certificate_not_well_formed"));
89  }
90 
91  $xsl = $this->certificateXlsFileLoader->getXlsCertificateContent();
92 
93  // additional font support
94  $xsl = str_replace(
95  'font-family="Helvetica, unifont"',
96  'font-family="' . $this->settings->get('rpc_pdf_font', 'Helvetica, unifont') . '"',
97  $xsl
98  );
99 
100  $args = [
101  '/_xml' => $content,
102  '/_xsl' => $xsl
103  ];
104 
105  if (strcmp($formData['pageformat'], 'custom') === 0) {
106  $pageheight = $formData['pageheight'] ?? '';
107  $pagewidth = $formData['pagewidth'] ?? '';
108  } else {
109  $pageformats = $this->pageFormats->fetchPageFormats();
110  $pageheight = $pageformats[$formData['pageformat']]['height'];
111  $pagewidth = $pageformats[$formData['pageformat']]['width'];
112  }
113 
114  $params = [
115  'pageheight' => $this->formatNumberString($this->utilHelper->stripSlashes($pageheight)),
116  'pagewidth' => $this->formatNumberString($this->utilHelper->stripSlashes($pagewidth)),
117  'backgroundimage' => '[BACKGROUND_IMAGE]',
118  'marginbody' => implode(
119  ' ',
120  [
121  $this->formatNumberString($this->utilHelper->stripSlashes($formData['margin_body']['top'])),
122  $this->formatNumberString($this->utilHelper->stripSlashes($formData['margin_body']['right'])),
123  $this->formatNumberString($this->utilHelper->stripSlashes($formData['margin_body']['bottom'])),
124  $this->formatNumberString($this->utilHelper->stripSlashes($formData['margin_body']['left']))
125  ]
126  )
127  ];
128 
129  return $this->xlstProcess->process($args, $params);
130  }
131 
132  private function formatNumberString(string $a_number): string
133  {
134  return str_replace(',', '.', $a_number);
135  }
136 }
ilCertificateXlstProcess $xlstProcess
formatNumberString(string $a_number)
if(! $DIC->user() ->getId()||!ilLTIConsumerAccess::hasCustomProviderCreationAccess()) $params
Definition: ltiregstart.php:33
Class ChatMainBarProvider .
__construct(ilSetting $settings, ilPageFormats $pageFormats, ?ilXMLChecker $xmlChecker=null, ?ilCertificateUtilHelper $utilHelper=null, ?ilCertificateXlstProcess $xlstProcess=null, ?ilLanguage $language=null, ?ilCertificateXlsFileLoader $certificateXlsFileLoader=null)
global $DIC
Definition: feed.php:28
Just a wrapper class to create Unit Test for other classes.
ilCertificateXlsFileLoader $certificateXlsFileLoader
ilXMLChecker $xmlChecker
parse(array $formData)
ilPageFormats $pageFormats
ilCertificateUtilHelper $utilHelper