Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
47 / 47
100.00% covered (success)
100.00%
38 / 38
CRAP
100.00% covered (success)
100.00%
1 / 1
Settings
100.00% covered (success)
100.00%
47 / 47
100.00% covered (success)
100.00%
38 / 38
48
100.00% covered (success)
100.00%
1 / 1
 getDocumentProtection
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
 setDocumentProtection
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getProofState
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
 setProofState
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 hasHideSpellingErrors
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setHideSpellingErrors
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
2
 hasHideGrammaticalErrors
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setHideGrammaticalErrors
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
2
 hasEvenAndOddHeaders
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setEvenAndOddHeaders
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
2
 getRevisionView
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setRevisionView
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 hasTrackRevisions
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setTrackRevisions
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
2
 hasDoNotTrackMoves
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setDoNotTrackMoves
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
2
 hasDoNotTrackFormatting
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setDoNotTrackFormatting
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
2
 getZoom
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setZoom
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
 hasMirrorMargins
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setMirrorMargins
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getThemeFontLang
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setThemeFontLang
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 hasUpdateFields
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setUpdateFields
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
2
 getDecimalSymbol
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setDecimalSymbol
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 hasAutoHyphenation
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setAutoHyphenation
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getConsecutiveHyphenLimit
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setConsecutiveHyphenLimit
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getHyphenationZone
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setHyphenationZone
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 hasDoNotHyphenateCaps
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setDoNotHyphenateCaps
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 hasBookFoldPrinting
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setBookFoldPrinting
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2
3/**
4 * This file is part of PHPWord - A pure PHP library for reading and writing
5 * word processing documents.
6 *
7 * PHPWord is free software distributed under the terms of the GNU Lesser
8 * General Public License version 3 as published by the Free Software Foundation.
9 *
10 * For the full copyright and license information, please read the LICENSE
11 * file that was distributed with this source code. For the full list of
12 * contributors, visit https://github.com/PHPOffice/PHPWord/contributors.
13 *
14 * @see         https://github.com/PHPOffice/PHPWord
15 *
16 * @license     http://www.gnu.org/licenses/lgpl.txt LGPL version 3
17 */
18
19namespace PhpOffice\PhpWord\Metadata;
20
21use PhpOffice\PhpWord\ComplexType\ProofState;
22use PhpOffice\PhpWord\ComplexType\TrackChangesView;
23use PhpOffice\PhpWord\SimpleType\Zoom;
24use PhpOffice\PhpWord\Style\Language;
25
26/**
27 * Setting class.
28 *
29 * @since 0.14.0
30 * @see  http://www.datypic.com/sc/ooxml/t-w_CT_Settings.html
31 */
32class Settings
33{
34    /**
35     * Magnification Setting.
36     *
37     * @see  http://www.datypic.com/sc/ooxml/e-w_zoom-1.html
38     *
39     * @var mixed either integer, in which case it treated as a percent, or one of PhpOffice\PhpWord\SimpleType\Zoom
40     */
41    private $zoom = 100;
42
43    /**
44     * Mirror Page Margins.
45     *
46     * @see http://www.datypic.com/sc/ooxml/e-w_mirrorMargins-1.html
47     *
48     * @var bool
49     */
50    private $mirrorMargins;
51
52    /**
53     * Hide spelling errors.
54     *
55     * @var bool
56     */
57    private $hideSpellingErrors = false;
58
59    /**
60     * Hide grammatical errors.
61     *
62     * @var bool
63     */
64    private $hideGrammaticalErrors = false;
65
66    /**
67     * Visibility of Annotation Types.
68     *
69     * @var TrackChangesView
70     */
71    private $revisionView;
72
73    /**
74     * Track Revisions to Document.
75     *
76     * @var bool
77     */
78    private $trackRevisions = false;
79
80    /**
81     * Do Not Use Move Syntax When Tracking Revisions.
82     *
83     * @var bool
84     */
85    private $doNotTrackMoves = false;
86
87    /**
88     * Do Not Track Formatting Revisions When Tracking Revisions.
89     *
90     * @var bool
91     */
92    private $doNotTrackFormatting = false;
93
94    /**
95     * Spelling and Grammatical Checking State.
96     *
97     * @var ProofState
98     */
99    private $proofState;
100
101    /**
102     * Document Editing Restrictions.
103     *
104     * @var Protection
105     */
106    private $documentProtection;
107
108    /**
109     * Enables different header for odd and even pages.
110     *
111     * @var bool
112     */
113    private $evenAndOddHeaders = false;
114
115    /**
116     * Theme Font Languages.
117     *
118     * @var ?Language
119     */
120    private $themeFontLang;
121
122    /**
123     * Automatically Recalculate Fields on Open.
124     *
125     * @var bool
126     */
127    private $updateFields = false;
128
129    /**
130     * Radix Point for Field Code Evaluation.
131     *
132     * @var string
133     */
134    private $decimalSymbol = '.';
135
136    /**
137     * Automatically hyphenate document contents when displayed.
138     *
139     * @var null|bool
140     */
141    private $autoHyphenation;
142
143    /**
144     * Maximum number of consecutively hyphenated lines.
145     *
146     * @var null|int
147     */
148    private $consecutiveHyphenLimit;
149
150    /**
151     * The allowed amount of whitespace before hyphenation is applied.
152     *
153     * @var null|float|int
154     */
155    private $hyphenationZone;
156
157    /**
158     * Do not hyphenate words in all capital letters.
159     *
160     * @var null|bool
161     */
162    private $doNotHyphenateCaps;
163
164    /**
165     * Enable or disable book-folded printing.
166     *
167     * @var bool
168     */
169    private $bookFoldPrinting = false;
170
171    /**
172     * @return Protection
173     */
174    public function getDocumentProtection()
175    {
176        if ($this->documentProtection == null) {
177            $this->documentProtection = new Protection();
178        }
179
180        return $this->documentProtection;
181    }
182
183    /**
184     * @param Protection $documentProtection
185     */
186    public function setDocumentProtection($documentProtection): void
187    {
188        $this->documentProtection = $documentProtection;
189    }
190
191    /**
192     * @return ProofState
193     */
194    public function getProofState()
195    {
196        if ($this->proofState == null) {
197            $this->proofState = new ProofState();
198        }
199
200        return $this->proofState;
201    }
202
203    /**
204     * @param ProofState $proofState
205     */
206    public function setProofState($proofState): void
207    {
208        $this->proofState = $proofState;
209    }
210
211    /**
212     * Are spelling errors hidden.
213     *
214     * @return bool
215     */
216    public function hasHideSpellingErrors()
217    {
218        return $this->hideSpellingErrors;
219    }
220
221    /**
222     * Hide spelling errors.
223     *
224     * @param ?bool $hideSpellingErrors
225     */
226    public function setHideSpellingErrors($hideSpellingErrors): void
227    {
228        $this->hideSpellingErrors = $hideSpellingErrors === null ? true : $hideSpellingErrors;
229    }
230
231    /**
232     * Are grammatical errors hidden.
233     *
234     * @return bool
235     */
236    public function hasHideGrammaticalErrors()
237    {
238        return $this->hideGrammaticalErrors;
239    }
240
241    /**
242     * Hide grammatical errors.
243     *
244     * @param ?bool $hideGrammaticalErrors
245     */
246    public function setHideGrammaticalErrors($hideGrammaticalErrors): void
247    {
248        $this->hideGrammaticalErrors = $hideGrammaticalErrors === null ? true : $hideGrammaticalErrors;
249    }
250
251    /**
252     * @return bool
253     */
254    public function hasEvenAndOddHeaders()
255    {
256        return $this->evenAndOddHeaders;
257    }
258
259    /**
260     * @param ?bool $evenAndOddHeaders
261     */
262    public function setEvenAndOddHeaders($evenAndOddHeaders): void
263    {
264        $this->evenAndOddHeaders = $evenAndOddHeaders === null ? true : $evenAndOddHeaders;
265    }
266
267    /**
268     * Get the Visibility of Annotation Types.
269     *
270     * @return TrackChangesView
271     */
272    public function getRevisionView()
273    {
274        return $this->revisionView;
275    }
276
277    /**
278     * Set the Visibility of Annotation Types.
279     */
280    public function setRevisionView(?TrackChangesView $trackChangesView = null): void
281    {
282        $this->revisionView = $trackChangesView;
283    }
284
285    /**
286     * @return bool
287     */
288    public function hasTrackRevisions()
289    {
290        return $this->trackRevisions;
291    }
292
293    /**
294     * @param ?bool $trackRevisions
295     */
296    public function setTrackRevisions($trackRevisions): void
297    {
298        $this->trackRevisions = $trackRevisions === null ? true : $trackRevisions;
299    }
300
301    /**
302     * @return bool
303     */
304    public function hasDoNotTrackMoves()
305    {
306        return $this->doNotTrackMoves;
307    }
308
309    /**
310     * @param ?bool $doNotTrackMoves
311     */
312    public function setDoNotTrackMoves($doNotTrackMoves): void
313    {
314        $this->doNotTrackMoves = $doNotTrackMoves === null ? true : $doNotTrackMoves;
315    }
316
317    /**
318     * @return bool
319     */
320    public function hasDoNotTrackFormatting()
321    {
322        return $this->doNotTrackFormatting;
323    }
324
325    /**
326     * @param ?bool $doNotTrackFormatting
327     */
328    public function setDoNotTrackFormatting($doNotTrackFormatting): void
329    {
330        $this->doNotTrackFormatting = $doNotTrackFormatting === null ? true : $doNotTrackFormatting;
331    }
332
333    /**
334     * @return mixed
335     */
336    public function getZoom()
337    {
338        return $this->zoom;
339    }
340
341    /**
342     * @param mixed $zoom
343     */
344    public function setZoom($zoom): void
345    {
346        if (is_numeric($zoom)) {
347            // zoom is a percentage
348            $this->zoom = $zoom;
349        } else {
350            Zoom::validate($zoom);
351            $this->zoom = $zoom;
352        }
353    }
354
355    /**
356     * @return bool
357     */
358    public function hasMirrorMargins()
359    {
360        return $this->mirrorMargins;
361    }
362
363    /**
364     * @param bool $mirrorMargins
365     */
366    public function setMirrorMargins($mirrorMargins): void
367    {
368        $this->mirrorMargins = $mirrorMargins;
369    }
370
371    /**
372     * Returns the Language.
373     */
374    public function getThemeFontLang(): ?Language
375    {
376        return $this->themeFontLang;
377    }
378
379    /**
380     * Sets the Language for this document.
381     */
382    public function setThemeFontLang(Language $themeFontLang): self
383    {
384        $this->themeFontLang = $themeFontLang;
385
386        return $this;
387    }
388
389    /**
390     * @return bool
391     */
392    public function hasUpdateFields()
393    {
394        return $this->updateFields;
395    }
396
397    /**
398     * @param ?bool $updateFields
399     */
400    public function setUpdateFields($updateFields): void
401    {
402        $this->updateFields = $updateFields === null ? false : $updateFields;
403    }
404
405    /**
406     * Returns the Radix Point for Field Code Evaluation.
407     *
408     * @return string
409     */
410    public function getDecimalSymbol()
411    {
412        return $this->decimalSymbol;
413    }
414
415    /**
416     * sets the Radix Point for Field Code Evaluation.
417     *
418     * @param string $decimalSymbol
419     */
420    public function setDecimalSymbol($decimalSymbol): void
421    {
422        $this->decimalSymbol = $decimalSymbol;
423    }
424
425    /**
426     * @return null|bool
427     */
428    public function hasAutoHyphenation()
429    {
430        return $this->autoHyphenation;
431    }
432
433    /**
434     * @param bool $autoHyphenation
435     */
436    public function setAutoHyphenation($autoHyphenation): void
437    {
438        $this->autoHyphenation = (bool) $autoHyphenation;
439    }
440
441    /**
442     * @return null|int
443     */
444    public function getConsecutiveHyphenLimit()
445    {
446        return $this->consecutiveHyphenLimit;
447    }
448
449    /**
450     * @param int $consecutiveHyphenLimit
451     */
452    public function setConsecutiveHyphenLimit($consecutiveHyphenLimit): void
453    {
454        $this->consecutiveHyphenLimit = (int) $consecutiveHyphenLimit;
455    }
456
457    /**
458     * @return null|float|int
459     */
460    public function getHyphenationZone()
461    {
462        return $this->hyphenationZone;
463    }
464
465    /**
466     * @param null|float|int $hyphenationZone Measurement unit is twip
467     */
468    public function setHyphenationZone($hyphenationZone): void
469    {
470        $this->hyphenationZone = $hyphenationZone;
471    }
472
473    /**
474     * @return null|bool
475     */
476    public function hasDoNotHyphenateCaps()
477    {
478        return $this->doNotHyphenateCaps;
479    }
480
481    /**
482     * @param bool $doNotHyphenateCaps
483     */
484    public function setDoNotHyphenateCaps($doNotHyphenateCaps): void
485    {
486        $this->doNotHyphenateCaps = (bool) $doNotHyphenateCaps;
487    }
488
489    public function hasBookFoldPrinting(): bool
490    {
491        return $this->bookFoldPrinting;
492    }
493
494    public function setBookFoldPrinting(bool $bookFoldPrinting): self
495    {
496        $this->bookFoldPrinting = $bookFoldPrinting;
497
498        return $this;
499    }
500}