Total Complexity | 126 |
Total Lines | 545 |
Duplicated Lines | 18.72 % |
Coverage | 90.8% |
Changes | 0 |
Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.
Common duplication problems, and corresponding solutions are:
Complex classes like Chart often do a lot of different things. To break such a class down, we need to identify a cohesive component within that class. A common approach to find such a component is to look for fields/methods that share the same prefixes, or suffixes.
Once you have determined the fields that belong together, you can apply the Extract Class refactoring. If the component makes sense as a sub-class, Extract Subclass is also a candidate, and is often faster.
While breaking up the class, it is a good idea to analyze how other classes use Chart, and based on these observations, apply Extract Interface, too.
1 | <?php |
||
17 | class Chart |
||
18 | { |
||
19 | /** |
||
20 | * @param SimpleXMLElement $component |
||
21 | * @param string $name |
||
22 | * @param string $format |
||
23 | */ |
||
24 | 2 | private static function getAttribute(SimpleXMLElement $component, $name, $format) |
|
25 | { |
||
26 | 2 | $attributes = $component->attributes(); |
|
27 | 2 | if (isset($attributes[$name])) { |
|
28 | 2 | if ($format == 'string') { |
|
29 | 2 | return (string) $attributes[$name]; |
|
30 | 2 | } elseif ($format == 'integer') { |
|
31 | 2 | return (int) $attributes[$name]; |
|
32 | 2 | } elseif ($format == 'boolean') { |
|
33 | 2 | return (bool) ($attributes[$name] === '0' || $attributes[$name] !== 'true') ? false : true; |
|
34 | } |
||
35 | |||
36 | return (float) $attributes[$name]; |
||
37 | } |
||
38 | |||
39 | 2 | return null; |
|
40 | } |
||
41 | |||
42 | private static function readColor($color, $background = false) |
||
48 | } |
||
49 | } |
||
50 | |||
51 | /** |
||
52 | * @param SimpleXMLElement $chartElements |
||
53 | * @param string $chartName |
||
54 | */ |
||
55 | 2 | public static function readChart(SimpleXMLElement $chartElements, $chartName) |
|
56 | { |
||
57 | 2 | $namespacesChartMeta = $chartElements->getNamespaces(true); |
|
58 | 2 | $chartElementsC = $chartElements->children($namespacesChartMeta['c']); |
|
59 | |||
60 | 2 | $XaxisLabel = $YaxisLabel = $legend = $title = null; |
|
61 | 2 | $dispBlanksAs = $plotVisOnly = null; |
|
62 | |||
63 | 2 | foreach ($chartElementsC as $chartElementKey => $chartElement) { |
|
64 | switch ($chartElementKey) { |
||
65 | 2 | case 'chart': |
|
66 | 2 | foreach ($chartElement as $chartDetailsKey => $chartDetails) { |
|
67 | 2 | $chartDetailsC = $chartDetails->children($namespacesChartMeta['c']); |
|
|
|||
68 | switch ($chartDetailsKey) { |
||
69 | 2 | case 'plotArea': |
|
70 | 2 | $plotAreaLayout = $XaxisLable = $YaxisLable = null; |
|
71 | 2 | $plotSeries = $plotAttributes = []; |
|
72 | 2 | foreach ($chartDetails as $chartDetailKey => $chartDetail) { |
|
73 | switch ($chartDetailKey) { |
||
74 | 2 | case 'layout': |
|
75 | 2 | $plotAreaLayout = self::chartLayoutDetails($chartDetail, $namespacesChartMeta); |
|
76 | |||
77 | 2 | break; |
|
78 | 2 | View Code Duplication | case 'catAx': |
79 | 2 | if (isset($chartDetail->title)) { |
|
80 | 2 | $XaxisLabel = self::chartTitle($chartDetail->title->children($namespacesChartMeta['c']), $namespacesChartMeta); |
|
81 | } |
||
82 | |||
83 | 2 | break; |
|
84 | 2 | View Code Duplication | case 'dateAx': |
85 | if (isset($chartDetail->title)) { |
||
86 | $XaxisLabel = self::chartTitle($chartDetail->title->children($namespacesChartMeta['c']), $namespacesChartMeta); |
||
87 | } |
||
88 | |||
89 | break; |
||
90 | 2 | View Code Duplication | case 'valAx': |
91 | 2 | if (isset($chartDetail->title)) { |
|
92 | 2 | $YaxisLabel = self::chartTitle($chartDetail->title->children($namespacesChartMeta['c']), $namespacesChartMeta); |
|
93 | } |
||
94 | |||
95 | 2 | break; |
|
96 | 2 | case 'barChart': |
|
97 | 2 | case 'bar3DChart': |
|
98 | 2 | $barDirection = self::getAttribute($chartDetail->barDir, 'val', 'string'); |
|
99 | 2 | $plotSer = self::chartDataSeries($chartDetail, $namespacesChartMeta, $chartDetailKey); |
|
100 | 2 | $plotSer->setPlotDirection($barDirection); |
|
101 | 2 | $plotSeries[] = $plotSer; |
|
102 | 2 | $plotAttributes = self::readChartAttributes($chartDetail); |
|
103 | |||
104 | 2 | break; |
|
105 | 2 | case 'lineChart': |
|
106 | 2 | View Code Duplication | case 'line3DChart': |
107 | 2 | $plotSeries[] = self::chartDataSeries($chartDetail, $namespacesChartMeta, $chartDetailKey); |
|
108 | 2 | $plotAttributes = self::readChartAttributes($chartDetail); |
|
109 | |||
110 | 2 | break; |
|
111 | 2 | case 'areaChart': |
|
112 | 2 | View Code Duplication | case 'area3DChart': |
113 | 2 | $plotSeries[] = self::chartDataSeries($chartDetail, $namespacesChartMeta, $chartDetailKey); |
|
114 | 2 | $plotAttributes = self::readChartAttributes($chartDetail); |
|
115 | |||
116 | 2 | break; |
|
117 | 2 | case 'doughnutChart': |
|
118 | 2 | case 'pieChart': |
|
119 | 2 | case 'pie3DChart': |
|
120 | 2 | $explosion = isset($chartDetail->ser->explosion); |
|
121 | 2 | $plotSer = self::chartDataSeries($chartDetail, $namespacesChartMeta, $chartDetailKey); |
|
122 | 2 | $plotSer->setPlotStyle($explosion); |
|
123 | 2 | $plotSeries[] = $plotSer; |
|
124 | 2 | $plotAttributes = self::readChartAttributes($chartDetail); |
|
125 | |||
126 | 2 | break; |
|
127 | 2 | View Code Duplication | case 'scatterChart': |
128 | 2 | $scatterStyle = self::getAttribute($chartDetail->scatterStyle, 'val', 'string'); |
|
129 | 2 | $plotSer = self::chartDataSeries($chartDetail, $namespacesChartMeta, $chartDetailKey); |
|
130 | 2 | $plotSer->setPlotStyle($scatterStyle); |
|
131 | 2 | $plotSeries[] = $plotSer; |
|
132 | 2 | $plotAttributes = self::readChartAttributes($chartDetail); |
|
133 | |||
134 | 2 | break; |
|
135 | 2 | case 'bubbleChart': |
|
136 | 2 | $bubbleScale = self::getAttribute($chartDetail->bubbleScale, 'val', 'integer'); |
|
137 | 2 | $plotSer = self::chartDataSeries($chartDetail, $namespacesChartMeta, $chartDetailKey); |
|
138 | 2 | $plotSer->setPlotStyle($bubbleScale); |
|
139 | 2 | $plotSeries[] = $plotSer; |
|
140 | 2 | $plotAttributes = self::readChartAttributes($chartDetail); |
|
141 | |||
142 | 2 | break; |
|
143 | 2 | View Code Duplication | case 'radarChart': |
144 | 2 | $radarStyle = self::getAttribute($chartDetail->radarStyle, 'val', 'string'); |
|
145 | 2 | $plotSer = self::chartDataSeries($chartDetail, $namespacesChartMeta, $chartDetailKey); |
|
146 | 2 | $plotSer->setPlotStyle($radarStyle); |
|
147 | 2 | $plotSeries[] = $plotSer; |
|
148 | 2 | $plotAttributes = self::readChartAttributes($chartDetail); |
|
149 | |||
150 | 2 | break; |
|
151 | 2 | case 'surfaceChart': |
|
152 | 2 | case 'surface3DChart': |
|
153 | 2 | $wireFrame = self::getAttribute($chartDetail->wireframe, 'val', 'boolean'); |
|
154 | 2 | $plotSer = self::chartDataSeries($chartDetail, $namespacesChartMeta, $chartDetailKey); |
|
155 | 2 | $plotSer->setPlotStyle($wireFrame); |
|
156 | 2 | $plotSeries[] = $plotSer; |
|
157 | 2 | $plotAttributes = self::readChartAttributes($chartDetail); |
|
158 | |||
159 | 2 | break; |
|
160 | 2 | View Code Duplication | case 'stockChart': |
161 | 2 | $plotSeries[] = self::chartDataSeries($chartDetail, $namespacesChartMeta, $chartDetailKey); |
|
162 | 2 | $plotAttributes = self::readChartAttributes($plotAreaLayout); |
|
163 | |||
164 | 2 | break; |
|
165 | } |
||
166 | } |
||
167 | 2 | if ($plotAreaLayout == null) { |
|
168 | 2 | $plotAreaLayout = new Layout(); |
|
169 | } |
||
170 | 2 | $plotArea = new PlotArea($plotAreaLayout, $plotSeries); |
|
171 | 2 | self::setChartAttributes($plotAreaLayout, $plotAttributes); |
|
172 | |||
173 | 2 | break; |
|
174 | 2 | case 'plotVisOnly': |
|
175 | 2 | $plotVisOnly = self::getAttribute($chartDetails, 'val', 'string'); |
|
176 | |||
177 | 2 | break; |
|
178 | 2 | case 'dispBlanksAs': |
|
179 | 2 | $dispBlanksAs = self::getAttribute($chartDetails, 'val', 'string'); |
|
180 | |||
181 | 2 | break; |
|
182 | 2 | case 'title': |
|
183 | 2 | $title = self::chartTitle($chartDetails, $namespacesChartMeta); |
|
184 | |||
185 | 2 | break; |
|
186 | 2 | case 'legend': |
|
187 | 2 | $legendPos = 'r'; |
|
188 | 2 | $legendLayout = null; |
|
189 | 2 | $legendOverlay = false; |
|
190 | 2 | foreach ($chartDetails as $chartDetailKey => $chartDetail) { |
|
191 | switch ($chartDetailKey) { |
||
192 | 2 | case 'legendPos': |
|
193 | 2 | $legendPos = self::getAttribute($chartDetail, 'val', 'string'); |
|
194 | |||
195 | 2 | break; |
|
196 | 2 | case 'overlay': |
|
197 | 2 | $legendOverlay = self::getAttribute($chartDetail, 'val', 'boolean'); |
|
198 | |||
199 | 2 | break; |
|
200 | 2 | case 'layout': |
|
201 | 2 | $legendLayout = self::chartLayoutDetails($chartDetail, $namespacesChartMeta); |
|
202 | |||
203 | 2 | break; |
|
204 | } |
||
205 | } |
||
206 | 2 | $legend = new Legend($legendPos, $legendLayout, $legendOverlay); |
|
207 | |||
208 | 2 | break; |
|
209 | } |
||
210 | } |
||
211 | } |
||
212 | } |
||
213 | 2 | $chart = new \PhpOffice\PhpSpreadsheet\Chart\Chart($chartName, $title, $legend, $plotArea, $plotVisOnly, $dispBlanksAs, $XaxisLabel, $YaxisLabel); |
|
214 | |||
215 | 2 | return $chart; |
|
216 | } |
||
217 | |||
218 | 2 | private static function chartTitle(SimpleXMLElement $titleDetails, array $namespacesChartMeta) |
|
219 | { |
||
220 | 2 | $caption = []; |
|
221 | 2 | $titleLayout = null; |
|
222 | 2 | foreach ($titleDetails as $titleDetailKey => $chartDetail) { |
|
223 | switch ($titleDetailKey) { |
||
224 | 2 | case 'tx': |
|
225 | 2 | $titleDetails = $chartDetail->rich->children($namespacesChartMeta['a']); |
|
226 | 2 | foreach ($titleDetails as $titleKey => $titleDetail) { |
|
227 | switch ($titleKey) { |
||
228 | 2 | case 'p': |
|
229 | 2 | $titleDetailPart = $titleDetail->children($namespacesChartMeta['a']); |
|
230 | 2 | $caption[] = self::parseRichText($titleDetailPart); |
|
231 | } |
||
232 | } |
||
233 | |||
234 | 2 | break; |
|
235 | 2 | case 'layout': |
|
236 | 2 | $titleLayout = self::chartLayoutDetails($chartDetail, $namespacesChartMeta); |
|
237 | |||
238 | 2 | break; |
|
239 | } |
||
240 | } |
||
241 | |||
242 | 2 | return new Title($caption, $titleLayout); |
|
243 | } |
||
244 | |||
245 | 2 | private static function chartLayoutDetails($chartDetail, $namespacesChartMeta) |
|
246 | { |
||
247 | 2 | if (!isset($chartDetail->manualLayout)) { |
|
248 | 2 | return null; |
|
249 | } |
||
250 | 2 | $details = $chartDetail->manualLayout->children($namespacesChartMeta['c']); |
|
251 | 2 | if ($details === null) { |
|
252 | return null; |
||
253 | } |
||
254 | 2 | $layout = []; |
|
255 | 2 | foreach ($details as $detailKey => $detail) { |
|
256 | 2 | $layout[$detailKey] = self::getAttribute($detail, 'val', 'string'); |
|
257 | } |
||
258 | |||
259 | 2 | return new Layout($layout); |
|
260 | } |
||
261 | |||
262 | 2 | private static function chartDataSeries($chartDetail, $namespacesChartMeta, $plotType) |
|
263 | { |
||
264 | 2 | $multiSeriesType = null; |
|
265 | 2 | $smoothLine = false; |
|
266 | 2 | $seriesLabel = $seriesCategory = $seriesValues = $plotOrder = []; |
|
267 | |||
268 | 2 | $seriesDetailSet = $chartDetail->children($namespacesChartMeta['c']); |
|
269 | 2 | foreach ($seriesDetailSet as $seriesDetailKey => $seriesDetails) { |
|
270 | switch ($seriesDetailKey) { |
||
271 | 2 | case 'grouping': |
|
272 | 2 | $multiSeriesType = self::getAttribute($chartDetail->grouping, 'val', 'string'); |
|
273 | |||
274 | 2 | break; |
|
275 | 2 | case 'ser': |
|
276 | 2 | $marker = null; |
|
277 | 2 | foreach ($seriesDetails as $seriesKey => $seriesDetail) { |
|
278 | switch ($seriesKey) { |
||
279 | 2 | case 'idx': |
|
280 | 2 | $seriesIndex = self::getAttribute($seriesDetail, 'val', 'integer'); |
|
281 | |||
282 | 2 | break; |
|
283 | 2 | case 'order': |
|
284 | 2 | $seriesOrder = self::getAttribute($seriesDetail, 'val', 'integer'); |
|
285 | 2 | $plotOrder[$seriesIndex] = $seriesOrder; |
|
286 | |||
287 | 2 | break; |
|
288 | 2 | case 'tx': |
|
289 | 2 | $seriesLabel[$seriesIndex] = self::chartDataSeriesValueSet($seriesDetail, $namespacesChartMeta); |
|
290 | |||
291 | 2 | break; |
|
292 | 2 | case 'marker': |
|
293 | 2 | $marker = self::getAttribute($seriesDetail->symbol, 'val', 'string'); |
|
294 | |||
295 | 2 | break; |
|
296 | 2 | case 'smooth': |
|
297 | 2 | $smoothLine = self::getAttribute($seriesDetail, 'val', 'boolean'); |
|
298 | |||
299 | 2 | break; |
|
300 | 2 | case 'cat': |
|
301 | 2 | $seriesCategory[$seriesIndex] = self::chartDataSeriesValueSet($seriesDetail, $namespacesChartMeta); |
|
302 | |||
303 | 2 | break; |
|
304 | 2 | case 'val': |
|
305 | 2 | $seriesValues[$seriesIndex] = self::chartDataSeriesValueSet($seriesDetail, $namespacesChartMeta, $marker); |
|
306 | |||
307 | 2 | break; |
|
308 | 2 | case 'xVal': |
|
309 | 2 | $seriesCategory[$seriesIndex] = self::chartDataSeriesValueSet($seriesDetail, $namespacesChartMeta, $marker); |
|
310 | |||
311 | 2 | break; |
|
312 | 2 | case 'yVal': |
|
313 | 2 | $seriesValues[$seriesIndex] = self::chartDataSeriesValueSet($seriesDetail, $namespacesChartMeta, $marker); |
|
314 | |||
315 | 2 | break; |
|
316 | } |
||
317 | } |
||
318 | } |
||
319 | } |
||
320 | |||
321 | 2 | return new DataSeries($plotType, $multiSeriesType, $plotOrder, $seriesLabel, $seriesCategory, $seriesValues, $smoothLine); |
|
322 | } |
||
323 | |||
324 | 2 | private static function chartDataSeriesValueSet($seriesDetail, $namespacesChartMeta, $marker = null) |
|
325 | { |
||
326 | 2 | if (isset($seriesDetail->strRef)) { |
|
327 | 2 | $seriesSource = (string) $seriesDetail->strRef->f; |
|
328 | 2 | $seriesData = self::chartDataSeriesValues($seriesDetail->strRef->strCache->children($namespacesChartMeta['c']), 's'); |
|
329 | |||
330 | 2 | return new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, $seriesSource, $seriesData['formatCode'], $seriesData['pointCount'], $seriesData['dataValues'], $marker); |
|
331 | 2 | } elseif (isset($seriesDetail->numRef)) { |
|
332 | 2 | $seriesSource = (string) $seriesDetail->numRef->f; |
|
333 | 2 | $seriesData = self::chartDataSeriesValues($seriesDetail->numRef->numCache->children($namespacesChartMeta['c'])); |
|
334 | |||
335 | 2 | return new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_NUMBER, $seriesSource, $seriesData['formatCode'], $seriesData['pointCount'], $seriesData['dataValues'], $marker); |
|
336 | 2 | } elseif (isset($seriesDetail->multiLvlStrRef)) { |
|
337 | 2 | $seriesSource = (string) $seriesDetail->multiLvlStrRef->f; |
|
338 | 2 | $seriesData = self::chartDataSeriesValuesMultiLevel($seriesDetail->multiLvlStrRef->multiLvlStrCache->children($namespacesChartMeta['c']), 's'); |
|
339 | 2 | $seriesData['pointCount'] = count($seriesData['dataValues']); |
|
340 | |||
341 | 2 | return new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, $seriesSource, $seriesData['formatCode'], $seriesData['pointCount'], $seriesData['dataValues'], $marker); |
|
342 | } elseif (isset($seriesDetail->multiLvlNumRef)) { |
||
343 | $seriesSource = (string) $seriesDetail->multiLvlNumRef->f; |
||
344 | $seriesData = self::chartDataSeriesValuesMultiLevel($seriesDetail->multiLvlNumRef->multiLvlNumCache->children($namespacesChartMeta['c']), 's'); |
||
345 | $seriesData['pointCount'] = count($seriesData['dataValues']); |
||
346 | |||
347 | return new DataSeriesValues(DataSeriesValues::DATASERIES_TYPE_STRING, $seriesSource, $seriesData['formatCode'], $seriesData['pointCount'], $seriesData['dataValues'], $marker); |
||
348 | } |
||
349 | |||
350 | return null; |
||
351 | } |
||
352 | |||
353 | 2 | private static function chartDataSeriesValues($seriesValueSet, $dataType = 'n') |
|
354 | { |
||
355 | 2 | $seriesVal = []; |
|
356 | 2 | $formatCode = ''; |
|
357 | 2 | $pointCount = 0; |
|
358 | |||
359 | 2 | View Code Duplication | foreach ($seriesValueSet as $seriesValueIdx => $seriesValue) { |
360 | switch ($seriesValueIdx) { |
||
361 | 2 | case 'ptCount': |
|
362 | 2 | $pointCount = self::getAttribute($seriesValue, 'val', 'integer'); |
|
363 | |||
364 | 2 | break; |
|
365 | 2 | case 'formatCode': |
|
366 | 2 | $formatCode = (string) $seriesValue; |
|
367 | |||
368 | 2 | break; |
|
369 | 2 | case 'pt': |
|
370 | 2 | $pointVal = self::getAttribute($seriesValue, 'idx', 'integer'); |
|
371 | 2 | if ($dataType == 's') { |
|
372 | 2 | $seriesVal[$pointVal] = (string) $seriesValue->v; |
|
373 | 2 | } elseif ($seriesValue->v === Functions::NA()) { |
|
374 | $seriesVal[$pointVal] = null; |
||
375 | } else { |
||
376 | 2 | $seriesVal[$pointVal] = (float) $seriesValue->v; |
|
377 | } |
||
378 | |||
379 | 2 | break; |
|
380 | } |
||
381 | } |
||
382 | |||
383 | return [ |
||
384 | 2 | 'formatCode' => $formatCode, |
|
385 | 2 | 'pointCount' => $pointCount, |
|
386 | 2 | 'dataValues' => $seriesVal, |
|
387 | ]; |
||
388 | } |
||
389 | |||
390 | 2 | private static function chartDataSeriesValuesMultiLevel($seriesValueSet, $dataType = 'n') |
|
391 | { |
||
392 | 2 | $seriesVal = []; |
|
393 | 2 | $formatCode = ''; |
|
394 | 2 | $pointCount = 0; |
|
395 | |||
396 | 2 | foreach ($seriesValueSet->lvl as $seriesLevelIdx => $seriesLevel) { |
|
397 | 2 | View Code Duplication | foreach ($seriesLevel as $seriesValueIdx => $seriesValue) { |
398 | switch ($seriesValueIdx) { |
||
399 | 2 | case 'ptCount': |
|
400 | $pointCount = self::getAttribute($seriesValue, 'val', 'integer'); |
||
401 | |||
402 | break; |
||
403 | 2 | case 'formatCode': |
|
404 | $formatCode = (string) $seriesValue; |
||
405 | |||
406 | break; |
||
407 | 2 | case 'pt': |
|
408 | 2 | $pointVal = self::getAttribute($seriesValue, 'idx', 'integer'); |
|
409 | 2 | if ($dataType == 's') { |
|
410 | 2 | $seriesVal[$pointVal][] = (string) $seriesValue->v; |
|
411 | } elseif ($seriesValue->v === Functions::NA()) { |
||
412 | $seriesVal[$pointVal] = null; |
||
413 | } else { |
||
414 | $seriesVal[$pointVal][] = (float) $seriesValue->v; |
||
415 | } |
||
416 | |||
417 | 2 | break; |
|
418 | } |
||
419 | } |
||
420 | } |
||
421 | |||
422 | return [ |
||
423 | 2 | 'formatCode' => $formatCode, |
|
424 | 2 | 'pointCount' => $pointCount, |
|
425 | 2 | 'dataValues' => $seriesVal, |
|
426 | ]; |
||
427 | } |
||
428 | |||
429 | 2 | private static function parseRichText(SimpleXMLElement $titleDetailPart) |
|
494 | } |
||
495 | |||
496 | 2 | private static function readChartAttributes($chartDetail) |
|
497 | { |
||
498 | 2 | $plotAttributes = []; |
|
499 | 2 | if (isset($chartDetail->dLbls)) { |
|
500 | 2 | if (isset($chartDetail->dLbls->howLegendKey)) { |
|
501 | $plotAttributes['showLegendKey'] = self::getAttribute($chartDetail->dLbls->showLegendKey, 'val', 'string'); |
||
502 | } |
||
503 | 2 | View Code Duplication | if (isset($chartDetail->dLbls->showVal)) { |
504 | 2 | $plotAttributes['showVal'] = self::getAttribute($chartDetail->dLbls->showVal, 'val', 'string'); |
|
505 | } |
||
506 | 2 | View Code Duplication | if (isset($chartDetail->dLbls->showCatName)) { |
507 | 2 | $plotAttributes['showCatName'] = self::getAttribute($chartDetail->dLbls->showCatName, 'val', 'string'); |
|
508 | } |
||
509 | 2 | View Code Duplication | if (isset($chartDetail->dLbls->showSerName)) { |
510 | 2 | $plotAttributes['showSerName'] = self::getAttribute($chartDetail->dLbls->showSerName, 'val', 'string'); |
|
511 | } |
||
512 | 2 | View Code Duplication | if (isset($chartDetail->dLbls->showPercent)) { |
513 | 2 | $plotAttributes['showPercent'] = self::getAttribute($chartDetail->dLbls->showPercent, 'val', 'string'); |
|
514 | } |
||
515 | 2 | View Code Duplication | if (isset($chartDetail->dLbls->showBubbleSize)) { |
516 | 2 | $plotAttributes['showBubbleSize'] = self::getAttribute($chartDetail->dLbls->showBubbleSize, 'val', 'string'); |
|
517 | } |
||
518 | 2 | View Code Duplication | if (isset($chartDetail->dLbls->showLeaderLines)) { |
519 | 2 | $plotAttributes['showLeaderLines'] = self::getAttribute($chartDetail->dLbls->showLeaderLines, 'val', 'string'); |
|
520 | } |
||
521 | } |
||
522 | |||
523 | 2 | return $plotAttributes; |
|
524 | } |
||
525 | |||
526 | /** |
||
527 | * @param Layout $plotArea |
||
528 | * @param mixed $plotAttributes |
||
529 | */ |
||
530 | 2 | private static function setChartAttributes(Layout $plotArea, $plotAttributes) |
|
562 | } |
||
563 | } |
||
564 | 2 | } |
|
565 | } |
||
566 |