Issues (3083)

htdocs/class/smarty3_plugins/function.xoBlock.php (1 issue)

1
<?php
2
3
//  Author: Trabis
4
//  URL: http://www.xuups.com
5
//  E-Mail: [email protected]
6
//  Plugin version: 1.1
7
//  Release date: 06-04-2009
8
//  Usage : just place <{xoBlock id=1}> inside any template or theme, replace '1' with the id of the block you want to show
9
//
10
//  Other options:
11
//  display = 'title' -> shows just title
12
//  display = 'none' -> renders the block but does not display it
13
//  options = 'enter|block|options' -> overwrites block default options
14
//  groups = 'enter|allowed|groups' -> overwrites block default group view permissions
15
//  cache = 3600 -> overwrite cache time(in seconds)
16
//
17
//  Examples:
18
//  <{xoBlock id=1 display="title"}>   displays just the block title
19
//  <{xoBlock id=1}>                   displays just the block content
20
//  <{xoBlock id=7 display="none"}>    does not display nothing but executes the block, this can go for online block or to trigger some cron block
21
//  <{xoBlock id=600 groups="0|1" cache=20}>  display block just for this 2 groups and sets a cache of 20 seconds
22
//  <{xoBlock id=600 options="100|100|s_poweredby.gif|0"}> displays block with diferent options
23
24
/**
25
 * @param string[] $params
26
 * @param Smarty   $smarty
27
 *
28
 * @return mixed
29
 */
30
function smarty_function_xoBlock($params, $smarty)
31
{
32
    if (!isset($params['id'])) {
33
        return null;
34
    }
35
36
    $display_title = (isset($params['display']) && $params['display'] === 'title');
37
    $display_none  = (isset($params['display']) && $params['display'] === 'none');
38
    $options       = isset($params['options']) ? $params['options'] : false;
39
    $groups        = isset($params['groups']) ? explode('|', $params['groups']) : false;
40
    $cache         = isset($params['cache']) ? (int)$params['cache'] : false;
41
42
    $block_id = (int)$params['id'];
43
44
    static $block_objs;
45
    if (!isset($block_objs[$block_id])) {
46
        /** @var XoopsBlockHandler $blkhandler */
47
        $blkhandler = xoops_getHandler('block');
48
        $blockObj   = $blkhandler->get($block_id);
49
50
        if (!is_object($blockObj)) {
51
            return null;
52
        }
53
54
        $block_objs[$block_id] = $blockObj;
55
    } else {
56
        $blockObj = $block_objs[$block_id];
57
    }
58
59
    $user_groups = $GLOBALS['xoopsUser'] ? $GLOBALS['xoopsUser']->getGroups() : array(XOOPS_GROUP_ANONYMOUS);
60
61
    static $allowed_blocks;
62
    if (!is_array(@$allowed_blocks) || count($allowed_blocks) == 0) {
63
        $allowed_blocks = XoopsBlock::getAllBlocksByGroup($user_groups, false);
0 ignored issues
show
Deprecated Code introduced by
The function XoopsBlock::getAllBlocksByGroup() has been deprecated. ( Ignorable by Annotation )

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

63
        $allowed_blocks = /** @scrutinizer ignore-deprecated */ XoopsBlock::getAllBlocksByGroup($user_groups, false);
Loading history...
64
    }
65
66
    if ($groups) {
67
        if (!array_intersect($user_groups, $groups)) {
68
            return null;
69
        }
70
    } else {
71
        if (!in_array($block_id, $allowed_blocks)) {
72
            return null;
73
        }
74
    }
75
76
    if ($options) {
77
        $blockObj->setVar('options', $options);
78
    }
79
80
    if ($cache) {
81
        $blockObj->setVar('bcachetime', $cache);
82
    }
83
84
    if ($display_title) {
85
        return $blockObj->getVar('title');
86
    }
87
88
    $xoopsLogger = XoopsLogger::getInstance();
89
    $template    =& $GLOBALS['xoopsTpl'];
90
91
    $bcachetime = (int)$blockObj->getVar('bcachetime');
92
    if (empty($bcachetime)) {
93
        $template->caching = 0;
94
    } else {
95
        $template->caching        = 2;
96
        $template->cache_lifetime = $bcachetime;
97
    }
98
99
    $template->setCompileId($blockObj->getVar('dirname', 'n'));
100
    $tplName = ($tplName = $blockObj->getVar('template')) ? "db:{$tplName}" : 'db:system_block_dummy.tpl';
101
    $cacheid = 'blk_' . $block_id;
102
103
    if (!$bcachetime || !$template->isCached($tplName, $cacheid)) {
104
        $xoopsLogger->addBlock($blockObj->getVar('name'));
105
        if (!($bresult = $blockObj->buildBlock())) {
106
            return null;
107
        }
108
        if (!$display_none) {
109
            $template->assign('block', $bresult);
110
            $template->display($tplName, $cacheid);
111
        }
112
    } else {
113
        $xoopsLogger->addBlock($blockObj->getVar('name'), true, $bcachetime);
114
        if (!$display_none) {
115
            $template->display($tplName, $cacheid);
116
        }
117
    }
118
    $template->setCompileId($blockObj->getVar('dirname', 'n'));
119
120
    return null;
121
}
122