Proyectos de Subversion Moodle

Rev

Rev 11 | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 11 Rev 1441
Línea 1478... Línea 1478...
1478
 * Unassign a capability from a role.
1478
 * Unassign a capability from a role.
1479
 *
1479
 *
1480
 * @param string $capability the name of the capability
1480
 * @param string $capability the name of the capability
1481
 * @param int $roleid the role id
1481
 * @param int $roleid the role id
1482
 * @param int|context $contextid null means all contexts
1482
 * @param int|context $contextid null means all contexts
-
 
1483
 * @param bool $showdebug if true, will show debugging messages
1483
 * @return boolean true or exception
1484
 * @return boolean true or exception
1484
 */
1485
 */
1485
function unassign_capability($capability, $roleid, $contextid = null) {
1486
function unassign_capability($capability, $roleid, $contextid = null, bool $showdebug = true) {
1486
    global $DB, $USER;
1487
    global $DB, $USER;
Línea 1487... Línea 1488...
1487
 
1488
 
1488
    // Capability must exist.
1489
    // Capability must exist.
1489
    if (!$capinfo = get_capability_info($capability)) {
1490
    if (!get_capability_info($capability, $showdebug)) {
1490
        throw new coding_exception("Capability '{$capability}' was not found! This has to be fixed in code.");
1491
        throw new coding_exception("Capability '{$capability}' was not found! This has to be fixed in code.");
Línea 1491... Línea 1492...
1491
    }
1492
    }
1492
 
1493
 
Línea 2458... Línea 2459...
2458
                        array_key_exists($cachedcap->name, $newcapdef) === false) {
2459
                        array_key_exists($cachedcap->name, $newcapdef) === false) {
Línea 2459... Línea 2460...
2459
 
2460
 
2460
                // Delete from roles.
2461
                // Delete from roles.
2461
                if ($roles = get_roles_with_capability($cachedcap->name)) {
2462
                if ($roles = get_roles_with_capability($cachedcap->name)) {
-
 
2463
                    foreach ($roles as $role) {
2462
                    foreach ($roles as $role) {
2464
                        if (!unassign_capability(
-
 
2465
                            capability: $cachedcap->name,
-
 
2466
                            roleid: $role->id,
-
 
2467
                            showdebug: false, // Suppress debugging messages in the get_capability_info().
2463
                        if (!unassign_capability($cachedcap->name, $role->id)) {
2468
                        )) {
2464
                            throw new \moodle_exception('cannotunassigncap', 'error', '',
2469
                            throw new \moodle_exception('cannotunassigncap', 'error', '',
2465
                                (object)array('cap' => $cachedcap->name, 'role' => $role->name));
2470
                                (object)array('cap' => $cachedcap->name, 'role' => $role->name));
2466
                        }
2471
                        }
2467
                    }
2472
                    }
Línea 2593... Línea 2598...
2593
}
2598
}
Línea 2594... Línea 2599...
2594
 
2599
 
2595
/**
2600
/**
2596
 * Returns capability information (cached)
2601
 * Returns capability information (cached)
2597
 *
2602
 *
-
 
2603
 * @param string $capabilityname the capability name.
2598
 * @param string $capabilityname
2604
 * @param bool $showdebug if true, will show debugging messages.
2599
 * @return ?stdClass object or null if capability not found
2605
 * @return ?stdClass object or null if capability not found
2600
 */
2606
 */
2601
function get_capability_info($capabilityname) {
2607
function get_capability_info(string $capabilityname, bool $showdebug = true): ?stdClass {
Línea 2602... Línea 2608...
2602
    $caps = get_all_capabilities();
2608
    $caps = get_all_capabilities();
2603
 
2609
 
2604
    // Check for deprecated capability.
2610
    // Check for deprecated capability.
2605
    if ($deprecatedinfo = get_deprecated_capability_info($capabilityname)) {
2611
    if ($deprecatedinfo = get_deprecated_capability_info($capabilityname)) {
2606
        if (!empty($deprecatedinfo['replacement'])) {
2612
        if (!empty($deprecatedinfo['replacement'])) {
2607
            // Let's try again with this capability if it exists.
2613
            // Let's try again with this capability if it exists.
2608
            if (isset($caps[$deprecatedinfo['replacement']])) {
2614
            if (isset($caps[$deprecatedinfo['replacement']])) {
-
 
2615
                $capabilityname = $deprecatedinfo['replacement'];
2609
                $capabilityname = $deprecatedinfo['replacement'];
2616
            } else {
2610
            } else {
2617
                if ($showdebug) {
-
 
2618
                    debugging("Capability '{$capabilityname}' was supposed to be replaced with ".
2611
                debugging("Capability '{$capabilityname}' was supposed to be replaced with ".
2619
                        "'{$deprecatedinfo['replacement']}', which does not exist !");
2612
                    "'{$deprecatedinfo['replacement']}', which does not exist !");
2620
                }
-
 
2621
            }
-
 
2622
        }
2613
            }
2623
 
2614
        }
2624
        if ($showdebug) {
-
 
2625
            $fullmessage = $deprecatedinfo['fullmessage'];
2615
        $fullmessage = $deprecatedinfo['fullmessage'];
2626
            debugging($fullmessage, DEBUG_DEVELOPER);
2616
        debugging($fullmessage, DEBUG_DEVELOPER);
2627
        }
2617
    }
2628
    }
2618
    if (!isset($caps[$capabilityname])) {
2629
    if (!isset($caps[$capabilityname])) {
Línea 2639... Línea 2650...
2639
        $components = [];
2650
        $components = [];
2640
        $alldeprecatedcaps = [];
2651
        $alldeprecatedcaps = [];
2641
        foreach ($allcaps as $cap) {
2652
        foreach ($allcaps as $cap) {
2642
            if (!in_array($cap['component'], $components)) {
2653
            if (!in_array($cap['component'], $components)) {
2643
                $components[] = $cap['component'];
2654
                $components[] = $cap['component'];
-
 
2655
 
2644
                $defpath = core_component::get_component_directory($cap['component']).'/db/access.php';
2656
                $componentdir = core_component::get_component_directory($cap['component']);
-
 
2657
                if ($componentdir === null) {
-
 
2658
                    continue;
-
 
2659
                }
-
 
2660
 
-
 
2661
                $defpath = "{$componentdir}/db/access.php";
2645
                if (file_exists($defpath)) {
2662
                if (file_exists($defpath)) {
2646
                    $deprecatedcapabilities = [];
2663
                    $deprecatedcapabilities = [];
2647
                    require($defpath);
2664
                    require($defpath);
2648
                    if (!empty($deprecatedcapabilities)) {
2665
                    if (!empty($deprecatedcapabilities)) {
2649
                        foreach ($deprecatedcapabilities as $cname => $cdef) {
2666
                        foreach ($deprecatedcapabilities as $cname => $cdef) {
Línea 2964... Línea 2981...
2964
 *       use role_get_names() if you need role names.
2981
 *       use role_get_names() if you need role names.
2965
 *
2982
 *
2966
 * @param context $context optional context for course role name aliases
2983
 * @param context $context optional context for course role name aliases
2967
 * @return array of role records with optional coursealias property
2984
 * @return array of role records with optional coursealias property
2968
 */
2985
 */
2969
function get_all_roles(context $context = null) {
2986
function get_all_roles(?context $context = null) {
2970
    global $DB;
2987
    global $DB;
Línea 2971... Línea 2988...
2971
 
2988
 
2972
    if (!$context or !$coursecontext = $context->get_course_context(false)) {
2989
    if (!$context or !$coursecontext = $context->get_course_context(false)) {
2973
        $coursecontext = null;
2990
        $coursecontext = null;
Línea 4403... Línea 4420...
4403
 
4420
 
4404
    if (!isset($USER->access)) {
4421
    if (!isset($USER->access)) {
4405
        load_all_capabilities();
4422
        load_all_capabilities();
Línea 4406... Línea -...
4406
    }
-
 
4407
 
-
 
4408
    // Make sure that course index is refreshed.
-
 
4409
    if ($coursecontext = $context->get_course_context()) {
-
 
4410
        core_courseformat\base::session_cache_reset(get_course($coursecontext->instanceid));
-
 
4411
    }
4423
    }
4412
 
4424
 
4413
    // Add the switch RA
4425
    // Add the switch RA
4414
    if ($roleid == 0) {
4426
    if ($roleid == 0) {
4415
        unset($USER->access['rsw'][$context->path]);
4427
        unset($USER->access['rsw'][$context->path]);
Línea 4416... Línea 4428...
4416
        return true;
4428
        return true;
Línea -... Línea 4429...
-
 
4429
    }
-
 
4430
 
-
 
4431
    $USER->access['rsw'][$context->path] = $roleid;
-
 
4432
 
-
 
4433
    // Dispatch the hook for post user switch.
-
 
4434
    $hook = new \core\hook\access\after_role_switched(
4417
    }
4435
            context: $context,
4418
 
4436
            roleid: $roleid
Línea 4419... Línea 4437...
4419
    $USER->access['rsw'][$context->path] = $roleid;
4437
        );
4420
 
4438
    \core\di::get(\core\hook\manager::class)->dispatch($hook);
Línea 4639... Línea 4657...
4639
 * @param array of role objects with a ->localname field containing the context-specific role name.
4657
 * @param array of role objects with a ->localname field containing the context-specific role name.
4640
 * @param int $rolenamedisplay
4658
 * @param int $rolenamedisplay
4641
 * @param bool $returnmenu true means id=>localname, false means id=>rolerecord
4659
 * @param bool $returnmenu true means id=>localname, false means id=>rolerecord
4642
 * @return array Array of context-specific role names, or role objects with a ->localname field added.
4660
 * @return array Array of context-specific role names, or role objects with a ->localname field added.
4643
 */
4661
 */
4644
function role_get_names(context $context = null, $rolenamedisplay = ROLENAME_ALIAS, $returnmenu = null) {
4662
function role_get_names(?context $context = null, $rolenamedisplay = ROLENAME_ALIAS, $returnmenu = null) {
4645
    return role_fix_names(get_all_roles($context), $context, $rolenamedisplay, $returnmenu);
4663
    return role_fix_names(get_all_roles($context), $context, $rolenamedisplay, $returnmenu);
4646
}
4664
}
Línea 4647... Línea 4665...
4647
 
4665
 
4648
/**
4666
/**
Línea 4652... Línea 4670...
4652
 * @param context $context the context, null means system context
4670
 * @param context $context the context, null means system context
4653
 * @param int $rolenamedisplay
4671
 * @param int $rolenamedisplay
4654
 * @param bool $returnmenu null means keep the same format as $roleoptions, true means id=>localname, false means id=>rolerecord
4672
 * @param bool $returnmenu null means keep the same format as $roleoptions, true means id=>localname, false means id=>rolerecord
4655
 * @return array Array of context-specific role names, or role objects with a ->localname field added.
4673
 * @return array Array of context-specific role names, or role objects with a ->localname field added.
4656
 */
4674
 */
4657
function role_fix_names($roleoptions, context $context = null, $rolenamedisplay = ROLENAME_ALIAS, $returnmenu = null) {
4675
function role_fix_names($roleoptions, ?context $context = null, $rolenamedisplay = ROLENAME_ALIAS, $returnmenu = null) {
4658
    global $DB;
4676
    global $DB;
Línea 4659... Línea 4677...
4659
 
4677
 
4660
    if (empty($roleoptions)) {
4678
    if (empty($roleoptions)) {
4661
        return array();
4679
        return array();