PluginProbe
CSS & JavaScript Toolbox / 6.0.9
CSS & JavaScript Toolbox v6.0.9
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 +177 -562 11.36.0.9 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.
@@ -522,26 +291,16 @@
522 291 $port = ($_SERVER["SERVER_PORT"] != "80") ? ":{$_SERVER["SERVER_PORT"]}" : '';
523 292 // Request URI.
524 293 $requestURI = $_SERVER['REQUEST_URI'];
525 294 // Final URL.
526 - //$url = "{$protocol}{$host}{$port}{$requestURI}";
527 - // Removing port segment from the URL as it is causing bugs.
528 - $url = "{$protocol}{$host}{$requestURI}";
295 + $url = "{$protocol}{$host}{$port}{$requestURI}";
529 296 return $url;
530 297 }
531 -
298 +
532 299 /**
533 300 * put your comment there...
534 - *
301 + *
535 302 */
536 - public function hasOnActionIds() {
537 - return !empty($this->onActionIds);
538 - }
539 -
540 - /**
541 - * put your comment there...
542 - *
543 - */
544 303 public function initCoupling() {
545 304 // For some reasons wp action is fired twice.
546 305 // The wrong call won't has $wp_query object set,
547 306 // but this is only valid at Front end.
@@ -547,26 +306,17 @@
547 306 // but this is only valid at Front end.
548 307 if (!is_admin() && !$GLOBALS['wp_query']) {
549 308 return;
550 309 }
551 - // Get current application hook prefix.
552 - $actionsPrefix = is_admin() ? 'admin' : 'wp';
553 -
554 310 // Get cache or get blocks if not cached.
555 311 // If there is no cache or no blocks for output
556 312 // do nothing.
557 313 if ($this->getCached() || $this->getBlocks()) {
558 -
314 + $actionsPrefix = is_admin() ? 'admin' : 'wp';
559 315 // Output blocks on various locations!
560 - $this->hookAttacher->bind();
561 -
562 - // Links templates & styloes!
563 - add_action("{$actionsPrefix}_enqueue_scripts", array(&$this, 'linkTemplates'), 30);
564 - 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);
565 318 }
566 -
567 - // Link style sheet in footer required custom implementation.
568 - add_action("{$actionsPrefix}_print_footer_scripts", array(&$this, 'linkFooterStyleSheets'), 9);
569 319 // Make sure this is executed only once.
570 320 // Sometimes wp hook run on backend and sometimes its not.
571 321 // This method handle both front and backend requests.
572 322 // Simply remove all hooks to ensure its run only one time.
@@ -572,186 +322,73 @@
572 322 // Simply remove all hooks to ensure its run only one time.
573 323 remove_action('wp', array(&$this, 'initCoupling'));
574 324 remove_action('admin_init', array(&$this, 'initCoupling'));
575 325 }
576 -
326 +
577 327 /**
578 328 * put your comment there...
579 - *
329 + *
580 330 */
581 - public function linkFooterStyleSheets() {
582 - // Initialize.
583 - $styles = array();
584 - // Get queued style sheets!
585 - global $wp_styles;
586 - $queuedStyles =& $wp_styles->queue;
587 - // Process only 'cjt' templates,
588 - foreach ($queuedStyles as $index => $styleName) {
589 - if (strpos($styleName, 'cjt-css-template-') === 0) {
590 - // Get style name src file, prepend to Wordpress absolute path.
591 - $style = $wp_styles->registered[$styleName];
592 - $styles[] = home_url($style->src);
593 - // Stop Wordpress from output <link> tag outside head tag
594 - // as it has no effect.
595 - unset($queuedStyles[$index]);
596 - }
597 - }
598 - // Enqueue Style Sheet loader javascript if there is any
599 - // styles need to be loaded.
600 - if (!empty($styles)) {
601 - // jQuery is dpendency object required by the loader.
602 - wp_enqueue_script('jquery');
603 - // Enqueue footer style sheet loader.
604 - wp_enqueue_script('cjt-coupling-footer-css-loader', cssJSToolbox::getURI('controllers:coupling:js:footer-stylesheet-loader.js'));
605 - // Output JavaScript array to be filled with the styles!
606 - $jsStyleSheetsList = json_encode($styles);
607 - require cssJSToolbox::resolvePath('controllers:coupling:html:load-footer-style.html.php');
608 - }
609 - }
610 -
611 - /**
612 - * put your comment there...
613 - *
614 - */
615 - public function linkTemplates() {
331 + public function outputBlocks() {
332 + // Derived location name from wordpress filter name.
616 333 $currentFilter = current_filter();
617 - // Derived template Type from Wordpress filter.
618 - $filterFor = explode('_', $currentFilter); $filterFor = array_pop($filterFor);
619 - $type = CJTCouplingModel::$templateTypes[$filterFor];
620 - // Following vars are referenced based on the current type.
621 - $templates = isset($this->templates[$type]) ? $this->templates[$type] : array();
622 - // Filering!
623 - $templates = $this->{"onlink{$filterFor}"}($templates);
624 - /**
625 - * @var WP_Dependencies
626 - */
627 - $queue = $this->model->getQueueObject($filterFor);
628 - // Add templates to the queye.
629 - foreach ($templates as $template) {
630 - // Registery only if not yet registered.
631 - $template = $this->{"onqueue{$type}"}($template);
632 - if (!isset($queue->registered[$template->queueName])) {
633 - $queue->add($template->queueName, "/{$template->file}", null, $template->version);
634 - }
635 - // Always make sure the template is queued.
636 - $queue->enqueue($template->queueName);
637 - }
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);
638 343 }
639 -
344 +
640 345 /**
641 346 * put your comment there...
642 - *
347 + *
643 348 */
644 - public function outputBlocks() {
645 -
646 - $hooks = $this->hookAttacher->getHooksByFilterName(current_filter());
647 -
648 - foreach ($hooks as $hook) {
649 -
650 - echo $this->onoutput($this->blocks['code'][$hook['locationName']], $hook['locationName']);
651 - }
652 -
653 - }
654 -
655 - /**
656 - * put your comment there...
657 - *
658 - */
659 - protected function setRequestFilters()
660 - {
349 + protected function setRequestFilters() {
661 350 // Get request blocks.
662 - $filters = $this->ondefaultfilters( ( object ) array
663 - (
664 -
351 + $filters = $this->ondefaultfilters((object) array(
665 352 'pinPoint' => 0x00000000,
666 -
667 353 'customPins' => array(),
668 -
669 - 'moreToOrder' => array(),
670 -
671 - 'currentObject' => null,
672 -
673 - 'currentCustomPin' => 0,
674 -
675 - 'params' => array(),
676 -
677 - ) );
678 -
679 - if ( is_admin() )
680 - {
354 + ));
355 + if (is_admin()) {
681 356 // Include all backend blocks.
682 357 $filters->pinPoint |= CJTBlockModel::PINS_BACKEND;
683 358 }
684 - else
685 - {
359 + else {
686 360 $filters->pinPoint |= CJTBlockModel::PINS_FRONTEND;
687 -
688 361 // Pages.
689 - if ( is_page() )
690 - {
362 + if (is_page()) {
691 363 // Blocks with ALL PAGES selected.
692 364 $filters->pinPoint |= CJTBlockModel::PINS_PAGES_ALL_PAGES;
693 -
694 - $filters->currentObject = $GLOBALS[ 'post' ];
695 - $filters->currentCustomPin = CJTBlockModel::PINS_PAGES_CUSTOM_PAGE;
696 -
697 365 // Blocks with PAGE-ID selected.
698 - $filters->customPins[ ] = array
699 - (
366 + $filters->customPins[] = array(
700 367 'pin' => 'pages',
701 -
702 - 'pins' => array( $filters->currentObject->ID ),
703 -
368 + 'pins' => array($GLOBALS['post']->ID),
704 369 'flag' => CJTBlockModel::PINS_PAGES_CUSTOM_PAGE,
705 -
706 370 );
707 -
708 371 // Blocks with FRONT-PAGE selected.
709 - if ( is_front_page() )
710 - {
372 + if (is_front_page()) {
711 373 $filters->pinPoint |= CJTBlockModel::PINS_PAGES_FRONT_PAGE;
712 374 }
713 -
714 - /**
715 - * In order for metabox block to get in the output we need
716 - * to add metabox order for it.
717 - * @see CJTBlocksCouplingController::getBlocks.
718 - */
719 - $metabox = CJTModel::create( 'metabox', array( $filters->currentObject->ID ) );
720 -
721 - $filters->moreToOrder[ ][ 1 ] = $metabox->getMetaboxId();
722 -
723 375 } // End is_page()
724 -
725 - else if ( is_attachment() )
726 - {
376 + else if (is_attachment()) {
727 377 $filters->pinPoint |= CJTBlockModel::PINS_ATTACHMENT;
728 378 }
729 379 // Posts.
730 - else if ( is_single() )
731 - {
380 + else if (is_single()) {
732 381 // Blocks with ALL POSTS & ALL CATEGORIES selected.
733 382 $filters->pinPoint |= CJTBlockModel::PINS_POSTS_ALL_POSTS | CJTBlockModel::PINS_CATEGORIES_ALL_CATEGORIES;
734 -
735 - $filters->currentObject = $GLOBALS[ 'post' ];
736 - $filters->currentCustomPin = CJTBlockModel::PINS_POSTS_CUSTOM_POST;
737 -
738 383 // Blocks with POST-ID selected.
739 -
740 - $filters->customPins[ ] = array
741 - (
742 -
384 + $filters->customPins[] = array(
743 385 'pin' => 'posts',
744 -
745 - 'pins' => array( $filters->currentObject->ID ),
746 -
386 + 'pins' => array($GLOBALS['post']->ID),
747 387 'flag' => CJTBlockModel::PINS_POSTS_CUSTOM_POST,
748 -
749 388 );
750 -
751 - // Include POST PARENT CATRGORIES blocks.
752 - $parentCategoriesIds = wp_get_post_categories( $filters->currentObject->ID, array( 'fields' => 'ids' ) );
753 -
389 + // Include POST PARENT CATRGORIES blocks.
390 + $parentCategoriesIds = wp_get_post_categories($GLOBALS['post']->ID, array('fields' => 'ids'));
754 391 /**
755 392 * Custom-Posts just added "ON THE RUN/FLY"
756 393 * Need simple fix by confirming that the post is belong to
757 394 * specific category or not.
@@ -757,128 +394,106 @@
757 394 * specific category or not.
758 395 * Custom posts NOW unlike Posts, it doesn't inherit parent
759 396 * taxonomis Code Blocks!!
760 397 */
761 - if ( ! empty( $parentCategoriesIds ) )
762 - {
763 -
764 - $filters->params[ 'hasCategories' ] = true;
765 - $filters->params[ 'parentCategories' ] = $parentCategoriesIds;
766 -
767 - $filters->customPins[ ] = array
768 - (
769 -
398 + if (!empty($parentCategoriesIds)) {
399 + $filters->customPins[] = array(
770 400 'pin' => 'categories',
771 -
772 401 'pins' => $parentCategoriesIds,
773 -
774 402 'flag' => CJTBlockModel::PINS_CATEGORIES_CUSTOM_CATEGORY,
775 -
776 403 );
777 -
778 404 }
779 -
780 - /**
781 - * In order for metabox block to get in the output we need
782 - * to add metabox order for it.
783 - * @see CJTBlocksCouplingController::getBlocks.
784 - */
785 - $metabox = CJTModel::create( 'metabox', array( $filters->currentObject->ID ) );
786 -
787 - $filters->moreToOrder[][ 1 ] = $metabox->getMetaboxId();
788 -
789 - /**
405 + /**
790 406 * @TODO check for recent posts Based on user configuration.
791 407 * Recent posts should be detcted by comparing
792 408 * user condifguration with post date.
793 409 */
794 - if ( 0 ) {
795 -
410 + if (0) {
411 +
796 412 }
797 413 } // End is_single()
798 -
799 414 // Categories.
800 - else if( is_category() )
801 - {
415 + else if(is_category()) {
802 416 // Blocks with ALL CATEGORIES selected.
803 417 $filters->pinPoint |= CJTBlockModel::PINS_CATEGORIES_ALL_CATEGORIES;
804 -
805 - $filters->currentObject = get_queried_object();
806 - $filters->currentCustomPin = CJTBlockModel::PINS_CATEGORIES_CUSTOM_CATEGORY;
807 -
808 418 // Blocks with CATEGORY-ID selected.
809 - $filters->customPins[] = array
810 - (
419 + $filters->customPins[] = array(
811 420 'pin' => 'categories',
812 -
813 - 'pins' => array( $filters->currentObject->term_id ),
814 -
421 + 'pins' => array(get_queried_object()->term_id),
815 422 'flag' => CJTBlockModel::PINS_CATEGORIES_CUSTOM_CATEGORY,
816 -
817 - );
818 -
423 + );
819 424 } // End is_category()
820 -
821 425 // Blocks with BLOG-INDEX selected.
822 - else if ( is_home() )
823 - {
426 + else if (is_home()) {
824 427 $filters->pinPoint |= CJTBlockModel::PINS_POSTS_BLOG_INDEX;
825 428 }
826 - else if ( is_search() )
827 - {
429 + else if (is_search()) {
828 430 $filters->pinPoint |= CJTBlockModel::PINS_SEARCH;
829 431 }
830 - else if ( is_tag() )
831 - {
432 + else if (is_tag()) {
832 433 $filters->pinPoint |= CJTBlockModel::PINS_TAG;
833 434 }
834 - else if ( is_author() )
835 - {
435 + else if (is_author()) {
836 436 $filters->pinPoint |= CJTBlockModel::PINS_AUTHOR;
837 437 }
838 - else if ( is_archive() )
839 - {
438 + else if (is_archive()) {
840 439 $filters->pinPoint |= CJTBlockModel::PINS_ARCHIVE;
841 440 }
842 - else if ( is_404() )
843 - {
441 + else if (is_404()) {
844 442 $filters->pinPoint |= CJTBlockModel::PINS_404_ERROR;
845 443 }
846 -
847 444 }
848 -
849 - $this->filters = $this->onsetfilters( $filters );
850 -
445 + $this->filters = $this->onsetfilters($filters);
851 446 }
852 -
447 +
853 448 /**
854 - * Wordpress do shortcode callback for
855 - * CJT Shortcodes ([cjtoolbox ....])!
856 - *
857 - * This method role is to load the shortcode routines
858 - * in order to handle the request.
859 - *
860 - * It doesn't do anything except deferring the shortcode
861 - * codes from loaded until shortcode is really used!
862 - *
449 + * put your comment there...
450 + *
863 451 * @param mixed $attributes
864 452 */
865 - public function shortcode($attributes, $content) {
866 - // Instantiate Shortcode handler class.
867 - cssJSToolbox::import('controllers:coupling:shortcode:shortcode.php');
868 - $shortcode = new CJT_Controllers_Coupling_Shortcode($attributes, $content);
869 - // Return Shortcode replacement!
870 - 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;
871 494 }
872 -
873 - /**
874 - * put your comment there...
875 - *
876 - */
877 - public static function & theInstance() {
878 - return self::$instance;
879 - }
880 -
495 +
881 496 } // End class.
882 497
883 498 // Hookable!
884 499 CJTBlocksCouplingController::define('CJTBlocksCouplingController', array('hookType' => CJTWordpressEvents::HOOK_FILTER));