15if (!defined(
'XOOPS_ROOT_PATH')) {
19define(
'GROUPPERM_VAL_MODREAD',
'module_read');
20define(
'GROUPPERM_VAL_MODADMIN',
'module_admin');
21define(
'GROUPPERM_VAL_BLOCKREAD',
'block_read');
35 if (isset($initVars)) {
36 $this->vars = $initVars;
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;
54 if (!parent::cleanVars()) {
62 $gHandler = xoops_gethandler(
'group');
63 $group =& $gHandler->get($this->
get(
'gperm_groupid'));
64 if (!is_object($group)) {
68 $mHandler = xoops_gethandler(
'module');
70 if (1 != $this->
get(
'gperm_modid')) {
71 $module =& $mHandler->get($this->
get(
'gperm_modid'));
72 if (!is_object($module)) {
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)) {
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)) {
133 public function &
get($id)
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);
143 $perm->assignVars($db->fetchArray($result));
160 $gperm_groupid =
null;
161 $gperm_itemid =
null;
165 if (
'xoopsgroupperm' != strtolower(get_class($perm))) {
168 if (!$perm->isDirty()) {
171 if (!$perm->cleanVars()) {
175 foreach ($perm->cleanVars as $k => $v) {
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));
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);
185 if (!$result = $db->query($sql)) {
188 if (empty($gperm_id)) {
189 $gperm_id = $this->db->getInsertId();
191 $perm->assignVar(
'gperm_id', $gperm_id);
202 public function delete(&$perm)
204 if (
'xoopsgroupperm' != strtolower(get_class($perm))) {
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)) {
222 public function &
getObjects($criteria =
null, $id_as_key =
false)
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();
233 $result = $db->query($sql, $limit, $start);
237 while ($myrow = $db->fetchArray($result)) {
239 $perm->assignVars($myrow);
243 $ret[$myrow[
'gperm_id']] =& $perm;
260 $sql =
'SELECT COUNT(*) FROM '.$db->prefix(
'group_permission');
261 if (isset($criteria) && $criteria instanceof \criteriaelement) {
262 $sql .=
' '.$criteria->renderWhere();
264 $result = $db->query($sql);
268 [$count] = $db->fetchRow($result);
281 $sql = sprintf(
'DELETE FROM %s', $this->db->prefix(
'group_permission'));
282 if (isset($criteria) && $criteria instanceof \criteriaelement) {
283 $sql .=
' '.$criteria->renderWhere();
285 if (!$result = $this->db->query($sql)) {
302 if (isset($gperm_modid)) {
303 $criteria->add(
new Criteria(
'gperm_modid', (
int)$gperm_modid));
317 public function deleteByModule($gperm_modid, $gperm_name =
null, $gperm_itemid =
null)
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));
337 $criteria->add(
new Criteria(
'gperm_modid', 1));
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);
357 public function checkRight($gperm_name, $gperm_itemid, $gperm_groupid, $gperm_modid = 1, $bypass_admincheck =
false)
359 if (empty($gperm_groupid)) {
363 if (!$bypass_admincheck &&
364 (is_array($gperm_groupid)?in_array(XOOPS_GROUP_ADMIN, $gperm_groupid):(XOOPS_GROUP_ADMIN == $gperm_groupid))) {
368 $criteria =& $this->
getCriteria($gperm_name, $gperm_itemid, $gperm_groupid, $gperm_modid);
369 if ($this->
getCount($criteria) > 0) {
385 public function addRight($gperm_name, $gperm_itemid, $gperm_groupid, $gperm_modid = 1)
387 $criteria =& $this->
getCriteria($gperm_name, $gperm_itemid, $gperm_groupid, $gperm_modid);
388 $count = $this->
getCount($criteria);
391 } elseif ($count > 1) {
394 $this->
removeRight($gperm_name, $gperm_itemid, $gperm_groupid, $gperm_modid);
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);
415 public function removeRight($gperm_name, $gperm_itemid, $gperm_groupid, $gperm_modid = 1)
417 $criteria =& $this->
getCriteria($gperm_name, $gperm_itemid, $gperm_groupid, $gperm_modid);
430 public function getItemIds($gperm_name, $gperm_groupid, $gperm_modid = 1)
434 $criteria =& $this->
getCriteria($gperm_name, 0, $gperm_groupid, $gperm_modid);
437 foreach (array_keys($perms) as $i) {
438 $ret[] = $perms[$i]->getVar(
'gperm_itemid');
440 return array_unique($ret);
452 public function getGroupIds($gperm_name, $gperm_itemid, $gperm_modid = 1)
456 $criteria =& $this->
getCriteria($gperm_name, $gperm_itemid, [], $gperm_modid);
459 foreach (array_keys($perms) as $i) {
460 $ret[] = $perms[$i]->getVar(
'gperm_groupid');
475 public function &
getCriteria($gperm_name, $gperm_itemid, $gperm_groupid, $gperm_modid = 1)
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));
483 if (is_array($gperm_groupid)) {
484 if (count($gperm_groupid) > 0) {
486 foreach ($gperm_groupid as $gid) {
487 $criteria2->add(
new Criteria(
'gperm_groupid', (
int)$gid),
'OR');
489 $criteria->add($criteria2);
492 $criteria->add(
new Criteria(
'gperm_groupid', (
int)$gperm_groupid));
& 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)
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)
initVar($key, $data_type, $value=null, $required=false, $maxlength=null, $options='')