Exemplo n.º 1
0
 /**
  * Test enrol_self_check_group_enrolment_key
  */
 public function test_enrol_self_check_group_enrolment_key()
 {
     global $DB;
     self::resetAfterTest(true);
     // Test in course with groups.
     $course = self::getDataGenerator()->create_course(array('groupmode' => SEPARATEGROUPS, 'groupmodeforce' => 1));
     $group1 = $this->getDataGenerator()->create_group(array('courseid' => $course->id));
     $group2 = $this->getDataGenerator()->create_group(array('courseid' => $course->id, 'enrolmentkey' => 'thepassword'));
     $result = enrol_self_check_group_enrolment_key($course->id, 'invalidpassword');
     $this->assertFalse($result);
     $result = enrol_self_check_group_enrolment_key($course->id, 'thepassword');
     $this->assertTrue($result);
     // Test disabling group options.
     $course->groupmode = NOGROUPS;
     $course->groupmodeforce = 0;
     $DB->update_record('course', $course);
     $result = enrol_self_check_group_enrolment_key($course->id, 'invalidpassword');
     $this->assertFalse($result);
     $result = enrol_self_check_group_enrolment_key($course->id, 'thepassword');
     $this->assertTrue($result);
     // Test without groups.
     $othercourse = self::getDataGenerator()->create_course();
     $result = enrol_self_check_group_enrolment_key($othercourse->id, 'thepassword');
     $this->assertFalse($result);
 }
Exemplo n.º 2
0
 /**
  * Self enrol the current user in the given course.
  *
  * @param int $courseid id of course
  * @param string $password enrolment key
  * @param int $instanceid instance id of self enrolment plugin
  * @return array of warnings and status result
  * @since Moodle 3.0
  * @throws moodle_exception
  */
 public static function enrol_user($courseid, $password = '', $instanceid = 0)
 {
     global $CFG;
     require_once $CFG->libdir . '/enrollib.php';
     $params = self::validate_parameters(self::enrol_user_parameters(), array('courseid' => $courseid, 'password' => $password, 'instanceid' => $instanceid));
     $warnings = array();
     $course = get_course($params['courseid']);
     $context = context_course::instance($course->id);
     self::validate_context(context_system::instance());
     if (!$course->visible and !has_capability('moodle/course:viewhiddencourses', $context)) {
         throw new moodle_exception('coursehidden');
     }
     // Retrieve the self enrolment plugin.
     $enrol = enrol_get_plugin('self');
     if (empty($enrol)) {
         throw new moodle_exception('canntenrol', 'enrol_self');
     }
     // We can expect multiple self-enrolment instances.
     $instances = array();
     $enrolinstances = enrol_get_instances($course->id, true);
     foreach ($enrolinstances as $courseenrolinstance) {
         if ($courseenrolinstance->enrol == "self") {
             // Instance specified.
             if (!empty($params['instanceid'])) {
                 if ($courseenrolinstance->id == $params['instanceid']) {
                     $instances[] = $courseenrolinstance;
                     break;
                 }
             } else {
                 $instances[] = $courseenrolinstance;
             }
         }
     }
     if (empty($instances)) {
         throw new moodle_exception('canntenrol', 'enrol_self');
     }
     // Try to enrol the user in the instance/s.
     $enrolled = false;
     foreach ($instances as $instance) {
         $enrolstatus = $enrol->can_self_enrol($instance);
         if ($enrolstatus === true) {
             if ($instance->password and $params['password'] !== $instance->password) {
                 // Check if we are using group enrolment keys.
                 if ($instance->customint1) {
                     require_once $CFG->dirroot . "/enrol/self/locallib.php";
                     if (!enrol_self_check_group_enrolment_key($course->id, $params['password'])) {
                         $warnings[] = array('item' => 'instance', 'itemid' => $instance->id, 'warningcode' => '2', 'message' => get_string('passwordinvalid', 'enrol_self'));
                         continue;
                     }
                 } else {
                     if ($enrol->get_config('showhint')) {
                         $hint = core_text::substr($instance->password, 0, 1);
                         $warnings[] = array('item' => 'instance', 'itemid' => $instance->id, 'warningcode' => '3', 'message' => s(get_string('passwordinvalidhint', 'enrol_self', $hint)));
                         continue;
                     } else {
                         $warnings[] = array('item' => 'instance', 'itemid' => $instance->id, 'warningcode' => '4', 'message' => get_string('passwordinvalid', 'enrol_self'));
                         continue;
                     }
                 }
             }
             // Do the enrolment.
             $data = array('enrolpassword' => $params['password']);
             $enrol->enrol_self($instance, (object) $data);
             $enrolled = true;
             break;
         } else {
             $warnings[] = array('item' => 'instance', 'itemid' => $instance->id, 'warningcode' => '1', 'message' => $enrolstatus);
         }
     }
     $result = array();
     $result['status'] = $enrolled;
     $result['warnings'] = $warnings;
     return $result;
 }
Exemplo n.º 3
0
 public function validation($data, $files)
 {
     global $DB, $CFG;
     $errors = parent::validation($data, $files);
     $instance = $this->instance;
     if ($this->toomany) {
         $errors['notice'] = get_string('error');
         return $errors;
     }
     if ($instance->password) {
         if ($data['enrolpassword'] !== $instance->password) {
             if ($instance->customint1) {
                 // Check group enrolment key.
                 if (!enrol_self_check_group_enrolment_key($instance->courseid, $data['enrolpassword'])) {
                     // We can not hint because there are probably multiple passwords.
                     $errors['enrolpassword'] = get_string('passwordinvalid', 'enrol_self');
                 }
             } else {
                 $plugin = enrol_get_plugin('self');
                 if ($plugin->get_config('showhint')) {
                     $hint = core_text::substr($instance->password, 0, 1);
                     $errors['enrolpassword'] = get_string('passwordinvalidhint', 'enrol_self', $hint);
                 } else {
                     $errors['enrolpassword'] = get_string('passwordinvalid', 'enrol_self');
                 }
             }
         }
     }
     return $errors;
 }