@@ -56,12 +56,10 @@ protected function processPattern($pattern)
56
56
$ patternSpecificData =
57
57
$ this ->processData (Data::getPatternSpecificData ($ pattern ))
58
58
;
59
- // Clone objects in possible default global data.
60
59
$ dataStore = Data::get ();
61
60
foreach (array_keys ($ patternSpecificData ) as $ key ) {
62
61
if (!isset ($ dataStore ['patternSpecific ' ][$ pattern ]['data ' ][$ key ])) {
63
62
// Value is default global data.
64
- // TODO: Array support.
65
63
if (is_object ($ dataStore [$ key ])) {
66
64
$ patternSpecificData [$ key ] = clone $ dataStore [$ key ];
67
65
}
@@ -137,6 +135,9 @@ public function getProcessedPatternSpecificData($pattern, $extraData = array())
137
135
protected function renderPattern ($ pattern , $ data )
138
136
{
139
137
if (isset ($ this ->patternDataStore [$ pattern ]['patternRaw ' ])) {
138
+ foreach (array_keys ($ data ) as $ key ) {
139
+ $ data = $ this ->cloneObjects ($ data , $ key );
140
+ }
140
141
$ pattern = $ this ->env ->render (
141
142
$ this ->patternDataStore [$ pattern ]['patternRaw ' ],
142
143
$ data
@@ -145,4 +146,20 @@ protected function renderPattern($pattern, $data)
145
146
146
147
return $ pattern ;
147
148
}
149
+
150
+ protected function cloneObjects ($ data , $ key )
151
+ {
152
+ $ value = $ data [$ key ];
153
+ if (is_array ($ value )) {
154
+ foreach (array_keys ($ value ) as $ subKey ) {
155
+ $ value = $ this ->cloneObjects ($ value , $ subKey );
156
+ }
157
+ $ data [$ key ] = $ value ;
158
+ }
159
+ elseif (is_object ($ value )) {
160
+ $ data [$ key ] = clone $ value ;
161
+ }
162
+
163
+ return $ data ;
164
+ }
148
165
}
0 commit comments