XCL Web Application Platform 2.5.0
The XoopsCube Legacy Project
Loading...
Searching...
No Matches
groupperm.php
1<?php
13
14
15if (!defined('XOOPS_ROOT_PATH')) {
16 exit();
17}
18
19define('GROUPPERM_VAL_MODREAD', 'module_read');
20define('GROUPPERM_VAL_MODADMIN', 'module_admin');
21define('GROUPPERM_VAL_BLOCKREAD', 'block_read');
22
23
29class XoopsGroupPerm extends XoopsObject
30{
31
32 public function __construct()
33 {
34 static $initVars;
35 if (isset($initVars)) {
36 $this->vars = $initVars;
37 return;
38 }
39 parent::__construct();
40 $this->initVar('gperm_id', XOBJ_DTYPE_INT, null, false);
41 $this->initVar('gperm_groupid', XOBJ_DTYPE_INT, null, false);
42 $this->initVar('gperm_itemid', XOBJ_DTYPE_INT, null, false);
43 $this->initVar('gperm_modid', XOBJ_DTYPE_INT, 0, false);
44 $this->initVar('gperm_name', XOBJ_DTYPE_OTHER, null, false);
45 $initVars = $this->vars;
46 }
47 public function XoopsGroupPerm()
48 {
49 return self::__construct();
50 }
51
52 public function cleanVars()
53 {
54 if (!parent::cleanVars()) {
55 return false;
56 }
57
58 // The following validation code doesn't have this class,
59 // because the validation code accesses handlers.
60 // But, this follows traditional architecture of XOOPS2.
61
62 $gHandler = xoops_gethandler('group');
63 $group =& $gHandler->get($this->get('gperm_groupid'));
64 if (!is_object($group)) {
65 return false;
66 }
67
68 $mHandler = xoops_gethandler('module');
69
70 if (1 != $this->get('gperm_modid')) {
71 $module =& $mHandler->get($this->get('gperm_modid'));
72 if (!is_object($module)) {
73 return false;
74 }
75 }
76
77 if (GROUPPERM_VAL_MODREAD == $this->get('gperm_name')
78 || GROUPPERM_VAL_MODADMIN == $this->get('gperm_name')) {
79 $mHandler = xoops_gethandler('module');
80 $module =& $mHandler->get($this->get('gperm_itemid'));
81 if (!is_object($module)) {
82 return false;
83 }
84 } elseif (GROUPPERM_VAL_BLOCKREAD == $this->get('gperm_name')) {
85 $bHandler = xoops_gethandler('block');
86 $block =& $bHandler->get($this->get('gperm_itemid'));
87 if (!is_object($block)) {
88 return false;
89 }
90 }
91
92 return true;
93 }
94}
95
96
109{
110
117 public function &create($isNew = true)
118 {
119 $perm =new XoopsGroupPerm();
120 if ($isNew) {
121 $perm->setNew();
122 }
123 return $perm;
124 }
125
133 public function &get($id)
134 {
135 $ret = false;
136 if ((int)$id > 0) {
137 $db = &$this->db;
138 $sql = sprintf('SELECT * FROM %s WHERE gperm_id = %u', $db->prefix('group_permission'), $id);
139 if ($result = $db->query($sql)) {
140 $numrows = $db->getRowsNum($result);
141 if (1 == $numrows) {
142 $perm =new XoopsGroupPerm();
143 $perm->assignVars($db->fetchArray($result));
144 $ret =& $perm;
145 }
146 }
147 }
148 return $ret;
149 }
150
158 public function insert(&$perm)
159 {
160 $gperm_groupid = null;
161 $gperm_itemid = null;
162 $gperm_modid = null;
163 $gperm_name = null;
164 $gperm_id = null;
165 if ('xoopsgroupperm' != strtolower(get_class($perm))) {
166 return false;
167 }
168 if (!$perm->isDirty()) {
169 return true;
170 }
171 if (!$perm->cleanVars()) {
172 return false;
173 }
174
175 foreach ($perm->cleanVars as $k => $v) {
176 ${$k} = $v;
177 }
178 $db = &$this->db;
179 if ($perm->isNew()) {
180 $gperm_id = $db->genId('group_permission_gperm_id_seq');
181 $sql = sprintf('INSERT INTO %s (gperm_id, gperm_groupid, gperm_itemid, gperm_modid, gperm_name) VALUES (%u, %u, %u, %u, %s)', $db->prefix('group_permission'), $gperm_id, $gperm_groupid, $gperm_itemid, $gperm_modid, $db->quoteString($gperm_name));
182 } else {
183 $sql = sprintf('UPDATE %s SET gperm_groupid = %u, gperm_itemid = %u, gperm_modid = %u WHERE gperm_id = %u', $db->prefix('group_permission'), $gperm_groupid, $gperm_itemid, $gperm_modid, $gperm_id);
184 }
185 if (!$result = $db->query($sql)) {
186 return false;
187 }
188 if (empty($gperm_id)) {
189 $gperm_id = $this->db->getInsertId();
190 }
191 $perm->assignVar('gperm_id', $gperm_id);
192 return true;
193 }
194
202 public function delete(&$perm)
203 {
204 if ('xoopsgroupperm' != strtolower(get_class($perm))) {
205 return false;
206 }
207 $sql = sprintf('DELETE FROM %s WHERE gperm_id = %u', $this->db->prefix('group_permission'), $perm->getVar('gperm_id'));
208 if (!$result = $this->db->query($sql)) {
209 return false;
210 }
211 return true;
212 }
213
222 public function &getObjects($criteria = null, $id_as_key = false)
223 {
224 $ret = [];
225 $limit = $start = 0;
226 $db = &$this->db;
227 $sql = 'SELECT * FROM '.$db->prefix('group_permission');
228 if (isset($criteria) && $criteria instanceof \criteriaelement) {
229 $sql .= ' '.$criteria->renderWhere();
230 $limit = $criteria->getLimit();
231 $start = $criteria->getStart();
232 }
233 $result = $db->query($sql, $limit, $start);
234 if (!$result) {
235 return $ret;
236 }
237 while ($myrow = $db->fetchArray($result)) {
238 $perm =new XoopsGroupPerm();
239 $perm->assignVars($myrow);
240 if (!$id_as_key) {
241 $ret[] =& $perm;
242 } else {
243 $ret[$myrow['gperm_id']] =& $perm;
244 }
245 unset($perm);
246 }
247 return $ret;
248 }
249
257 public function getCount($criteria = null)
258 {
259 $db = &$this->db;
260 $sql = 'SELECT COUNT(*) FROM '.$db->prefix('group_permission');
261 if (isset($criteria) && $criteria instanceof \criteriaelement) {
262 $sql .= ' '.$criteria->renderWhere();
263 }
264 $result = $db->query($sql);
265 if (!$result) {
266 return 0;
267 }
268 [$count] = $db->fetchRow($result);
269 return $count;
270 }
271
279 public function deleteAll($criteria = null)
280 {
281 $sql = sprintf('DELETE FROM %s', $this->db->prefix('group_permission'));
282 if (isset($criteria) && $criteria instanceof \criteriaelement) {
283 $sql .= ' '.$criteria->renderWhere();
284 }
285 if (!$result = $this->db->query($sql)) {
286 return false;
287 }
288 return true;
289 }
290
299 public function deleteByGroup($gperm_groupid, $gperm_modid = null)
300 {
301 $criteria = new CriteriaCompo(new Criteria('gperm_groupid', (int)$gperm_groupid));
302 if (isset($gperm_modid)) {
303 $criteria->add(new Criteria('gperm_modid', (int)$gperm_modid));
304 }
305 return $this->deleteAll($criteria);
306 }
307
317 public function deleteByModule($gperm_modid, $gperm_name = null, $gperm_itemid = null)
318 {
319 $criteria = new CriteriaCompo(new Criteria('gperm_modid', (int)$gperm_modid));
320 if (isset($gperm_name)) {
321 $criteria->add(new Criteria('gperm_name', $gperm_name));
322 if (isset($gperm_itemid)) {
323 $criteria->add(new Criteria('gperm_itemid', (int)$gperm_itemid));
324 }
325 }
326 return $this->deleteAll($criteria);
327 }
328
329
334 public function deleteBasicPermission($gperm_groupid)
335 {
336 $criteria = new CriteriaCompo(new Criteria('gperm_groupid', $gperm_groupid));
337 $criteria->add(new Criteria('gperm_modid', 1));
338 $criteria2 = new CriteriaCompo(new Criteria('gperm_name', 'system_admin'));
339 $criteria2->add(new Criteria('gperm_name', 'module_admin'), 'OR');
340 $criteria2->add(new Criteria('gperm_name', 'module_read'), 'OR');
341 $criteria2->add(new Criteria('gperm_name', 'block_read'), 'OR');
342 $criteria->add($criteria2);
343 $this->deleteAll($criteria);
344 }
345
357 public function checkRight($gperm_name, $gperm_itemid, $gperm_groupid, $gperm_modid = 1, $bypass_admincheck = false)
358 {
359 if (empty($gperm_groupid)) {
360 return false;
361 }
362
363 if (!$bypass_admincheck &&
364 (is_array($gperm_groupid)?in_array(XOOPS_GROUP_ADMIN, $gperm_groupid):(XOOPS_GROUP_ADMIN == $gperm_groupid))) {
365 return true;
366 }
367
368 $criteria =& $this->getCriteria($gperm_name, $gperm_itemid, $gperm_groupid, $gperm_modid);
369 if ($this->getCount($criteria) > 0) {
370 return true;
371 }
372 return false;
373 }
374
385 public function addRight($gperm_name, $gperm_itemid, $gperm_groupid, $gperm_modid = 1)
386 {
387 $criteria =& $this->getCriteria($gperm_name, $gperm_itemid, $gperm_groupid, $gperm_modid);
388 $count = $this->getCount($criteria);
389 if (1 == $count) {
390 return true; // Only one record already exist. do nothing.
391 } elseif ($count > 1) {
392 // This case occurs when group_permission table exists from older versions of XOOPS.
393 // So, once clear all and insert new record.
394 $this->removeRight($gperm_name, $gperm_itemid, $gperm_groupid, $gperm_modid);
395 }
396
397 $perm =& $this->create();
398 $perm->setVar('gperm_name', $gperm_name);
399 $perm->setVar('gperm_groupid', $gperm_groupid);
400 $perm->setVar('gperm_itemid', $gperm_itemid);
401 $perm->setVar('gperm_modid', $gperm_modid);
402 return $this->insert($perm);
403 }
404
415 public function removeRight($gperm_name, $gperm_itemid, $gperm_groupid, $gperm_modid = 1)
416 {
417 $criteria =& $this->getCriteria($gperm_name, $gperm_itemid, $gperm_groupid, $gperm_modid);
418 return $this->deleteAll($criteria);
419 }
420
430 public function getItemIds($gperm_name, $gperm_groupid, $gperm_modid = 1)
431 {
432 $ret = [];
433
434 $criteria =& $this->getCriteria($gperm_name, 0, $gperm_groupid, $gperm_modid);
435
436 $perms =& $this->getObjects($criteria, true);
437 foreach (array_keys($perms) as $i) {
438 $ret[] = $perms[$i]->getVar('gperm_itemid');
439 }
440 return array_unique($ret);
441 }
442
452 public function getGroupIds($gperm_name, $gperm_itemid, $gperm_modid = 1)
453 {
454 $ret = [];
455
456 $criteria =& $this->getCriteria($gperm_name, $gperm_itemid, [], $gperm_modid);
457
458 $perms =& $this->getObjects($criteria, true);
459 foreach (array_keys($perms) as $i) {
460 $ret[] = $perms[$i]->getVar('gperm_groupid');
461 }
462 return $ret;
463 }
464
475 public function &getCriteria($gperm_name, $gperm_itemid, $gperm_groupid, $gperm_modid = 1)
476 {
477 $criteria = new CriteriaCompo(new Criteria('gperm_modid', (int)$gperm_modid));
478 $criteria->add(new Criteria('gperm_name', $gperm_name));
479 $gperm_itemid = (int)$gperm_itemid;
480 if ($gperm_itemid > 0) {
481 $criteria->add(new Criteria('gperm_itemid', $gperm_itemid));
482 }
483 if (is_array($gperm_groupid)) {
484 if (count($gperm_groupid) > 0) {
485 $criteria2 = new CriteriaCompo();
486 foreach ($gperm_groupid as $gid) {
487 $criteria2->add(new Criteria('gperm_groupid', (int)$gid), 'OR');
488 }
489 $criteria->add($criteria2);
490 }
491 } else {
492 $criteria->add(new Criteria('gperm_groupid', (int)$gperm_groupid));
493 }
494 return $criteria;
495 }
496}
& getObjects($criteria=null, $id_as_key=false)
deleteAll($criteria=null)
& getCriteria($gperm_name, $gperm_itemid, $gperm_groupid, $gperm_modid=1)
getItemIds($gperm_name, $gperm_groupid, $gperm_modid=1)
checkRight($gperm_name, $gperm_itemid, $gperm_groupid, $gperm_modid=1, $bypass_admincheck=false)
removeRight($gperm_name, $gperm_itemid, $gperm_groupid, $gperm_modid=1)
getCount($criteria=null)
addRight($gperm_name, $gperm_itemid, $gperm_groupid, $gperm_modid=1)
getGroupIds($gperm_name, $gperm_itemid, $gperm_modid=1)
deleteBasicPermission($gperm_groupid)
deleteByModule($gperm_modid, $gperm_name=null, $gperm_itemid=null)
deleteByGroup($gperm_groupid, $gperm_modid=null)
& create($isNew=true)
initVar($key, $data_type, $value=null, $required=false, $maxlength=null, $options='')
Definition object.php:206