diff --git a/admin/tool/generator/classes/course_backend.php b/admin/tool/generator/classes/course_backend.php index bd2cf9f..1ec835f 100644 --- a/admin/tool/generator/classes/course_backend.php +++ b/admin/tool/generator/classes/course_backend.php @@ -95,6 +95,11 @@ class tool_generator_course_backend extends tool_generator_backend { private $userids; /** + * @const string To identify student account + */ + const USER_TOOL_GENERATOR = 'user'; + + /** * Constructs object ready to create course. * * @param string $shortname Course shortname @@ -178,7 +183,7 @@ class tool_generator_course_backend extends tool_generator_backend { // Make course. $this->course = $this->create_course(); - $this->create_users(); + $this->create_users(self::USER_TOOL_GENERATOR, self::$paramusers[$this->size]); $this->create_pages(); $this->create_small_files(); $this->create_big_files(); @@ -214,32 +219,34 @@ class tool_generator_course_backend extends tool_generator_backend { * Creates a number of user accounts and enrols them on the course. * Note: Existing user accounts that were created by this system are * reused if available. + * + * @param string $usertype Type of user (user, manager, teacher, etc) + * @param int $count Number of user account to create */ - private function create_users() { + private function create_users($usertype, $count) { global $DB; - // Work out total number of users. - $count = self::$paramusers[$this->size]; + $username = $usertype . '_tool_generator_'; // Get existing users in order. We will 'fill up holes' in this up to // the required number. $this->log('checkaccounts', $count); $nextnumber = 1; $rs = $DB->get_recordset_select('user', $DB->sql_like('username', '?'), - array('tool_generator_%'), 'username', 'id, username'); + array($username . '%'), 'username', 'id, username'); foreach ($rs as $rec) { // Extract number from username. $matches = array(); - if (!preg_match('~^tool_generator_([0-9]{6})$~', $rec->username, $matches)) { + if (!preg_match('~^'.$username.'([0-9]{6})$~', $rec->username, $matches)) { continue; } $number = (int)$matches[1]; // Create missing users in range up to this. if ($number != $nextnumber) { - $this->create_user_accounts($nextnumber, min($number - 1, $count)); + $this->create_user_accounts($nextnumber, min($number - 1, $count), $usertype); } else { - $this->userids[$number] = (int)$rec->id; + $this->{$usertype .'ids'}[$number] = (int)$rec->id; } // Stop if we've got enough users. @@ -252,32 +259,34 @@ class tool_generator_course_backend extends tool_generator_backend { // Create users from end of existing range. if ($nextnumber <= $count) { - $this->create_user_accounts($nextnumber, $count); + $this->create_user_accounts($nextnumber, $count, $usertype); } // Assign all users to course. - $this->log('enrol', $count, true); - - $enrolplugin = enrol_get_plugin('manual'); - $instances = enrol_get_instances($this->course->id, true); - foreach ($instances as $instance) { - if ($instance->enrol === 'manual') { - break; + if ($usertype === self::USER_TOOL_GENERATOR) { + $this->log('enrol', $count, true); + + $enrolplugin = enrol_get_plugin('manual'); + $instances = enrol_get_instances($this->course->id, true); + foreach ($instances as $instance) { + if ($instance->enrol === 'manual') { + break; + } } - } - if ($instance->enrol !== 'manual') { - throw new coding_exception('No manual enrol plugin in course'); - } - $role = $DB->get_record('role', array('shortname' => 'student'), '*', MUST_EXIST); + if ($instance->enrol !== 'manual') { + throw new coding_exception('No manual enrol plugin in course'); + } + $role = $DB->get_record('role', array('shortname' => 'student'), '*', MUST_EXIST); - for ($number = 1; $number <= $count; $number++) { - // Enrol user. - $enrolplugin->enrol_user($instance, $this->userids[$number], $role->id); - $this->dot($number, $count); + for ($number = 1; $number <= $count; $number++) { + // Enrol user. + $enrolplugin->enrol_user($instance, $this->{$usertype . 'ids'}[$number], $role->id); + $this->dot($number, $count); + } } // Sets the pointer at the beginning to be aware of the users we use. - reset($this->userids); + reset($this->{$usertype . 'ids'}); $this->end_log(); } @@ -287,8 +296,9 @@ class tool_generator_course_backend extends tool_generator_backend { * * @param int $first Number of first user * @param int $last Number of last user + * @param string $usertype Type of user */ - private function create_user_accounts($first, $last) { + private function create_user_accounts($first, $last, $usertype) { global $CFG; $this->log('createaccounts', (object)array('from' => $first, 'to' => $last), true); @@ -296,11 +306,8 @@ class tool_generator_course_backend extends tool_generator_backend { $done = 0; for ($number = $first; $number <= $last; $number++, $done++) { // Work out username with 6-digit number. - $textnumber = (string)$number; - while (strlen($textnumber) < 6) { - $textnumber = '0' . $textnumber; - } - $username = 'tool_generator_' . $textnumber; + $username = $usertype . '_tool_generator_'; + $username = $username . str_pad($number, 6, '0', STR_PAD_LEFT); // Create user account. $record = array('firstname' => get_string('firstname', 'tool_generator'), @@ -312,7 +319,7 @@ class tool_generator_course_backend extends tool_generator_backend { } $user = $this->generator->create_user($record); - $this->userids[$number] = (int)$user->id; + $this->{$usertype . 'ids'}[$number] = (int)$user->id; $this->dot($done, $count); } $this->end_log(); diff --git a/admin/tool/generator/tests/maketestcourse_test.php b/admin/tool/generator/tests/maketestcourse_test.php index a5150b1..66f77bd 100644 --- a/admin/tool/generator/tests/maketestcourse_test.php +++ b/admin/tool/generator/tests/maketestcourse_test.php @@ -49,7 +49,7 @@ class tool_generator_maketestcourse_testcase extends advanced_testcase { // Check user is enrolled. $users = get_enrolled_users($context); $this->assertEquals(1, count($users)); - $this->assertEquals('tool_generator_000001', reset($users)->username); + $this->assertEquals('user_tool_generator_000001', reset($users)->username); // Check there's a page on the course. $pages = $modinfo->get_instances_of('page');