Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- define('CLI_SCRIPT', true);
- if (isset($_SERVER['REMOTE_ADDR'])) {
- exit(1);
- }
- require(dirname(__FILE__) . '/config.php');
- require_once($CFG->libdir . '/clilib.php');
- require_once($CFG->libdir . '/adminlib.php');
- require_once($CFG->dirroot . '/course/lib.php');
- require_once($CFG->libdir . '/testing/generator/data_generator.php');
- $DOMAIN = "example.com.au";
- $users = [
- [
- 'firstname' => 'Adam',
- 'lastname' => 'Ant',
- ],
- [
- 'firstname' => 'Bert',
- 'lastname' => 'Bee',
- ],
- [
- 'firstname' => 'Colin',
- 'lastname' => 'Carter',
- ],
- [
- 'firstname' => 'Diane',
- 'lastname' => 'Denver',
- ],
- [
- 'firstname' => 'Emily',
- 'lastname' => 'Echo',
- ],
- [
- 'firstname' => 'Fred',
- 'lastname' => 'Ford',
- ],
- [
- 'firstname' => 'Gemma',
- 'lastname' => 'Gannoway',
- ],
- [
- 'firstname' => 'Hannah',
- 'lastname' => 'Henderson',
- ],
- [
- 'firstname' => 'Indianna',
- 'lastname' => 'Ibis',
- ],
- [
- 'firstname' => 'James',
- 'lastname' => 'Jackoughby',
- ],
- [
- 'firstname' => 'Kenneth',
- 'lastname' => 'Kamber',
- ],
- [
- 'firstname' => 'Lauren',
- 'lastname' => 'Little',
- ],
- [
- 'firstname' => 'Mary',
- 'lastname' => 'Maverley',
- ],
- [
- 'firstname' => 'Niamh',
- 'lastname' => 'Nimble',
- ],
- [
- 'firstname' => 'Oscar',
- 'lastname' => 'Ostlethwaite',
- ],
- [
- 'firstname' => 'Penny',
- 'lastname' => 'Pemberton',
- ],
- [
- 'firstname' => 'Queenie',
- 'lastname' => 'Quip',
- ],
- [
- 'firstname' => 'Rodney',
- 'lastname' => 'Rover',
- ],
- [
- 'firstname' => 'Sally',
- 'lastname' => 'Simpson',
- ],
- [
- 'firstname' => 'Trevor',
- 'lastname' => 'Turnbull',
- ],
- [
- 'firstname' => 'Una',
- 'lastname' => 'Umber',
- ],
- [
- 'firstname' => 'Victor',
- 'lastname' => 'Venenerton',
- ],
- [
- 'firstname' => 'William',
- 'lastname' => 'Wordsworth',
- ],
- [
- 'firstname' => 'Xanthia',
- 'lastname' => 'Xim',
- ],
- [
- 'firstname' => 'Yarloo',
- 'lastname' => 'Yawley',
- ],
- [
- 'firstname' => 'Zain',
- 'lastname' => 'Zacks',
- ],
- ];
- $categories = [
- [
- 'name' => 'Students Union',
- 'idnumber' => 'su',
- 'enrolments' => [
- 'manager' => [
- 'zain',
- ],
- ],
- 'children' => [
- ],
- 'courses' => [
- [
- 'fullname' => 'Cinema',
- 'shortname' => 'Cinema',
- 'idnumber' => 'su-cinema',
- 'description' => '<p>Home of the student cinema</p>',
- 'enrolments' => [
- 'editingteacher' => [
- 'una',
- ],
- 'student' => [
- 'rodney',
- 'xanthia',
- 'niamh',
- 'oscar',
- ],
- ],
- ],
- [
- 'fullname' => 'Music Society',
- 'shortname' => 'Music',
- 'idnumber' => 'su-music',
- 'description' => '<p>See the calendar for details of our practices</p>',
- 'enrolments' => [
- 'editingteacher' => [
- 'penny',
- 'rodney',
- ],
- 'student' => [
- 'sally',
- 'una',
- 'yarloo',
- 'diane',
- 'kenneth',
- ],
- ],
- ],
- [
- 'fullname' => 'Hiking Society',
- 'shortname' => 'Hiking',
- 'idnumber' => 'su-hike',
- 'description' => '<p>We Hike to the pub every day ending in Y</p>',
- 'enrolments' => [
- 'editingteacher' => [
- 'victor',
- ],
- 'student' => [
- 'queenie',
- 'sally',
- 'william',
- ],
- ],
- ],
- ],
- ],
- [
- 'name' => '2017-2018',
- 'idnumber' => '000118',
- 'enrolments' => [
- 'manager' => [
- 'adam',
- ],
- ],
- 'children' => [
- [
- 'name' => 'Faculty of Science and Technology',
- 'idnumber' => '000118-fst',
- 'enrolments' => [
- 'manager' => [
- 'bert',
- ],
- ],
- 'children' => [
- [
- 'name' => 'Chemistry',
- 'idnumber' => '000118-000141',
- 'enrolments' => [
- 'manager' => [
- 'colin',
- ],
- ],
- 'children' => [
- ],
- 'courses' => [
- [
- 'fullname' => 'CHEM101: Atoms and Molecules (1)',
- 'shortname' => 'CHEM101',
- 'idnumber' => '000118-001667-1',
- 'description' => '<p>Atoms and Molecules</p>',
- 'enrolments' => [
- 'editingteacher' => [
- 'diane',
- ],
- 'student' => [
- 'penny',
- 'rodney',
- 'trevor',
- 'una',
- ],
- ],
- ],
- [
- 'fullname' => 'CHEM102: Organic Structure (1)',
- 'shortname' => 'CHEM102',
- 'idnumber' => '000118-001663-1',
- 'description' => '<p>Organic Strucure</p>',
- 'enrolments' => [
- 'editingteacher' => [
- 'diane',
- 'emily',
- ],
- 'student' => [
- 'penny',
- 'trevor',
- 'una',
- ],
- ],
- ],
- ],
- ],
- [
- 'name' => 'Phsyics',
- 'idnumber' => '000118-000035',
- 'enrolments' => [
- 'manager' => [
- 'fred',
- ],
- ],
- 'children' => [
- ],
- 'courses' => [
- [
- 'fullname' => 'PHYS101: The Physical Universe (1)',
- 'shortname' => 'PHYS101',
- 'idnumber' => '000118-001701-1',
- 'description' => '<p>The Physical Univerise</p>',
- 'enrolments' => [
- 'editingteacher' => [
- 'gemma',
- 'hannah',
- ],
- 'student' => [
- 'rodney',
- 'trevor',
- 'victor',
- ],
- ],
- ],
- [
- 'fullname' => 'PHYS102: Classical Mechanics (1)',
- 'shortname' => 'PHYS102',
- 'idnumber' => '000118-001702-1',
- 'description' => '<p>Classical Mechanics</p>',
- 'enrolments' => [
- 'editingteacher' => [
- 'hannah',
- ],
- 'student' => [
- 'rodney',
- 'trevor',
- 'victor',
- ],
- ],
- ],
- ],
- ],
- ],
- ],
- [
- 'name' => 'Faculty of Arts and Social Sciences',
- 'idnumber' => '000118-fass',
- 'enrolments' => [
- 'manager' => [
- 'indianna',
- ],
- ],
- 'children' => [
- [
- 'name' => 'History',
- 'idnumber' => '000118-000021',
- 'enrolments' => [
- 'manager' => [
- 'james',
- ],
- ],
- 'children' => [
- ],
- 'courses' => [
- [
- 'fullname' => 'HIST100: From Ancient to Modern: History and Historians (1)',
- 'shortname' => 'HIST100',
- 'idnumber' => '000118-015173-1',
- 'description' => '<p>From Ancient to Modern: History and Historians</p>',
- 'enrolments' => [
- 'editingteacher' => [
- 'kenneth',
- ],
- 'student' => [
- 'queenie',
- 'sally',
- 'william',
- 'xanthia',
- 'yarloo',
- ],
- ],
- ],
- [
- 'fullname' => 'HIST101: The Fall of Rome (1)',
- 'shortname' => 'HIST101',
- 'idnumber' => '000118-018723-1',
- 'description' => '<p>The Fall of Rome</p>',
- 'enrolments' => [
- 'editingteacher' => [
- 'lauren',
- ],
- 'student' => [
- 'queenie',
- 'sally',
- 'william',
- ],
- ],
- ],
- ],
- ],
- [
- 'name' => 'Politics, Philosophy and Religion',
- 'idnumber' => '000118-000243',
- 'enrolments' => [
- 'manager' => [
- 'mary',
- ],
- ],
- 'children' => [
- ],
- 'courses' => [
- [
- 'fullname' => 'POLI100: Politics and International Relations in the Contemporary World (1)',
- 'shortname' => 'POLI100',
- 'idnumber' => '000118-008549-1',
- 'description' => '<p>Politics and International Relations in the Contemporary World</p>',
- 'enrolments' => [
- 'editingteacher' => [
- 'niamh',
- ],
- 'student' => [
- 'penny',
- 'queenie',
- 'sally',
- 'william',
- 'xanthia',
- 'yarloo',
- 'una',
- ],
- ],
- ],
- [
- 'fullname' => 'PHIL100: Introduction to Philosophy (1)',
- 'shortname' => 'PHIL100',
- 'idnumber' => '000118-002163-1',
- 'description' => '<p>Introduction to Philosophy</p>',
- 'enrolments' => [
- 'editingteacher' => [
- 'oscar',
- ],
- 'student' => [
- 'penny',
- 'queenie',
- 'sally',
- 'william',
- 'xanthia',
- 'yarloo',
- 'victor',
- ],
- ],
- ],
- ],
- ],
- ],
- ],
- ],
- ],
- ];
- $transaction = $DB->start_delegated_transaction();
- $generator = new test_data_generator();
- $generator->create_users($users);
- $generator->setup_courses($categories);
- $transaction->allow_commit();
- class test_data_generator {
- public $users = [];
- public $courses = [];
- public $categories = [];
- public $roles = [];
- public function __construct() {
- global $DB;
- $this->roles = $DB->get_records('role', [], '', 'shortname, id');
- }
- public function create_users($users) {
- foreach ($users as $user) {
- $this->create_user($user);
- }
- }
- public function setup_courses($data) {
- foreach ($data as $category) {
- $this->create_category($category);
- }
- }
- protected function create_category($category, $parent = null) {
- // Process the current category.
- $record = (object) $category;
- if (!empty($parent)) {
- $record->parent = $parent->id;
- }
- $generator = new testing_data_generator();
- $thiscategory = $generator->create_category($record);
- if ($parent) {
- error_log("==> Created category '{$thiscategory->name}' in '{$parent->name}'");
- } else {
- error_log("==> Created category '{$thiscategory->name}' in root");
- }
- $this->categories[$thiscategory->idnumber] = $thiscategory;
- // Now add any child categories.
- foreach ($category['children'] as $child) {
- $this->create_category($child, $thiscategory);
- }
- // Now add any courses directly in this category.
- if (isset($category['courses'])) {
- foreach ($category['courses'] as $course) {
- $this->create_course($course, $thiscategory);
- }
- }
- // Finally enrol any users who should be there.
- if (isset($category['enrolments'])) {
- foreach ($category['enrolments'] as $rolename => $users) {
- foreach ($users as $username) {
- $this->assign_category_role($thiscategory, $username, $rolename);
- }
- }
- }
- return $thiscategory;
- }
- protected function create_course($course, $category) {
- $record = (object) $course;
- $record->category = $category->id;
- $generator = new testing_data_generator();
- $thiscourse = $generator->create_course($record);
- $this->courses[$thiscourse->idnumber] = $thiscourse;
- error_log("==> Created course '{$thiscourse->shortname}' in '{$category->name}'");
- // Finally enrol any users who should be there.
- if (isset($course['enrolments'])) {
- foreach ($course['enrolments'] as $rolename => $users) {
- foreach ($users as $username) {
- $this->assign_course_role($thiscourse, $username, $rolename);
- }
- }
- }
- return $thiscourse;
- }
- protected function create_user($user) {
- global $DOMAIN;
- $record = (object) $user;
- $username = strtolower($record->firstname);
- $record->username = $username;
- $record->idnumber = $record->username;
- $record->email = "{$username}@{$DOMAIN}";;
- $record->password = 'x';
- $generator = new testing_data_generator();
- $this->users[$username] = $generator->create_user($record);
- }
- protected function assign_category_role($category, string $username, string $rolename) {
- $generator = new testing_data_generator();
- $roleid = $this->roles[$rolename]->id;
- $user = $this->users[$username];
- $userid = $user->id;
- $context = \context_coursecat::instance($category->id);
- $contextid = $context->id;
- $generator->role_assign($roleid, $userid, $contextid);
- error_log("==> Assigned role '{$rolename}' ({$roleid}) to '{$user->username}' in '{$category->name}'");
- }
- protected function assign_course_role($course, string $username, string $rolename) {
- $generator = new testing_data_generator();
- $roleid = $this->roles[$rolename]->id;
- $user = $this->users[$username];
- $userid = $user->id;
- $generator->enrol_user($userid, $course->id, $roleid);
- error_log("==> Enrolled user '{$user->username}' as a '{$rolename}' ({$roleid}) in '{$course->shortname}'");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement