PluginProbe
CSS & JavaScript Toolbox / 7.1
CSS & JavaScript Toolbox v7.1
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 / coupling / shortcode / block / block.php

block.php in CSS & JavaScript Toolbox 7.1, at controllers/coupling/shortcode/block/block.php

135 lines 4.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 *
4 */
5
6 // Disallow direct access.
7 defined('ABSPATH') or die("Access denied");
8
9 /**
10 * Handle block Shortcode.
11 */
12 class CJT_Controllers_Coupling_Shortcode_Block extends CJTHookableClass {
13
14 /**
15 * put your comment there...
16 *
17 * @var mixed
18 */
19 protected $attributes;
20
21 /**
22 * put your comment there...
23 *
24 * @var mixed
25 */
26 protected $content = null;
27
28 /**
29 * put your comment there...
30 *
31 * @var mixed
32 */
33 protected $options = array('force' => 'true', 'tag' => 'span');
34
35 /**
36 * put your comment there...
37 *
38 * @var mixed
39 */
40 protected $parameters = array();
41
42 /**
43 * put your comment there...
44 *
45 * @param mixed $attributes
46 * @param mixed $content
47 * @return CJT_Controllers_Coupling_Shortcode_Block
48 */
49 public function __construct($attributes, $content) {
50 // Hookable initiaization.
51 parent::__construct();
52 // Initialize.
53 $this->attributes = $attributes;
54 $this->content = $content;
55 }
56
57 /**
58 * put your comment there...
59 *
60 */
61 public function __toString() {
62 // Initialize.
63 $replacement = '';
64 $model = CJTModel::getInstance('coupling');
65 // Get shortcode options.
66 $this->options = array_merge($this->options, array_intersect_key($this->attributes, $this->options));
67 // Get shortcode parameters.
68 $this->parameters = array_diff_key($this->attributes, array_flip(array('force', 'tag', 'name', 'id')));
69 // Get Block fields to be used to query the block.
70 $blockQueryFields = array_intersect_key($this->attributes, array_flip(array('id', 'name')));
71 $coupling =& CJTBlocksCouplingController::theInstance();
72 // Import dependecies.
73 cssJSToolbox::import('framework:db:mysql:xtable.inc.php', 'framework:php:evaluator:evaluator.inc.php');
74 // Query block.
75 $block = CJTxTable::getInstance('block')
76 ->setData($blockQueryFields) // Set Creteria fields!
77 ->load(array_keys($blockQueryFields)); // Load using Creteria fields.
78 // Get block code if exists and is active block.
79 if ($block->get('id')) {
80 if ($block->get('state') == 'active') {
81 // Get stdCLass copy.
82 $block = $block->getData();
83 // Output block if 'force="true" or only if it wasn't already in the header/footer!
84 if (($this->options['force'] == 'true') || !in_array($block->id, $coupling->getOnActionIds())) {
85 // Id is being used!
86 $coupling->addOnActionIds((int) $block->id);
87 // Retrieve block code-files.
88 $block->code = $model->getBlockCode($block->id);
89 // Import Executable (PHP and HTML) templates.
90 $block->code = $block->code . $model->getExecTemplatesCode($block->id);
91 // CJT Block Standard Parameters object.
92 $spi = new CJT_Framework_Developer_Interface_Block_Shortcode_Shortcode($block, $this->parameters, $this->content);
93 // Get block code, execute it as PHP!
94 $blockCode = CJTPHPCodeEvaluator::getInstance($block)->exec(array('cb' => $spi))->getOutput();
95 // CJT Shortcode markup interface (CSMI)!
96 // CSMI is HTML markup to identify the CJT block Shortcode replacement.
97 $replacement = "<{$this->options['tag']} id='{$spi->containerElementId()}' class='csmi csmi-bid-{$block->id} csmi-{$block->name}'>{$this->content}{$blockCode}</{$this->options['tag']}>";
98 // Get linked templates.
99 $linkedStylesheets = '';
100 $templates = $model->getLinkedTemplates($block->id);
101 $reverseTypes = array_flip(CJTCouplingModel::$templateTypes);
102 // Enqueue all scripts & Direct Output for all Style Sheets!
103 foreach ($templates as $template) {
104 // Get Template type name.
105 $typeName = $reverseTypes[$template->type];
106 /**
107 * @var WP_Dependencies
108 */
109 $queue = $model->getQueueObject($typeName);
110 if (!in_array($template->queueName, $queue->done)) {
111 if (!isset($queue->registered[$template->queueName])) {
112 $queue->add($template->queueName, "/{$template->file}", null, $template->version, 1);
113 }
114 // Enqueue template!
115 $queue->enqueue($template->queueName);
116 }
117 }
118 // Prepend linked Stylesheets to the replacement.
119 if (isset($linkedStylesheets)) {
120 $replacement = "<style type='text/css'>{$linkedStylesheets}</style>{$replacement}";
121 }
122 }
123 }
124 }
125 else { // Invalid Shortcode block query!
126 $replacement = cssJSToolbox::getText('Could not find block specified! Please check out the Shortcode parameters.');
127 }
128 // Return shortcode replacement string.
129 return $replacement;
130 }
131
132 } // End class.
133
134 // Hookable!
135 CJT_Controllers_Coupling_Shortcode_Block::define('CJT_Controllers_Coupling_Shortcode_Block');