Completed
Push — develop ( 8380fb...ce4b86 )
by Adrien
34:13
created

Fill::getHashCode()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 12
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 2.0054

Importance

Changes 0
Metric Value
cc 2
eloc 8
nc 2
nop 0
dl 0
loc 12
ccs 8
cts 9
cp 0.8889
crap 2.0054
rs 9.4285
c 0
b 0
f 0
1
<?php
2
3
namespace PhpOffice\PhpSpreadsheet\Style;
4
5
use PhpOffice\PhpSpreadsheet\Exception as PhpSpreadsheetException;
6
7
class Fill extends Supervisor
8
{
9
    // Fill types
10
    const FILL_NONE = 'none';
11
    const FILL_SOLID = 'solid';
12
    const FILL_GRADIENT_LINEAR = 'linear';
13
    const FILL_GRADIENT_PATH = 'path';
14
    const FILL_PATTERN_DARKDOWN = 'darkDown';
15
    const FILL_PATTERN_DARKGRAY = 'darkGray';
16
    const FILL_PATTERN_DARKGRID = 'darkGrid';
17
    const FILL_PATTERN_DARKHORIZONTAL = 'darkHorizontal';
18
    const FILL_PATTERN_DARKTRELLIS = 'darkTrellis';
19
    const FILL_PATTERN_DARKUP = 'darkUp';
20
    const FILL_PATTERN_DARKVERTICAL = 'darkVertical';
21
    const FILL_PATTERN_GRAY0625 = 'gray0625';
22
    const FILL_PATTERN_GRAY125 = 'gray125';
23
    const FILL_PATTERN_LIGHTDOWN = 'lightDown';
24
    const FILL_PATTERN_LIGHTGRAY = 'lightGray';
25
    const FILL_PATTERN_LIGHTGRID = 'lightGrid';
26
    const FILL_PATTERN_LIGHTHORIZONTAL = 'lightHorizontal';
27
    const FILL_PATTERN_LIGHTTRELLIS = 'lightTrellis';
28
    const FILL_PATTERN_LIGHTUP = 'lightUp';
29
    const FILL_PATTERN_LIGHTVERTICAL = 'lightVertical';
30
    const FILL_PATTERN_MEDIUMGRAY = 'mediumGray';
31
32
    /**
33
     * @var int
34
     */
35
    public $startcolorIndex;
36
37
    /**
38
     * @var int
39
     */
40
    public $endcolorIndex;
41
42
    /**
43
     * Fill type.
44
     *
45
     * @var string
46
     */
47
    protected $fillType = self::FILL_NONE;
48
49
    /**
50
     * Rotation.
51
     *
52
     * @var float
53
     */
54
    protected $rotation = 0;
55
56
    /**
57
     * Start color.
58
     *
59
     * @var Color
60
     */
61
    protected $startColor;
62
63
    /**
64
     * End color.
65
     *
66
     * @var Color
67
     */
68
    protected $endColor;
69
70
    /**
71
     * Create a new Fill.
72
     *
73
     * @param bool $isSupervisor Flag indicating if this is a supervisor or not
74
     *                                    Leave this value at default unless you understand exactly what
75
     *                                        its ramifications are
76
     * @param bool $isConditional Flag indicating if this is a conditional style or not
77
     *                                    Leave this value at default unless you understand exactly what
78
     *                                        its ramifications are
79
     */
80 172
    public function __construct($isSupervisor = false, $isConditional = false)
81
    {
82
        // Supervisor?
83 172
        parent::__construct($isSupervisor);
84
85
        // Initialise values
86 172
        if ($isConditional) {
87 3
            $this->fillType = null;
88
        }
89 172
        $this->startColor = new Color(Color::COLOR_WHITE, $isSupervisor, $isConditional);
90 172
        $this->endColor = new Color(Color::COLOR_BLACK, $isSupervisor, $isConditional);
91
92
        // bind parent if we are a supervisor
93 172
        if ($isSupervisor) {
94 172
            $this->startColor->bindParent($this, 'startColor');
0 ignored issues
show
Bug introduced by
$this of type PhpOffice\PhpSpreadsheet\Style\Fill is incompatible with the type PhpOffice\PhpSpreadsheet...Spreadsheet\Spreadsheet expected by parameter $parent of PhpOffice\PhpSpreadsheet...upervisor::bindParent(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

94
            $this->startColor->bindParent(/** @scrutinizer ignore-type */ $this, 'startColor');
Loading history...
95 172
            $this->endColor->bindParent($this, 'endColor');
96
        }
97 172
    }
98
99
    /**
100
     * Get the shared style component for the currently active cell in currently active sheet.
101
     * Only used for style supervisor.
102
     *
103
     * @return Fill
104
     */
105 1
    public function getSharedComponent()
106
    {
107 1
        return $this->parent->getSharedComponent()->getFill();
1 ignored issue
show
Bug introduced by
The method getSharedComponent() does not exist on PhpOffice\PhpSpreadsheet\Spreadsheet. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

107
        return $this->parent->/** @scrutinizer ignore-call */ getSharedComponent()->getFill();

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

Loading history...
108
    }
109
110
    /**
111
     * Build style array from subcomponents.
112
     *
113
     * @param array $array
114
     *
115
     * @return array
116
     */
117 13
    public function getStyleArray($array)
118
    {
119 13
        return ['fill' => $array];
120
    }
121
122
    /**
123
     * Apply styles from array.
124
     *
125
     * <code>
126
     * $spreadsheet->getActiveSheet()->getStyle('B2')->getFill()->applyFromArray(
127
     *     [
128
     *         'fillType' => Fill::FILL_GRADIENT_LINEAR,
129
     *         'rotation' => 0,
130
     *         'startColor' => [
131
     *             'rgb' => '000000'
132
     *         ],
133
     *         'endColor' => [
134
     *             'argb' => 'FFFFFFFF'
135
     *         ]
136
     *     ]
137
     * );
138
     * </code>
139
     *
140
     * @param array $pStyles Array containing style information
141
     *
142
     * @throws PhpSpreadsheetException
143
     *
144
     * @return Fill
145
     */
146 19
    public function applyFromArray(array $pStyles)
147
    {
148 19
        if ($this->isSupervisor) {
149
            $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($this->getStyleArray($pStyles));
150
        } else {
151 19
            if (isset($pStyles['fillType'])) {
152 19
                $this->setFillType($pStyles['fillType']);
153
            }
154 19
            if (isset($pStyles['rotation'])) {
155 12
                $this->setRotation($pStyles['rotation']);
156
            }
157 19
            if (isset($pStyles['startColor'])) {
158 14
                $this->getStartColor()->applyFromArray($pStyles['startColor']);
159
            }
160 19
            if (isset($pStyles['endColor'])) {
161 13
                $this->getEndColor()->applyFromArray($pStyles['endColor']);
162
            }
163 19
            if (isset($pStyles['color'])) {
164 6
                $this->getStartColor()->applyFromArray($pStyles['color']);
165 6
                $this->getEndColor()->applyFromArray($pStyles['color']);
166
            }
167
        }
168
169 19
        return $this;
170
    }
171
172
    /**
173
     * Get Fill Type.
174
     *
175
     * @return string
176
     */
177 108
    public function getFillType()
178
    {
179 108
        if ($this->isSupervisor) {
180 1
            return $this->getSharedComponent()->getFillType();
181
        }
182
183 108
        return $this->fillType;
184
    }
185
186
    /**
187
     * Set Fill Type.
188
     *
189
     * @param string $pValue Fill type, see self::FILL_*
190
     *
191
     * @return Fill
192
     */
193 102
    public function setFillType($pValue)
194
    {
195 102
        if ($this->isSupervisor) {
196 13
            $styleArray = $this->getStyleArray(['fillType' => $pValue]);
197 13
            $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray);
198
        } else {
199 102
            $this->fillType = $pValue;
200
        }
201
202 102
        return $this;
203
    }
204
205
    /**
206
     * Get Rotation.
207
     *
208
     * @return float
209
     */
210 95
    public function getRotation()
211
    {
212 95
        if ($this->isSupervisor) {
213
            return $this->getSharedComponent()->getRotation();
214
        }
215
216 95
        return $this->rotation;
217
    }
218
219
    /**
220
     * Set Rotation.
221
     *
222
     * @param float $pValue
223
     *
224
     * @return Fill
225
     */
226 12
    public function setRotation($pValue)
227
    {
228 12
        if ($this->isSupervisor) {
229
            $styleArray = $this->getStyleArray(['rotation' => $pValue]);
230
            $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray);
231
        } else {
232 12
            $this->rotation = $pValue;
233
        }
234
235 12
        return $this;
236
    }
237
238
    /**
239
     * Get Start Color.
240
     *
241
     * @return Color
242
     */
243 117
    public function getStartColor()
244
    {
245 117
        return $this->startColor;
246
    }
247
248
    /**
249
     * Set Start Color.
250
     *
251
     * @param Color $pValue
252
     *
253
     * @throws PhpSpreadsheetException
254
     *
255
     * @return Fill
256
     */
257 1
    public function setStartColor(Color $pValue)
258
    {
259
        // make sure parameter is a real color and not a supervisor
260 1
        $color = $pValue->getIsSupervisor() ? $pValue->getSharedComponent() : $pValue;
261
262 1
        if ($this->isSupervisor) {
263 1
            $styleArray = $this->getStartColor()->getStyleArray(['argb' => $color->getARGB()]);
264 1
            $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray);
265
        } else {
266
            $this->startColor = $color;
267
        }
268
269 1
        return $this;
270
    }
271
272
    /**
273
     * Get End Color.
274
     *
275
     * @return Color
276
     */
277 114
    public function getEndColor()
278
    {
279 114
        return $this->endColor;
280
    }
281
282
    /**
283
     * Set End Color.
284
     *
285
     * @param Color $pValue
286
     *
287
     * @throws PhpSpreadsheetException
288
     *
289
     * @return Fill
290
     */
291
    public function setEndColor(Color $pValue)
292
    {
293
        // make sure parameter is a real color and not a supervisor
294
        $color = $pValue->getIsSupervisor() ? $pValue->getSharedComponent() : $pValue;
295
296
        if ($this->isSupervisor) {
297
            $styleArray = $this->getEndColor()->getStyleArray(['argb' => $color->getARGB()]);
298
            $this->getActiveSheet()->getStyle($this->getSelectedCells())->applyFromArray($styleArray);
299
        } else {
300
            $this->endColor = $color;
301
        }
302
303
        return $this;
304
    }
305
306
    /**
307
     * Get hash code.
308
     *
309
     * @return string Hash code
310
     */
311 95
    public function getHashCode()
312
    {
313 95
        if ($this->isSupervisor) {
314
            return $this->getSharedComponent()->getHashCode();
315
        }
316
317 95
        return md5(
318 95
            $this->getFillType() .
319 95
            $this->getRotation() .
320 95
            $this->getStartColor()->getHashCode() .
321 95
            $this->getEndColor()->getHashCode() .
322 95
            __CLASS__
323
        );
324
    }
325
}
326