4
4
5
5
use Drupal \Core \Template \Attribute ;
6
6
use Drupal \Core \Url ;
7
- use PatternLab \Console ;
8
7
use PatternLab \Data ;
9
8
use PatternLab \PatternData ;
10
9
11
- class PatternNotFoundException extends \Exception {}
12
-
13
10
/**
14
11
* @author Aleksi Peebles <[email protected] >
15
12
*/
16
13
class DataTransformer
17
14
{
15
+ use ErrorHandlerTrait;
16
+
18
17
protected static $ processed = array ();
19
18
20
- protected $ verbose ;
21
19
protected $ reservedKeys ;
22
20
protected $ patternDataStore ;
23
21
protected $ renderer ;
24
22
protected $ hasRun ;
25
23
protected $ currentPattern ;
26
- protected $ renderError ;
27
24
28
- public function __construct ($ verbose = false )
25
+ public function __construct ()
29
26
{
30
- $ this ->verbose = $ verbose ;
31
27
// TODO: Add an accessor function for $reservedKeys to the Data class?
32
28
$ this ->reservedKeys = array ("cacheBuster " ,"link " ,"patternSpecific " ,"patternLabHead " ,"patternLabFoot " );
33
29
$ this ->patternDataStore = PatternData::get ();
@@ -48,9 +44,7 @@ public function run(Renderer $renderer)
48
44
$ this ->processPattern ($ pattern );
49
45
}
50
46
$ this ->hasRun = true ;
51
- if ($ this ->verbose ) {
52
- Console::writeInfo ('[data transform plugin] processing done... ' );
53
- }
47
+ DataTransformPlugin::writeInfo ('processing done ' );
54
48
}
55
49
56
50
protected function isProcessed ($ pattern )
@@ -73,33 +67,31 @@ protected function processPattern($pattern)
73
67
return ;
74
68
}
75
69
$ this ->setProcessed ($ pattern );
76
- try {
77
- $ patternSpecificData =
78
- $ this ->processData (Data::getPatternSpecificData ($ pattern ));
70
+ DataTransformPlugin:: writeInfo ( " processing pattern ' $ pattern ' " );
71
+ $ patternSpecificData =
72
+ $ this ->processData (Data::getPatternSpecificData ($ pattern ));
79
73
80
74
81
- $ dataStore = Data::get ();
82
- foreach (array_keys ($ patternSpecificData ) as $ key ) {
83
- if (!isset ($ dataStore ['patternSpecific ' ][$ pattern ]['data ' ][$ key ])) {
84
- // Value is default global data.
85
- if (isset ($ dataStore [$ key ]) && is_object ($ dataStore [$ key ])) {
86
- $ patternSpecificData [$ key ] = clone $ dataStore [$ key ];
87
- }
88
- }
75
+ $ dataStore = Data::get ();
76
+ foreach (array_keys ($ patternSpecificData ) as $ key ) {
77
+ if (!isset ($ dataStore ['patternSpecific ' ][$ pattern ]['data ' ][$ key ])) {
78
+ // Value is default global data.
79
+ if (isset ($ dataStore [$ key ]) && is_object ($ dataStore [$ key ])) {
80
+ $ patternSpecificData [$ key ] = clone $ dataStore [$ key ];
89
81
}
90
- Data::initPattern ($ pattern );
91
- Data::setPatternData ($ pattern , $ patternSpecificData );
92
- }
93
- catch (PatternNotFoundException $ exception ) {
94
- throw new PatternNotFoundException ("Pattern ' $ pattern': " . $ exception ->getMessage ());
82
+ }
95
83
}
84
+ Data::initPattern ($ pattern );
85
+ Data::setPatternData ($ pattern , $ patternSpecificData );
96
86
}
97
87
98
88
protected function processData ($ data )
99
89
{
100
90
foreach (array_keys ($ data ) as $ key ) {
101
91
if (!in_array ($ key , $ this ->reservedKeys )) {
92
+ $ this ->setErrorHandler ();
102
93
$ data = $ this ->processKey ($ data , $ key );
94
+ $ this ->restoreErrorHandler ("error processing key ' $ key' " );
103
95
}
104
96
}
105
97
@@ -115,43 +107,53 @@ protected function processKey($data, $key)
115
107
}
116
108
if (isset ($ value ['Attribute() ' ]) && is_array ($ value ['Attribute() ' ])) {
117
109
$ data [$ key ] = new Attribute ($ value ['Attribute() ' ]);
110
+ DataTransformPlugin::writeInfo ('created Attribute object ' , true );
118
111
}
119
112
elseif (isset ($ value ['Url() ' ]['url ' ])) {
120
113
$ options = isset ($ value ['Url() ' ]['options ' ]) && is_array ($ value ['Url() ' ]['options ' ]) ? $ value ['Url() ' ]['options ' ] : [];
121
114
$ data [$ key ] = Url::fromUri ($ value ['Url() ' ]['url ' ], $ options );
115
+ DataTransformPlugin::writeInfo ('created Url object ' , true );
122
116
}
123
117
elseif (isset ($ value ['include() ' ]) && is_array ($ value ['include() ' ]) && isset ($ value ['include() ' ]['pattern ' ])) {
124
118
$ pattern = $ value ['include() ' ]['pattern ' ];
125
- if (is_string ($ pattern ) && isset ($ this ->patternDataStore [$ pattern ])) {
126
- if (!isset ($ value ['include() ' ]['with ' ]) || !is_array ($ value ['include() ' ]['with ' ])) {
127
- if (!isset ($ value ['include() ' ]['only ' ])) {
128
- $ patternData = $ this ->getProcessedPatternSpecificData ($ pattern );
119
+ if (is_string ($ pattern )) {
120
+ if (isset ($ this ->patternDataStore [$ pattern ])) {
121
+ if (!isset ($ value ['include() ' ]['with ' ]) || !is_array ($ value ['include() ' ]['with ' ])) {
122
+ if (!isset ($ value ['include() ' ]['only ' ])) {
123
+ $ patternData = $ this ->getProcessedPatternSpecificData ($ pattern );
124
+ }
125
+ else {
126
+ $ patternData = array ();
127
+ }
128
+ }
129
+ elseif (!isset ($ value ['include() ' ]['only ' ])) {
130
+ $ patternData = $ this ->getProcessedPatternSpecificData ($ pattern , $ value ['include() ' ]['with ' ]);
129
131
}
130
132
else {
131
- $ patternData = array () ;
133
+ $ patternData = $ value [ ' include() ' ][ ' with ' ] ;
132
134
}
133
- }
134
- elseif (!isset ($ value ['include() ' ]['only ' ])) {
135
- $ patternData = $ this ->getProcessedPatternSpecificData ($ pattern , $ value ['include() ' ]['with ' ]);
135
+ $ data [$ key ] = $ this ->renderPattern ($ pattern , $ patternData );
136
+ DataTransformPlugin::writeInfo ("included pattern ' $ pattern' " , true );
136
137
}
137
138
else {
138
- $ patternData = $ value [ ' include() ' ][ ' with ' ] ;
139
+ DataTransformPlugin:: writeWarning ( " could not find ' $ pattern ' to include" , DataTransformPlugin:: isVerbose ()) ;
139
140
}
140
- $ data [$ key ] = $ this ->renderPattern ($ pattern , $ patternData );
141
141
}
142
142
else {
143
- throw new PatternNotFoundException ( " Could not find pattern ' $ pattern ' to include! " );
143
+ DataTransformPlugin:: writeWarning ( ' include() pattern key value was not a string ' , DataTransformPlugin:: isVerbose () );
144
144
}
145
145
}
146
146
elseif (isset ($ value ['join() ' ]) && is_array ($ value ['join() ' ])) {
147
147
$ data [$ key ] = join ($ value ['join() ' ]);
148
+ DataTransformPlugin::writeInfo ("joined data under key ' $ key' " , true );
148
149
}
149
150
else {
150
151
$ data [$ key ] = $ value ;
151
152
}
152
153
}
153
154
elseif (is_string ($ value ) && isset ($ this ->patternDataStore [$ value ]) && $ key !== 'pattern ' ) {
154
155
$ data [$ key ] = $ this ->renderPattern ($ value , $ this ->getProcessedPatternSpecificData ($ value ));
156
+ DataTransformPlugin::writeInfo ("included pattern ' $ value' " , true );
155
157
}
156
158
157
159
return $ data ;
@@ -164,31 +166,17 @@ public function getProcessedPatternSpecificData($pattern, $extraData = array())
164
166
return Data::getPatternSpecificData ($ pattern , $ extraData );
165
167
}
166
168
167
- public function renderErrorHandler ($ errno , $ errstr ) {
168
- $ this ->renderError = $ errstr ;
169
-
170
- return TRUE ;
171
- }
172
-
173
169
protected function renderPattern ($ pattern , $ data )
174
170
{
175
171
$ rendered = '' ;
176
172
if (isset ($ this ->patternDataStore [$ pattern ]['patternRaw ' ])) {
177
173
foreach (array_keys ($ data ) as $ key ) {
178
174
$ data = $ this ->cloneObjects ($ data , $ key );
179
175
}
180
- $ this ->renderError = NULL ;
181
- set_error_handler (array ($ this , 'renderErrorHandler ' ));
182
176
$ rendered = $ this ->renderer ->render (
183
177
$ this ->patternDataStore [$ pattern ]['patternRaw ' ],
184
178
$ data
185
179
);
186
- restore_error_handler ();
187
- if (isset ($ this ->renderError )) {
188
- Console::writeWarning ('[data transform plugin] pattern ' . $ this ->currentPattern );
189
- Console::writeWarning ('error rendering ' . $ pattern , true );
190
- Console::writeWarning ($ this ->renderError , true );
191
- }
192
180
}
193
181
194
182
return $ rendered ;
0 commit comments