Completed
Push — master ( 345056...adc156 )
by
unknown
01:40
created

Chart::restoreExpressions()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 7
rs 9.4285
cc 1
eloc 4
nc 1
nop 1
1
<?php
2
3
namespace EnergieProduction\Chart;
4
5
use Closure;
6
use Illuminate\Support\Collection;
7
use EnergieProduction\Chart\Subsets;
8
9
Class Chart {
10
11
	protected $subsetList;
12
13
	/**
14
	 * [__construct description]
15
	 * @param \Illuminate\Support\Collection $subsetList
16
	 */
17
	public function __construct(Collection $subsetList)
18
	{
19
		$this->subsetList = $subsetList;
20
	}
21
22
	/**
23
	 * [addSubset description]
24
	 * @param string  $subset
25
	 * @param \Closure $closure
26
	 */
27
	public function addSubset($subset, Closure $closure)
28
	{
29
		if (str_contains($subset, '.')) {
30
			$this->addCascadeSubset($subset, $closure);
31
		}
32
		else {
33
			$this->addSimpleSubset($subset, $closure);
34
		}
35
	}
36
37
	/**
38
	 * [render description]
39
	 * @return json [description]
40
	 */
41
	public function render()
42
	{
43
		$formatedChart = [];
44
45
		foreach ($this->subsetList as $subset) {
46
47
			$render = $subset->render();
48
49
			if ($subset->cascade) {
50
51
				$tmpArray = [];
52
53
				$this->dotNotationToArray($tmpArray, $subset->cascade, $render);
54
55
				$render = $tmpArray;
56
			}
57
58
			$formatedChart = array_merge_recursive($formatedChart, $render);
59
		}
60
61
		$formatedChart = json_encode($formatedChart);
62
63
		if (str_contains($formatedChart, '"#!!')) {
64
			$formatedChart = $this->restoreExpressions($formatedChart);
65
		}
66
67
		return $formatedChart;
68
	}
69
70
	/**
71
	 * [addSimpleSubset description]
72
	 * @param string  $subset
73
	 * @param \Closure $closure
74
	 */
75
	protected function addSimpleSubset($subset, Closure $closure)
76
	{
77
		$subset = $this->makeSubsetClass($subset);
78
79
		$this->callFunc($closure, $subset);
80
81
		$this->subsetList->push($subset);
82
	}
83
84
	/**
85
	 * [addCascadeSubset description]
86
	 * @param string  $cascadeSubsetNotation
87
	 * @param \Closure $closure
88
	 */
89
	protected function addCascadeSubset($cascadeSubsetNotation, Closure $closure)
90
	{
91
		$subsetsList = explode('.', $cascadeSubsetNotation);
92
93
		$subset = $this->makeSubsetClass(end($subsetsList));
94
95
		$subset->setCascade($cascadeSubsetNotation);
96
97
		$this->callFunc($closure, $subset);
98
99
		$this->subsetList->push($subset);
100
	}
101
102
	/**
103
	 * [callFunc description]
104
	 * @param  \Closure $closure
105
	 * @param  \EnergieProduction\Subsets\* $class
106
	 */
107
	protected function callFunc(Closure $closure, $class)
108
	{
109
		return call_user_func($closure, $class);
110
	}
111
112
	/**
113
	 * [makeSubsetClass description]
114
	 * @param  string $subset
115
	 * @return \EnergieProduction\Subsets\*
116
	 */
117
	protected function makeSubsetClass($subset)
118
	{
119
		$class = "EnergieProduction\\Chart\\Subsets\\" . ucfirst($subset);
120
121
		return new $class;
122
	}
123
124
	/**
125
	 * [dotNotationToArray description]
126
	 * @param  array  &$arr
127
	 * @param  string $path
128
	 * @param  array $val
129
	 * @return array
130
	 */
131
	protected function dotNotationToArray(array &$arr, $path, $val)
132
	{
133
	   $loc = &$arr;
134
135
	   $path = explode('.', $path);
136
137
	   array_pop($path);
138
139
	   foreach($path as $step)
140
	   {
141
	     $loc = &$loc[$step];
142
	   }
143
144
	   return $loc = $val;
145
	}
146
147
	/**
148
	 * [restoreExpressions description]
149
	 * @param  string $formatedChart
150
	 * @return string
151
	 */
152
	protected function restoreExpressions($formatedChart)
153
	{
154
		$formatedChart = str_replace('"#!!', '', $formatedChart);
155
		$formatedChart = str_replace('!!#"', '', $formatedChart);
156
157
		return $formatedChart;
158
	}
159
}
160