44
55use Drupal \Core \Template \Attribute ;
66use Drupal \Core \Url ;
7- use PatternLab \Console ;
87use PatternLab \Data ;
98use PatternLab \PatternData ;
109
11- class PatternNotFoundException extends \Exception {}
12-
1310/**
1411 * @author Aleksi Peebles <aleksi@iki.fi>
1512 */
1613class DataTransformer
1714{
15+ use ErrorHandlerTrait;
16+
1817 protected static $ processed = array ();
1918
20- protected $ verbose ;
2119 protected $ reservedKeys ;
2220 protected $ patternDataStore ;
2321 protected $ renderer ;
2422 protected $ hasRun ;
2523 protected $ currentPattern ;
26- protected $ renderError ;
2724
28- public function __construct ($ verbose = false )
25+ public function __construct ()
2926 {
30- $ this ->verbose = $ verbose ;
3127 // TODO: Add an accessor function for $reservedKeys to the Data class?
3228 $ this ->reservedKeys = array ("cacheBuster " ,"link " ,"patternSpecific " ,"patternLabHead " ,"patternLabFoot " );
3329 $ this ->patternDataStore = PatternData::get ();
@@ -48,9 +44,7 @@ public function run(Renderer $renderer)
4844 $ this ->processPattern ($ pattern );
4945 }
5046 $ this ->hasRun = true ;
51- if ($ this ->verbose ) {
52- Console::writeInfo ('[data transform plugin] processing done... ' );
53- }
47+ DataTransformPlugin::writeInfo ('processing done ' );
5448 }
5549
5650 protected function isProcessed ($ pattern )
@@ -73,33 +67,31 @@ protected function processPattern($pattern)
7367 return ;
7468 }
7569 $ 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 ));
7973
8074
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 ];
8981 }
90- Data::initPattern ($ pattern );
91- Data::setPatternData ($ pattern , $ patternSpecificData );
92- }
93- catch (PatternNotFoundException $ exception ) {
94- throw new PatternNotFoundException ("Pattern ' $ pattern': " . $ exception ->getMessage ());
82+ }
9583 }
84+ Data::initPattern ($ pattern );
85+ Data::setPatternData ($ pattern , $ patternSpecificData );
9686 }
9787
9888 protected function processData ($ data )
9989 {
10090 foreach (array_keys ($ data ) as $ key ) {
10191 if (!in_array ($ key , $ this ->reservedKeys )) {
92+ $ this ->setErrorHandler ();
10293 $ data = $ this ->processKey ($ data , $ key );
94+ $ this ->restoreErrorHandler ("error processing key ' $ key' " );
10395 }
10496 }
10597
@@ -115,43 +107,53 @@ protected function processKey($data, $key)
115107 }
116108 if (isset ($ value ['Attribute() ' ]) && is_array ($ value ['Attribute() ' ])) {
117109 $ data [$ key ] = new Attribute ($ value ['Attribute() ' ]);
110+ DataTransformPlugin::writeInfo ('created Attribute object ' , true );
118111 }
119112 elseif (isset ($ value ['Url() ' ]['url ' ])) {
120113 $ options = isset ($ value ['Url() ' ]['options ' ]) && is_array ($ value ['Url() ' ]['options ' ]) ? $ value ['Url() ' ]['options ' ] : [];
121114 $ data [$ key ] = Url::fromUri ($ value ['Url() ' ]['url ' ], $ options );
115+ DataTransformPlugin::writeInfo ('created Url object ' , true );
122116 }
123117 elseif (isset ($ value ['include() ' ]) && is_array ($ value ['include() ' ]) && isset ($ value ['include() ' ]['pattern ' ])) {
124118 $ 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 ' ]);
129131 }
130132 else {
131- $ patternData = array () ;
133+ $ patternData = $ value [ ' include() ' ][ ' with ' ] ;
132134 }
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 );
136137 }
137138 else {
138- $ patternData = $ value [ ' include() ' ][ ' with ' ] ;
139+ DataTransformPlugin:: writeWarning ( " could not find ' $ pattern ' to include" , DataTransformPlugin:: isVerbose ()) ;
139140 }
140- $ data [$ key ] = $ this ->renderPattern ($ pattern , $ patternData );
141141 }
142142 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 () );
144144 }
145145 }
146146 elseif (isset ($ value ['join() ' ]) && is_array ($ value ['join() ' ])) {
147147 $ data [$ key ] = join ($ value ['join() ' ]);
148+ DataTransformPlugin::writeInfo ("joined data under key ' $ key' " , true );
148149 }
149150 else {
150151 $ data [$ key ] = $ value ;
151152 }
152153 }
153154 elseif (is_string ($ value ) && isset ($ this ->patternDataStore [$ value ]) && $ key !== 'pattern ' ) {
154155 $ data [$ key ] = $ this ->renderPattern ($ value , $ this ->getProcessedPatternSpecificData ($ value ));
156+ DataTransformPlugin::writeInfo ("included pattern ' $ value' " , true );
155157 }
156158
157159 return $ data ;
@@ -164,31 +166,17 @@ public function getProcessedPatternSpecificData($pattern, $extraData = array())
164166 return Data::getPatternSpecificData ($ pattern , $ extraData );
165167 }
166168
167- public function renderErrorHandler ($ errno , $ errstr ) {
168- $ this ->renderError = $ errstr ;
169-
170- return TRUE ;
171- }
172-
173169 protected function renderPattern ($ pattern , $ data )
174170 {
175171 $ rendered = '' ;
176172 if (isset ($ this ->patternDataStore [$ pattern ]['patternRaw ' ])) {
177173 foreach (array_keys ($ data ) as $ key ) {
178174 $ data = $ this ->cloneObjects ($ data , $ key );
179175 }
180- $ this ->renderError = NULL ;
181- set_error_handler (array ($ this , 'renderErrorHandler ' ));
182176 $ rendered = $ this ->renderer ->render (
183177 $ this ->patternDataStore [$ pattern ]['patternRaw ' ],
184178 $ data
185179 );
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- }
192180 }
193181
194182 return $ rendered ;
0 commit comments