Issues (3083)

htdocs/class/theme_blocks.php (1 issue)

1
<?php
2
/**
3
 * xos_logos_PageBuilder component class file
4
 *
5
 * You may not change or alter any portion of this comment or credits
6
 * of supporting developers from this source code or any supporting source code
7
 * which is considered copyrighted (c) material of the original comment or credit authors.
8
 * This program is distributed in the hope that it will be useful,
9
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
11
 *
12
 * @copyright       (c) 2000-2016 XOOPS Project (www.xoops.org)
13
 * @license             GNU GPL 2 (https://www.gnu.org/licenses/gpl-2.0.html)
14
 * @author              Skalpa Keo <[email protected]>
15
 * @since               2.3.0
16
 * @package             kernel
17
 */
18
19
/**
20
 * This file cannot be requested directly
21
 */
22
defined('XOOPS_ROOT_PATH') || exit('Restricted access');
23
24
include_once $GLOBALS['xoops']->path('class/xoopsblock.php');
25
include_once $GLOBALS['xoops']->path('class/template.php');
26
27
/**
28
 * xos_logos_PageBuilder main class
29
 *
30
 * @package    xos_logos
31
 * @subpackage xos_logos_PageBuilder
32
 * @author     Skalpa Keo
33
 * @since      2.3.0
34
 */
35
class xos_logos_PageBuilder
36
{
37
    public $theme  = false;
38
    public $blocks = array();
39
40
    /**
41
     * xos_logos_PageBuilder::xoInit()
42
     *
43
     * @param array $options
44
     *
45
     * @return bool
46
     */
47
    public function xoInit($options = array())
48
    {
49
        $this->retrieveBlocks();
50
        if ($this->theme) {
51
            $this->theme->template->assignByRef('xoBlocks', $this->blocks);
52
        }
53
54
        return true;
55
    }
56
57
    /**
58
     * Called before a specific zone is rendered
59
     * @param string $zone
60
     */
61
    public function preRender($zone = '')
62
    {
63
    }
64
65
    /**
66
     * Called after a specific zone is rendered
67
     * @param string $zone
68
     */
69
    public function postRender($zone = '')
70
    {
71
    }
72
73
    /**
74
     * xos_logos_PageBuilder::retrieveBlocks()
75
     *
76
     * @return void
77
     */
78
    public function retrieveBlocks()
79
    {
80
        global $xoopsConfig;
81
        $xoopsPreload = XoopsPreload::getInstance();
82
83
        $startMod = ($xoopsConfig['startpage'] == '--') ? 'system' : $xoopsConfig['startpage'];
84
        if (isset($GLOBALS['xoopsModule']) && is_object($GLOBALS['xoopsModule'])) {
85
            list($mid, $dirname) = array(
86
                $GLOBALS['xoopsModule']->getVar('mid'),
87
                $GLOBALS['xoopsModule']->getVar('dirname'));
88
            $isStart = (substr($_SERVER['PHP_SELF'], -9) === 'index.php' && $xoopsConfig['startpage'] == $dirname && empty($_SERVER['QUERY_STRING']));
89
        } else {
90
            list($mid, $dirname) = array(
91
                0,
92
                'system');
93
            $isStart = !empty($GLOBALS['xoopsOption']['show_cblock']);
94
        }
95
96
        $groups = (isset($GLOBALS['xoopsUser']) && is_object($GLOBALS['xoopsUser'])) ? $GLOBALS['xoopsUser']->getGroups() : array(
97
            XOOPS_GROUP_ANONYMOUS);
98
99
        $oldzones = array(
100
            XOOPS_SIDEBLOCK_LEFT          => 'canvas_left',
101
            XOOPS_SIDEBLOCK_RIGHT         => 'canvas_right',
102
            XOOPS_CENTERBLOCK_LEFT        => 'page_topleft',
103
            XOOPS_CENTERBLOCK_CENTER      => 'page_topcenter',
104
            XOOPS_CENTERBLOCK_RIGHT       => 'page_topright',
105
            XOOPS_CENTERBLOCK_BOTTOMLEFT  => 'page_bottomleft',
106
            XOOPS_CENTERBLOCK_BOTTOM      => 'page_bottomcenter',
107
            XOOPS_CENTERBLOCK_BOTTOMRIGHT => 'page_bottomright',
108
            XOOPS_FOOTERBLOCK_LEFT        => 'footer_left',
109
            XOOPS_FOOTERBLOCK_RIGHT       => 'footer_right',
110
            XOOPS_FOOTERBLOCK_CENTER      => 'footer_center',
111
            XOOPS_FOOTERBLOCK_ALL         => 'footer_all');
112
113
        foreach ($oldzones as $zone) {
114
            $this->blocks[$zone] = array();
115
        }
116
        if ($this->theme) {
117
            $template =& $this->theme->template;
118
            $backup   = array(
119
                $template->caching,
120
                $template->cache_lifetime);
121
        } else {
122
            $template = null;
123
            $template = new XoopsTpl();
124
        }
125
        $xoopsblock = new XoopsBlock();
126
        $block_arr  = array();
127
        $block_arr  = $xoopsblock->getAllByGroupModule($groups, $mid, $isStart, XOOPS_BLOCK_VISIBLE);
0 ignored issues
show
Deprecated Code introduced by
The function XoopsBlock::getAllByGroupModule() has been deprecated: (This also appears, dead, in XoopsBlockHandler) ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-deprecated  annotation

127
        $block_arr  = /** @scrutinizer ignore-deprecated */ $xoopsblock->getAllByGroupModule($groups, $mid, $isStart, XOOPS_BLOCK_VISIBLE);

This function has been deprecated. The supplier of the function has supplied an explanatory message.

The explanatory message should give you some clue as to whether and when the function will be removed and what other function to use instead.

Loading history...
128
        $xoopsPreload->triggerEvent('core.class.theme_blocks.retrieveBlocks', array(&$this, &$template, &$block_arr));
129
        foreach ($block_arr as $block) {
130
            $side = $oldzones[$block->getVar('side')];
131
            if ($var = $this->buildBlock($block, $template)) {
132
                $this->blocks[$side][$var['id']] = $var;
133
            }
134
        }
135
        if ($this->theme) {
136
            list($template->caching, $template->cache_lifetime) = $backup;
137
        }
138
    }
139
140
    /**
141
     * xos_logos_PageBuilder::generateCacheId()
142
     *
143
     * @param  mixed $cache_id
144
     * @return mixed
145
     */
146
    public function generateCacheId($cache_id)
147
    {
148
        if ($this->theme) {
149
            $cache_id = $this->theme->generateCacheId($cache_id);
150
        }
151
152
        return $cache_id;
153
    }
154
155
    /**
156
     * xos_logos_PageBuilder::buildBlock()
157
     *
158
     * @param  mixed $xobject
159
     * @param  mixed $template
160
     * @return array|bool
161
     */
162
    public function buildBlock($xobject, &$template)
163
    {
164
        // The lame type workaround will change
165
        // bid is added temporarily as workaround for specific block manipulation
166
        $block = array(
167
            'id'      => $xobject->getVar('bid'),
168
            'module'  => $xobject->getVar('dirname'),
169
            'title'   => $xobject->getVar('title'),
170
            // 'name'        => strtolower( preg_replace( '/[^0-9a-zA-Z_]/', '', str_replace( ' ', '_', $xobject->getVar( 'name' ) ) ) ),
171
            'weight'  => $xobject->getVar('weight'),
172
            'lastmod' => $xobject->getVar('last_modified'));
173
174
        // title is a comment, don't show it
175
        if (0 === strpos($block['title'], '// ')) {
176
            $block['title'] = '';
177
        }
178
179
        $bcachetime = (int)$xobject->getVar('bcachetime');
180
        if (empty($bcachetime)) {
181
            $template->caching = 0;
182
        } else {
183
            $template->caching        = 2;
184
            $template->cache_lifetime = $bcachetime;
185
        }
186
        $template->setCompileId($xobject->getVar('dirname', 'n'));
187
        $tplName = ($tplName = $xobject->getVar('template')) ? "db:$tplName" : 'db:system_block_dummy.tpl';
188
        $cacheid = $this->generateCacheId('blk_' . $xobject->getVar('bid'));
189
190
        $xoopsLogger = XoopsLogger::getInstance();
191
        if (!$bcachetime || !$template->isCached($tplName, $cacheid)) {
192
193
            //Get theme metas
194
            if ($this->theme && $bcachetime) {
195
                foreach ($this->theme->metas as $type => $value) {
196
                    $old[$type] = $this->theme->metas[$type];
197
                }
198
            }
199
200
            //build block
201
            $xoopsLogger->addBlock($xobject->getVar('name'));
202
            if ($bresult = $xobject->buildBlock()) {
203
                $template->assign('block', $bresult);
204
                $block['content'] = $template->fetch($tplName, $cacheid);
205
            } else {
206
                $block = false;
207
            }
208
209
            //check if theme added new metas
210
            if ($this->theme && $bcachetime) {
211
                $metas = array();
212
                foreach ($this->theme->metas as $type => $value) {
213
                    $dif = array_diff_key($this->theme->metas[$type], $old[$type]);
214
                    if (count($dif)) {
215
                        $metas[$type] = $dif;
216
                    }
217
                }
218
                if (count($metas)) {
219
                    xoops_load('xoopscache');
220
                    $cache = XoopsCache::getInstance();
221
                    $cache->write($cacheid, $metas);
222
                }
223
            }
224
        } else {
225
            $xoopsLogger->addBlock($xobject->getVar('name'), true, $bcachetime);
226
            $block['content'] = $template->fetch($tplName, $cacheid);
227
        }
228
229
        //add block cached metas
230
        if ($this->theme && $bcachetime) {
231
            xoops_load('xoopscache');
232
            $cache = XoopsCache::getInstance();
233
            if ($metas = $cache->read($cacheid)) {
234
                foreach ($metas as $type => $value) {
235
                    $this->theme->metas[$type] = array_merge($this->theme->metas[$type], $metas[$type]);
236
                }
237
            }
238
        }
239
240
        $template->setCompileId();
241
242
        return $block;
243
    }
244
}
245