Differences Between: [Versions 310 and 402]
1 <?php 2 // This file is part of Moodle - http://moodle.org/ 3 // 4 // Moodle is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Moodle is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Moodle. If not, see <http://www.gnu.org/licenses/>. 16 17 /** 18 * Competency data generator. 19 * 20 * @package core_competency 21 * @category test 22 * @copyright 2015 Frédéric Massart - FMCorz.net 23 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 24 */ 25 26 use core_competency\competency; 27 use core_competency\competency_framework; 28 use core_competency\course_competency; 29 use core_competency\course_module_competency; 30 use core_competency\evidence; 31 use core_competency\external; 32 use core_competency\plan; 33 use core_competency\plan_competency; 34 use core_competency\related_competency; 35 use core_competency\template; 36 use core_competency\template_cohort; 37 use core_competency\template_competency; 38 use core_competency\user_competency; 39 use core_competency\user_competency_course; 40 use core_competency\user_competency_plan; 41 use core_competency\user_evidence; 42 use core_competency\user_evidence_competency; 43 44 45 defined('MOODLE_INTERNAL') || die(); 46 47 global $CFG; 48 require_once($CFG->libdir . '/grade/grade_scale.php'); 49 50 /** 51 * Competency data generator class. 52 * 53 * @package core_competency 54 * @category test 55 * @copyright 2015 Frédéric Massart - FMCorz.net 56 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 57 */ 58 class core_competency_generator extends component_generator_base { 59 60 /** @var int Number of created competencies. */ 61 protected $competencycount = 0; 62 63 /** @var int Number of created frameworks. */ 64 protected $frameworkcount = 0; 65 66 /** @var int Number of created plans. */ 67 protected $plancount = 0; 68 69 /** @var int Number of created templates. */ 70 protected $templatecount = 0; 71 72 /** @var int Number of created user_evidence. */ 73 protected $userevidencecount = 0; 74 75 /** @var stdClass Scale that we might need. */ 76 protected $scale; 77 78 /** 79 * Reset process. 80 * 81 * Do not call directly. 82 * 83 * @return void 84 */ 85 public function reset() { 86 $this->competencycount = 0; 87 $this->frameworkcount = 0; 88 $this->scale = null; 89 } 90 91 /** 92 * Create a new competency. 93 * 94 * @param array|stdClass $record 95 * @return competency 96 */ 97 public function create_competency($record = null) { 98 $this->competencycount++; 99 $i = $this->competencycount; 100 $record = (object) $record; 101 102 if (!isset($record->competencyframeworkid)) { 103 throw new coding_exception('The competencyframeworkid value is required.'); 104 } 105 if (!isset($record->shortname)) { 106 $record->shortname = "Competency shortname $i"; 107 } 108 if (!isset($record->idnumber)) { 109 $record->idnumber = "cmp{$i}"; 110 } 111 if (!isset($record->description)) { 112 $record->description = "Competency $i description "; 113 } 114 if (!isset($record->descriptionformat)) { 115 $record->descriptionformat = FORMAT_HTML; 116 } 117 if (!isset($record->scaleconfiguration) && isset($record->scaleid)) { 118 $record->scaleconfiguration = json_encode($this->make_default_scale_configuration($record->scaleid)); 119 } 120 if (isset($record->scaleconfiguration) 121 && (is_array($record->scaleconfiguration) || is_object($record->scaleconfiguration))) { 122 // Conveniently encode the config. 123 $record->scaleconfiguration = json_encode($record->scaleconfiguration); 124 } 125 126 $competency = new competency(0, $record); 127 $competency->create(); 128 129 return $competency; 130 } 131 132 /** 133 * Create a new framework. 134 * 135 * @param array|stdClass $record 136 * @return competency_framework 137 */ 138 public function create_framework($record = null) { 139 if (defined('BEHAT_TEST') && BEHAT_TEST) { 140 $generator = behat_util::get_data_generator(); 141 } else { 142 $generator = phpunit_util::get_data_generator(); 143 } 144 $this->frameworkcount++; 145 $i = $this->frameworkcount; 146 $record = (object) $record; 147 148 if (!isset($record->shortname)) { 149 $record->shortname = "Framework shortname $i"; 150 } 151 if (!isset($record->idnumber)) { 152 $record->idnumber = "frm{$i}"; 153 } 154 if (!isset($record->description)) { 155 $record->description = "Framework $i description "; 156 } 157 if (!isset($record->descriptionformat)) { 158 $record->descriptionformat = FORMAT_HTML; 159 } 160 if (!isset($record->visible)) { 161 $record->visible = 1; 162 } 163 if (!isset($record->scaleid)) { 164 if (isset($record->scaleconfiguration)) { 165 throw new coding_exception('Scale configuration must be provided with a scale.'); 166 } 167 if (!$this->scale) { 168 $this->scale = $generator->create_scale(array('scale' => 'A,B,C,D')); 169 } 170 $record->scaleid = $this->scale->id; 171 } 172 if (!isset($record->scaleconfiguration)) { 173 $record->scaleconfiguration = json_encode($this->make_default_scale_configuration($record->scaleid)); 174 } 175 if (is_array($record->scaleconfiguration) || is_object($record->scaleconfiguration)) { 176 // Conveniently encode the config. 177 $record->scaleconfiguration = json_encode($record->scaleconfiguration); 178 } 179 if (!isset($record->contextid)) { 180 $record->contextid = context_system::instance()->id; 181 } 182 183 $framework = new competency_framework(0, $record); 184 $framework->create(); 185 186 return $framework; 187 } 188 189 /** 190 * Create a related competency. 191 * 192 * @param array|stdClass $record 193 * @return related_competency 194 */ 195 public function create_related_competency($record = null) { 196 $record = (object) $record; 197 198 if (!isset($record->competencyid)) { 199 throw new coding_exception('Property competencyid is required.'); 200 } 201 if (!isset($record->relatedcompetencyid)) { 202 throw new coding_exception('Property relatedcompetencyid is required.'); 203 } 204 205 $relation = related_competency::get_relation($record->competencyid, $record->relatedcompetencyid); 206 if ($relation->get('id')) { 207 throw new coding_exception('Relation already exists'); 208 } 209 $relation->create(); 210 211 return $relation; 212 } 213 214 /** 215 * Create a template. 216 * 217 * @param array|stdClass $record 218 * @return template 219 */ 220 public function create_template($record = null) { 221 $this->templatecount++; 222 $i = $this->templatecount; 223 $record = (object) $record; 224 225 if (!isset($record->shortname)) { 226 $record->shortname = "Template shortname $i"; 227 } 228 if (!isset($record->description)) { 229 $record->description = "Template $i description "; 230 } 231 if (!isset($record->contextid)) { 232 $record->contextid = context_system::instance()->id; 233 } 234 235 $template = new template(0, $record); 236 $template->create(); 237 238 return $template; 239 } 240 241 /** 242 * Create a template competency. 243 * 244 * @param array|stdClass $record 245 * @return template_competency 246 */ 247 public function create_template_competency($record = null) { 248 $record = (object) $record; 249 250 if (!isset($record->competencyid)) { 251 throw new coding_exception('Property competencyid is required.'); 252 } 253 if (!isset($record->templateid)) { 254 throw new coding_exception('Property templateid is required.'); 255 } 256 257 $relation = new template_competency(0, $record); 258 $relation->create(); 259 260 return $relation; 261 } 262 263 /** 264 * Create a new user competency. 265 * 266 * @param array|stdClass $record 267 * @return user_competency 268 */ 269 public function create_user_competency($record = null) { 270 $record = (object) $record; 271 272 if (!isset($record->userid)) { 273 throw new coding_exception('The userid value is required.'); 274 } 275 if (!isset($record->competencyid)) { 276 throw new coding_exception('The competencyid value is required.'); 277 } 278 279 $usercompetency = new user_competency(0, $record); 280 $usercompetency->create(); 281 282 return $usercompetency; 283 } 284 285 /** 286 * Create a new plan. 287 * 288 * @param array|stdClass $record 289 * @return plan 290 */ 291 public function create_plan($record = null) { 292 $this->plancount++; 293 $i = $this->plancount; 294 $record = (object) $record; 295 296 if (!isset($record->name)) { 297 $record->name = "Plan shortname $i"; 298 } 299 if (!isset($record->description)) { 300 $record->description = "Plan $i description"; 301 } 302 if (!isset($record->descriptionformat)) { 303 $record->descriptionformat = FORMAT_HTML; 304 } 305 if (!isset($record->userid)) { 306 throw new coding_exception('The userid value is required.'); 307 } 308 309 $plan = new plan(0, $record); 310 $plan->create(); 311 312 return $plan; 313 } 314 315 /** 316 * Create a new user competency course. 317 * 318 * @param array|stdClass $record 319 * @return user_competency_course 320 */ 321 public function create_user_competency_course($record = null) { 322 $record = (object) $record; 323 324 if (!isset($record->userid)) { 325 throw new coding_exception('The userid value is required.'); 326 } 327 if (!isset($record->competencyid)) { 328 throw new coding_exception('The competencyid value is required.'); 329 } 330 331 if (!isset($record->courseid)) { 332 throw new coding_exception('The courseid value is required.'); 333 } 334 335 $usercompetencycourse = new user_competency_course(0, $record); 336 $usercompetencycourse->create(); 337 338 return $usercompetencycourse; 339 } 340 341 /** 342 * Create a new user competency plan. 343 * 344 * @param array|stdClass $record 345 * @return user_competency_plan 346 */ 347 public function create_user_competency_plan($record = null) { 348 $record = (object) $record; 349 350 if (!isset($record->userid)) { 351 throw new coding_exception('The userid value is required.'); 352 } 353 if (!isset($record->competencyid)) { 354 throw new coding_exception('The competencyid value is required.'); 355 } 356 357 if (!isset($record->planid)) { 358 throw new coding_exception('The planid value is required.'); 359 } 360 361 if (!isset($record->sortorder)) { 362 $record->sortorder = 0; 363 } 364 365 $usercompetencyplan = new user_competency_plan(0, $record); 366 $usercompetencyplan->create(); 367 368 return $usercompetencyplan; 369 } 370 371 /** 372 * Create a new plan competency. 373 * 374 * @param array|stdClass $record 375 * @return plan_competency 376 */ 377 public function create_plan_competency($record = null) { 378 $record = (object) $record; 379 380 if (!isset($record->planid)) { 381 throw new coding_exception('The planid value is required.'); 382 } 383 if (!isset($record->competencyid)) { 384 throw new coding_exception('The competencyid value is required.'); 385 } 386 387 $plancompetency = new plan_competency(0, $record); 388 $plancompetency->create(); 389 390 return $plancompetency; 391 } 392 393 /** 394 * Create a new template cohort. 395 * 396 * @param array|stdClass $record 397 * @return template_cohort 398 */ 399 public function create_template_cohort($record = null) { 400 $record = (object) $record; 401 402 if (!isset($record->templateid)) { 403 throw new coding_exception('The templateid value is required.'); 404 } 405 if (!isset($record->cohortid)) { 406 throw new coding_exception('The cohortid value is required.'); 407 } 408 409 $tplcohort = new template_cohort(0, $record); 410 $tplcohort->create(); 411 412 return $tplcohort; 413 } 414 415 /** 416 * Create a new evidence. 417 * 418 * @param array|stdClass $record 419 * @return evidence 420 */ 421 public function create_evidence($record = null) { 422 $record = (object) $record; 423 424 if (!isset($record->usercompetencyid)) { 425 throw new coding_exception('The usercompetencyid value is required.'); 426 } 427 if (!isset($record->action) && !isset($record->grade)) { 428 $record->action = evidence::ACTION_LOG; 429 } 430 if (!isset($record->action)) { 431 throw new coding_exception('The action value is required with a grade.'); 432 } 433 434 if (!isset($record->contextid)) { 435 $record->contextid = context_system::instance()->id; 436 } 437 if (!isset($record->descidentifier)) { 438 $record->descidentifier = 'invalidevidencedesc'; 439 } 440 if (!isset($record->desccomponent)) { 441 $record->desccomponent = 'core_competency'; 442 } 443 $evidence = new evidence(0, $record); 444 $evidence->create(); 445 446 return $evidence; 447 } 448 449 /** 450 * Create a new course competency. 451 * 452 * @param array|stdClass $record 453 * @return user_competency 454 */ 455 public function create_course_competency($record = null) { 456 $record = (object) $record; 457 458 if (!isset($record->courseid)) { 459 throw new coding_exception('The courseid value is required.'); 460 } 461 if (!isset($record->competencyid)) { 462 throw new coding_exception('The competencyid value is required.'); 463 } 464 465 $cc = new course_competency(0, $record); 466 $cc->create(); 467 468 return $cc; 469 } 470 471 /** 472 * Create a new course module competency. 473 * 474 * @param array|stdClass $record 475 * @return course_module_competency 476 */ 477 public function create_course_module_competency($record = null) { 478 $record = (object) $record; 479 480 if (!isset($record->cmid)) { 481 throw new coding_exception('The cmid value is required.'); 482 } 483 if (!isset($record->competencyid)) { 484 throw new coding_exception('The competencyid value is required.'); 485 } 486 487 $cc = new course_module_competency(0, $record); 488 $cc->create(); 489 490 return $cc; 491 } 492 493 /** 494 * Create a new user_evidence. 495 * 496 * @param array|stdClass $record 497 * @return evidence 498 */ 499 public function create_user_evidence($record = null) { 500 $this->userevidencecount++; 501 $i = $this->userevidencecount; 502 $record = (object) $record; 503 504 if (!isset($record->userid)) { 505 throw new coding_exception('The userid value is required.'); 506 } 507 if (!isset($record->name)) { 508 $record->name = "Evidence $i name"; 509 } 510 if (!isset($record->description)) { 511 $record->description = "Evidence $i description"; 512 } 513 if (!isset($record->descriptionformat)) { 514 $record->descriptionformat = FORMAT_HTML; 515 } 516 517 $ue = new user_evidence(0, $record); 518 $ue->create(); 519 520 return $ue; 521 } 522 523 /** 524 * Create a new user_evidence_comp. 525 * 526 * @param array|stdClass $record 527 * @return evidence 528 */ 529 public function create_user_evidence_competency($record = null) { 530 $record = (object) $record; 531 532 if (!isset($record->userevidenceid)) { 533 throw new coding_exception('The userevidenceid value is required.'); 534 } 535 if (!isset($record->competencyid)) { 536 throw new coding_exception('The competencyid value is required.'); 537 } 538 539 $uec = new user_evidence_competency(0, $record); 540 $uec->create(); 541 542 return $uec; 543 } 544 545 /** 546 * Make a default scale configuration. 547 * 548 * The last and second-last item will be flagged proficient. The 549 * second-last item will be flagged as default. 550 * 551 * @param int $scaleid The scale ID. 552 * @return array Configuration as array. 553 */ 554 protected function make_default_scale_configuration($scaleid) { 555 $scale = grade_scale::fetch(array('id' => $scaleid)); 556 $values = $scale->load_items(); 557 558 foreach ($values as $key => $value) { 559 // Add a key (make the first value 1). 560 $values[$key] = array('id' => $key + 1, 'name' => $value); 561 } 562 563 if (count($values) < 2) { 564 throw new coding_exception('Please provide the scale configuration for one-item scales.'); 565 } 566 567 $scaleconfig = array(); 568 569 // Last item is proficient. 570 $item = array_pop($values); 571 array_unshift($scaleconfig, array( 572 'id' => $item['id'], 573 'proficient' => 1 574 )); 575 576 // Second-last item is default and proficient. 577 $item = array_pop($values); 578 array_unshift($scaleconfig, array( 579 'id' => $item['id'], 580 'scaledefault' => 1, 581 'proficient' => 1 582 )); 583 584 // Add the scale ID. 585 array_unshift($scaleconfig, array('scaleid' => $scaleid)); 586 587 return $scaleconfig; 588 } 589 590 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body