本文整理匯總了PHP中JAccessRules::mergeCollection方法的典型用法代碼示例。如果您正苦於以下問題:PHP JAccessRules::mergeCollection方法的具體用法?PHP JAccessRules::mergeCollection怎麽用?PHP JAccessRules::mergeCollection使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在類JAccessRules
的用法示例。
在下文中一共展示了JAccessRules::mergeCollection方法的4個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的PHP代碼示例。
示例1: getAssetRules
/**
* Method to return the JAccessRules object for an asset. The returned object can optionally hold
* only the rules explicitly set for the asset or the summation of all inherited rules from
* parent assets and explicit rules.
*
* @param mixed $asset Integer asset id or the name of the asset as a string.
* @param boolean $recursive True to return the rules object with inherited rules.
*
* @return JAccessRules JAccessRules object for the asset.
*
* @since 11.1
*/
public static function getAssetRules($asset, $recursive = false)
{
// Get the database connection object.
$db = JFactory::getDbo();
// Build the database query to get the rules for the asset.
$query = $db->getQuery(true);
$query->select($recursive ? 'b.rules' : 'a.rules');
$query->from('#__assets AS a');
// SQLsrv change
$query->group($recursive ? 'b.id, b.rules, b.lft' : 'a.id, a.rules, a.lft');
// If the asset identifier is numeric assume it is a primary key, else lookup by name.
if (is_numeric($asset)) {
$query->where('(a.id = ' . (int) $asset . ')');
} else {
$query->where('(a.name = ' . $db->quote($asset) . ')');
}
// If we want the rules cascading up to the global asset node we need a self-join.
if ($recursive) {
$query->leftJoin('#__assets AS b ON b.lft <= a.lft AND b.rgt >= a.rgt');
$query->order('b.lft');
}
// Execute the query and load the rules from the result.
$db->setQuery($query);
$result = $db->loadColumn();
// Get the root even if the asset is not found and in recursive mode
if (empty($result)) {
$db = JFactory::getDbo();
$assets = JTable::getInstance('Asset', 'JTable', array('dbo' => $db));
$rootId = $assets->getRootId();
$query = $db->getQuery(true);
$query->select('rules');
$query->from('#__assets');
$query->where('id = ' . $db->quote($rootId));
$db->setQuery($query);
$result = $db->loadResult();
$result = array($result);
}
// Instantiate and return the JAccessRules object for the asset rules.
$rules = new JAccessRules();
$rules->mergeCollection($result);
return $rules;
}
示例2: getAssetRules
private static function getAssetRules($asset)
{
$db = JFactory::getDBO();
if (is_numeric($asset)) {
$query = "SELECT b.rules\n FROM #__assets AS a LEFT JOIN #__assets AS b ON b.lft <= a.lft AND b.rgt >= a.rgt\n WHERE (a.id = '{$asset}' OR a.parent_id=0) GROUP BY b.id, b.rules, b.lft ORDER BY b.lft";
} else {
$query = "SELECT b.rules\n FROM #__assets AS a LEFT JOIN #__assets AS b ON b.lft <= a.lft AND b.rgt >= a.rgt\n WHERE (a.name = '{$asset}' OR a.parent_id=0) GROUP BY b.id, b.rules, b.lft ORDER BY b.lft";
}
$db->setQuery($query);
$result = $db->loadResultArray();
if (empty($result)) {
$query = "SELECT rules\n FROM #__assets\n WHERE parent_id=0";
$db->setQuery($query);
$result = $db->loadResultArray();
}
$rules = new JAccessRules();
$rules->mergeCollection($result);
return $rules;
}
示例3: getDefaultAssetValues
/**
* Gets the default asset values for a component.
*
* @param $string $component The component asset name to search for
*
* @return JAccessRules The JAccessRules object for the asset
*/
protected function getDefaultAssetValues($component, $try = true)
{
// Need to find the asset id by the name of the component.
$db = JFactory::getDbo();
$query = $db->getQuery(true)->select($db->quoteName('id'))->from($db->quoteName('#__assets'))->where($db->quoteName('name') . ' = ' . $db->quote($component));
$db->setQuery($query);
$db->execute();
if ($db->loadRowList()) {
// asset alread set so use saved rules
$assetId = (int) $db->loadResult();
return JAccess::getAssetRules($assetId);
} elseif ($try) {
$try = explode('.', $component);
$result = $this->getDefaultAssetValues($try[0], false);
if ($result instanceof JAccessRules) {
if (isset($try[1])) {
$_result = (string) $result;
$_result = json_decode($_result);
foreach ($_result as $name => &$rule) {
$v = explode('.', $name);
if ($try[1] !== $v[0]) {
// remove since it is not part of this view
unset($_result->{$name});
} else {
// clear the value since we inherit
$rule = array();
}
}
// check if there are any view values remaining
if (count($_result)) {
$_result = json_encode($_result);
$_result = array($_result);
// Instantiate and return the JAccessRules object for the asset rules.
$rules = new JAccessRules();
$rules->mergeCollection($_result);
return $rules;
}
}
return $result;
}
}
return JAccess::getAssetRules(0);
}
示例4: getAssetRules
/**
* Method to return the JAccessRules object for an asset. The returned object can optionally hold
* only the rules explicitly set for the asset or the summation of all inherited rules from
* parent assets and explicit rules.
*
* @param mixed $asset Integer asset id or the name of the asset as a string.
* @param boolean $recursive True to return the rules object with inherited rules.
* @param boolean $recursiveParentAsset True to calculate the rule also based on inherited component/extension rules.
*
* @return JAccessRules JAccessRules object for the asset.
*
* @since 11.1
*/
public static function getAssetRules($asset, $recursive = false, $recursiveParentAsset = true)
{
// Get instance of the Profiler:
$_PROFILER = JProfiler::getInstance('Application');
$extensionName = self::getExtensionNameFromAsset($asset);
// Almost all calls should have recursive set to true
// so we'll get to take advantage of preloading:
if ($recursive && $recursiveParentAsset && isset(self::$assetPermissionsByName[$extensionName]) && isset(self::$assetPermissionsByName[$extensionName][$asset])) {
// Mark in the profiler.
JDEBUG ? $_PROFILER->mark('Start JAccess::getAssetRules New (' . $asset . ')') : null;
$assetType = self::getAssetType($asset);
$assetId = self::$assetPermissionsByName[$extensionName][$asset]->id;
$ancestors = array_reverse(self::getAssetAncestors($assetType, $assetId));
// Collects permissions for each $asset
$collected = array();
foreach ($ancestors as $id) {
$collected[] = self::$assetPermissionsById[$extensionName][$id]->rules;
}
/**
* Hashing the collected rules allows us to store
* only one instance of the JAccessRules object for
* Assets that have the same exact permissions...
* it's a great way to save some memory.
*/
$hash = md5(implode(',', $collected));
if (!isset(self::$assetRulesIdentities[$hash])) {
$rules = new JAccessRules();
$rules->mergeCollection($collected);
self::$assetRulesIdentities[$hash] = $rules;
}
// Mark in the profiler.
JDEBUG ? $_PROFILER->mark('Finish JAccess::getAssetRules New (' . $asset . ')') : null;
return self::$assetRulesIdentities[$hash];
} else {
// Mark in the profiler.
JDEBUG ? $_PROFILER->mark('Start JAccess::getAssetRules Old (' . $asset . ')') : null;
if ($asset === "1") {
// There's no need to process it with the
// recursive method for the Root Asset ID.
$recursive = false;
}
// Get the database connection object.
$db = JFactory::getDbo();
// Build the database query to get the rules for the asset.
$query = $db->getQuery(true)->select($recursive ? 'b.rules' : 'a.rules')->from('#__assets AS a');
$extensionString = '';
if ($recursiveParentAsset && ($extensionName !== $asset || is_numeric($asset))) {
$extensionString = ' OR a.name = ' . $db->quote($extensionName);
}
$recursiveString = '';
if ($recursive) {
$recursiveString = ' OR a.parent_id=0';
}
// If the asset identifier is numeric assume it is a primary key, else lookup by name.
if (is_numeric($asset)) {
$query->where('(a.id = ' . (int) $asset . $extensionString . $recursiveString . ')');
} else {
$query->where('(a.name = ' . $db->quote($asset) . $extensionString . $recursiveString . ')');
}
// If we want the rules cascading up to the global asset node we need a self-join.
if ($recursive) {
$query->join('LEFT', '#__assets AS b ON b.lft <= a.lft AND b.rgt >= a.rgt')->order('b.lft');
}
// Execute the query and load the rules from the result.
$db->setQuery($query);
$result = $db->loadColumn();
// Get the root even if the asset is not found and in recursive mode
if (empty($result)) {
$db = JFactory::getDbo();
$assets = JTable::getInstance('Asset', 'JTable', array('dbo' => $db));
$rootId = $assets->getRootId();
$query->clear()->select('rules')->from('#__assets')->where('id = ' . $db->quote($rootId));
$db->setQuery($query);
$result = $db->loadResult();
$result = array($result);
}
// Instantiate and return the JAccessRules object for the asset rules.
$rules = new JAccessRules();
$rules->mergeCollection($result);
JDEBUG ? $_PROFILER->mark('Finish JAccess::getAssetRules Old (' . $asset . ')') : null;
return $rules;
}
}