PluginProbe
CSS & JavaScript Toolbox / trunk
CSS & JavaScript Toolbox vtrunk
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
css-javascript-toolbox / controllers / blocks-coupling.php

blocks-coupling.php in CSS & JavaScript Toolbox trunk, at controllers/blocks-coupling.php

886 lines 21.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * @version $ Id; blocks-coupling.php 21-03-2012 03:22:10 Ahmed Said $
4 */
5
6 // Disallow direct access.
7 defined('ABSPATH') or die("Access denied");
8
9 /**
10 * Applying Code blocks for the curren request.
11 *
12 * This controller is always loaded.
13 *
14 * The class resposibility is to output the code blocks
15 * tha associated with current request.
16 *
17 * @author Ahmed Said
18 * @version 6
19 */
20 class CJTBlocksCouplingController extends CJTController {
21
22 /**
23 * put your comment there...
24 *
25 * @var mixed
26 */
27 public $blocks = array(
28 'code' => array(),
29 'scripts' => array(),
30 );
31
32 /**
33 * put your comment there...
34 *
35 * @var mixed
36 */
37 protected $controllerInfo = array('model' => 'coupling');
38
39 /**
40 * put your comment there...
41 *
42 * @var mixed
43 */
44 protected $filters = null;
45
46 /**
47 * put your comment there...
48 *
49 * @var mixed
50 */
51 protected $hookAttacher;
52
53 /**
54 * put your comment there...
55 *
56 * @var mixed
57 */
58 protected static $instance = null;
59
60 /**
61 * put your comment there...
62 *
63 * @var mixed
64 */
65 private $onActionIds = array();
66
67 /**
68 * put your comment there...
69 *
70 * @var mixed
71 */
72 protected $onassigncouplingcallback = array('parameters' => array('callback'));
73
74 /**
75 * put your comment there...
76 *
77 * @var mixed
78 */
79 protected $onappendcode = array('parameters' => array('code'));
80
81 /**
82 * put your comment there...
83 *
84 * @var mixed
85 */
86 protected $onblockmatched = array('parameters' => array('block'));
87
88 /**
89 * put your comment there...
90 *
91 * @var mixed
92 */
93 protected $oncancelmatching = array('parameters' => array('matched'));
94
95 /**
96 * put your comment there...
97 *
98 * @var mixed
99 */
100 protected $ondefaultfilters = array('parameters' => array('filters'));
101
102 /**
103 * put your comment there...
104 *
105 * @var mixed
106 */
107 protected $ondo = array('parameters' => array('data', 'method', 'condition'));
108
109 /**
110 * put your comment there...
111 *
112 * @var mixed
113 */
114 protected $onblocksorder = array('parameters' => array('order'));
115
116 /**
117 * put your comment there...
118 *
119 * @var mixed
120 */
121 protected $onevalcodeblock = array( 'parameters' => array( 'keep', 'block' ) );
122
123 /**
124 * put your comment there...
125 *
126 * @var mixed
127 */
128 protected $ongetblocks = array('parameters' => array('blocks'));
129
130 /**
131 * put your comment there...
132 *
133 * @var mixed
134 */
135 protected $ongetcache = array('parameters' => array('cache'));
136
137 /**
138 * put your comment there...
139 *
140 * @var mixed
141 */
142 protected $ongetfilters = array('parameters' => array('filters'));
143
144 /**
145 * put your comment there...
146 *
147 * @var mixed
148 */
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 protected $onmatchingurls = array('parameters' => array('urls'));
178
179 /**
180 * put your comment there...
181 *
182 * @var mixed
183 */
184 protected $onnoblocks = array('hookType' => CJTWordpressEvents::HOOK_ACTION);
185
186 /**
187 * put your comment there...
188 *
189 * @var mixed
190 */
191 protected $onoutput = array('parameters' => array('code', 'location'));
192
193 /**
194 * put your comment there...
195 *
196 * @var mixed
197 */
198 protected $onprocess = array('hookType' => CJTWordpressEvents::HOOK_ACTION);
199
200 /**
201 * put your comment there...
202 *
203 * @var mixed
204 */
205 protected $onprocessblock = array('parameters' => array('block'));
206
207 /**
208 * put your comment there...
209 *
210 * @var mixed
211 */
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 protected $onsetfilters = array('parameters' => array('filters'));
227
228 /**
229 * put your comment there...
230 *
231 * @var mixed
232 */
233 protected $templates = array();
234
235 /**
236 * Initialize controller object.
237 *
238 * @see CJTController for more details
239 * @return void
240 */
241 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 // Initialize controller.
253 parent::__construct(false);
254
255 // Import related libraries
256 CJTModel::import('block');
257
258 // Not default action needed.
259 $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 // Initialize controller.
273 $initCouplingCallback = $this->onassigncouplingcallback(array(&$this, 'initCoupling'));
274 add_action('admin_init', $initCouplingCallback);
275 add_action($siteHook->tag, $initCouplingCallback, $siteHook->priority);
276
277 // Add Shortcode callbacks.
278 add_shortcode('cjtoolbox', array(&$this, 'shortcode'));
279 }
280
281 /**
282 * put your comment there...
283 *
284 * @param mixed $id
285 */
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 {
301 // Set request view filters used for querying database.
302 $this->setRequestFilters();
303
304 // Get blocks order. NOTE: This is all blocks order not only the queried/target blocks.
305 $blocksOrder = array();
306 $metaBoxesOrder = $this->onblocksorder( $this->model->getOrder() );
307
308 // 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
317 // Prepare request URL to match against Links & Expressions.
318 $linksRequestURL = self::getRequestURL();
319 $expressionsRequestURL = "{$linksRequestURL}?{$_SERVER['QUERY_STRING']}";
320
321 extract( $this->onmatchingurls( compact( 'linksRequestURL', 'expressionsRequestURL' ) ) );
322
323 // 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 {
343 $this->onnoblocks();
344
345 return false;
346
347 }
348
349 // Import related libraries.
350 cssJSToolbox::import( 'framework:php:evaluator:evaluator.inc.php' );
351
352 /**
353 * Iterator over all blocks by using they order.
354 * For each block get code and scripts.
355 */
356 $this->onprocess();
357
358 foreach ( $blocksOrder as $blockOrder )
359 {
360
361 $blockId = (int) $blockOrder[1];
362
363 // 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
369 /**
370 * Process Links & Expressions blocks.
371 * For better performace check only those with links and expressions flags.
372 */
373 if ( $block->blocksGroup & CJTBlockModel::PINS_LINK_EXPRESSION )
374 {
375 /**
376 * Initiliaze $matchedLink and $matchedExpression inside IF statment.
377 * Those variables need to refresh state at each block.
378 * If there is no link or expression flags, they will be FALSE.
379 * Otherwise they'll get the correct value inside each statement.
380 */
381 /// 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 );
386 }
387
388 /// Check if there is a matched expression.
389 if ( $matchedExpression = ( $block->blocksGroup & CJTBlockModel::PINS_EXPRESSIONS ) )
390 {
391 $expressions = explode("\n", $block->expressions);
392
393 foreach ( $expressions as $expression )
394 {
395 /// @TODO: Matches may be used later to evaulate variables inside code block.
396 if( $matchedExpression = @ preg_match( "/{$expression}/", $expressionsRequestURL ) )
397 {
398 break;
399 }
400
401 }
402
403 }
404
405 /**
406 * Exclude Links & Expressions Blocks that doesn't has a match.
407 * If there is no matched link or expression then exclude block.
408 */
409 if ( $this->oncancelmatching( ! ( $matchedExpression || $matchedLink ) ) )
410 {
411 continue;
412 }
413
414 }
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 if (trim($evaluatedCode) != ''):
434 global $post;
435 // Defensive: $post may be null in some contexts, avoid reading ->ID on null.
436 $checkMetaBlock = null;
437 if ( isset($post) && is_object($post) && isset($post->ID) ) {
438 $checkMetaBlock = get_post_meta($post->ID, '__CJT-BLOCK-ID', true);
439 }
440
441 if (!empty($checkMetaBlock) && $checkMetaBlock == $blockId):
442 $evaluatedCode = "\n\n<!-- CJT Meta Block ({$blockId}) - {$block->name} - START -->\n{$evaluatedCode}\n<!-- CJT Meta Block ({$blockId}) - {$block->name} - END -->\n\n";
443 else:
444 $evaluatedCode = "\n\n<!-- CJT Global Block ({$blockId}) - {$block->name} - START -->\n{$evaluatedCode}\n<!-- CJT Global Block ({$blockId}) - {$block->name} - END -->\n\n";
445 endif;
446 endif;
447 }
448
449 // Initialize block LOCATION array for the first time
450 if (!isset($this->blocks[ 'code' ][ $block->location ])) {
451
452 $this->blocks[ 'code' ][ $block->location ] = '';
453 }
454
455 $this->blocks[ 'code' ][ $block->location ] .= $this->onappendcode( $evaluatedCode );
456
457 // Store all used Ids in the CORRECT ORDER.
458 $this->addOnActionIds( $blockId );
459 }
460
461 }
462
463 }
464
465 $templates = $this->onActionIds ?
466 $this->model->getLinkedTemplates( $this->onActionIds ) :
467 array();
468
469 // Classisfy as we process Scripts and Styles separatly (different hooks!).
470 foreach ( $this->onlinkedtemplates( $templates ) as $id => $template )
471 {
472 // Filer template!
473 extract( $this->onlinktemplate( compact( 'template', 'id' ) ) );
474
475 $this->templates[ $template->type ][ $id ] = $template;
476 }
477
478
479 return true;
480 }
481
482 /**
483 * put your comment there...
484 *
485 */
486 public function getCached() {
487 // Cache is not implemented yet might be supported by extenal Extensions!
488 return $this->ongetcache(false);
489 }
490
491 /**
492 * put your comment there...
493 *
494 */
495 public function getFilters() {
496 return $this->ongetfilters($this->filters);
497 }
498
499 /**
500 * put your comment there...
501 *
502 */
503 public function & getHooksAttacher() {
504 return $this->hookAttacher;
505 }
506
507 /**
508 * put your comment there...
509 *
510 */
511 public function getOnActionIds() {
512 return $this->onActionIds;
513 }
514
515 /**
516 * put your comment there...
517 *
518 */
519 public static function getRequestURL() {
520 // URL Protocol.
521 $protocol = 'http' . ((isset($_SERVER["HTTPS"]) && ($_SERVER["HTTPS"] == "on")) ? 's' : '') . '://';
522 // Host name & port.
523 $host = $_SERVER['HTTP_HOST'];
524 $port = ($_SERVER["SERVER_PORT"] != "80") ? ":{$_SERVER["SERVER_PORT"]}" : '';
525 // Request URI.
526 $requestURI = $_SERVER['REQUEST_URI'];
527 // Final URL.
528 //$url = "{$protocol}{$host}{$port}{$requestURI}";
529 // Removing port segment from the URL as it is causing bugs.
530 $url = "{$protocol}{$host}{$requestURI}";
531 return $url;
532 }
533
534 /**
535 * put your comment there...
536 *
537 */
538 public function hasOnActionIds() {
539 return !empty($this->onActionIds);
540 }
541
542 /**
543 * put your comment there...
544 *
545 */
546 public function initCoupling() {
547 // For some reasons wp action is fired twice.
548 // The wrong call won't has $wp_query object set,
549 // but this is only valid at Front end.
550 if (!is_admin() && !$GLOBALS['wp_query']) {
551 return;
552 }
553 // Get current application hook prefix.
554 $actionsPrefix = is_admin() ? 'admin' : 'wp';
555
556 // Get cache or get blocks if not cached.
557 // If there is no cache or no blocks for output
558 // do nothing.
559 if ($this->getCached() || $this->getBlocks()) {
560
561 // Output blocks on various locations!
562 $this->hookAttacher->bind();
563
564 // Links templates & styloes!
565 add_action("{$actionsPrefix}_enqueue_scripts", array(&$this, 'linkTemplates'), 30);
566 add_action("{$actionsPrefix}_print_styles", array(&$this, 'linkTemplates'), 30);
567 }
568
569 // Link style sheet in footer required custom implementation.
570 add_action("{$actionsPrefix}_print_footer_scripts", array(&$this, 'linkFooterStyleSheets'), 9);
571 // Make sure this is executed only once.
572 // Sometimes wp hook run on backend and sometimes its not.
573 // This method handle both front and backend requests.
574 // Simply remove all hooks to ensure its run only one time.
575 remove_action('wp', array(&$this, 'initCoupling'));
576 remove_action('admin_init', array(&$this, 'initCoupling'));
577 }
578
579 /**
580 * put your comment there...
581 *
582 */
583 public function linkFooterStyleSheets() {
584 // Initialize.
585 $styles = array();
586 // Get queued style sheets!
587 global $wp_styles;
588 $queuedStyles =& $wp_styles->queue;
589 // Process only 'cjt' templates,
590 foreach ($queuedStyles as $index => $styleName) {
591 if (strpos($styleName, 'cjt-css-template-') === 0) {
592 // Get style name src file, prepend to Wordpress absolute path.
593 $style = $wp_styles->registered[$styleName];
594 $styles[] = home_url($style->src);
595 // Stop Wordpress from output <link> tag outside head tag
596 // as it has no effect.
597 unset($queuedStyles[$index]);
598 }
599 }
600 // Enqueue Style Sheet loader javascript if there is any
601 // styles need to be loaded.
602 if (!empty($styles)) {
603 // jQuery is dpendency object required by the loader.
604 wp_enqueue_script('jquery');
605 // Enqueue footer style sheet loader.
606 wp_enqueue_script('cjt-coupling-footer-css-loader', cssJSToolbox::getURI('controllers:coupling:js:footer-stylesheet-loader.js'));
607 // Output JavaScript array to be filled with the styles!
608 $jsStyleSheetsList = json_encode($styles);
609 require cssJSToolbox::resolvePath('controllers:coupling:html:load-footer-style.html.php');
610 }
611 }
612
613 /**
614 * put your comment there...
615 *
616 */
617 public function linkTemplates() {
618 $currentFilter = current_filter();
619 // Derived template Type from Wordpress filter.
620 $filterFor = explode('_', $currentFilter); $filterFor = array_pop($filterFor);
621 $type = CJTCouplingModel::$templateTypes[$filterFor];
622 // Following vars are referenced based on the current type.
623 $templates = isset($this->templates[$type]) ? $this->templates[$type] : array();
624 // Filering!
625 $templates = $this->{"onlink{$filterFor}"}($templates);
626 /**
627 * @var WP_Dependencies
628 */
629 $queue = $this->model->getQueueObject($filterFor);
630 // Add templates to the queye.
631 foreach ($templates as $template) {
632 // Registery only if not yet registered.
633 $template = $this->{"onqueue{$type}"}($template);
634 if (!isset($queue->registered[$template->queueName])) {
635 $queue->add($template->queueName, "/{$template->file}", null, $template->version);
636 }
637 // Always make sure the template is queued.
638 $queue->enqueue($template->queueName);
639 }
640 }
641
642 /**
643 * put your comment there...
644 *
645 */
646 public function outputBlocks() {
647
648 $hooks = $this->hookAttacher->getHooksByFilterName(current_filter());
649
650 foreach ($hooks as $hook) {
651
652 echo $this->onoutput($this->blocks['code'][$hook['locationName']], $hook['locationName']);
653 }
654
655 }
656
657 /**
658 * put your comment there...
659 *
660 */
661 protected function setRequestFilters()
662 {
663 // Get request blocks.
664 $filters = $this->ondefaultfilters( ( object ) array
665 (
666
667 'pinPoint' => 0x00000000,
668
669 'customPins' => array(),
670
671 'moreToOrder' => array(),
672
673 'currentObject' => null,
674
675 'currentCustomPin' => 0,
676
677 'params' => array(),
678
679 ) );
680
681 if ( is_admin() )
682 {
683 // Include all backend blocks.
684 $filters->pinPoint |= CJTBlockModel::PINS_BACKEND;
685 }
686 else
687 {
688 $filters->pinPoint |= CJTBlockModel::PINS_FRONTEND;
689
690 // Pages.
691 if ( is_page() )
692 {
693 // Blocks with ALL PAGES selected.
694 $filters->pinPoint |= CJTBlockModel::PINS_PAGES_ALL_PAGES;
695
696 $filters->currentObject = $GLOBALS[ 'post' ];
697 $filters->currentCustomPin = CJTBlockModel::PINS_PAGES_CUSTOM_PAGE;
698
699 // Blocks with PAGE-ID selected.
700 $filters->customPins[ ] = array
701 (
702 'pin' => 'pages',
703
704 'pins' => array( $filters->currentObject->ID ),
705
706 'flag' => CJTBlockModel::PINS_PAGES_CUSTOM_PAGE,
707
708 );
709
710 // Blocks with FRONT-PAGE selected.
711 if ( is_front_page() )
712 {
713 $filters->pinPoint |= CJTBlockModel::PINS_PAGES_FRONT_PAGE;
714 }
715
716 /**
717 * In order for metabox block to get in the output we need
718 * to add metabox order for it.
719 * @see CJTBlocksCouplingController::getBlocks.
720 */
721 $metabox = CJTModel::create( 'metabox', array( $filters->currentObject->ID ) );
722
723 $filters->moreToOrder[ ][ 1 ] = $metabox->getMetaboxId();
724
725 } // End is_page()
726
727 else if ( is_attachment() )
728 {
729 $filters->pinPoint |= CJTBlockModel::PINS_ATTACHMENT;
730 }
731 // Posts.
732 else if ( is_single() )
733 {
734 // Blocks with ALL POSTS & ALL CATEGORIES selected.
735 $filters->pinPoint |= CJTBlockModel::PINS_POSTS_ALL_POSTS | CJTBlockModel::PINS_CATEGORIES_ALL_CATEGORIES;
736
737 $filters->currentObject = $GLOBALS[ 'post' ];
738 $filters->currentCustomPin = CJTBlockModel::PINS_POSTS_CUSTOM_POST;
739
740 // Blocks with POST-ID selected.
741
742 $filters->customPins[ ] = array
743 (
744
745 'pin' => 'posts',
746
747 'pins' => array( $filters->currentObject->ID ),
748
749 'flag' => CJTBlockModel::PINS_POSTS_CUSTOM_POST,
750
751 );
752
753 // Include POST PARENT CATRGORIES blocks.
754 $parentCategoriesIds = wp_get_post_categories( $filters->currentObject->ID, array( 'fields' => 'ids' ) );
755
756 /**
757 * Custom-Posts just added "ON THE RUN/FLY"
758 * Need simple fix by confirming that the post is belong to
759 * specific category or not.
760 * Custom posts NOW unlike Posts, it doesn't inherit parent
761 * taxonomis Code Blocks!!
762 */
763 if ( ! empty( $parentCategoriesIds ) )
764 {
765
766 $filters->params[ 'hasCategories' ] = true;
767 $filters->params[ 'parentCategories' ] = $parentCategoriesIds;
768
769 $filters->customPins[ ] = array
770 (
771
772 'pin' => 'categories',
773
774 'pins' => $parentCategoriesIds,
775
776 'flag' => CJTBlockModel::PINS_CATEGORIES_CUSTOM_CATEGORY,
777
778 );
779
780 }
781
782 /**
783 * In order for metabox block to get in the output we need
784 * to add metabox order for it.
785 * @see CJTBlocksCouplingController::getBlocks.
786 */
787 $metabox = CJTModel::create( 'metabox', array( $filters->currentObject->ID ) );
788
789 $filters->moreToOrder[][ 1 ] = $metabox->getMetaboxId();
790
791 /**
792 * @TODO check for recent posts Based on user configuration.
793 * Recent posts should be detcted by comparing
794 * user condifguration with post date.
795 */
796 if ( 0 ) {
797
798 }
799 } // End is_single()
800
801 // Categories.
802 else if( is_category() )
803 {
804 // Blocks with ALL CATEGORIES selected.
805 $filters->pinPoint |= CJTBlockModel::PINS_CATEGORIES_ALL_CATEGORIES;
806
807 $filters->currentObject = get_queried_object();
808 $filters->currentCustomPin = CJTBlockModel::PINS_CATEGORIES_CUSTOM_CATEGORY;
809
810 // Blocks with CATEGORY-ID selected.
811 $filters->customPins[] = array
812 (
813 'pin' => 'categories',
814
815 'pins' => array( $filters->currentObject->term_id ),
816
817 'flag' => CJTBlockModel::PINS_CATEGORIES_CUSTOM_CATEGORY,
818
819 );
820
821 } // End is_category()
822
823 // Blocks with BLOG-INDEX selected.
824 else if ( is_home() )
825 {
826 $filters->pinPoint |= CJTBlockModel::PINS_POSTS_BLOG_INDEX;
827 }
828 else if ( is_search() )
829 {
830 $filters->pinPoint |= CJTBlockModel::PINS_SEARCH;
831 }
832 else if ( is_tag() )
833 {
834 $filters->pinPoint |= CJTBlockModel::PINS_TAG;
835 }
836 else if ( is_author() )
837 {
838 $filters->pinPoint |= CJTBlockModel::PINS_AUTHOR;
839 }
840 else if ( is_archive() )
841 {
842 $filters->pinPoint |= CJTBlockModel::PINS_ARCHIVE;
843 }
844 else if ( is_404() )
845 {
846 $filters->pinPoint |= CJTBlockModel::PINS_404_ERROR;
847 }
848
849 }
850
851 $this->filters = $this->onsetfilters( $filters );
852
853 }
854
855 /**
856 * Wordpress do shortcode callback for
857 * CJT Shortcodes ([cjtoolbox ....])!
858 *
859 * This method role is to load the shortcode routines
860 * in order to handle the request.
861 *
862 * It doesn't do anything except deferring the shortcode
863 * codes from loaded until shortcode is really used!
864 *
865 * @param mixed $attributes
866 */
867 public function shortcode($attributes, $content) {
868 // Instantiate Shortcode handler class.
869 cssJSToolbox::import('controllers:coupling:shortcode:shortcode.php');
870 $shortcode = new CJT_Controllers_Coupling_Shortcode($attributes, $content);
871 // Return Shortcode replacement!
872 return ((string) $shortcode);
873 }
874
875 /**
876 * put your comment there...
877 *
878 */
879 public static function & theInstance() {
880 return self::$instance;
881 }
882
883 } // End class.
884
885 // Hookable!
886 CJTBlocksCouplingController::define('CJTBlocksCouplingController', array('hookType' => CJTWordpressEvents::HOOK_FILTER));