当前位置: 首页>>代码示例>>PHP>>正文


PHP get_context_info_list函数代码示例

本文整理汇总了PHP中get_context_info_list函数的典型用法代码示例。如果您正苦于以下问题:PHP get_context_info_list函数的具体用法?PHP get_context_info_list怎么用?PHP get_context_info_list使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。


在下文中一共展示了get_context_info_list函数的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: get_users_by_capability

/**
 * Who has this capability in this context?
 *
 * This can be a very expensive call - use sparingly and keep
 * the results if you are going to need them again soon.
 *
 * Note if $fields is empty this function attempts to get u.*
 * which can get rather large - and has a serious perf impact
 * on some DBs.
 *
 * @param context $context
 * @param string|array $capability - capability name(s)
 * @param string $fields - fields to be pulled. The user table is aliased to 'u'. u.id MUST be included.
 * @param string $sort - the sort order. Default is lastaccess time.
 * @param mixed $limitfrom - number of records to skip (offset)
 * @param mixed $limitnum - number of records to fetch
 * @param string|array $groups - single group or array of groups - only return
 *               users who are in one of these group(s).
 * @param string|array $exceptions - list of users to exclude, comma separated or array
 * @param bool $doanything_ignored not used any more, admin accounts are never returned
 * @param bool $view_ignored - use get_enrolled_sql() instead
 * @param bool $useviewallgroups if $groups is set the return users who
 *               have capability both $capability and moodle/site:accessallgroups
 *               in this context, as well as users who have $capability and who are
 *               in $groups.
 * @return mixed
 */
function get_users_by_capability(context $context, $capability, $fields = '', $sort = '', $limitfrom = '', $limitnum = '', $groups = '', $exceptions = '', $doanything_ignored = null, $view_ignored = null, $useviewallgroups = false)
{
    global $CFG, $DB;
    $defaultuserroleid = isset($CFG->defaultuserroleid) ? $CFG->defaultuserroleid : 0;
    $defaultfrontpageroleid = isset($CFG->defaultfrontpageroleid) ? $CFG->defaultfrontpageroleid : 0;
    $ctxids = trim($context->path, '/');
    $ctxids = str_replace('/', ',', $ctxids);
    // Context is the frontpage
    $iscoursepage = false;
    // coursepage other than fp
    $isfrontpage = false;
    if ($context->contextlevel == CONTEXT_COURSE) {
        if ($context->instanceid == SITEID) {
            $isfrontpage = true;
        } else {
            $iscoursepage = true;
        }
    }
    $isfrontpage = $isfrontpage || is_inside_frontpage($context);
    $caps = (array) $capability;
    // construct list of context paths bottom-->top
    list($contextids, $paths) = get_context_info_list($context);
    // we need to find out all roles that have these capabilities either in definition or in overrides
    $defs = array();
    list($incontexts, $params) = $DB->get_in_or_equal($contextids, SQL_PARAMS_NAMED, 'con');
    list($incaps, $params2) = $DB->get_in_or_equal($caps, SQL_PARAMS_NAMED, 'cap');
    $params = array_merge($params, $params2);
    $sql = "SELECT rc.id, rc.roleid, rc.permission, rc.capability, ctx.path\n              FROM {role_capabilities} rc\n              JOIN {context} ctx on rc.contextid = ctx.id\n             WHERE rc.contextid {$incontexts} AND rc.capability {$incaps}";
    $rcs = $DB->get_records_sql($sql, $params);
    foreach ($rcs as $rc) {
        $defs[$rc->capability][$rc->path][$rc->roleid] = $rc->permission;
    }
    // go through the permissions bottom-->top direction to evaluate the current permission,
    // first one wins (prohibit is an exception that always wins)
    $access = array();
    foreach ($caps as $cap) {
        foreach ($paths as $path) {
            if (empty($defs[$cap][$path])) {
                continue;
            }
            foreach ($defs[$cap][$path] as $roleid => $perm) {
                if ($perm == CAP_PROHIBIT) {
                    $access[$cap][$roleid] = CAP_PROHIBIT;
                    continue;
                }
                if (!isset($access[$cap][$roleid])) {
                    $access[$cap][$roleid] = (int) $perm;
                }
            }
        }
    }
    // make lists of roles that are needed and prohibited in this context
    $needed = array();
    // one of these is enough
    $prohibited = array();
    // must not have any of these
    foreach ($caps as $cap) {
        if (empty($access[$cap])) {
            continue;
        }
        foreach ($access[$cap] as $roleid => $perm) {
            if ($perm == CAP_PROHIBIT) {
                unset($needed[$cap][$roleid]);
                $prohibited[$cap][$roleid] = true;
            } else {
                if ($perm == CAP_ALLOW and empty($prohibited[$cap][$roleid])) {
                    $needed[$cap][$roleid] = true;
                }
            }
        }
        if (empty($needed[$cap]) or !empty($prohibited[$cap][$defaultuserroleid])) {
            // easy, nobody has the permission
            unset($needed[$cap]);
//.........这里部分代码省略.........
开发者ID:rolandovanegas,项目名称:moodle,代码行数:101,代码来源:accesslib.php

示例2: get_with_capability_join

/**
 * Gets sql joins for finding users with a capability in the given context
 *
 * @param context $context
 * @param string $capability
 * @param string $useridcolumn e.g. u.id
 * @return \core\dml\sql_join Contains joins, wheres, params
 */
function get_with_capability_join(context $context, $capability, $useridcolumn)
{
    global $DB, $CFG;
    // Use unique prefix just in case somebody makes some SQL magic with the result.
    static $i = 0;
    $i++;
    $prefix = 'eu' . $i . '_';
    // First find the course context.
    $coursecontext = $context->get_course_context();
    $isfrontpage = $coursecontext->instanceid == SITEID;
    $joins = array();
    $wheres = array();
    $params = array();
    list($contextids, $contextpaths) = get_context_info_list($context);
    list($incontexts, $cparams) = $DB->get_in_or_equal($contextids, SQL_PARAMS_NAMED, 'ctx');
    $cparams['cap'] = $capability;
    $defs = array();
    $sql = "SELECT rc.id, rc.roleid, rc.permission, ctx.path\n              FROM {role_capabilities} rc\n              JOIN {context} ctx on rc.contextid = ctx.id\n             WHERE rc.contextid {$incontexts} AND rc.capability = :cap";
    $rcs = $DB->get_records_sql($sql, $cparams);
    foreach ($rcs as $rc) {
        $defs[$rc->path][$rc->roleid] = $rc->permission;
    }
    $access = array();
    if (!empty($defs)) {
        foreach ($contextpaths as $path) {
            if (empty($defs[$path])) {
                continue;
            }
            foreach ($defs[$path] as $roleid => $perm) {
                if ($perm == CAP_PROHIBIT) {
                    $access[$roleid] = CAP_PROHIBIT;
                    continue;
                }
                if (!isset($access[$roleid])) {
                    $access[$roleid] = (int) $perm;
                }
            }
        }
    }
    unset($defs);
    // Make lists of roles that are needed and prohibited.
    $needed = array();
    // One of these is enough.
    $prohibited = array();
    // Must not have any of these.
    foreach ($access as $roleid => $perm) {
        if ($perm == CAP_PROHIBIT) {
            unset($needed[$roleid]);
            $prohibited[$roleid] = true;
        } else {
            if ($perm == CAP_ALLOW and empty($prohibited[$roleid])) {
                $needed[$roleid] = true;
            }
        }
    }
    $defaultuserroleid = isset($CFG->defaultuserroleid) ? $CFG->defaultuserroleid : 0;
    $defaultfrontpageroleid = isset($CFG->defaultfrontpageroleid) ? $CFG->defaultfrontpageroleid : 0;
    $nobody = false;
    if ($isfrontpage) {
        if (!empty($prohibited[$defaultuserroleid]) or !empty($prohibited[$defaultfrontpageroleid])) {
            $nobody = true;
        } else {
            if (!empty($needed[$defaultuserroleid]) or !empty($needed[$defaultfrontpageroleid])) {
                // Everybody not having prohibit has the capability.
                $needed = array();
            } else {
                if (empty($needed)) {
                    $nobody = true;
                }
            }
        }
    } else {
        if (!empty($prohibited[$defaultuserroleid])) {
            $nobody = true;
        } else {
            if (!empty($needed[$defaultuserroleid])) {
                // Everybody not having prohibit has the capability.
                $needed = array();
            } else {
                if (empty($needed)) {
                    $nobody = true;
                }
            }
        }
    }
    if ($nobody) {
        // Nobody can match so return some SQL that does not return any results.
        $wheres[] = "1 = 2";
    } else {
        if ($needed) {
            $ctxids = implode(',', $contextids);
            $roleids = implode(',', array_keys($needed));
//.........这里部分代码省略.........
开发者ID:janeklb,项目名称:moodle,代码行数:101,代码来源:accesslib.php


注:本文中的get_context_info_list函数示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。