Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2017
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.50 KB | None | 0 0
  1. <?php
  2.  
  3. define('CLI_SCRIPT', true);
  4.  
  5. if (isset($_SERVER['REMOTE_ADDR'])) {
  6. exit(1);
  7. }
  8.  
  9. require(dirname(__FILE__) . '/config.php');
  10. require_once($CFG->libdir . '/clilib.php');
  11. require_once($CFG->libdir . '/adminlib.php');
  12. require_once($CFG->dirroot . '/course/lib.php');
  13. require_once($CFG->libdir . '/testing/generator/data_generator.php');
  14.  
  15. $DOMAIN = "example.com.au";
  16.  
  17. $users = [
  18. [
  19. 'firstname' => 'Adam',
  20. 'lastname' => 'Ant',
  21. ],
  22. [
  23. 'firstname' => 'Bert',
  24. 'lastname' => 'Bee',
  25. ],
  26. [
  27. 'firstname' => 'Colin',
  28. 'lastname' => 'Carter',
  29. ],
  30. [
  31. 'firstname' => 'Diane',
  32. 'lastname' => 'Denver',
  33. ],
  34. [
  35. 'firstname' => 'Emily',
  36. 'lastname' => 'Echo',
  37. ],
  38. [
  39. 'firstname' => 'Fred',
  40. 'lastname' => 'Ford',
  41. ],
  42. [
  43. 'firstname' => 'Gemma',
  44. 'lastname' => 'Gannoway',
  45. ],
  46. [
  47. 'firstname' => 'Hannah',
  48. 'lastname' => 'Henderson',
  49. ],
  50. [
  51. 'firstname' => 'Indianna',
  52. 'lastname' => 'Ibis',
  53. ],
  54. [
  55. 'firstname' => 'James',
  56. 'lastname' => 'Jackoughby',
  57. ],
  58. [
  59. 'firstname' => 'Kenneth',
  60. 'lastname' => 'Kamber',
  61. ],
  62. [
  63. 'firstname' => 'Lauren',
  64. 'lastname' => 'Little',
  65. ],
  66. [
  67. 'firstname' => 'Mary',
  68. 'lastname' => 'Maverley',
  69. ],
  70. [
  71. 'firstname' => 'Niamh',
  72. 'lastname' => 'Nimble',
  73. ],
  74. [
  75. 'firstname' => 'Oscar',
  76. 'lastname' => 'Ostlethwaite',
  77. ],
  78. [
  79. 'firstname' => 'Penny',
  80. 'lastname' => 'Pemberton',
  81. ],
  82. [
  83. 'firstname' => 'Queenie',
  84. 'lastname' => 'Quip',
  85. ],
  86. [
  87. 'firstname' => 'Rodney',
  88. 'lastname' => 'Rover',
  89. ],
  90. [
  91. 'firstname' => 'Sally',
  92. 'lastname' => 'Simpson',
  93. ],
  94. [
  95. 'firstname' => 'Trevor',
  96. 'lastname' => 'Turnbull',
  97. ],
  98. [
  99. 'firstname' => 'Una',
  100. 'lastname' => 'Umber',
  101. ],
  102. [
  103. 'firstname' => 'Victor',
  104. 'lastname' => 'Venenerton',
  105. ],
  106. [
  107. 'firstname' => 'William',
  108. 'lastname' => 'Wordsworth',
  109. ],
  110. [
  111. 'firstname' => 'Xanthia',
  112. 'lastname' => 'Xim',
  113. ],
  114. [
  115. 'firstname' => 'Yarloo',
  116. 'lastname' => 'Yawley',
  117. ],
  118. [
  119. 'firstname' => 'Zain',
  120. 'lastname' => 'Zacks',
  121. ],
  122. ];
  123.  
  124. $categories = [
  125. [
  126. 'name' => 'Students Union',
  127. 'idnumber' => 'su',
  128. 'enrolments' => [
  129. 'manager' => [
  130. 'zain',
  131. ],
  132. ],
  133. 'children' => [
  134. ],
  135. 'courses' => [
  136. [
  137. 'fullname' => 'Cinema',
  138. 'shortname' => 'Cinema',
  139. 'idnumber' => 'su-cinema',
  140. 'description' => '<p>Home of the student cinema</p>',
  141. 'enrolments' => [
  142. 'editingteacher' => [
  143. 'una',
  144. ],
  145. 'student' => [
  146. 'rodney',
  147. 'xanthia',
  148. 'niamh',
  149. 'oscar',
  150. ],
  151. ],
  152. ],
  153. [
  154. 'fullname' => 'Music Society',
  155. 'shortname' => 'Music',
  156. 'idnumber' => 'su-music',
  157. 'description' => '<p>See the calendar for details of our practices</p>',
  158. 'enrolments' => [
  159. 'editingteacher' => [
  160. 'penny',
  161. 'rodney',
  162. ],
  163. 'student' => [
  164. 'sally',
  165. 'una',
  166. 'yarloo',
  167. 'diane',
  168. 'kenneth',
  169. ],
  170. ],
  171. ],
  172. [
  173. 'fullname' => 'Hiking Society',
  174. 'shortname' => 'Hiking',
  175. 'idnumber' => 'su-hike',
  176. 'description' => '<p>We Hike to the pub every day ending in Y</p>',
  177. 'enrolments' => [
  178. 'editingteacher' => [
  179. 'victor',
  180. ],
  181. 'student' => [
  182. 'queenie',
  183. 'sally',
  184. 'william',
  185. ],
  186. ],
  187. ],
  188. ],
  189. ],
  190. [
  191. 'name' => '2017-2018',
  192. 'idnumber' => '000118',
  193. 'enrolments' => [
  194. 'manager' => [
  195. 'adam',
  196. ],
  197. ],
  198. 'children' => [
  199. [
  200. 'name' => 'Faculty of Science and Technology',
  201. 'idnumber' => '000118-fst',
  202. 'enrolments' => [
  203. 'manager' => [
  204. 'bert',
  205. ],
  206. ],
  207. 'children' => [
  208. [
  209. 'name' => 'Chemistry',
  210. 'idnumber' => '000118-000141',
  211. 'enrolments' => [
  212. 'manager' => [
  213. 'colin',
  214. ],
  215. ],
  216. 'children' => [
  217. ],
  218. 'courses' => [
  219. [
  220. 'fullname' => 'CHEM101: Atoms and Molecules (1)',
  221. 'shortname' => 'CHEM101',
  222. 'idnumber' => '000118-001667-1',
  223. 'description' => '<p>Atoms and Molecules</p>',
  224. 'enrolments' => [
  225. 'editingteacher' => [
  226. 'diane',
  227. ],
  228. 'student' => [
  229. 'penny',
  230. 'rodney',
  231. 'trevor',
  232. 'una',
  233. ],
  234. ],
  235. ],
  236. [
  237. 'fullname' => 'CHEM102: Organic Structure (1)',
  238. 'shortname' => 'CHEM102',
  239. 'idnumber' => '000118-001663-1',
  240. 'description' => '<p>Organic Strucure</p>',
  241. 'enrolments' => [
  242. 'editingteacher' => [
  243. 'diane',
  244. 'emily',
  245. ],
  246. 'student' => [
  247. 'penny',
  248. 'trevor',
  249. 'una',
  250. ],
  251. ],
  252. ],
  253. ],
  254. ],
  255. [
  256. 'name' => 'Phsyics',
  257. 'idnumber' => '000118-000035',
  258. 'enrolments' => [
  259. 'manager' => [
  260. 'fred',
  261. ],
  262. ],
  263. 'children' => [
  264. ],
  265. 'courses' => [
  266. [
  267. 'fullname' => 'PHYS101: The Physical Universe (1)',
  268. 'shortname' => 'PHYS101',
  269. 'idnumber' => '000118-001701-1',
  270. 'description' => '<p>The Physical Univerise</p>',
  271. 'enrolments' => [
  272. 'editingteacher' => [
  273. 'gemma',
  274. 'hannah',
  275. ],
  276. 'student' => [
  277. 'rodney',
  278. 'trevor',
  279. 'victor',
  280. ],
  281. ],
  282. ],
  283. [
  284. 'fullname' => 'PHYS102: Classical Mechanics (1)',
  285. 'shortname' => 'PHYS102',
  286. 'idnumber' => '000118-001702-1',
  287. 'description' => '<p>Classical Mechanics</p>',
  288. 'enrolments' => [
  289. 'editingteacher' => [
  290. 'hannah',
  291. ],
  292. 'student' => [
  293. 'rodney',
  294. 'trevor',
  295. 'victor',
  296. ],
  297. ],
  298. ],
  299. ],
  300. ],
  301. ],
  302. ],
  303. [
  304. 'name' => 'Faculty of Arts and Social Sciences',
  305. 'idnumber' => '000118-fass',
  306. 'enrolments' => [
  307. 'manager' => [
  308. 'indianna',
  309. ],
  310. ],
  311. 'children' => [
  312. [
  313. 'name' => 'History',
  314. 'idnumber' => '000118-000021',
  315. 'enrolments' => [
  316. 'manager' => [
  317. 'james',
  318. ],
  319. ],
  320. 'children' => [
  321. ],
  322. 'courses' => [
  323. [
  324. 'fullname' => 'HIST100: From Ancient to Modern: History and Historians (1)',
  325. 'shortname' => 'HIST100',
  326. 'idnumber' => '000118-015173-1',
  327. 'description' => '<p>From Ancient to Modern: History and Historians</p>',
  328. 'enrolments' => [
  329. 'editingteacher' => [
  330. 'kenneth',
  331. ],
  332. 'student' => [
  333. 'queenie',
  334. 'sally',
  335. 'william',
  336. 'xanthia',
  337. 'yarloo',
  338. ],
  339. ],
  340. ],
  341. [
  342. 'fullname' => 'HIST101: The Fall of Rome (1)',
  343. 'shortname' => 'HIST101',
  344. 'idnumber' => '000118-018723-1',
  345. 'description' => '<p>The Fall of Rome</p>',
  346. 'enrolments' => [
  347. 'editingteacher' => [
  348. 'lauren',
  349. ],
  350. 'student' => [
  351. 'queenie',
  352. 'sally',
  353. 'william',
  354. ],
  355. ],
  356. ],
  357. ],
  358. ],
  359. [
  360. 'name' => 'Politics, Philosophy and Religion',
  361. 'idnumber' => '000118-000243',
  362. 'enrolments' => [
  363. 'manager' => [
  364. 'mary',
  365. ],
  366. ],
  367. 'children' => [
  368. ],
  369. 'courses' => [
  370. [
  371. 'fullname' => 'POLI100: Politics and International Relations in the Contemporary World (1)',
  372. 'shortname' => 'POLI100',
  373. 'idnumber' => '000118-008549-1',
  374. 'description' => '<p>Politics and International Relations in the Contemporary World</p>',
  375. 'enrolments' => [
  376. 'editingteacher' => [
  377. 'niamh',
  378. ],
  379. 'student' => [
  380. 'penny',
  381. 'queenie',
  382. 'sally',
  383. 'william',
  384. 'xanthia',
  385. 'yarloo',
  386. 'una',
  387. ],
  388. ],
  389. ],
  390. [
  391. 'fullname' => 'PHIL100: Introduction to Philosophy (1)',
  392. 'shortname' => 'PHIL100',
  393. 'idnumber' => '000118-002163-1',
  394. 'description' => '<p>Introduction to Philosophy</p>',
  395. 'enrolments' => [
  396. 'editingteacher' => [
  397. 'oscar',
  398. ],
  399. 'student' => [
  400. 'penny',
  401. 'queenie',
  402. 'sally',
  403. 'william',
  404. 'xanthia',
  405. 'yarloo',
  406. 'victor',
  407. ],
  408. ],
  409. ],
  410. ],
  411. ],
  412. ],
  413. ],
  414. ],
  415. ],
  416. ];
  417.  
  418. $transaction = $DB->start_delegated_transaction();
  419.  
  420. $generator = new test_data_generator();
  421.  
  422. $generator->create_users($users);
  423. $generator->setup_courses($categories);
  424.  
  425. $transaction->allow_commit();
  426.  
  427. class test_data_generator {
  428.  
  429. public $users = [];
  430. public $courses = [];
  431. public $categories = [];
  432. public $roles = [];
  433.  
  434. public function __construct() {
  435. global $DB;
  436.  
  437. $this->roles = $DB->get_records('role', [], '', 'shortname, id');
  438. }
  439.  
  440.  
  441. public function create_users($users) {
  442. foreach ($users as $user) {
  443. $this->create_user($user);
  444. }
  445. }
  446.  
  447. public function setup_courses($data) {
  448. foreach ($data as $category) {
  449. $this->create_category($category);
  450. }
  451. }
  452.  
  453. protected function create_category($category, $parent = null) {
  454. // Process the current category.
  455. $record = (object) $category;
  456.  
  457. if (!empty($parent)) {
  458. $record->parent = $parent->id;
  459. }
  460.  
  461. $generator = new testing_data_generator();
  462. $thiscategory = $generator->create_category($record);
  463. if ($parent) {
  464. error_log("==> Created category '{$thiscategory->name}' in '{$parent->name}'");
  465. } else {
  466. error_log("==> Created category '{$thiscategory->name}' in root");
  467. }
  468.  
  469. $this->categories[$thiscategory->idnumber] = $thiscategory;
  470.  
  471. // Now add any child categories.
  472. foreach ($category['children'] as $child) {
  473. $this->create_category($child, $thiscategory);
  474. }
  475.  
  476. // Now add any courses directly in this category.
  477. if (isset($category['courses'])) {
  478. foreach ($category['courses'] as $course) {
  479. $this->create_course($course, $thiscategory);
  480. }
  481. }
  482.  
  483. // Finally enrol any users who should be there.
  484. if (isset($category['enrolments'])) {
  485. foreach ($category['enrolments'] as $rolename => $users) {
  486. foreach ($users as $username) {
  487. $this->assign_category_role($thiscategory, $username, $rolename);
  488. }
  489. }
  490. }
  491.  
  492. return $thiscategory;
  493. }
  494.  
  495. protected function create_course($course, $category) {
  496. $record = (object) $course;
  497.  
  498. $record->category = $category->id;
  499.  
  500. $generator = new testing_data_generator();
  501. $thiscourse = $generator->create_course($record);
  502. $this->courses[$thiscourse->idnumber] = $thiscourse;
  503. error_log("==> Created course '{$thiscourse->shortname}' in '{$category->name}'");
  504.  
  505. // Finally enrol any users who should be there.
  506. if (isset($course['enrolments'])) {
  507. foreach ($course['enrolments'] as $rolename => $users) {
  508. foreach ($users as $username) {
  509. $this->assign_course_role($thiscourse, $username, $rolename);
  510. }
  511. }
  512. }
  513.  
  514. return $thiscourse;
  515. }
  516.  
  517. protected function create_user($user) {
  518. global $DOMAIN;
  519.  
  520. $record = (object) $user;
  521. $username = strtolower($record->firstname);
  522. $record->username = $username;
  523. $record->idnumber = $record->username;
  524. $record->email = "{$username}@{$DOMAIN}";;
  525. $record->password = 'x';
  526.  
  527. $generator = new testing_data_generator();
  528. $this->users[$username] = $generator->create_user($record);
  529. }
  530.  
  531. protected function assign_category_role($category, string $username, string $rolename) {
  532. $generator = new testing_data_generator();
  533.  
  534. $roleid = $this->roles[$rolename]->id;
  535. $user = $this->users[$username];
  536. $userid = $user->id;
  537. $context = \context_coursecat::instance($category->id);
  538. $contextid = $context->id;
  539.  
  540. $generator->role_assign($roleid, $userid, $contextid);
  541. error_log("==> Assigned role '{$rolename}' ({$roleid}) to '{$user->username}' in '{$category->name}'");
  542. }
  543.  
  544. protected function assign_course_role($course, string $username, string $rolename) {
  545. $generator = new testing_data_generator();
  546.  
  547. $roleid = $this->roles[$rolename]->id;
  548. $user = $this->users[$username];
  549. $userid = $user->id;
  550.  
  551. $generator->enrol_user($userid, $course->id, $roleid);
  552. error_log("==> Enrolled user '{$user->username}' as a '{$rolename}' ({$roleid}) in '{$course->shortname}'");
  553.  
  554. }
  555. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement