public static function getRuleSet($cid = '') { static $rulesData = null; $my = empty($cid) ? JFactory::getUser() : JFactory::getUser($cid); if (!isset($rulesData[$my->id])) { $db = EasyBlogHelper::db(); $config = EasyBlogHelper::getConfig(); $rulesets = new stdClass(); $rulesets->rules = new stdClass(); // @Task: Retrieve rules $rules = EasyBlogACLHelper::getRules('id'); if (!empty($my->id)) { $rulesets->id = $my->id; $rulesets->name = $my->name; $rulesets->group = isset($my->usertype) ? $my->usertype : ''; // @Task: Load default values. foreach ($rules as $rule) { $rulesets->rules->{$rule->action} = (int) $rule->default; } // @Task: Retreive assigned rulesets for this particular user. // Assigned rulesets always have higher precedence $query = 'SELECT * FROM ' . $db->nameQuote('#__easyblog_acl_group') . ' ' . 'WHERE ' . $db->nameQuote('content_id') . '=' . $db->Quote($my->id) . ' ' . 'AND ' . $db->nameQuote('type') . '=' . $db->Quote('assigned'); $db->setQuery($query); $result = $db->loadObjectList(); if (count($result) > 0) { $result = array(); $result[] = $db->loadObjectList(); $rulesets = EasyBlogACLHelper::mapRules($result, $rules, $rulesets); } else { $result = array(); if (EasyBlogHelper::getJoomlaVersion() >= '1.6') { // get user's joomla usergroups ids. $groupIds = ''; $query = 'SELECT `group_id` FROM `#__user_usergroup_map` WHERE `user_id` = ' . $db->Quote($my->id); $db->setQuery($query); $groupIds = $db->loadResultArray(); $groups = array(); // get the last index. for ($i = 0; $i < count($groupIds); $i++) { $grpId =& $groupIds[$i]; $query = 'SELECT * FROM ' . $db->nameQuote('#__easyblog_acl_group') . ' ' . 'WHERE ' . $db->nameQuote('content_id') . '=' . $db->Quote($grpId) . ' ' . 'AND ' . $db->nameQuote('type') . '=' . $db->Quote('group'); $db->setQuery($query); $groups[] = $db->loadObjectList(); } // Allow explicit overrides in the groups // If user A is in group A (allow) and group B (not allowed) , user A should be allowed $result = array(); foreach ($groups as $group) { foreach ($group as $rule) { if (!isset($result[0][$rule->acl_id])) { $result[0][$rule->acl_id] = new stdClass(); } if (isset($result[0][$rule->acl_id]->acl_id) && $result[0][$rule->acl_id]->status != '1' || !isset($result[0][$rule->acl_id]->acl_id)) { $result[0][$rule->acl_id]->acl_id = $rule->acl_id; $result[0][$rule->acl_id]->status = $rule->status; } } } } else { $query = 'SELECT * FROM ' . $db->nameQuote('#__easyblog_acl_group') . ' ' . 'WHERE ' . $db->nameQuote('content_id') . '=' . $db->Quote($my->gid) . ' ' . 'AND ' . $db->nameQuote('type') . '=' . $db->Quote('group'); $db->setQuery($query); $result[] = $db->loadObjectList(); } $rulesets = EasyBlogACLHelper::mapRules($result, $rules, $rulesets); } } else { if (EasyBlogHelper::getJoomlaVersion() >= '1.6') { // Cannot rely on JComponentHelper::getParams( 'com_users' )->get( 'guest_usergroup' ) because Joomla 3.2.0 onwards always returns 13. $user = JFactory::getUser(); $tmp = $user->getAuthorisedGroups(); $gid = $tmp[0]; $query = 'SELECT * FROM ' . $db->nameQuote('#__easyblog_acl_group') . ' ' . 'WHERE ' . $db->nameQuote('content_id') . '=' . $db->Quote($gid) . ' ' . 'AND ' . $db->nameQuote('type') . '=' . $db->Quote('group'); $db->setQuery($query); $groups[] = $db->loadObjectList(); // Allow explicit overrides in the groups // If user A is in group A (allow) and group B (not allowed) , user A should be allowed $result = array(); foreach ($groups as $group) { foreach ($group as $rule) { if (!isset($result[0][$rule->acl_id])) { $result[0][$rule->acl_id] = new stdClass(); } if (isset($result[0][$rule->acl_id]->acl_id) && $result[0][$rule->acl_id]->status != '1' || !isset($result[0][$rule->acl_id]->acl_id)) { $result[0][$rule->acl_id]->acl_id = $rule->acl_id; $result[0][$rule->acl_id]->status = $rule->status; } } } $rulesets = EasyBlogACLHelper::mapRules($result, $rules, $rulesets); } else { $rulesets->id = '0'; $rulesets->name = 'guest'; $rulesets->group = 'none'; foreach ($rules as $rule) { $rulesets->rules->{$rule->action} = 0; } } } $rulesData[$my->id] = $rulesets; } return $rulesData[$my->id]; }