PluginProbe
CSS & JavaScript Toolbox / 6.0.6
CSS & JavaScript Toolbox v6.0.6
trunk 0.3 0.8 10 10.1 11 11.2 11.3 11.4 11.5 11.6 11.7 11.8 11.9 11.9.1 12 12.0 12.0.1 12.0.3 12.0.4 12.0.5 12.0.6 12.0.7 6.0 6.0.11 All 60 releases
← All changes | controllers/blocks-coupling.php +176 -559 11.26.0.6 View file →
@@ -1,73 +1,59 @@
1 1 <?php
2 2 /**
3 3 * @version $ Id; blocks-coupling.php 21-03-2012 03:22:10 Ahmed Said $
4 4 */
5 -
5 +
6 6 // Disallow direct access.
7 7 defined('ABSPATH') or die("Access denied");
8 8
9 9 /**
10 10 * Applying Code blocks for the curren request.
11 -*
11 +*
12 12 * This controller is always loaded.
13 -*
13 +*
14 14 * The class resposibility is to output the code blocks
15 15 * tha associated with current request.
16 -*
16 +*
17 17 * @author Ahmed Said
18 18 * @version 6
19 19 */
20 20 class CJTBlocksCouplingController extends CJTController {
21 -
21 +
22 22 /**
23 23 * put your comment there...
24 - *
24 + *
25 25 * @var mixed
26 26 */
27 - public $blocks = array(
28 - 'code' => array(),
29 - 'scripts' => array(),
27 + protected $blocks = array(
28 + 'code' => array('header' => '', 'footer' => ''),
29 + 'scripts' => array('header' => array(), 'footer' => array()),
30 30 );
31 -
31 +
32 32 /**
33 33 * put your comment there...
34 - *
34 + *
35 35 * @var mixed
36 36 */
37 37 protected $controllerInfo = array('model' => 'coupling');
38 -
38 +
39 39 /**
40 40 * put your comment there...
41 - *
41 + *
42 42 * @var mixed
43 43 */
44 44 protected $filters = null;
45 -
46 - /**
47 - * put your comment there...
48 - *
49 - * @var mixed
50 - */
51 - protected $hookAttacher;
52 -
45 +
53 46 /**
54 47 * put your comment there...
55 - *
48 + *
56 49 * @var mixed
57 50 */
58 - protected static $instance = null;
59 -
60 - /**
61 - * put your comment there...
62 - *
63 - * @var mixed
64 - */
65 51 private $onActionIds = array();
66 -
52 +
67 53 /**
68 54 * put your comment there...
69 - *
55 + *
70 56 * @var mixed
71 57 */
72 58 protected $onassigncouplingcallback = array('parameters' => array('callback'));
73 59
@@ -72,44 +58,37 @@
72 58 protected $onassigncouplingcallback = array('parameters' => array('callback'));
73 59
74 60 /**
75 61 * put your comment there...
76 - *
62 + *
77 63 * @var mixed
78 64 */
79 65 protected $onappendcode = array('parameters' => array('code'));
80 -
66 +
81 67 /**
82 68 * put your comment there...
83 - *
69 + *
84 70 * @var mixed
85 71 */
86 - protected $onblockmatched = array('parameters' => array('block'));
87 -
88 - /**
89 - * put your comment there...
90 - *
91 - * @var mixed
92 - */
93 72 protected $oncancelmatching = array('parameters' => array('matched'));
94 -
73 +
95 74 /**
96 75 * put your comment there...
97 - *
76 + *
98 77 * @var mixed
99 78 */
100 79 protected $ondefaultfilters = array('parameters' => array('filters'));
101 -
80 +
102 81 /**
103 82 * put your comment there...
104 - *
83 + *
105 84 * @var mixed
106 85 */
107 86 protected $ondo = array('parameters' => array('data', 'method', 'condition'));
108 -
87 +
109 88 /**
110 89 * put your comment there...
111 - *
90 + *
112 91 * @var mixed
113 92 */
114 93 protected $onblocksorder = array('parameters' => array('order'));
115 94
@@ -114,23 +93,16 @@
114 93 protected $onblocksorder = array('parameters' => array('order'));
115 94
116 95 /**
117 96 * put your comment there...
118 - *
97 + *
119 98 * @var mixed
120 99 */
121 - protected $onevalcodeblock = array( 'parameters' => array( 'keep', 'block' ) );
122 -
123 - /**
124 - * put your comment there...
125 - *
126 - * @var mixed
127 - */
128 100 protected $ongetblocks = array('parameters' => array('blocks'));
129 101
130 102 /**
131 103 * put your comment there...
132 - *
104 + *
133 105 * @var mixed
134 106 */
135 107 protected $ongetcache = array('parameters' => array('cache'));
136 108
@@ -135,51 +107,23 @@
135 107 protected $ongetcache = array('parameters' => array('cache'));
136 108
137 109 /**
138 110 * put your comment there...
139 - *
111 + *
140 112 * @var mixed
141 113 */
142 114 protected $ongetfilters = array('parameters' => array('filters'));
143 -
115 +
144 116 /**
145 117 * put your comment there...
146 - *
118 + *
147 119 * @var mixed
148 120 */
149 - protected $onlinkedtemplates = array('parameters' => array('templates'));
150 -
151 - /**
152 - * put your comment there...
153 - *
154 - * @var mixed
155 - */
156 - protected $onlinkscripts = array('parameters' => array('templates'));
157 -
158 - /**
159 - * put your comment there...
160 - *
161 - * @var mixed
162 - */
163 - protected $onlinkstyles = array('parameters' => array('templates'));
164 -
165 - /**
166 - * put your comment there...
167 - *
168 - * @var mixed
169 - */
170 - protected $onlinktemplate = array('parameters' => array('template'));
171 -
172 - /**
173 - * put your comment there...
174 - *
175 - * @var mixed
176 - */
177 121 protected $onmatchingurls = array('parameters' => array('urls'));
178 122
179 123 /**
180 124 * put your comment there...
181 - *
125 + *
182 126 * @var mixed
183 127 */
184 128 protected $onnoblocks = array('hookType' => CJTWordpressEvents::HOOK_ACTION);
185 129
@@ -184,16 +128,16 @@
184 128 protected $onnoblocks = array('hookType' => CJTWordpressEvents::HOOK_ACTION);
185 129
186 130 /**
187 131 * put your comment there...
188 - *
132 + *
189 133 * @var mixed
190 134 */
191 135 protected $onoutput = array('parameters' => array('code', 'location'));
192 -
136 +
193 137 /**
194 138 * put your comment there...
195 - *
139 + *
196 140 * @var mixed
197 141 */
198 142 protected $onprocess = array('hookType' => CJTWordpressEvents::HOOK_ACTION);
199 143
@@ -198,181 +142,82 @@
198 142 protected $onprocess = array('hookType' => CJTWordpressEvents::HOOK_ACTION);
199 143
200 144 /**
201 145 * put your comment there...
202 - *
146 + *
203 147 * @var mixed
204 148 */
205 149 protected $onprocessblock = array('parameters' => array('block'));
206 -
150 +
207 151 /**
208 152 * put your comment there...
209 - *
153 + *
210 154 * @var mixed
211 155 */
212 - protected $onqueuecss = array('parameters' => array('style'));
213 -
214 - /**
215 - * put your comment there...
216 - *
217 - * @var mixed
218 - */
219 - protected $onqueuejavascript = array('parameters' => array('script'));
220 -
221 - /**
222 - * put your comment there...
223 - *
224 - * @var mixed
225 - */
226 156 protected $onsetfilters = array('parameters' => array('filters'));
227 -
157 +
228 158 /**
229 - * put your comment there...
230 - *
231 - * @var mixed
232 - */
233 - protected $templates = array();
234 -
235 - /**
236 159 * Initialize controller object.
237 - *
160 + *
238 161 * @see CJTController for more details
239 162 * @return void
240 163 */
241 164 public function __construct() {
242 -
243 - // Only one instance is allowed.
244 - if (self::$instance) {
245 - throw new Exception('Trying to instantiate multiple coupling instances!!');
246 - }
247 -
248 - // Hold the single instance we've!
249 - self::$instance = $this;
250 - $siteHook = cssJSToolbox::$config->core->siteHook;
251 -
252 165 // Initialize controller.
253 166 parent::__construct(false);
254 -
255 167 // Import related libraries
256 168 CJTModel::import('block');
257 -
258 169 // Not default action needed.
259 170 $this->defaultAction = null;
260 - $this->hookAttacher = new CJTBlocksCouplingHookAttacher(array(&$this, 'outputBlocks'));
261 -
262 - // Initialize Blocks array
263 - foreach ($this->hookAttacher->getFiltersList() as $hooks) {
264 -
265 - foreach ($hooks as $hook) {
266 -
267 - $this->blocks['code'][$hook['locationName']] = '';
268 - $this->blocks['script'][$hook['locationName']] = '';
269 - }
270 - }
271 -
272 171 // Initialize controller.
273 172 $initCouplingCallback = $this->onassigncouplingcallback(array(&$this, 'initCoupling'));
274 173 add_action('admin_init', $initCouplingCallback);
275 - add_action($siteHook->tag, $initCouplingCallback, $siteHook->priority);
276 -
174 + add_action('wp', $initCouplingCallback);
277 175 // Add Shortcode callbacks.
278 176 add_shortcode('cjtoolbox', array(&$this, 'shortcode'));
279 177 }
280 -
178 +
281 179 /**
282 180 * put your comment there...
283 - *
284 - * @param mixed $id
181 + *
285 182 */
286 - public function addOnActionIds($id) {
287 - // Add ID is not exists.
288 - if (!in_array($id, $this->onActionIds)) {
289 - $this->onActionIds[] = $id;
290 - }
291 - // Chaining.
292 - return $this;
293 - }
294 -
295 - /**
296 - * put your comment there...
297 - *
298 - */
299 - public function getBlocks()
300 - {
183 + public function getBlocks() {
301 184 // Set request view filters used for querying database.
302 185 $this->setRequestFilters();
303 -
304 186 // Get blocks order. NOTE: This is all blocks order not only the queried/target blocks.
305 187 $blocksOrder = array();
306 - $metaBoxesOrder = $this->onblocksorder( $this->model->getOrder() );
307 -
188 + $metaBoxesOrder = $this->onblocksorder($this->model->getOrder());
308 189 // Get ORDER-INDEX <TO> BLOCK-ID mapping.
309 - if ( $metaBoxesOrder ) preg_match_all( '/cjtoolbox-(\d+)/', $metaBoxesOrder[ 'normal' ], $blocksOrder, PREG_SET_ORDER );
310 -
311 - /**
312 - * append more to orders produced by CJTBlocksCouplingController::setRequestFilter().
313 - * More to orders may allow other blocks to bein the output (e.g metaboxe blocks).
314 - */
315 - $blocksOrder = array_merge( $blocksOrder, $this->getFilters()->moreToOrder );
316 -
190 + preg_match_all('/cjtoolbox-(\d+)/', $metaBoxesOrder['normal'], $blocksOrder, PREG_SET_ORDER);
317 191 // Prepare request URL to match against Links & Expressions.
318 192 $linksRequestURL = self::getRequestURL();
319 193 $expressionsRequestURL = "{$linksRequestURL}?{$_SERVER['QUERY_STRING']}";
320 -
321 - extract( $this->onmatchingurls( compact( 'linksRequestURL', 'expressionsRequestURL' ) ) );
322 -
194 + extract($this->onmatchingurls(compact('linksRequestURL', 'expressionsRequestURL')));
323 195 // Get all blocks including (Links & Expressions Blocks).
324 - $blocks = $this->ongetblocks(
325 -
326 - $this->model->getPinsBlocks(
327 -
328 - CJTBlockModel::PINS_LINK_EXPRESSION,
329 -
330 - $this->getFilters()->pinPoint,
331 -
332 - $this->getFilters()->customPins,
333 -
334 - $this->getFilters()
335 -
336 - )
337 -
338 - );
339 -
340 -
341 - if ( empty( $blocks ) )
342 - {
196 + $blocks = $this->ongetblocks($this->model->getPinsBlocks(CJTBlockModel::PINS_LINK_EXPRESSION,
197 + $this->getFilters()->pinPoint,
198 + $this->getFilters()->customPins));
199 + if (empty($blocks)) {
343 200 $this->onnoblocks();
344 -
345 201 return false;
346 -
347 202 }
348 -
349 203 // Import related libraries.
350 - cssJSToolbox::import( 'framework:php:evaluator:evaluator.inc.php' );
351 -
204 + cssJSToolbox::import('framework:php:evaluator:evaluator.inc.php');
352 205 /**
353 206 * Iterator over all blocks by using they order.
354 207 * For each block get code and scripts.
355 208 */
356 209 $this->onprocess();
357 -
358 - foreach ( $blocksOrder as $blockOrder )
359 - {
360 -
210 + foreach ($blocksOrder as $blockOrder) {
361 211 $blockId = (int) $blockOrder[1];
362 -
363 212 // As mentioned above. Orders is for all blocks not just those queried from db.
364 - if ( isset($blocks[ $blockId ] ) )
365 - {
366 -
367 - $block = $this->onprocessblock( $blocks[ $blockId ] );
368 -
213 + if (isset($blocks[$blockId])) {
214 + $block = $this->onprocessblock($blocks[$blockId]);
369 215 /**
370 216 * Process Links & Expressions blocks.
371 217 * For better performace check only those with links and expressions flags.
372 218 */
373 - if ( $block->blocksGroup & CJTBlockModel::PINS_LINK_EXPRESSION )
374 - {
219 + if ($block->blocksGroup & CJTBlockModel::PINS_LINK_EXPRESSION) {
375 220 /**
376 221 * Initiliaze $matchedLink and $matchedExpression inside IF statment.
377 222 * Those variables need to refresh state at each block.
378 223 * If there is no link or expression flags, they will be FALSE.
@@ -378,143 +223,67 @@
378 223 * If there is no link or expression flags, they will be FALSE.
379 224 * Otherwise they'll get the correct value inside each statement.
380 225 */
381 226 /// Check if there is a matched link.
382 - if ( $matchedLink = ( $block->blocksGroup & CJTBlockModel::PINS_LINKS ) )
383 - {
384 - $links = explode( "\n", trim( $block->links ) );
385 - $matchedLink = in_array( $linksRequestURL, $links );
227 + if ($matchedLink = ($block->blocksGroup & CJTBlockModel::PINS_LINKS)) {
228 + $links = explode("\n", trim($block->links));
229 + $matchedLink = in_array($linksRequestURL, $links);
386 230 }
387 -
388 231 /// Check if there is a matched expression.
389 - if ( $matchedExpression = ( $block->blocksGroup & CJTBlockModel::PINS_EXPRESSIONS ) )
390 - {
232 + if ($matchedExpression = ($block->blocksGroup & CJTBlockModel::PINS_EXPRESSIONS)) {
391 233 $expressions = explode("\n", $block->expressions);
392 -
393 - foreach ( $expressions as $expression )
394 - {
234 + foreach ($expressions as $expression) {
395 235 /// @TODO: Matches may be used later to evaulate variables inside code block.
396 - if( $matchedExpression = @ preg_match( "/{$expression}/", $expressionsRequestURL ) )
397 - {
236 + if($matchedExpression = @preg_match("/{$expression}/", $expressionsRequestURL)) {
398 237 break;
399 238 }
400 -
401 239 }
402 -
403 240 }
404 -
405 241 /**
406 242 * Exclude Links & Expressions Blocks that doesn't has a match.
407 243 * If there is no matched link or expression then exclude block.
408 244 */
409 - if ( $this->oncancelmatching( ! ( $matchedExpression || $matchedLink ) ) )
410 - {
245 + if ($this->oncancelmatching(!($matchedExpression || $matchedLink))) {
411 246 continue;
412 247 }
413 -
414 248 }
415 - // Allow extensions to control to prevent block from being in the output
416 - if ( $block = $this->onblockmatched( $block ) )
417 - {
418 - // Retrieve block code-files.
419 - $block->code = $this->model->getBlockCode( $block->id );
420 -
421 - // Import Executable (PHP and HTML) templates.
422 - $block->code = $block->code . $this->model->getExecTemplatesCode( $block->id );
423 -
424 - // For every location store blocks code into single string
425 -
426 - if ( ! $evaluatedCode = $this->onevalcodeblock( false, $block ) )
427 - {
428 - $evaluatedCode = CJTPHPCodeEvaluator::getInstance( $block )->exec()->getOutput();
429 - }
430 -
431 - /** @todo Include Debuging info only if we're in debuging mode! */
432 - if ( 1 ) {
433 - // CODE UPDATED BY RBJ -- START
434 - if (trim($evaluatedCode) != ''):
435 - global $post;
436 - $checkMetaBlock = get_post_meta($post->ID, '__CJT-BLOCK-ID', true);
437 -
438 - if (!empty($checkMetaBlock) && $checkMetaBlock == $blockId):
439 - $evaluatedCode = "\n\n<!-- CJT Meta Block ({$blockId}) - {$block->name} - START -->\n{$evaluatedCode}\n<!-- CJT Meta Block ({$blockId}) - {$block->name} - END -->\n\n";
440 - else:
441 - $evaluatedCode = "\n\n<!-- CJT Global Block ({$blockId}) - {$block->name} - START -->\n{$evaluatedCode}\n<!-- CJT Global Block ({$blockId}) - {$block->name} - END -->\n\n";
442 - endif;
443 - endif;
444 - // CODE UPDATED BY RBJ -- END
445 - }
446 -
447 - // Initialize block LOCATION array for the first time
448 - if (!isset($this->blocks[ 'code' ][ $block->location ])) {
449 -
450 - $this->blocks[ 'code' ][ $block->location ] = '';
451 - }
452 -
453 - $this->blocks[ 'code' ][ $block->location ] .= $this->onappendcode( $evaluatedCode );
454 -
455 - // Store all used Ids in the CORRECT ORDER.
456 - $this->addOnActionIds( $blockId );
249 + // For every location store blocks code into single string
250 + /** @todo Use method other data:// wrapper, its only available in Hight version of PHP (5.3 or so!) */
251 + $evaluatedCode = CJTPHPCodeEvaluator::getInstance($block)->exec()->getOutput();
252 + /** @todo Include Debuging info only if we're in debuging mode! */
253 + if (1) {
254 + $evaluatedCode = "\n<!-- Block ({$blockId}) START-->\n{$evaluatedCode}\n<!-- Block ({$blockId}) END -->\n";
457 255 }
458 -
256 + $this->blocks['code'][$block->location] .= $this->onappendcode($evaluatedCode);
257 + // Store all used Ids in the CORRECT ORDER.
258 + $this->onActionIds[] = $blockId;
459 259 }
460 -
461 260 }
462 -
463 - $templates = $this->onActionIds ?
464 - $this->model->getLinkedTemplates( $this->onActionIds ) :
465 - array();
466 -
467 - // Classisfy as we process Scripts and Styles separatly (different hooks!).
468 - foreach ( $this->onlinkedtemplates( $templates ) as $id => $template )
469 - {
470 - // Filer template!
471 - extract( $this->onlinktemplate( compact( 'template', 'id' ) ) );
472 -
473 - $this->templates[ $template->type ][ $id ] = $template;
474 - }
475 -
476 -
261 + // Return true if there is at least 1 block return within the set.
477 262 return true;
478 263 }
479 -
264 +
480 265 /**
481 266 * put your comment there...
482 - *
267 + *
483 268 */
484 269 public function getCached() {
485 270 // Cache is not implemented yet might be supported by extenal Extensions!
486 271 return $this->ongetcache(false);
487 272 }
488 -
273 +
489 274 /**
490 275 * put your comment there...
491 - *
276 + *
492 277 */
493 278 public function getFilters() {
494 - return $this->ongetfilters($this->filters);
279 + return $this->ongetfilters($this->filters);
495 280 }
496 -
497 - /**
498 - * put your comment there...
499 - *
500 - */
501 - public function & getHooksAttacher() {
502 - return $this->hookAttacher;
503 - }
504 -
281 +
505 282 /**
506 283 * put your comment there...
507 - *
284 + *
508 285 */
509 - public function getOnActionIds() {
510 - return $this->onActionIds;
511 - }
512 -
513 - /**
514 - * put your comment there...
515 - *
516 - */
517 286 public static function getRequestURL() {
518 287 // URL Protocol.
519 288 $protocol = 'http' . ((isset($_SERVER["HTTPS"]) && ($_SERVER["HTTPS"] == "on")) ? 's' : '') . '://';
520 289 // Host name & port.
@@ -525,21 +294,13 @@
525 294 // Final URL.
526 295 $url = "{$protocol}{$host}{$port}{$requestURI}";
527 296 return $url;
528 297 }
529 -
298 +
530 299 /**
531 300 * put your comment there...
532 - *
301 + *
533 302 */
534 - public function hasOnActionIds() {
535 - return !empty($this->onActionIds);
536 - }
537 -
538 - /**
539 - * put your comment there...
540 - *
541 - */
542 303 public function initCoupling() {
543 304 // For some reasons wp action is fired twice.
544 305 // The wrong call won't has $wp_query object set,
545 306 // but this is only valid at Front end.
@@ -545,26 +306,17 @@
545 306 // but this is only valid at Front end.
546 307 if (!is_admin() && !$GLOBALS['wp_query']) {
547 308 return;
548 309 }
549 - // Get current application hook prefix.
550 - $actionsPrefix = is_admin() ? 'admin' : 'wp';
551 -
552 310 // Get cache or get blocks if not cached.
553 311 // If there is no cache or no blocks for output
554 312 // do nothing.
555 313 if ($this->getCached() || $this->getBlocks()) {
556 -
314 + $actionsPrefix = is_admin() ? 'admin' : 'wp';
557 315 // Output blocks on various locations!
558 - $this->hookAttacher->bind();
559 -
560 - // Links templates & styloes!
561 - add_action("{$actionsPrefix}_enqueue_scripts", array(&$this, 'linkTemplates'), 30);
562 - add_action("{$actionsPrefix}_print_styles", array(&$this, 'linkTemplates'), 30);
316 + add_action("{$actionsPrefix}_head", array(&$this, 'outputBlocks'), 30);
317 + add_action("{$actionsPrefix}_footer", array(&$this, 'outputBlocks'), 30);
563 318 }
564 -
565 - // Link style sheet in footer required custom implementation.
566 - add_action("{$actionsPrefix}_print_footer_scripts", array(&$this, 'linkFooterStyleSheets'), 9);
567 319 // Make sure this is executed only once.
568 320 // Sometimes wp hook run on backend and sometimes its not.
569 321 // This method handle both front and backend requests.
570 322 // Simply remove all hooks to ensure its run only one time.
@@ -570,186 +322,73 @@
570 322 // Simply remove all hooks to ensure its run only one time.
571 323 remove_action('wp', array(&$this, 'initCoupling'));
572 324 remove_action('admin_init', array(&$this, 'initCoupling'));
573 325 }
574 -
326 +
575 327 /**
576 328 * put your comment there...
577 - *
329 + *
578 330 */
579 - public function linkFooterStyleSheets() {
580 - // Initialize.
581 - $styles = array();
582 - // Get queued style sheets!
583 - global $wp_styles;
584 - $queuedStyles =& $wp_styles->queue;
585 - // Process only 'cjt' templates,
586 - foreach ($queuedStyles as $index => $styleName) {
587 - if (strpos($styleName, 'cjt-css-template-') === 0) {
588 - // Get style name src file, prepend to Wordpress absolute path.
589 - $style = $wp_styles->registered[$styleName];
590 - $styles[] = home_url($style->src);
591 - // Stop Wordpress from output <link> tag outside head tag
592 - // as it has no effect.
593 - unset($queuedStyles[$index]);
594 - }
595 - }
596 - // Enqueue Style Sheet loader javascript if there is any
597 - // styles need to be loaded.
598 - if (!empty($styles)) {
599 - // jQuery is dpendency object required by the loader.
600 - wp_enqueue_script('jquery');
601 - // Enqueue footer style sheet loader.
602 - wp_enqueue_script('cjt-coupling-footer-css-loader', cssJSToolbox::getURI('controllers:coupling:js:footer-stylesheet-loader.js'));
603 - // Output JavaScript array to be filled with the styles!
604 - $jsStyleSheetsList = json_encode($styles);
605 - require cssJSToolbox::resolvePath('controllers:coupling:html:load-footer-style.html.php');
606 - }
607 - }
608 -
609 - /**
610 - * put your comment there...
611 - *
612 - */
613 - public function linkTemplates() {
331 + public function outputBlocks() {
332 + // Derived location name from wordpress filter name.
614 333 $currentFilter = current_filter();
615 - // Derived template Type from Wordpress filter.
616 - $filterFor = explode('_', $currentFilter); $filterFor = array_pop($filterFor);
617 - $type = CJTCouplingModel::$templateTypes[$filterFor];
618 - // Following vars are referenced based on the current type.
619 - $templates = isset($this->templates[$type]) ? $this->templates[$type] : array();
620 - // Filering!
621 - $templates = $this->{"onlink{$filterFor}"}($templates);
622 - /**
623 - * @var WP_Dependencies
624 - */
625 - $queue = $this->model->getQueueObject($filterFor);
626 - // Add templates to the queye.
627 - foreach ($templates as $template) {
628 - // Registery only if not yet registered.
629 - $template = $this->{"onqueue{$type}"}($template);
630 - if (!isset($queue->registered[$template->queueName])) {
631 - $queue->add($template->queueName, "/{$template->file}", null, $template->version);
632 - }
633 - // Always make sure the template is queued.
634 - $queue->enqueue($template->queueName);
635 - }
334 + // Map "wp hook location" to "block hook location".
335 + $locationsMap = array('head' => 'header', 'footer' => 'footer');
336 + // This hook is used across both ends, front and back ends.
337 + // Remove application prefix (wp_ or admin_).
338 + // Remining is head or footer.
339 + $location = str_replace(array('wp_', 'admin_'), '', $currentFilter);
340 + // Map to block location.
341 + $location = $locationsMap[$location];
342 + echo $this->onoutput($this->blocks['code'][$location], $location);
636 343 }
637 -
344 +
638 345 /**
639 346 * put your comment there...
640 - *
347 + *
641 348 */
642 - public function outputBlocks() {
643 -
644 - $hooks = $this->hookAttacher->getHooksByFilterName(current_filter());
645 -
646 - foreach ($hooks as $hook) {
647 -
648 - echo $this->onoutput($this->blocks['code'][$hook['locationName']], $hook['locationName']);
649 - }
650 -
651 - }
652 -
653 - /**
654 - * put your comment there...
655 - *
656 - */
657 - protected function setRequestFilters()
658 - {
349 + protected function setRequestFilters() {
659 350 // Get request blocks.
660 - $filters = $this->ondefaultfilters( ( object ) array
661 - (
662 -
351 + $filters = $this->ondefaultfilters((object) array(
663 352 'pinPoint' => 0x00000000,
664 -
665 353 'customPins' => array(),
666 -
667 - 'moreToOrder' => array(),
668 -
669 - 'currentObject' => null,
670 -
671 - 'currentCustomPin' => 0,
672 -
673 - 'params' => array(),
674 -
675 - ) );
676 -
677 - if ( is_admin() )
678 - {
354 + ));
355 + if (is_admin()) {
679 356 // Include all backend blocks.
680 357 $filters->pinPoint |= CJTBlockModel::PINS_BACKEND;
681 358 }
682 - else
683 - {
359 + else {
684 360 $filters->pinPoint |= CJTBlockModel::PINS_FRONTEND;
685 -
686 361 // Pages.
687 - if ( is_page() )
688 - {
362 + if (is_page()) {
689 363 // Blocks with ALL PAGES selected.
690 364 $filters->pinPoint |= CJTBlockModel::PINS_PAGES_ALL_PAGES;
691 -
692 - $filters->currentObject = $GLOBALS[ 'post' ];
693 - $filters->currentCustomPin = CJTBlockModel::PINS_PAGES_CUSTOM_PAGE;
694 -
695 365 // Blocks with PAGE-ID selected.
696 - $filters->customPins[ ] = array
697 - (
366 + $filters->customPins[] = array(
698 367 'pin' => 'pages',
699 -
700 - 'pins' => array( $filters->currentObject->ID ),
701 -
368 + 'pins' => array($GLOBALS['post']->ID),
702 369 'flag' => CJTBlockModel::PINS_PAGES_CUSTOM_PAGE,
703 -
704 370 );
705 -
706 371 // Blocks with FRONT-PAGE selected.
707 - if ( is_front_page() )
708 - {
372 + if (is_front_page()) {
709 373 $filters->pinPoint |= CJTBlockModel::PINS_PAGES_FRONT_PAGE;
710 374 }
711 -
712 - /**
713 - * In order for metabox block to get in the output we need
714 - * to add metabox order for it.
715 - * @see CJTBlocksCouplingController::getBlocks.
716 - */
717 - $metabox = CJTModel::create( 'metabox', array( $filters->currentObject->ID ) );
718 -
719 - $filters->moreToOrder[ ][ 1 ] = $metabox->getMetaboxId();
720 -
721 375 } // End is_page()
722 -
723 - else if ( is_attachment() )
724 - {
376 + else if (is_attachment()) {
725 377 $filters->pinPoint |= CJTBlockModel::PINS_ATTACHMENT;
726 378 }
727 379 // Posts.
728 - else if ( is_single() )
729 - {
380 + else if (is_single()) {
730 381 // Blocks with ALL POSTS & ALL CATEGORIES selected.
731 382 $filters->pinPoint |= CJTBlockModel::PINS_POSTS_ALL_POSTS | CJTBlockModel::PINS_CATEGORIES_ALL_CATEGORIES;
732 -
733 - $filters->currentObject = $GLOBALS[ 'post' ];
734 - $filters->currentCustomPin = CJTBlockModel::PINS_POSTS_CUSTOM_POST;
735 -
736 383 // Blocks with POST-ID selected.
737 -
738 - $filters->customPins[ ] = array
739 - (
740 -
384 + $filters->customPins[] = array(
741 385 'pin' => 'posts',
742 -
743 - 'pins' => array( $filters->currentObject->ID ),
744 -
386 + 'pins' => array($GLOBALS['post']->ID),
745 387 'flag' => CJTBlockModel::PINS_POSTS_CUSTOM_POST,
746 -
747 388 );
748 -
749 - // Include POST PARENT CATRGORIES blocks.
750 - $parentCategoriesIds = wp_get_post_categories( $filters->currentObject->ID, array( 'fields' => 'ids' ) );
751 -
389 + // Include POST PARENT CATRGORIES blocks.
390 + $parentCategoriesIds = wp_get_post_categories($GLOBALS['post']->ID, array('fields' => 'ids'));
752 391 /**
753 392 * Custom-Posts just added "ON THE RUN/FLY"
754 393 * Need simple fix by confirming that the post is belong to
755 394 * specific category or not.
@@ -755,128 +394,106 @@
755 394 * specific category or not.
756 395 * Custom posts NOW unlike Posts, it doesn't inherit parent
757 396 * taxonomis Code Blocks!!
758 397 */
759 - if ( ! empty( $parentCategoriesIds ) )
760 - {
761 -
762 - $filters->params[ 'hasCategories' ] = true;
763 - $filters->params[ 'parentCategories' ] = $parentCategoriesIds;
764 -
765 - $filters->customPins[ ] = array
766 - (
767 -
398 + if (!empty($parentCategoriesIds)) {
399 + $filters->customPins[] = array(
768 400 'pin' => 'categories',
769 -
770 401 'pins' => $parentCategoriesIds,
771 -
772 402 'flag' => CJTBlockModel::PINS_CATEGORIES_CUSTOM_CATEGORY,
773 -
774 403 );
775 -
776 404 }
777 -
778 - /**
779 - * In order for metabox block to get in the output we need
780 - * to add metabox order for it.
781 - * @see CJTBlocksCouplingController::getBlocks.
782 - */
783 - $metabox = CJTModel::create( 'metabox', array( $filters->currentObject->ID ) );
784 -
785 - $filters->moreToOrder[][ 1 ] = $metabox->getMetaboxId();
786 -
787 - /**
405 + /**
788 406 * @TODO check for recent posts Based on user configuration.
789 407 * Recent posts should be detcted by comparing
790 408 * user condifguration with post date.
791 409 */
792 - if ( 0 ) {
793 -
410 + if (0) {
411 +
794 412 }
795 413 } // End is_single()
796 -
797 414 // Categories.
798 - else if( is_category() )
799 - {
415 + else if(is_category()) {
800 416 // Blocks with ALL CATEGORIES selected.
801 417 $filters->pinPoint |= CJTBlockModel::PINS_CATEGORIES_ALL_CATEGORIES;
802 -
803 - $filters->currentObject = get_queried_object();
804 - $filters->currentCustomPin = CJTBlockModel::PINS_CATEGORIES_CUSTOM_CATEGORY;
805 -
806 418 // Blocks with CATEGORY-ID selected.
807 - $filters->customPins[] = array
808 - (
419 + $filters->customPins[] = array(
809 420 'pin' => 'categories',
810 -
811 - 'pins' => array( $filters->currentObject->term_id ),
812 -
421 + 'pins' => array(get_queried_object()->term_id),
813 422 'flag' => CJTBlockModel::PINS_CATEGORIES_CUSTOM_CATEGORY,
814 -
815 - );
816 -
423 + );
817 424 } // End is_category()
818 -
819 425 // Blocks with BLOG-INDEX selected.
820 - else if ( is_home() )
821 - {
426 + else if (is_home()) {
822 427 $filters->pinPoint |= CJTBlockModel::PINS_POSTS_BLOG_INDEX;
823 428 }
824 - else if ( is_search() )
825 - {
429 + else if (is_search()) {
826 430 $filters->pinPoint |= CJTBlockModel::PINS_SEARCH;
827 431 }
828 - else if ( is_tag() )
829 - {
432 + else if (is_tag()) {
830 433 $filters->pinPoint |= CJTBlockModel::PINS_TAG;
831 434 }
832 - else if ( is_author() )
833 - {
435 + else if (is_author()) {
834 436 $filters->pinPoint |= CJTBlockModel::PINS_AUTHOR;
835 437 }
836 - else if ( is_archive() )
837 - {
438 + else if (is_archive()) {
838 439 $filters->pinPoint |= CJTBlockModel::PINS_ARCHIVE;
839 440 }
840 - else if ( is_404() )
841 - {
441 + else if (is_404()) {
842 442 $filters->pinPoint |= CJTBlockModel::PINS_404_ERROR;
843 443 }
844 -
845 444 }
846 -
847 - $this->filters = $this->onsetfilters( $filters );
848 -
445 + $this->filters = $this->onsetfilters($filters);
849 446 }
850 -
447 +
851 448 /**
852 - * Wordpress do shortcode callback for
853 - * CJT Shortcodes ([cjtoolbox ....])!
854 - *
855 - * This method role is to load the shortcode routines
856 - * in order to handle the request.
857 - *
858 - * It doesn't do anything except deferring the shortcode
859 - * codes from loaded until shortcode is really used!
860 - *
449 + * put your comment there...
450 + *
861 451 * @param mixed $attributes
862 452 */
863 - public function shortcode($attributes, $content) {
864 - // Instantiate Shortcode handler class.
865 - cssJSToolbox::import('controllers:coupling:shortcode:shortcode.php');
866 - $shortcode = new CJT_Controllers_Coupling_Shortcode($attributes, $content);
867 - // Return Shortcode replacement!
868 - return ((string) $shortcode);
453 + public function shortcode($attributes) {
454 + // Initialize vars.
455 + $replacement = '';
456 + // Default Class.
457 + if (!isset($attributes['class'])) {
458 + $class = 'block';
459 + }
460 + switch ($class) {
461 + case 'block':
462 + // Get is the default "operation"!
463 + if (!isset($attributes['op'])) {
464 + $attributes['op'] = 'get';
465 + }
466 + switch ($attributes['op']) {
467 + case 'get':
468 + // Import dependecies.
469 + cssJSToolbox::import('framework:db:mysql:xtable.inc.php');
470 + // Output block if 'force="true" or only if it wasn't already in the header/footer!
471 + if ((((isset($attributes['force'])) && ($attributes['force'] == "true")) || !in_array($attributes['id'], $this->onActionIds))) {
472 + // Id is being used!
473 + if ((isset($attributes['force'])) && ($attributes['force'] != 'true')) {
474 + $this->onActionIds[] = (int) $attributes['id'];
475 + }
476 + // Get block code.
477 + $block = CJTxTable::getInstance('block')
478 + ->set('id', $attributes['id'])
479 + ->load();
480 + // Only ACTIVE blocks!
481 + if ($block->get('state') != 'active') {
482 + return;
483 + }
484 + $replacement = $block->get('code');
485 + }
486 + break;
487 + }
488 + break;
489 + default:
490 + $replacement = cssJSToolbox::getText('Shortcode Type is not supported!! Only (block) type is currently available!!!');
491 + break;
492 + }
493 + return $replacement;
869 494 }
870 -
871 - /**
872 - * put your comment there...
873 - *
874 - */
875 - public static function & theInstance() {
876 - return self::$instance;
877 - }
878 -
495 +
879 496 } // End class.
880 497
881 498 // Hookable!
882 499 CJTBlocksCouplingController::define('CJTBlocksCouplingController', array('hookType' => CJTWordpressEvents::HOOK_FILTER));