From: <tr...@us...> - 2013-01-03 19:31:26
|
Revision: 10645 http://sourceforge.net/p/xoops/svn/10645 Author: trabis Date: 2013-01-03 19:31:21 +0000 (Thu, 03 Jan 2013) Log Message: ----------- Fixing permissions error in categories. Passing permissions by reference to save memory. Modified Paths: -------------- XoopsModules/publisher/trunk/publisher/archive.php XoopsModules/publisher/trunk/publisher/class/category.php XoopsModules/publisher/trunk/publisher/class/form/item.php XoopsModules/publisher/trunk/publisher/class/item.php XoopsModules/publisher/trunk/publisher/class/permission.php XoopsModules/publisher/trunk/publisher/include/functions.php Modified: XoopsModules/publisher/trunk/publisher/archive.php =================================================================== --- XoopsModules/publisher/trunk/publisher/archive.php 2013-01-03 16:09:42 UTC (rev 10644) +++ XoopsModules/publisher/trunk/publisher/archive.php 2013-01-03 19:31:21 UTC (rev 10645) @@ -134,7 +134,7 @@ $itemhandler->field_link = 'categoryid'; $itemhandler->field_object = 'categoryid'; // Categories for which user has access - $categoriesGranted = $publisher->getHandler('permission')->getGrantedItems('category_read'); + $categoriesGranted =& $publisher->getHandler('permission')->getGrantedItems('category_read'); $grantedCategories = new Criteria('l.categoryid', "(" . implode(',', $categoriesGranted) . ")", 'IN'); $criteria = new CriteriaCompo(); $criteria->add($grantedCategories, 'AND'); Modified: XoopsModules/publisher/trunk/publisher/class/category.php =================================================================== --- XoopsModules/publisher/trunk/publisher/class/category.php 2013-01-03 16:09:42 UTC (rev 10644) +++ XoopsModules/publisher/trunk/publisher/class/category.php 2013-01-03 19:31:21 UTC (rev 10645) @@ -94,7 +94,7 @@ if (is_object($xoopsUser) && $xoopsUser->getVar('uid') == $this->moderator()) { return true; } - $categoriesGranted = $this->publisher->getHandler('permission')->isGranted('category_read'); + $categoriesGranted =& $this->publisher->getHandler('permission')->getGrantedItems('category_read'); if (in_array($this->categoryid(), $categoriesGranted)) { $ret = true; } @@ -464,7 +464,7 @@ $criteria->add(new Criteria('parentid', $parentid)); } if (!$publisher_isAdmin) { - $categoriesGranted = $this->publisher->getHandler('permission')->getGrantedItems('category_read'); + $categoriesGranted =& $this->publisher->getHandler('permission')->getGrantedItems('category_read'); if (count($categoriesGranted) > 0) { $criteria->add(new Criteria('categoryid', '(' . implode(',', $categoriesGranted) . ')', 'IN')); } @@ -502,7 +502,7 @@ $criteria->setSort('name'); $criteria->setOrder('ASC'); if (!$publisher_isAdmin) { - $categoriesGranted = $this->publisher->getHandler('permission')->getGrantedItems('item_submit'); + $categoriesGranted =& $this->publisher->getHandler('permission')->getGrantedItems('item_submit'); if (count($categoriesGranted) > 0) { $criteria->add(new Criteria('categoryid', '(' . implode(',', $categoriesGranted) . ')', 'IN')); } @@ -541,7 +541,7 @@ $criteria->setSort('name'); $criteria->setOrder('ASC'); if (!$publisher_isAdmin) { - $categoriesGranted = $this->publisher->getHandler('permission')->getGrantedItems('category_read'); + $categoriesGranted =& $this->publisher->getHandler('permission')->getGrantedItems('category_read'); if (count($categoriesGranted) > 0) { $criteria->add(new Criteria('categoryid', '(' . implode(',', $categoriesGranted) . ')', 'IN')); } @@ -584,7 +584,7 @@ if (isset($parentid) && ($parentid != -1)) { $criteria->add(new criteria('parentid', $parentid)); if (!$publisher_isAdmin) { - $categoriesGranted = $this->publisher->getHandler('permission')->getGrantedItems('category_read'); + $categoriesGranted =& $this->publisher->getHandler('permission')->getGrantedItems('category_read'); if (count($categoriesGranted) > 0) { $criteria->add(new Criteria('categoryid', '(' . implode(',', $categoriesGranted) . ')', 'IN')); } @@ -609,7 +609,7 @@ $criteria = new CriteriaCompo(new Criteria('parentid', "(" . implode(',', array_keys($categories)) . ")", 'IN')); $ret = array(); if (!$publisher_isAdmin) { - $categoriesGranted = $this->publisher->getHandler('permission')->getGrantedItems('category_read'); + $categoriesGranted =& $this->publisher->getHandler('permission')->getGrantedItems('category_read'); if (count($categoriesGranted) > 0) { $criteria->add(new Criteria('categoryid', '(' . implode(',', $categoriesGranted) . ')', 'IN')); } Modified: XoopsModules/publisher/trunk/publisher/class/form/item.php =================================================================== --- XoopsModules/publisher/trunk/publisher/class/form/item.php 2013-01-03 16:09:42 UTC (rev 10644) +++ XoopsModules/publisher/trunk/publisher/class/form/item.php 2013-01-03 19:31:21 UTC (rev 10645) @@ -113,10 +113,8 @@ global $xoopsConfig, $xoopsUser; $publisher = PublisherPublisher::getInstance(); - $checkperm = $this->checkperm; $allowed_editors = publisher_getEditors($publisher->getHandler('permission')->getGrantedItems('editors')); - $form_view = $publisher->getHandler('permission')->getGrantedItems('form_view'); if (!is_object($xoopsUser)) { $group = array(XOOPS_GROUP_ANONYMOUS); Modified: XoopsModules/publisher/trunk/publisher/class/item.php =================================================================== --- XoopsModules/publisher/trunk/publisher/class/item.php 2013-01-03 16:09:42 UTC (rev 10644) +++ XoopsModules/publisher/trunk/publisher/class/item.php 2013-01-03 19:31:21 UTC (rev 10645) @@ -1221,7 +1221,7 @@ if (!$publisher_isAdmin) { $criteriaPermissions = new CriteriaCompo(); // Categories for which user has access - $categoriesGranted = $this->publisher->getHandler('permission')->getGrantedItems('category_read'); + $categoriesGranted =& $this->publisher->getHandler('permission')->getGrantedItems('category_read'); $grantedCategories = new Criteria('categoryid', "(" . implode(',', $categoriesGranted) . ")", 'IN'); $criteriaPermissions->add($grantedCategories, 'AND'); } @@ -1373,7 +1373,7 @@ if (!$publisher_isAdmin) { $criteriaPermissions = new CriteriaCompo(); // Categories for which user has access - $categoriesGranted = $this->publisher->getHandler('permission')->getGrantedItems('category_read'); + $categoriesGranted =& $this->publisher->getHandler('permission')->getGrantedItems('category_read'); $grantedCategories = new Criteria('categoryid', "(" . implode(',', $categoriesGranted) . ")", 'IN'); $criteriaPermissions->add($grantedCategories, 'AND'); } Modified: XoopsModules/publisher/trunk/publisher/class/permission.php =================================================================== --- XoopsModules/publisher/trunk/publisher/class/permission.php 2013-01-03 16:09:42 UTC (rev 10644) +++ XoopsModules/publisher/trunk/publisher/class/permission.php 2013-01-03 19:31:21 UTC (rev 10645) @@ -72,60 +72,24 @@ } /** - * @param string $gperm_name - * - * @return array - */ - public function getGrantedGroups($gperm_name) - { - static $items; - if (isset($items[$gperm_name])) { - return $items[$gperm_name]; - } - $groups = array(); - $criteria = new CriteriaCompo(); - $criteria->add(new Criteria('gperm_modid', $this->publisher->getModule()->getVar('mid'))); - $criteria->add(new Criteria('gperm_name', $gperm_name)); - //Instead of calling groupperm handler and get objects, we will save some memory and do it our way - $db = XoopsDatabaseFactory::getDatabaseConnection(); - $limit = $start = 0; - $sql = 'SELECT gperm_groupid FROM ' . $db->prefix('group_permission'); - if (isset($criteria) && is_subclass_of($criteria, 'criteriaelement')) { - $sql .= ' ' . $criteria->renderWhere(); - $limit = $criteria->getLimit(); - $start = $criteria->getStart(); - } - $result = $db->query($sql, $limit, $start); - while ($myrow = $db->fetchArray($result)) { - $groups[$myrow['gperm_groupid']] = $myrow['gperm_groupid']; - } - $items[$gperm_name] = $groups; - //Return the permission array - return $groups; - } - - /** * Returns permissions for a certain type * * @param string $gperm_name "global", "forum" or "topic" (should perhaps have "post" as well - but I don't know) - * @param int $id id of the item (forum, topic or possibly post) to get permissions for * * @return array */ - public function getGrantedItems($gperm_name, $id = 0) + public function getGrantedItems($gperm_name) { static $items; - if (isset($items[$gperm_name][$id])) { - return $items[$gperm_name][$id]; + if (isset($items[$gperm_name])) { + return $items[$gperm_name]; } global $xoopsUser; $ret = array(); //Instead of calling groupperm handler and get objects, we will save some memory and do it our way $criteria = new CriteriaCompo(new Criteria('gperm_name', $gperm_name)); $criteria->add(new Criteria('gperm_modid', $this->publisher->getModule()->getVar('mid'))); - if ($id != 0) { - $criteria->add(new Criteria('gperm_itemid', $id)); - } + //Get user's groups $groups = is_object($xoopsUser) ? $xoopsUser->getGroups() : array(XOOPS_GROUP_ANONYMOUS); $criteria2 = new CriteriaCompo(); @@ -140,31 +104,26 @@ while ($myrow = $db->fetchArray($result)) { $ret[$myrow['gperm_itemid']] = $myrow['gperm_itemid']; } - $items[$gperm_name][$id] = $ret; + $items[$gperm_name] = $ret; return $ret; } /** - * @param string $gperm_name - * @param int|null $id + * @param string $gperm_name + * @param int $id * * @return bool */ - public function isGranted($gperm_name, $id = null) + public function isGranted($gperm_name, $id) { - $permissions = $this->getGrantedItems($gperm_name, $id); - if ($id == null) { - if (!empty($permissions)) { - return true; - } else { - return false; - } + if (!$id) { + return false; + } + $permissions =& $this->getGrantedItems($gperm_name); + if (!empty($permissions) && isset ($permissions[$id])) { + return true; } else { - if (!empty($permissions) && isset ($permissions[$id])) { - return true; - } else { - return false; - } + return false; } } Modified: XoopsModules/publisher/trunk/publisher/include/functions.php =================================================================== --- XoopsModules/publisher/trunk/publisher/include/functions.php 2013-01-03 16:09:42 UTC (rev 10644) +++ XoopsModules/publisher/trunk/publisher/include/functions.php 2013-01-03 19:31:21 UTC (rev 10645) @@ -383,7 +383,7 @@ function publisher_userIsModerator($itemObj) { $publisher = PublisherPublisher::getInstance(); - $categoriesGranted = $publisher->getHandler('permission')->getGrantedItems('category_moderation'); + $categoriesGranted =& $publisher->getHandler('permission')->getGrantedItems('category_moderation'); return (is_object($itemObj) && in_array($itemObj->categoryid(), $categoriesGranted)); } |