Completed
Push — master ( 68c045...6d06de )
by Michael
02:34
created

class/cat.php (4 issues)

Upgrade to new PHP Analysis Engine

These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more

1
<?php
2
/*
3
 * You may not change or alter any portion of this comment or credits
4
 * of supporting developers from this source code or any supporting source code
5
 * which is considered copyrighted (c) material of the original comment or credit authors.
6
 *
7
 * This program is distributed in the hope that it will be useful,
8
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
10
 */
11
12
/**
13
 * @copyright    {@link https://xoops.org/ XOOPS Project}
14
 * @license      {@link http://www.gnu.org/licenses/gpl-2.0.html GNU GPL 2 or later}
15
 * @package      extcal
16
 * @since
17
 * @author       XOOPS Development Team,
18
 */
19
20
// defined('XOOPS_ROOT_PATH') || exit('Restricted access.');
21
22
require_once __DIR__ . '/ExtcalPersistableObjectHandler.php';
23
require_once __DIR__ . '/perm.php';
24
require_once __DIR__ . '/time.php';
25
26
/**
27
 * Class ExtcalCat.
28
 */
29
class ExtcalCat extends XoopsObject
30
{
31
    public $externalKey = [];
32
33
    /**
34
     * ExtcalCat constructor.
35
     */
36
    public function __construct()
37
    {
38
        $this->initVar('cat_id', XOBJ_DTYPE_INT, null, false);
39
        $this->initVar('cat_name', XOBJ_DTYPE_TXTBOX, null, true, 255);
40
        $this->initVar('cat_desc', XOBJ_DTYPE_TXTAREA, null, false);
41
        $this->initVar('cat_color', XOBJ_DTYPE_TXTBOX, '000000', false, 255);
42
        $this->initVar('cat_weight', XOBJ_DTYPE_INT, 0, false);
43
        $this->initVar('cat_icone', XOBJ_DTYPE_TXTBOX, '', false, 50);
44
    }
45
}
46
47
/**
48
 * Class ExtcalCatHandler.
49
 */
50
class ExtcalCatHandler extends ExtcalPersistableObjectHandler
51
{
52
    public $_extcalPerm;
53
54
    /**
55
     * @param $db
56
     */
57
    public function __construct(XoopsDatabase $db)
58
    {
59
        $this->_extcalPerm = ExtcalPerm::getHandler();
60
        parent::__construct($db, 'extcal_cat', _EXTCAL_CLN_CAT, 'cat_id');
61
    }
62
63
    /**
64
     * @param $data
65
     *
66
     * @return bool
67
     */
68
    public function createCat($data)
69
    {
70
        $cat = $this->create();
71
        $cat->setVars($data);
72
        $this->insert($cat);
73
74
        $catId = $this->getInsertId();
75
76
        // Retriving permission mask
77
        /** @var XoopsGroupPermHandler $groupPermissionHandler */
78
        $groupPermissionHandler = xoops_getHandler('groupperm');
79
        $moduleId               = $GLOBALS['xoopsModule']->getVar('mid');
80
81
        $criteria = new CriteriaCompo();
82
        $criteria->add(new Criteria('gperm_name', 'extcal_perm_mask'));
83
        $criteria->add(new Criteria('gperm_modid', $moduleId));
84
        $permMask = $groupPermissionHandler->getObjects($criteria);
85
86
        // Retriving group list
87
        $memberHandler = xoops_getHandler('member');
88
        $glist         = $memberHandler->getGroupList();
89
90
        // Applying permission mask
91
        foreach ($permMask as $perm) {
92 View Code Duplication
            if (1 == $perm->getVar('gperm_itemid')) {
0 ignored issues
show
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
93
                $groupPermissionHandler->addRight('extcal_cat_view', $cat->getVar('cat_id'), $perm->getVar('gperm_groupid'), $moduleId);
94
            }
95 View Code Duplication
            if (2 == $perm->getVar('gperm_itemid')) {
0 ignored issues
show
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
96
                $groupPermissionHandler->addRight('extcal_cat_submit', $cat->getVar('cat_id'), $perm->getVar('gperm_groupid'), $moduleId);
97
            }
98 View Code Duplication
            if (4 == $perm->getVar('gperm_itemid')) {
0 ignored issues
show
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
99
                $groupPermissionHandler->addRight('extcal_cat_autoapprove', $cat->getVar('cat_id'), $perm->getVar('gperm_groupid'), $moduleId);
100
            }
101 View Code Duplication
            if (8 == $perm->getVar('gperm_itemid')) {
0 ignored issues
show
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
102
                $groupPermissionHandler->addRight('extcal_cat_edit', $cat->getVar('cat_id'), $perm->getVar('gperm_groupid'), $moduleId);
103
            }
104
        }
105
106
        return true;
107
    }
108
109
    /**
110
     * @param $catId
111
     * @param $data
112
     *
113
     * @return bool
114
     */
115
    public function modifyCat($catId, $data)
116
    {
117
        $cat = $this->get($catId);
118
        $cat->setVars($data);
119
120
        return $this->insert($cat);
121
    }
122
123
    /**
124
     * @param $catId
125
     */
126
    public function deleteCat($catId)
127
    {
128
        /* TODO :
129
           - Delete all events in this category
130
          */
131
        $this->deleteById($catId);
132
    }
133
134
    // Return one cat selected by his id
135
136
    /**
137
     * @param      $catId
138
     * @param bool $skipPerm
139
     *
140
     * @return bool
141
     */
142
    public function getCat($catId, $skipPerm = false)
143
    {
144
        $criteriaCompo = new CriteriaCompo();
145
        $criteriaCompo->add(new Criteria('cat_id', $catId));
146
        if (!$skipPerm) {
147
            $this->_addCatPermCriteria($criteriaCompo, $GLOBALS['xoopsUser']);
148
        }
149
        $ret = $this->getObjects($criteriaCompo);
150
        if (isset($ret[0])) {
151
            return $ret[0];
152
        } else {
153
            return false;
154
        }
155
    }
156
157
    /**
158
     * @param        $user
159
     * @param string $perm
160
     *
161
     * @return array
162
     */
163
    public function getAllCat($user, $perm = 'extcal_cat_view')
164
    {
165
        $criteriaCompo = new CriteriaCompo();
166
        if ('all' !== $perm) {
167
            $this->_addCatPermCriteria($criteriaCompo, $user, $perm);
168
        }
169
170
        return $this->getObjects($criteriaCompo);
171
    }
172
173
    /**
174
     * @param        $user
175
     * @param string $perm
176
     *
177
     * @return array
178
     */
179
    public function getAllCatById($user, $perm = 'all')
180
    {
181
        $criteriaCompo = new CriteriaCompo();
182
        if ('all' !== $perm) {
183
            $this->_addCatPermCriteria($criteriaCompo, $user, $perm);
184
        }
185
186
        $t = $this->objectToArray($this->getObjects($criteriaCompo));
187
        $r = [];
188
        //        while (list($k, $v) = each($t)) {
189
        foreach ($t as $k => $v) {
190
            $r[$v['cat_id']] = $v;
191
        }
192
193
        return $r;
194
    }
195
196
    /**
197
     * @param        $criteria
198
     * @param        $user
199
     * @param string $perm
200
     */
201 View Code Duplication
    public function _addCatPermCriteria(&$criteria, &$user, $perm = 'extcal_cat_view')
202
    {
203
        $authorizedAccessCats = $this->_extcalPerm->getAuthorizedCat($user, 'extcal_cat_view');
204
        $count                = count($authorizedAccessCats);
205
        if ($count > 0) {
206
            $in = '(' . $authorizedAccessCats[0];
207
            array_shift($authorizedAccessCats);
208
            foreach ($authorizedAccessCats as $authorizedAccessCat) {
209
                $in .= ',' . $authorizedAccessCat;
210
            }
211
            $in .= ')';
212
            $criteria->add(new Criteria('cat_id', $in, 'IN'));
213
        } else {
214
            $criteria->add(new Criteria('cat_id', '(0)', 'IN'));
215
        }
216
    }
217
218
    /**
219
     * @param $xoopsUser
220
     *
221
     * @return bool
222
     */
223
    public function haveSubmitRight(&$xoopsUser)
224
    {
225
        return count($this->_extcalPerm->getAuthorizedCat($xoopsUser, 'extcal_cat_submit')) > 0;
226
    }
227
}
228