Ignore:
Timestamp:
May 2, 2016, 12:09:23 PM (3 years ago)
Author:
jrpelegrina
Message:

Updated to moodle 3.0.3

File:
1 edited

Legend:

Unmodified
Added
Removed
  • moodle/trunk/fuentes/enrol/self/externallib.php

    r136 r1331  
    5353     * @param int $instanceid instance id of self enrolment plugin.
    5454     * @return array instance information.
     55     * @throws moodle_exception
    5556     */
    5657    public static function get_instance_info($instanceid) {
     
    6768        }
    6869
     70        // Note that we can't use validate_context because the user is not enrolled in the course.
     71        require_login(null, false, null, false, true);
     72
    6973        $enrolinstance = $DB->get_record('enrol', array('id' => $params['instanceid']), '*', MUST_EXIST);
    70         $coursecontext = context_course::instance($enrolinstance->courseid);
    71         $categorycontext = $coursecontext->get_parent_context();
    72         self::validate_context($categorycontext);
     74        $course = $DB->get_record('course', array('id' => $enrolinstance->courseid), '*', MUST_EXIST);
     75        $context = context_course::instance($course->id);
     76        if (!$course->visible and !has_capability('moodle/course:viewhiddencourses', $context)) {
     77            throw new moodle_exception('coursehidden');
     78        }
    7379
    7480        $instanceinfo = (array) $enrolplugin->get_enrol_info($enrolinstance);
     
    98104        );
    99105    }
     106
     107    /**
     108     * Returns description of method parameters
     109     *
     110     * @return external_function_parameters
     111     * @since Moodle 3.0
     112     */
     113    public static function enrol_user_parameters() {
     114        return new external_function_parameters(
     115            array(
     116                'courseid' => new external_value(PARAM_INT, 'Id of the course'),
     117                'password' => new external_value(PARAM_RAW, 'Enrolment key', VALUE_DEFAULT, ''),
     118                'instanceid' => new external_value(PARAM_INT, 'Instance id of self enrolment plugin.', VALUE_DEFAULT, 0)
     119            )
     120        );
     121    }
     122
     123    /**
     124     * Self enrol the current user in the given course.
     125     *
     126     * @param int $courseid id of course
     127     * @param string $password enrolment key
     128     * @param int $instanceid instance id of self enrolment plugin
     129     * @return array of warnings and status result
     130     * @since Moodle 3.0
     131     * @throws moodle_exception
     132     */
     133    public static function enrol_user($courseid, $password = '', $instanceid = 0) {
     134        global $CFG;
     135
     136        require_once($CFG->libdir . '/enrollib.php');
     137
     138        $params = self::validate_parameters(self::enrol_user_parameters(),
     139                                            array(
     140                                                'courseid' => $courseid,
     141                                                'password' => $password,
     142                                                'instanceid' => $instanceid
     143                                            ));
     144
     145        $warnings = array();
     146
     147        $course = get_course($params['courseid']);
     148        $context = context_course::instance($course->id);
     149        // Note that we can't use validate_context because the user is not enrolled in the course.
     150        require_login(null, false, null, false, true);
     151
     152        if (!$course->visible and !has_capability('moodle/course:viewhiddencourses', $context)) {
     153            throw new moodle_exception('coursehidden');
     154        }
     155
     156        // Retrieve the self enrolment plugin.
     157        $enrol = enrol_get_plugin('self');
     158        if (empty($enrol)) {
     159            throw new moodle_exception('canntenrol', 'enrol_self');
     160        }
     161
     162        // We can expect multiple self-enrolment instances.
     163        $instances = array();
     164        $enrolinstances = enrol_get_instances($course->id, true);
     165        foreach ($enrolinstances as $courseenrolinstance) {
     166            if ($courseenrolinstance->enrol == "self") {
     167                // Instance specified.
     168                if (!empty($params['instanceid'])) {
     169                    if ($courseenrolinstance->id == $params['instanceid']) {
     170                        $instances[] = $courseenrolinstance;
     171                        break;
     172                    }
     173                } else {
     174                    $instances[] = $courseenrolinstance;
     175                }
     176
     177            }
     178        }
     179        if (empty($instances)) {
     180            throw new moodle_exception('canntenrol', 'enrol_self');
     181        }
     182
     183        // Try to enrol the user in the instance/s.
     184        $enrolled = false;
     185        foreach ($instances as $instance) {
     186            $enrolstatus = $enrol->can_self_enrol($instance);
     187            if ($enrolstatus === true) {
     188                if ($instance->password and $params['password'] !== $instance->password) {
     189
     190                    // Check if we are using group enrolment keys.
     191                    if ($instance->customint1) {
     192                        require_once($CFG->dirroot . "/enrol/self/locallib.php");
     193
     194                        if (!enrol_self_check_group_enrolment_key($course->id, $params['password'])) {
     195                            $warnings[] = array(
     196                                'item' => 'instance',
     197                                'itemid' => $instance->id,
     198                                'warningcode' => '2',
     199                                'message' => get_string('passwordinvalid', 'enrol_self')
     200                            );
     201                            continue;
     202                        }
     203                    } else {
     204                        if ($enrol->get_config('showhint')) {
     205                            $hint = core_text::substr($instance->password, 0, 1);
     206                            $warnings[] = array(
     207                                'item' => 'instance',
     208                                'itemid' => $instance->id,
     209                                'warningcode' => '3',
     210                                'message' => s(get_string('passwordinvalidhint', 'enrol_self', $hint)) // message is PARAM_TEXT.
     211                            );
     212                            continue;
     213                        } else {
     214                            $warnings[] = array(
     215                                'item' => 'instance',
     216                                'itemid' => $instance->id,
     217                                'warningcode' => '4',
     218                                'message' => get_string('passwordinvalid', 'enrol_self')
     219                            );
     220                            continue;
     221                        }
     222                    }
     223                }
     224
     225                // Do the enrolment.
     226                $data = array('enrolpassword' => $params['password']);
     227                $enrol->enrol_self($instance, (object) $data);
     228                $enrolled = true;
     229                break;
     230            } else {
     231                $warnings[] = array(
     232                    'item' => 'instance',
     233                    'itemid' => $instance->id,
     234                    'warningcode' => '1',
     235                    'message' => $enrolstatus
     236                );
     237            }
     238        }
     239
     240        $result = array();
     241        $result['status'] = $enrolled;
     242        $result['warnings'] = $warnings;
     243        return $result;
     244    }
     245
     246    /**
     247     * Returns description of method result value
     248     *
     249     * @return external_description
     250     * @since Moodle 3.0
     251     */
     252    public static function enrol_user_returns() {
     253        return new external_single_structure(
     254            array(
     255                'status' => new external_value(PARAM_BOOL, 'status: true if the user is enrolled, false otherwise'),
     256                'warnings' => new external_warnings()
     257            )
     258        );
     259    }
    100260}
Note: See TracChangeset for help on using the changeset viewer.