1<?php
2
3namespace Mpdf\Tag;
4
5class FormFeed extends Tag
6{
7	public $toc_id;
8
9	public function open($attr, &$ahtml, &$ihtml)
10	{
11		$tag = $this->getTagName();
12		if (isset($attr['SHEET-SIZE'])) {
13			// Convert to same types as accepted in initial mPDF() A4, A4-L, or array(w,h)
14			$prop = preg_split('/\s+/', trim($attr['SHEET-SIZE']));
15			if (count($prop) == 2) {
16				$newformat = [$this->sizeConverter->convert($prop[0]), $this->sizeConverter->convert($prop[1])];
17			} else {
18				$newformat = $attr['SHEET-SIZE'];
19			}
20		} else {
21			$newformat = '';
22		}
23
24		$save_blklvl = $this->mpdf->blklvl;
25		$save_blk = $this->mpdf->blk;
26		$save_silp = $this->mpdf->saveInlineProperties();
27		$save_ilp = $this->mpdf->InlineProperties;
28		$save_bflp = $this->mpdf->InlineBDF;
29		$save_bflpc = $this->mpdf->InlineBDFctr; // mPDF 6
30
31		$mgr = $mgl = $mgt = $mgb = $mgh = $mgf = '';
32		if (isset($attr['MARGIN-RIGHT'])) {
33			$mgr = $this->sizeConverter->convert($attr['MARGIN-RIGHT'], $this->mpdf->w, $this->mpdf->FontSize, false);
34		}
35		if (isset($attr['MARGIN-LEFT'])) {
36			$mgl = $this->sizeConverter->convert($attr['MARGIN-LEFT'], $this->mpdf->w, $this->mpdf->FontSize, false);
37		}
38		if (isset($attr['MARGIN-TOP'])) {
39			$mgt = $this->sizeConverter->convert($attr['MARGIN-TOP'], $this->mpdf->w, $this->mpdf->FontSize, false);
40		}
41		if (isset($attr['MARGIN-BOTTOM'])) {
42			$mgb = $this->sizeConverter->convert($attr['MARGIN-BOTTOM'], $this->mpdf->w, $this->mpdf->FontSize, false);
43		}
44		if (isset($attr['MARGIN-HEADER'])) {
45			$mgh = $this->sizeConverter->convert($attr['MARGIN-HEADER'], $this->mpdf->w, $this->mpdf->FontSize, false);
46		}
47		if (isset($attr['MARGIN-FOOTER'])) {
48			$mgf = $this->sizeConverter->convert($attr['MARGIN-FOOTER'], $this->mpdf->w, $this->mpdf->FontSize, false);
49		}
50		$ohname = $ehname = $ofname = $efname = '';
51		if (isset($attr['ODD-HEADER-NAME'])) {
52			$ohname = $attr['ODD-HEADER-NAME'];
53		}
54		if (isset($attr['EVEN-HEADER-NAME'])) {
55			$ehname = $attr['EVEN-HEADER-NAME'];
56		}
57		if (isset($attr['ODD-FOOTER-NAME'])) {
58			$ofname = $attr['ODD-FOOTER-NAME'];
59		}
60		if (isset($attr['EVEN-FOOTER-NAME'])) {
61			$efname = $attr['EVEN-FOOTER-NAME'];
62		}
63		$ohvalue = $ehvalue = $ofvalue = $efvalue = 0;
64		if (isset($attr['ODD-HEADER-VALUE']) && ($attr['ODD-HEADER-VALUE'] == '1' || strtoupper($attr['ODD-HEADER-VALUE']) === 'ON')) {
65			$ohvalue = 1;
66		} elseif (isset($attr['ODD-HEADER-VALUE']) && ($attr['ODD-HEADER-VALUE'] == '-1' || strtoupper($attr['ODD-HEADER-VALUE']) === 'OFF')) {
67			$ohvalue = -1;
68		}
69		if (isset($attr['EVEN-HEADER-VALUE']) && ($attr['EVEN-HEADER-VALUE'] == '1' || strtoupper($attr['EVEN-HEADER-VALUE']) === 'ON')) {
70			$ehvalue = 1;
71		} elseif (isset($attr['EVEN-HEADER-VALUE']) && ($attr['EVEN-HEADER-VALUE'] == '-1' || strtoupper($attr['EVEN-HEADER-VALUE']) === 'OFF')) {
72			$ehvalue = -1;
73		}
74		if (isset($attr['ODD-FOOTER-VALUE']) && ($attr['ODD-FOOTER-VALUE'] == '1' || strtoupper($attr['ODD-FOOTER-VALUE']) === 'ON')) {
75			$ofvalue = 1;
76		} elseif (isset($attr['ODD-FOOTER-VALUE']) && ($attr['ODD-FOOTER-VALUE'] == '-1' || strtoupper($attr['ODD-FOOTER-VALUE']) === 'OFF')) {
77			$ofvalue = -1;
78		}
79		if (isset($attr['EVEN-FOOTER-VALUE']) && ($attr['EVEN-FOOTER-VALUE'] == '1' || strtoupper($attr['EVEN-FOOTER-VALUE']) === 'ON')) {
80			$efvalue = 1;
81		} elseif (isset($attr['EVEN-FOOTER-VALUE']) && ($attr['EVEN-FOOTER-VALUE'] == '-1' || strtoupper($attr['EVEN-FOOTER-VALUE']) === 'OFF')) {
82			$efvalue = -1;
83		}
84
85		if (isset($attr['ORIENTATION']) && (strtoupper($attr['ORIENTATION']) === 'L' || strtoupper($attr['ORIENTATION']) === 'LANDSCAPE')) {
86			$orient = 'L';
87		} elseif (isset($attr['ORIENTATION']) && (strtoupper($attr['ORIENTATION']) === 'P' || strtoupper($attr['ORIENTATION']) === 'PORTRAIT')) {
88			$orient = 'P';
89		} else {
90			$orient = $this->mpdf->CurOrientation;
91		}
92
93		$pagesel = '';
94		if (!empty($attr['PAGE-SELECTOR'])) {
95			$pagesel = $attr['PAGE-SELECTOR'];
96		}
97
98		// mPDF 6 pagebreaktype
99		$pagebreaktype = $this->mpdf->defaultPagebreakType;
100		if ($tag === 'FORMFEED') {
101			$pagebreaktype = 'slice';
102		} // can be overridden by PAGE-BREAK-TYPE
103		$startpage = $this->mpdf->page;
104		if (isset($attr['PAGE-BREAK-TYPE'])) {
105			if (strtolower($attr['PAGE-BREAK-TYPE']) === 'cloneall'
106				|| strtolower($attr['PAGE-BREAK-TYPE']) === 'clonebycss'
107				|| strtolower($attr['PAGE-BREAK-TYPE']) === 'slice') {
108				$pagebreaktype = strtolower($attr['PAGE-BREAK-TYPE']);
109			}
110		}
111		if ($tag === 'TOCPAGEBREAK') {
112			$pagebreaktype = 'cloneall';
113		} elseif ($this->mpdf->ColActive) {
114			$pagebreaktype = 'cloneall';
115		} // Any change in headers/footers (may need to _getHtmlHeight), or page size/orientation, @page selector, or margins - force cloneall
116		elseif ($mgr !== '' || $mgl !== '' || $mgt !== '' || $mgb !== '' || $mgh !== '' || $mgf !== '' ||
117			$ohname !== '' || $ehname !== '' || $ofname !== '' || $efname !== '' ||
118			$ohvalue || $ehvalue || $ofvalue || $efvalue ||
119			$orient != $this->mpdf->CurOrientation || $newformat || $pagesel) {
120			$pagebreaktype = 'cloneall';
121		}
122
123		// mPDF 6 pagebreaktype
124		$this->mpdf->_preForcedPagebreak($pagebreaktype);
125
126		$this->mpdf->ignorefollowingspaces = true;
127
128
129		$resetpagenum = '';
130		$pagenumstyle = '';
131		$suppress = '';
132		if (isset($attr['RESETPAGENUM'])) {
133			$resetpagenum = $attr['RESETPAGENUM'];
134		}
135		if (isset($attr['PAGENUMSTYLE'])) {
136			$pagenumstyle = $attr['PAGENUMSTYLE'];
137		}
138		if (isset($attr['SUPPRESS'])) {
139			$suppress = $attr['SUPPRESS'];
140		}
141
142		$type = '';
143		if ($tag === 'TOCPAGEBREAK') {
144			$type = 'NEXT-ODD';
145		} elseif (isset($attr['TYPE'])) {
146			$type = strtoupper($attr['TYPE']);
147		}
148
149		if ($type === 'E' || $type === 'EVEN') {
150			$this->mpdf->AddPage(
151				$orient,
152				'E',
153				$resetpagenum,
154				$pagenumstyle,
155				$suppress,
156				$mgl,
157				$mgr,
158				$mgt,
159				$mgb,
160				$mgh,
161				$mgf,
162				$ohname,
163				$ehname,
164				$ofname,
165				$efname,
166				$ohvalue,
167				$ehvalue,
168				$ofvalue,
169				$efvalue,
170				$pagesel,
171				$newformat
172			);
173		} elseif ($type === 'O' || $type === 'ODD') {
174			$this->mpdf->AddPage(
175				$orient,
176				'O',
177				$resetpagenum,
178				$pagenumstyle,
179				$suppress,
180				$mgl,
181				$mgr,
182				$mgt,
183				$mgb,
184				$mgh,
185				$mgf,
186				$ohname,
187				$ehname,
188				$ofname,
189				$efname,
190				$ohvalue,
191				$ehvalue,
192				$ofvalue,
193				$efvalue,
194				$pagesel,
195				$newformat
196			);
197		} elseif ($type === 'NEXT-ODD') {
198			$this->mpdf->AddPage(
199				$orient,
200				'NEXT-ODD',
201				$resetpagenum,
202				$pagenumstyle,
203				$suppress,
204				$mgl,
205				$mgr,
206				$mgt,
207				$mgb,
208				$mgh,
209				$mgf,
210				$ohname,
211				$ehname,
212				$ofname,
213				$efname,
214				$ohvalue,
215				$ehvalue,
216				$ofvalue,
217				$efvalue,
218				$pagesel,
219				$newformat
220			);
221		} elseif ($type === 'NEXT-EVEN') {
222			$this->mpdf->AddPage(
223				$orient,
224				'NEXT-EVEN',
225				$resetpagenum,
226				$pagenumstyle,
227				$suppress,
228				$mgl,
229				$mgr,
230				$mgt,
231				$mgb,
232				$mgh,
233				$mgf,
234				$ohname,
235				$ehname,
236				$ofname,
237				$efname,
238				$ohvalue,
239				$ehvalue,
240				$ofvalue,
241				$efvalue,
242				$pagesel,
243				$newformat
244			);
245		} else {
246			$this->mpdf->AddPage(
247				$orient,
248				'',
249				$resetpagenum,
250				$pagenumstyle,
251				$suppress,
252				$mgl,
253				$mgr,
254				$mgt,
255				$mgb,
256				$mgh,
257				$mgf,
258				$ohname,
259				$ehname,
260				$ofname,
261				$efname,
262				$ohvalue,
263				$ehvalue,
264				$ofvalue,
265				$efvalue,
266				$pagesel,
267				$newformat
268			);
269		}
270
271		/* -- TOC -- */
272		if ($tag === 'TOCPAGEBREAK') {
273			if ($this->toc_id) {
274				$this->tableOfContents->m_TOC[$this->toc_id]['TOCmark'] = $this->mpdf->page;
275			} else {
276				$this->tableOfContents->TOCmark = $this->mpdf->page;
277			}
278		}
279		/* -- END TOC -- */
280
281		// mPDF 6 pagebreaktype
282		$this->mpdf->_postForcedPagebreak($pagebreaktype, $startpage, $save_blk, $save_blklvl);
283
284		$this->mpdf->InlineProperties = $save_ilp;
285		$this->mpdf->InlineBDF = $save_bflp;
286		$this->mpdf->InlineBDFctr = $save_bflpc; // mPDF 6
287		$this->mpdf->restoreInlineProperties($save_silp);
288	}
289
290	public function close(&$ahtml, &$ihtml)
291	{
292	}
293}
294