19declare(strict_types=1);
21use PHPUnit\Framework\Attributes\DataProvider;
30 $settings = $this->getMockBuilder(ilSetting::class)
31 ->disableOriginalConstructor()
33 $settings->method(
'get')->willReturnArgument(0);
35 $language = $this->getMockBuilder(ilLanguage::class)->disableOriginalConstructor()->onlyMethods(
38 $language->method(
'txt')->willReturnArgument(0);
42 $util_helper = $this->getMockBuilder(ilCertificateUtilHelper::class)
43 ->disableOriginalConstructor()
46 $util_helper->method(
'stripSlashes')
47 ->willReturnArgument(0);
52 $language = $this->getMockBuilder(ilLanguage::class)
53 ->disableOriginalConstructor()
68 $output = $xlsFoParser->parse($form_data);
75 $xml = str_replace([
"\n",
"\r",
"\t"],
'', $xml);
76 $xml = preg_replace(
"/>(\s+)</",
"><", $xml);
77 $xml = preg_replace(
'# {2,}#',
' ', $xml);
86 'certificate_text' =>
'<xml> Some Context </xml>',
96 $settings = $this->getMockBuilder(ilSetting::class)
97 ->disableOriginalConstructor()
100 $settings->method(
'get')
101 ->willReturn(
'Something');
103 $pageFormats = $this->getMockBuilder(ilPageFormats::class)
104 ->disableOriginalConstructor()
107 $pageFormats->method(
'fetchPageFormats')
119 $utilHelper = $this->getMockBuilder(ilCertificateUtilHelper::class)
120 ->disableOriginalConstructor()
123 $utilHelper->method(
'stripSlashes')
124 ->willReturnOnConsecutiveCalls(
133 $xlstProcess = $this->getMockBuilder(ilCertificateXlstProcess::class)
137 ->expects($this->once())
141 '/_xml' =>
'<html><body><xml> Some Context </xml></body></html>',
142 '/_xsl' =>
'<xml>Some XLS Content</xml>'
145 'pageheight' =>
'297mm',
146 'pagewidth' =>
'210mm',
147 'backgroundimage' =>
'[BACKGROUND_IMAGE]',
148 'marginbody' =>
'1cm 2cm 3cm 4cm'
151 ->willReturn(
'Something Processed');
153 $language = $this->getMockBuilder(ilLanguage::class)
154 ->disableOriginalConstructor()
157 $certificateXlsFileLoader = $this->getMockBuilder(ilCertificateXlsFileLoader::class)
160 $certificateXlsFileLoader->method(
'getXlsCertificateContent')
161 ->willReturn(
'<xml>Some XLS Content</xml>');
170 $certificateXlsFileLoader
173 $output = $xlsFoParser->parse($formData);
175 $this->assertSame(
'Something Processed', $output);
180 $this->expectException(Exception::class);
183 'certificate_text' =>
'<xml> Some Context <xml>',
190 'pageformat' =>
'custom'
193 $settings = $this->getMockBuilder(ilSetting::class)
194 ->disableOriginalConstructor()
197 $settings->method(
'get')
198 ->willReturn(
'Something');
200 $pageFormats = $this->getMockBuilder(ilPageFormats::class)
201 ->disableOriginalConstructor()
204 $pageFormats->method(
'fetchPageFormats')
216 $utilHelper = $this->getMockBuilder(ilCertificateUtilHelper::class)
217 ->disableOriginalConstructor()
220 $xlstProcess = $this->getMockBuilder(ilCertificateXlstProcess::class)
223 $language = $this->getMockBuilder(ilLanguage::class)
224 ->disableOriginalConstructor()
225 ->onlyMethods([
'txt'])
227 $language->expects($this->once())->method(
'txt')->willReturn(
'certificate_not_well_formed');
229 $certificateXlsFileLoader = $this->getMockBuilder(ilCertificateXlsFileLoader::class)
232 $certificateXlsFileLoader->method(
'getXlsCertificateContent')
233 ->willReturn(
'<xml>Some XLS Content</xml>');
242 $certificateXlsFileLoader
245 $xlsFoParser->parse($formData);
253 'certificate_text' =>
'<xml> Some Context </xml>',
260 'pageformat' =>
'custom',
261 'pagewidth' =>
'210mm',
262 'pageheight' =>
'297mm'
265 $settings = $this->getMockBuilder(ilSetting::class)
266 ->disableOriginalConstructor()
269 $settings->method(
'get')
270 ->willReturn(
'Something');
272 $pageFormats = $this->getMockBuilder(ilPageFormats::class)
273 ->disableOriginalConstructor()
276 $pageFormats->method(
'fetchPageFormats')
288 $utilHelper = $this->getMockBuilder(ilCertificateUtilHelper::class)
289 ->disableOriginalConstructor()
292 $utilHelper->method(
'stripSlashes')
293 ->willReturnOnConsecutiveCalls(
302 $xlstProcess = $this->getMockBuilder(ilCertificateXlstProcess::class)
306 ->expects($this->once())
310 '/_xml' =>
'<html><body><xml> Some Context </xml></body></html>',
311 '/_xsl' =>
'<xml>Some XLS Content</xml>'
314 'pageheight' =>
'297mm',
315 'pagewidth' =>
'210mm',
316 'backgroundimage' =>
'[BACKGROUND_IMAGE]',
317 'marginbody' =>
'1cm 2cm 3cm 4cm'
320 ->willReturn(
'Something Processed');
322 $language = $this->getMockBuilder(ilLanguage::class)
323 ->disableOriginalConstructor()
326 $certificateXlsFileLoader = $this->getMockBuilder(ilCertificateXlsFileLoader::class)
329 $certificateXlsFileLoader->method(
'getXlsCertificateContent')
330 ->willReturn(
'<xml>Some XLS Content</xml>');
339 $certificateXlsFileLoader
342 $output = $xlsFoParser->parse($formData);
344 $this->assertSame(
'Something Processed', $output);
350 'certificate_text' =>
'<xml> Some Context </xml>',
357 'pageformat' =>
'custom',
358 'pagewidth' =>
'210mm',
359 'pageheight' =>
'297mm'
362 $settings = $this->getMockBuilder(ilSetting::class)
363 ->disableOriginalConstructor()
366 $settings->method(
'get')
367 ->willReturn(
'Something');
369 $pageFormats = $this->getMockBuilder(ilPageFormats::class)
370 ->disableOriginalConstructor()
373 $pageFormats->method(
'fetchPageFormats')
385 $utilHelper = $this->getMockBuilder(ilCertificateUtilHelper::class)
386 ->disableOriginalConstructor()
389 $utilHelper->method(
'stripSlashes')
390 ->willReturnOnConsecutiveCalls(
399 $xlstProcess = $this->getMockBuilder(ilCertificateXlstProcess::class)
403 ->expects($this->once())
407 '/_xml' =>
'<html><body><xml> Some Context </xml></body></html>',
408 '/_xsl' =>
'<xml>Some XLS Content</xml>'
411 'pageheight' =>
'29.7mm',
412 'pagewidth' =>
'21.0mm',
413 'backgroundimage' =>
'[BACKGROUND_IMAGE]',
414 'marginbody' =>
'1cm 2cm 3cm 4cm'
417 ->willReturn(
'Something Processed');
419 $language = $this->getMockBuilder(ilLanguage::class)
420 ->disableOriginalConstructor()
423 $certificateXlsFileLoader = $this->getMockBuilder(ilCertificateXlsFileLoader::class)
426 $certificateXlsFileLoader->method(
'getXlsCertificateContent')
427 ->willReturn(
'<xml>Some XLS Content</xml>');
436 $certificateXlsFileLoader
439 $output = $xlsFoParser->parse($formData);
441 $this->assertSame(
'Something Processed', $output);
446 $expected_fo_with_centered_block = <<<EOT
448<fo:root xmlns:fo=
"http://www.w3.org/1999/XSL/Format" font-family=
"rpc_pdf_font">
449 <fo:layout-master-
set>
450 <fo:
simple-page-master master-name=
"ILIAS_certificate" page-height=
"297mm" page-width=
"210mm">
451 <fo:region-body margin=
"1cm 2cm 3cm 4cm"/>
452 <fo:region-before region-name=
"background-image" extent=
"0"/>
454 </fo:layout-master-
set>
455 <fo:page-sequence master-reference=
"ILIAS_certificate">
456 <fo:
static-content flow-name=
"background-image">
457 <fo:block-container absolute-position=
"absolute" top=
"0cm" left=
"0cm" z-index=
"0">
459 <fo:external-graphic src=
"url([BACKGROUND_IMAGE])" content-height=
"297mm" content-width=
"210mm"/>
461 </fo:block-container>
463 <fo:flow flow-name=
"xsl-region-body">
465 <fo:block text-align=
"center"> </fo:block>
472 yield
'Centered Paragraph' => [
474 'certificate_text' =>
'<p style="text-align: center;"></p>',
481 'pageformat' =>
'custom',
482 'pagewidth' =>
'210mm',
483 'pageheight' =>
'297mm'
485 $expected_fo_with_centered_block
488 $expected_fo_with_centered_block = <<<EOT
490<fo:root xmlns:fo=
"http://www.w3.org/1999/XSL/Format" font-family=
"rpc_pdf_font">
491 <fo:layout-master-
set>
492 <fo:
simple-page-master master-name=
"ILIAS_certificate" page-height=
"297mm" page-width=
"210mm">
493 <fo:region-body margin=
"1cm 2cm 3cm 4cm"/>
494 <fo:region-before region-name=
"background-image" extent=
"0"/>
496 </fo:layout-master-
set>
497 <fo:page-sequence master-reference=
"ILIAS_certificate">
498 <fo:
static-content flow-name=
"background-image">
499 <fo:block-container absolute-position=
"absolute" top=
"0cm" left=
"0cm" z-index=
"0">
501 <fo:external-graphic src=
"url([BACKGROUND_IMAGE])" content-height=
"297mm" content-width=
"210mm"/>
503 </fo:block-container>
505 <fo:flow flow-name=
"xsl-region-body">
507 <fo:block> </fo:block>
514 yield
'Empty paragraph' => [
516 'certificate_text' =>
'<p></p>',
523 'pageformat' =>
'custom',
524 'pagewidth' =>
'210mm',
525 'pageheight' =>
'297mm'
527 $expected_fo_with_centered_block
534 #[DataProvider('nonBreakingSpaceIsAddedDataProvider')]
544 $expected_fo_with_centered_block = <<<EOT
546<fo:root xmlns:fo=
"http://www.w3.org/1999/XSL/Format" font-family=
"rpc_pdf_font">
547 <fo:layout-master-
set>
548 <fo:
simple-page-master master-name=
"ILIAS_certificate" page-height=
"297mm" page-width=
"210mm">
549 <fo:region-body margin=
"1cm 2cm 3cm 4cm"/>
550 <fo:region-before region-name=
"background-image" extent=
"0"/>
552 </fo:layout-master-
set>
553 <fo:page-sequence master-reference=
"ILIAS_certificate">
554 <fo:
static-content flow-name=
"background-image">
555 <fo:block-container absolute-position=
"absolute" top=
"0cm" left=
"0cm" z-index=
"0">
557 <fo:external-graphic src=
"url([BACKGROUND_IMAGE])" content-height=
"297mm" content-width=
"210mm"/>
559 </fo:block-container>
561 <fo:flow flow-name=
"xsl-region-body">
563 <fo:block>[USER_FULLNAME]</fo:block>
570 yield
'Paragraph with Text' => [
572 'certificate_text' =>
'<p>[USER_FULLNAME]</p>',
579 'pageformat' =>
'custom',
580 'pagewidth' =>
'210mm',
581 'pageheight' =>
'297mm'
583 $expected_fo_with_centered_block
586 $expected_fo_with_centered_block = <<<EOT
588<fo:root xmlns:fo=
"http://www.w3.org/1999/XSL/Format" font-family=
"rpc_pdf_font">
589 <fo:layout-master-
set>
590 <fo:
simple-page-master master-name=
"ILIAS_certificate" page-height=
"297mm" page-width=
"210mm">
591 <fo:region-body margin=
"1cm 2cm 3cm 4cm"/>
592 <fo:region-before region-name=
"background-image" extent=
"0"/>
594 </fo:layout-master-
set>
595 <fo:page-sequence master-reference=
"ILIAS_certificate">
596 <fo:
static-content flow-name=
"background-image">
597 <fo:block-container absolute-position=
"absolute" top=
"0cm" left=
"0cm" z-index=
"0">
599 <fo:external-graphic src=
"url([BACKGROUND_IMAGE])" content-height=
"297mm" content-width=
"210mm"/>
601 </fo:block-container>
603 <fo:flow flow-name=
"xsl-region-body">
605 <fo:block><fo:
inline font-size=
"24pt">[USER_FULLNAME]</fo:
inline></fo:block>
612 yield
'Paragraph with Nodes' => [
614 'certificate_text' =>
'<p><span style="font-size: 24pt;">[USER_FULLNAME]</span></p>',
621 'pageformat' =>
'custom',
622 'pagewidth' =>
'210mm',
623 'pageheight' =>
'297mm'
625 $expected_fo_with_centered_block
632 #[DataProvider('noNonBreakingSpaceIsAddedDataProvider')]
637 $this->verifyFoGeneratedFromXhtml($form_data, $fo);
testTransformingParagraphsWithNoTextAndNoChildrenResultsInNonBreakingSpaceXslFoBlock(array $form_data, string $fo)
static nonBreakingSpaceIsAddedDataProvider()
testCommasWillBeConvertedToPointInDecimalSepartor()
testParseWithNonCustomPageFormatting()
testParseWithCustomPageFormatting()
verifyFoGeneratedFromXhtml(array $form_data, string $fo)
static noNonBreakingSpaceIsAddedDataProvider()
testParseButXmlCheckerFindsAnError()
normalizeXml(string $xml)
testTransformingParagraphsWithTextOrChildrenResultsNotInNonBreakingSpaceXslFoBlock(array $form_data, string $fo)
Interface Observer \BackgroundTasks Contains several chained tasks and infos about them.