Completed
Push — master ( dc2967...84a0ae )
by Richard
16s queued 11s
created

xos_logos_PageBuilder   A

Complexity

Total Complexity 38

Size/Duplication

Total Lines 208
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 38
eloc 106
c 1
b 0
f 0
dl 0
loc 208
rs 9.36

6 Methods

Rating   Name   Duplication   Size   Complexity  
A preRender() 0 2 1
A postRender() 0 2 1
A xoInit() 0 8 2
A generateCacheId() 0 7 2
F retrieveBlocks() 0 59 13
F buildBlock() 0 81 19
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 (http://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())
0 ignored issues
show
Unused Code introduced by
The parameter $options is not used and could be removed. ( Ignorable by Annotation )

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

47
    public function xoInit(/** @scrutinizer ignore-unused */ $options = array())

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
48
    {
49
        $this->retrieveBlocks();
50
        if ($this->theme) {
51
            $this->theme->template->assign_by_ref('xoBlocks', $this->blocks);
0 ignored issues
show
Bug introduced by
The property template does not exist on true.
Loading history...
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 = '')
0 ignored issues
show
Unused Code introduced by
The parameter $zone is not used and could be removed. ( Ignorable by Annotation )

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

61
    public function preRender(/** @scrutinizer ignore-unused */ $zone = '')

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
62
    {
63
    }
64
65
    /**
66
     * Called after a specific zone is rendered
67
     * @param string $zone
68
     */
69
    public function postRender($zone = '')
0 ignored issues
show
Unused Code introduced by
The parameter $zone is not used and could be removed. ( Ignorable by Annotation )

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

69
    public function postRender(/** @scrutinizer ignore-unused */ $zone = '')

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
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'];
0 ignored issues
show
Unused Code introduced by
The assignment to $startMod is dead and can be removed.
Loading history...
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;
0 ignored issues
show
Bug introduced by
The property template does not exist on true.
Loading history...
118
            $backup   = array(
119
                $template->caching,
120
                $template->cache_lifetime);
121
        } else {
122
            $template = null;
0 ignored issues
show
Unused Code introduced by
The assignment to $template is dead and can be removed.
Loading history...
123
            $template = new XoopsTpl();
124
        }
125
        $xoopsblock = new XoopsBlock();
126
        $block_arr  = array();
0 ignored issues
show
Unused Code introduced by
The assignment to $block_arr is dead and can be removed.
Loading history...
127
        $block_arr  = $xoopsblock->getAllByGroupModule($groups, $mid, $isStart, XOOPS_BLOCK_VISIBLE);
0 ignored issues
show
Bug introduced by
The method getAllByGroupModule() does not exist on XoopsBlock. ( Ignorable by Annotation )

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

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

This check looks for calls to methods that do not seem to exist on a given type. It looks for the method on the type itself as well as in inherited classes or implemented interfaces.

This is most likely a typographical error or the method has been renamed.

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;
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $backup does not seem to be defined for all execution paths leading up to this point.
Loading history...
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->is_cached($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];
0 ignored issues
show
Bug introduced by
The property metas does not exist on true.
Loading history...
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]);
0 ignored issues
show
Comprehensibility Best Practice introduced by
The variable $old does not seem to be defined for all execution paths leading up to this point.
Loading history...
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