Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
68 / 68
100.00% covered (success)
100.00%
40 / 40
CRAP
100.00% covered (success)
100.00%
1 / 1
Series
100.00% covered (success)
100.00%
68 / 68
100.00% covered (success)
100.00%
40 / 40
44
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
7 / 7
100.00% covered (success)
100.00%
1 / 1
1
 getTitle
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setTitle
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getDlblNumFormat
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 hasDlblNumFormat
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setDlblNumFormat
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getFill
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setFill
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getDataPointFill
100.00% covered (success)
100.00%
3 / 3
100.00% covered (success)
100.00%
1 / 1
2
 getDataPointFills
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 getValues
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setValues
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 addValue
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 hasShowSeriesName
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setShowSeriesName
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 hasShowCategoryName
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setShowCategoryName
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 hasShowLegendKey
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setShowLegendKey
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 hasShowValue
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setShowValue
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 hasShowPercentage
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setShowPercentage
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 hasShowSeparator
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setSeparator
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getSeparator
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 hasShowLeaderLines
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setShowLeaderLines
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getFont
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setFont
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getLabelPosition
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setLabelPosition
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getMarker
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setMarker
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getOutline
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setOutline
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 getHashCode
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
3
 getHashIndex
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 setHashIndex
100.00% covered (success)
100.00%
2 / 2
100.00% covered (success)
100.00%
1 / 1
1
 __clone
100.00% covered (success)
100.00%
4 / 4
100.00% covered (success)
100.00%
1 / 1
2
1<?php
2/**
3 * This file is part of PHPPresentation - A pure PHP library for reading and writing
4 * presentations documents.
5 *
6 * PHPPresentation is free software distributed under the terms of the GNU Lesser
7 * General Public License version 3 as published by the Free Software Foundation.
8 *
9 * For the full copyright and license information, please read the LICENSE
10 * file that was distributed with this source code. For the full list of
11 * contributors, visit https://github.com/PHPOffice/PHPPresentation/contributors.
12 *
13 * @see        https://github.com/PHPOffice/PHPPresentation
14 *
15 * @license     http://www.gnu.org/licenses/lgpl.txt LGPL version 3
16 */
17
18declare(strict_types=1);
19
20namespace PhpOffice\PhpPresentation\Shape\Chart;
21
22use PhpOffice\PhpPresentation\ComparableInterface;
23use PhpOffice\PhpPresentation\Style\Fill;
24use PhpOffice\PhpPresentation\Style\Font;
25use PhpOffice\PhpPresentation\Style\Outline;
26
27class Series implements ComparableInterface
28{
29    // Label positions
30    public const LABEL_BESTFIT = 'bestFit';
31    public const LABEL_BOTTOM = 'b';
32    public const LABEL_CENTER = 'ctr';
33    public const LABEL_INSIDEBASE = 'inBase';
34    public const LABEL_INSIDEEND = 'inEnd';
35    public const LABEL_LEFT = 'i';
36    public const LABEL_OUTSIDEEND = 'outEnd';
37    public const LABEL_RIGHT = 'r';
38    public const LABEL_TOP = 't';
39
40    /**
41     * DataPointFills (key/value).
42     *
43     * @var array<int, Fill>
44     */
45    protected $dataPointFills = [];
46
47    /**
48     * Data Label Number Format.
49     *
50     * @var string
51     */
52    protected $dlblNumFormat = '';
53
54    /**
55     * @var null|string
56     */
57    protected $separator;
58
59    /**
60     * @var null|Fill
61     */
62    protected $fill;
63
64    /**
65     * @var null|Font
66     */
67    protected $font;
68
69    /**
70     * @var string
71     */
72    protected $labelPosition = 'ctr';
73
74    /**
75     * @var Marker
76     */
77    protected $marker;
78
79    /**
80     * @var null|Outline
81     */
82    protected $outline;
83
84    /**
85     * Show Category Name.
86     *
87     * @var bool
88     */
89    private $showCategoryName = false;
90
91    /**
92     * Show Leader Lines.
93     *
94     * @var bool
95     */
96    private $showLeaderLines = true;
97
98    /**
99     * Show Legend Key.
100     *
101     * @var bool
102     */
103    private $showLegendKey = false;
104
105    /**
106     * ShowPercentage.
107     *
108     * @var bool
109     */
110    private $showPercentage = false;
111
112    /**
113     * ShowSeriesName.
114     *
115     * @var bool
116     */
117    private $showSeriesName = false;
118
119    /**
120     * ShowValue.
121     *
122     * @var bool
123     */
124    private $showValue = true;
125
126    /**
127     * Title.
128     *
129     * @var string
130     */
131    private $title = 'Series Title';
132
133    /**
134     * Values (key/value).
135     *
136     * @var array<string, null|string>
137     */
138    private $values = [];
139
140    /**
141     * Hash index.
142     *
143     * @var int
144     */
145    private $hashIndex;
146
147    /**
148     * @param array<string, null|string> $values
149     */
150    public function __construct(string $title = 'Series Title', array $values = [])
151    {
152        $this->fill = new Fill();
153        $this->font = new Font();
154        $this->font->setName('Calibri');
155        $this->font->setSize(9);
156        $this->marker = new Marker();
157
158        $this->title = $title;
159        $this->values = $values;
160    }
161
162    /**
163     * Get Title.
164     */
165    public function getTitle(): string
166    {
167        return $this->title;
168    }
169
170    /**
171     * Set Title.
172     */
173    public function setTitle(string $value = 'Series Title'): self
174    {
175        $this->title = $value;
176
177        return $this;
178    }
179
180    /**
181     * Get Data Label NumFormat.
182     */
183    public function getDlblNumFormat(): string
184    {
185        return $this->dlblNumFormat;
186    }
187
188    /**
189     * Has Data Label NumFormat.
190     */
191    public function hasDlblNumFormat(): bool
192    {
193        return !empty($this->dlblNumFormat);
194    }
195
196    /**
197     * Set Data Label NumFormat.
198     */
199    public function setDlblNumFormat(string $value = ''): self
200    {
201        $this->dlblNumFormat = $value;
202
203        return $this;
204    }
205
206    public function getFill(): ?Fill
207    {
208        return $this->fill;
209    }
210
211    public function setFill(?Fill $fill = null): self
212    {
213        $this->fill = $fill;
214
215        return $this;
216    }
217
218    /**
219     * @param int $dataPointIndex data point index
220     */
221    public function getDataPointFill(int $dataPointIndex): Fill
222    {
223        if (!isset($this->dataPointFills[$dataPointIndex])) {
224            $this->dataPointFills[$dataPointIndex] = new Fill();
225        }
226
227        return $this->dataPointFills[$dataPointIndex];
228    }
229
230    /**
231     * @return Fill[]
232     */
233    public function getDataPointFills(): array
234    {
235        return $this->dataPointFills;
236    }
237
238    /**
239     * Get Values.
240     *
241     * @return array<string, null|string>
242     */
243    public function getValues(): array
244    {
245        return $this->values;
246    }
247
248    /**
249     * Set Values.
250     *
251     * @param array<string, null|string> $values
252     */
253    public function setValues(array $values = []): self
254    {
255        $this->values = $values;
256
257        return $this;
258    }
259
260    /**
261     * Add Value.
262     */
263    public function addValue(string $key, ?string $value): self
264    {
265        $this->values[$key] = $value;
266
267        return $this;
268    }
269
270    /**
271     * Get ShowSeriesName.
272     */
273    public function hasShowSeriesName(): bool
274    {
275        return $this->showSeriesName;
276    }
277
278    /**
279     * Set ShowSeriesName.
280     */
281    public function setShowSeriesName(bool $value): self
282    {
283        $this->showSeriesName = $value;
284
285        return $this;
286    }
287
288    /**
289     * Get ShowCategoryName.
290     */
291    public function hasShowCategoryName(): bool
292    {
293        return $this->showCategoryName;
294    }
295
296    /**
297     * Set ShowCategoryName.
298     */
299    public function setShowCategoryName(bool $value): self
300    {
301        $this->showCategoryName = $value;
302
303        return $this;
304    }
305
306    /**
307     * Get ShowValue.
308     */
309    public function hasShowLegendKey(): bool
310    {
311        return $this->showLegendKey;
312    }
313
314    /**
315     * Set ShowValue.
316     */
317    public function setShowLegendKey(bool $value): self
318    {
319        $this->showLegendKey = $value;
320
321        return $this;
322    }
323
324    /**
325     * Get ShowValue.
326     */
327    public function hasShowValue(): bool
328    {
329        return $this->showValue;
330    }
331
332    /**
333     * Set ShowValue.
334     */
335    public function setShowValue(bool $value): self
336    {
337        $this->showValue = $value;
338
339        return $this;
340    }
341
342    /**
343     * Get ShowPercentage.
344     */
345    public function hasShowPercentage(): bool
346    {
347        return $this->showPercentage;
348    }
349
350    /**
351     * Set ShowPercentage.
352     */
353    public function setShowPercentage(bool $value): self
354    {
355        $this->showPercentage = $value;
356
357        return $this;
358    }
359
360    public function hasShowSeparator(): bool
361    {
362        return null !== $this->separator;
363    }
364
365    public function setSeparator(?string $pValue): self
366    {
367        $this->separator = $pValue;
368
369        return $this;
370    }
371
372    public function getSeparator(): ?string
373    {
374        return $this->separator;
375    }
376
377    /**
378     * Get ShowLeaderLines.
379     */
380    public function hasShowLeaderLines(): bool
381    {
382        return $this->showLeaderLines;
383    }
384
385    /**
386     * Set ShowLeaderLines.
387     *
388     * @param bool $value
389     *
390     * @return self
391     */
392    public function setShowLeaderLines($value)
393    {
394        $this->showLeaderLines = $value;
395
396        return $this;
397    }
398
399    /**
400     * Get font.
401     */
402    public function getFont(): ?Font
403    {
404        return $this->font;
405    }
406
407    /**
408     * Set font.
409     *
410     * @param null|Font $pFont Font
411     */
412    public function setFont(?Font $pFont = null): self
413    {
414        $this->font = $pFont;
415
416        return $this;
417    }
418
419    /**
420     * Get label position.
421     */
422    public function getLabelPosition(): string
423    {
424        return $this->labelPosition;
425    }
426
427    /**
428     * Set label position.
429     */
430    public function setLabelPosition(string $value): self
431    {
432        $this->labelPosition = $value;
433
434        return $this;
435    }
436
437    public function getMarker(): Marker
438    {
439        return $this->marker;
440    }
441
442    public function setMarker(Marker $marker): self
443    {
444        $this->marker = $marker;
445
446        return $this;
447    }
448
449    public function getOutline(): ?Outline
450    {
451        return $this->outline;
452    }
453
454    public function setOutline(?Outline $outline): self
455    {
456        $this->outline = $outline;
457
458        return $this;
459    }
460
461    /**
462     * Get hash code.
463     *
464     * @return string Hash code
465     */
466    public function getHashCode(): string
467    {
468        return md5((null === $this->fill ? 'null' : $this->fill->getHashCode()) . (null === $this->font ? 'null' : $this->font->getHashCode()) . var_export($this->values, true) . var_export($this, true) . __CLASS__);
469    }
470
471    /**
472     * Get hash index.
473     *
474     * Note that this index may vary during script execution! Only reliable moment is
475     * while doing a write of a workbook and when changes are not allowed.
476     *
477     * @return null|int Hash index
478     */
479    public function getHashIndex(): ?int
480    {
481        return $this->hashIndex;
482    }
483
484    /**
485     * Set hash index.
486     *
487     * Note that this index may vary during script execution! Only reliable moment is
488     * while doing a write of a workbook and when changes are not allowed.
489     *
490     * @param int $value Hash index
491     */
492    public function setHashIndex(int $value): self
493    {
494        $this->hashIndex = $value;
495
496        return $this;
497    }
498
499    /**
500     * @see http://php.net/manual/en/language.oop5.cloning.php
501     */
502    public function __clone()
503    {
504        $this->font = clone $this->font;
505        $this->marker = clone $this->marker;
506        if (is_object($this->outline)) {
507            $this->outline = clone $this->outline;
508        }
509    }
510}