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 namespace qtype_multianswer; 18 19 defined('MOODLE_INTERNAL') || die(); 20 21 global $CFG; 22 require_once($CFG->dirroot . '/question/engine/upgrade/tests/helper.php'); 23 24 25 /** 26 * Testing the upgrade of multianswer question attempts. 27 * 28 * @package qtype_multianswer 29 * @copyright 2011 The Open University 30 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later 31 */ 32 class upgrade_old_attempt_data_test extends \question_attempt_upgrader_test_base { 33 public function test_multianswer_adaptivenopenalty_qsession104() { 34 $quiz = (object) array( 35 'id' => '5', 36 'course' => '2', 37 'name' => 'Multianswer quiz', 38 'intro' => '', 39 'introformat' => '1', 40 'timeopen' => '0', 41 'timeclose' => '0', 42 'attempts' => '0', 43 'attemptonlast' => '0', 44 'grademethod' => '1', 45 'decimalpoints' => '2', 46 'questiondecimalpoints' => '-1', 47 'review' => '4459503', 48 'questionsperpage' => '1', 49 'shufflequestions' => '0', 50 'shuffleanswers' => '1', 51 'sumgrades' => '14.00000', 52 'grade' => '10.00000', 53 'timecreated' => '0', 54 'timemodified' => '1306424728', 55 'timelimit' => '0', 56 'password' => '', 57 'subnet' => '', 58 'popup' => '0', 59 'delay1' => '0', 60 'delay2' => '0', 61 'showuserpicture' => '0', 62 'showblocks' => '0', 63 'preferredbehaviour' => 'adaptivenopenalty', 64 ); 65 $attempt = (object) array( 66 'id' => '16', 67 'uniqueid' => '16', 68 'quiz' => '5', 69 'userid' => '4', 70 'attempt' => '1', 71 'sumgrades' => '6.00000', 72 'timestart' => '1306425691', 73 'timefinish' => '1306425746', 74 'timemodified' => '1306425746', 75 'layout' => '28,19,0', 76 'preview' => '0', 77 ); 78 $question = (object) array( 79 'id' => '28', 80 'category' => '2', 81 'parent' => '0', 82 'name' => 'Very simple cloze', 83 'questiontext' => '<p>An answer {#1}.</p>', 84 'questiontextformat' => '1', 85 'generalfeedback' => '', 86 'generalfeedbackformat' => '1', 87 'penalty' => '0.1000000', 88 'qtype' => 'multianswer', 89 'length' => '1', 90 'stamp' => 'tjh238.vledev2.open.ac.uk+110526154631+XQLcXi', 91 'version' => 'tjh238.vledev2.open.ac.uk+110526154631+T8hPiI', 92 'hidden' => '0', 93 'timecreated' => '1306424791', 94 'timemodified' => '1306424791', 95 'createdby' => '2', 96 'modifiedby' => '2', 97 'maxmark' => '1.0000000', 98 'options' => (object) array( 99 'questions' => array( 100 1 => (object) array( 101 'id' => '29', 102 'category' => '2', 103 'parent' => '28', 104 'name' => 'Very simple cloze', 105 'questiontext' => '{1:SHORTANSWER:=frog#Yay!}', 106 'questiontextformat' => '0', 107 'generalfeedback' => '', 108 'generalfeedbackformat' => '1', 109 'defaultgrade' => '1.0000000', 110 'penalty' => '0.0000000', 111 'qtype' => 'shortanswer', 112 'length' => '1', 113 'stamp' => 'tjh238.vledev2.open.ac.uk+110526154631+j3BYTL', 114 'version' => 'tjh238.vledev2.open.ac.uk+110526154631+lxNwQv', 115 'hidden' => '0', 116 'timecreated' => '1306424791', 117 'timemodified' => '1306424791', 118 'createdby' => '2', 119 'modifiedby' => '2', 120 'options' => (object) array( 121 'answers' => array( 122 52 => (object) array( 123 'id' => '52', 124 'question' => '29', 125 'answer' => 'frog', 126 'answerformat' => '0', 127 'fraction' => '1.0000000', 128 'feedback' => 'Yay!', 129 'feedbackformat' => '1', 130 ), 131 ), 132 'usecase' => '0', 133 ), 134 'maxgrade' => '1.0000000', 135 ), 136 ), 137 ), 138 'defaultmark' => '1.0000000', 139 ); 140 $qsession = (object) array( 141 'id' => '104', 142 'attemptid' => '16', 143 'questionid' => '28', 144 'newest' => '285', 145 'newgraded' => '285', 146 'sumpenalty' => '0.1000000', 147 'manualcomment' => '', 148 'manualcommentformat' => '1', 149 'flagged' => '0', 150 ); 151 $qstates = array( 152 281 => (object) array( 153 'id' => '281', 154 'attempt' => '16', 155 'question' => '28', 156 'seq_number' => '0', 157 'answer' => '1-', 158 'timestamp' => '1306425691', 159 'event' => '0', 160 'grade' => '0.0000000', 161 'raw_grade' => '0.0000000', 162 'penalty' => '0.0000000', 163 ), 164 283 => (object) array( 165 'id' => '283', 166 'attempt' => '16', 167 'question' => '28', 168 'seq_number' => '1', 169 'answer' => '1-frog', 170 'timestamp' => '1306425739', 171 'event' => '2', 172 'grade' => '0.0000000', 173 'raw_grade' => '1.0000000', 174 'penalty' => '0.1000000', 175 ), 176 285 => (object) array( 177 'id' => '285', 178 'attempt' => '16', 179 'question' => '28', 180 'seq_number' => '2', 181 'answer' => '1-frog', 182 'timestamp' => '1306425739', 183 'event' => '6', 184 'grade' => '1.0000000', 185 'raw_grade' => '1.0000000', 186 'penalty' => '0.1000000', 187 ), 188 ); 189 190 $qa = $this->updater->convert_question_attempt($quiz, $attempt, $question, $qsession, $qstates); 191 192 $expectedqa = (object) array( 193 'behaviour' => 'adaptivenopenalty', 194 'questionid' => 28, 195 'variant' => 1, 196 'maxmark' => 1.0000000, 197 'minfraction' => 0, 198 'maxfraction' => 1, 199 'flagged' => 0, 200 'questionsummary' => 'An answer _____.', 201 'rightanswer' => 'part 1: frog', 202 'responsesummary' => 'part 1: frog', 203 'timemodified' => 1306425739, 204 'steps' => array( 205 0 => (object) array( 206 'sequencenumber' => 0, 207 'state' => 'todo', 208 'fraction' => null, 209 'timecreated' => 1306425691, 210 'userid' => 4, 211 'data' => array(), 212 ), 213 1 => (object) array( 214 'sequencenumber' => 1, 215 'state' => 'complete', 216 'fraction' => null, 217 'timecreated' => 1306425739, 218 'userid' => 4, 219 'data' => array('sub1_answer' => 'frog'), 220 ), 221 2 => (object) array( 222 'sequencenumber' => 2, 223 'state' => 'gradedright', 224 'fraction' => 1.0, 225 'timecreated' => 1306425739, 226 'userid' => 4, 227 'data' => array('sub1_answer' => 'frog', '-finish' => '1', 228 '-_try' => '1', '-_rawfraction' => 1.0), 229 ), 230 ), 231 ); 232 233 $this->compare_qas($expectedqa, $qa); 234 } 235 236 public function test_multianswer_adaptivenopenalty_qsession106() { 237 $quiz = (object) array( 238 'id' => '5', 239 'course' => '2', 240 'name' => 'Multianswer quiz', 241 'intro' => '', 242 'introformat' => '1', 243 'timeopen' => '0', 244 'timeclose' => '0', 245 'attempts' => '0', 246 'attemptonlast' => '0', 247 'grademethod' => '1', 248 'decimalpoints' => '2', 249 'questiondecimalpoints' => '-1', 250 'review' => '4459503', 251 'questionsperpage' => '1', 252 'shufflequestions' => '0', 253 'shuffleanswers' => '1', 254 'sumgrades' => '14.00000', 255 'grade' => '10.00000', 256 'timecreated' => '0', 257 'timemodified' => '1306424728', 258 'timelimit' => '0', 259 'password' => '', 260 'subnet' => '', 261 'popup' => '0', 262 'delay1' => '0', 263 'delay2' => '0', 264 'showuserpicture' => '0', 265 'showblocks' => '0', 266 'preferredbehaviour' => 'adaptivenopenalty', 267 ); 268 $attempt = (object) array( 269 'id' => '17', 270 'uniqueid' => '17', 271 'quiz' => '5', 272 'userid' => '4', 273 'attempt' => '2', 274 'sumgrades' => '0.00000', 275 'timestart' => '1306425757', 276 'timefinish' => '1306425762', 277 'timemodified' => '1306425762', 278 'layout' => '28,19,0', 279 'preview' => '0', 280 ); 281 $question = (object) array( 282 'id' => '28', 283 'category' => '2', 284 'parent' => '0', 285 'name' => 'Very simple cloze', 286 'questiontext' => '<p>An answer {#1}.</p>', 287 'questiontextformat' => '1', 288 'generalfeedback' => '', 289 'generalfeedbackformat' => '1', 290 'penalty' => '0.1000000', 291 'qtype' => 'multianswer', 292 'length' => '1', 293 'stamp' => 'tjh238.vledev2.open.ac.uk+110526154631+XQLcXi', 294 'version' => 'tjh238.vledev2.open.ac.uk+110526154631+T8hPiI', 295 'hidden' => '0', 296 'timecreated' => '1306424791', 297 'timemodified' => '1306424791', 298 'createdby' => '2', 299 'modifiedby' => '2', 300 'maxmark' => '1.0000000', 301 'options' => (object) array( 302 'questions' => array( 303 1 => (object) array( 304 'id' => '29', 305 'category' => '2', 306 'parent' => '28', 307 'name' => 'Very simple cloze', 308 'questiontext' => '{1:SHORTANSWER:=frog#Yay!}', 309 'questiontextformat' => '0', 310 'generalfeedback' => '', 311 'generalfeedbackformat' => '1', 312 'defaultgrade' => '1.0000000', 313 'penalty' => '0.0000000', 314 'qtype' => 'shortanswer', 315 'length' => '1', 316 'stamp' => 'tjh238.vledev2.open.ac.uk+110526154631+j3BYTL', 317 'version' => 'tjh238.vledev2.open.ac.uk+110526154631+lxNwQv', 318 'hidden' => '0', 319 'timecreated' => '1306424791', 320 'timemodified' => '1306424791', 321 'createdby' => '2', 322 'modifiedby' => '2', 323 'options' => (object) array( 324 'answers' => array( 325 52 => (object) array( 326 'id' => '52', 327 'question' => '29', 328 'answer' => 'frog', 329 'answerformat' => '0', 330 'fraction' => '1.0000000', 331 'feedback' => 'Yay!', 332 'feedbackformat' => '1', 333 ), 334 ), 335 'usecase' => '0', 336 ), 337 'maxgrade' => '1.0000000', 338 ), 339 ), 340 ), 341 'defaultmark' => '1.0000000', 342 ); 343 $qsession = (object) array( 344 'id' => '106', 345 'attemptid' => '17', 346 'questionid' => '28', 347 'newest' => '289', 348 'newgraded' => '289', 349 'sumpenalty' => '0.1000000', 350 'manualcomment' => '', 351 'manualcommentformat' => '1', 352 'flagged' => '0', 353 ); 354 $qstates = array( 355 287 => (object) array( 356 'id' => '287', 357 'attempt' => '17', 358 'question' => '28', 359 'seq_number' => '0', 360 'answer' => '1-', 361 'timestamp' => '1306425757', 362 'event' => '0', 363 'grade' => '0.0000000', 364 'raw_grade' => '0.0000000', 365 'penalty' => '0.0000000', 366 ), 367 289 => (object) array( 368 'id' => '289', 369 'attempt' => '17', 370 'question' => '28', 371 'seq_number' => '1', 372 'answer' => '1-', 373 'timestamp' => '1306425757', 374 'event' => '6', 375 'grade' => '0.0000000', 376 'raw_grade' => '0.0000000', 377 'penalty' => '0.1000000', 378 ), 379 ); 380 381 $qa = $this->updater->convert_question_attempt($quiz, $attempt, $question, $qsession, $qstates); 382 383 $expectedqa = (object) array( 384 'behaviour' => 'adaptivenopenalty', 385 'questionid' => 28, 386 'variant' => 1, 387 'maxmark' => 1.0000000, 388 'minfraction' => 0, 389 'maxfraction' => 1, 390 'flagged' => 0, 391 'questionsummary' => 'An answer _____.', 392 'rightanswer' => 'part 1: frog', 393 'responsesummary' => 'part 1: ', 394 'timemodified' => 1306425757, 395 'steps' => array( 396 0 => (object) array( 397 'sequencenumber' => 0, 398 'state' => 'todo', 399 'fraction' => null, 400 'timecreated' => 1306425757, 401 'userid' => 4, 402 'data' => array(), 403 ), 404 1 => (object) array( 405 'sequencenumber' => 1, 406 'state' => 'gradedwrong', 407 'fraction' => 0.0, 408 'timecreated' => 1306425757, 409 'userid' => 4, 410 'data' => array('-finish' => '1', '-_try' => '1', '-_rawfraction' => 0.0), 411 ), 412 ), 413 ); 414 415 $this->compare_qas($expectedqa, $qa); 416 } 417 418 public function test_multianswer_adaptivenopenalty_qsession108() { 419 $quiz = (object) array( 420 'id' => '5', 421 'course' => '2', 422 'name' => 'Multianswer quiz', 423 'intro' => '', 424 'introformat' => '1', 425 'timeopen' => '0', 426 'timeclose' => '0', 427 'attempts' => '0', 428 'attemptonlast' => '0', 429 'grademethod' => '1', 430 'decimalpoints' => '2', 431 'questiondecimalpoints' => '-1', 432 'review' => '4459503', 433 'questionsperpage' => '1', 434 'shufflequestions' => '0', 435 'shuffleanswers' => '1', 436 'sumgrades' => '14.00000', 437 'grade' => '10.00000', 438 'timecreated' => '0', 439 'timemodified' => '1306424728', 440 'timelimit' => '0', 441 'password' => '', 442 'subnet' => '', 443 'popup' => '0', 444 'delay1' => '0', 445 'delay2' => '0', 446 'showuserpicture' => '0', 447 'showblocks' => '0', 448 'preferredbehaviour' => 'adaptivenopenalty', 449 ); 450 $attempt = (object) array( 451 'id' => '18', 452 'uniqueid' => '18', 453 'quiz' => '5', 454 'userid' => '3', 455 'attempt' => '1', 456 'sumgrades' => '10.40000', 457 'timestart' => '1306425784', 458 'timefinish' => '1306425931', 459 'timemodified' => '1306425931', 460 'layout' => '28,19,0', 461 'preview' => '0', 462 ); 463 $question = (object) array( 464 'id' => '28', 465 'category' => '2', 466 'parent' => '0', 467 'name' => 'Very simple cloze', 468 'questiontext' => '<p>An answer {#1}.</p>', 469 'questiontextformat' => '1', 470 'generalfeedback' => '', 471 'generalfeedbackformat' => '1', 472 'penalty' => '0.1000000', 473 'qtype' => 'multianswer', 474 'length' => '1', 475 'stamp' => 'tjh238.vledev2.open.ac.uk+110526154631+XQLcXi', 476 'version' => 'tjh238.vledev2.open.ac.uk+110526154631+T8hPiI', 477 'hidden' => '0', 478 'timecreated' => '1306424791', 479 'timemodified' => '1306424791', 480 'createdby' => '2', 481 'modifiedby' => '2', 482 'maxmark' => '1.0000000', 483 'options' => (object) array( 484 'questions' => array( 485 1 => (object) array( 486 'id' => '29', 487 'category' => '2', 488 'parent' => '28', 489 'name' => 'Very simple cloze', 490 'questiontext' => '{1:SHORTANSWER:=frog#Yay!}', 491 'questiontextformat' => '0', 492 'generalfeedback' => '', 493 'generalfeedbackformat' => '1', 494 'defaultgrade' => '1.0000000', 495 'penalty' => '0.0000000', 496 'qtype' => 'shortanswer', 497 'length' => '1', 498 'stamp' => 'tjh238.vledev2.open.ac.uk+110526154631+j3BYTL', 499 'version' => 'tjh238.vledev2.open.ac.uk+110526154631+lxNwQv', 500 'hidden' => '0', 501 'timecreated' => '1306424791', 502 'timemodified' => '1306424791', 503 'createdby' => '2', 504 'modifiedby' => '2', 505 'options' => (object) array( 506 'answers' => array( 507 52 => (object) array( 508 'id' => '52', 509 'question' => '29', 510 'answer' => 'frog', 511 'answerformat' => '0', 512 'fraction' => '1.0000000', 513 'feedback' => 'Yay!', 514 'feedbackformat' => '1', 515 ), 516 ), 517 'usecase' => '0', 518 ), 519 'maxgrade' => '1.0000000', 520 ), 521 ), 522 ), 523 'defaultmark' => '1.0000000', 524 ); 525 $qsession = (object) array( 526 'id' => '108', 527 'attemptid' => '18', 528 'questionid' => '28', 529 'newest' => '298', 530 'newgraded' => '298', 531 'sumpenalty' => '0.2000000', 532 'manualcomment' => '', 533 'manualcommentformat' => '1', 534 'flagged' => '0', 535 ); 536 $qstates = array( 537 291 => (object) array( 538 'id' => '291', 539 'attempt' => '18', 540 'question' => '28', 541 'seq_number' => '0', 542 'answer' => '1-', 543 'timestamp' => '1306425784', 544 'event' => '0', 545 'grade' => '0.0000000', 546 'raw_grade' => '0.0000000', 547 'penalty' => '0.0000000', 548 ), 549 293 => (object) array( 550 'id' => '293', 551 'attempt' => '18', 552 'question' => '28', 553 'seq_number' => '1', 554 'answer' => '1-ds,-afg', 555 'timestamp' => '1306425801', 556 'event' => '2', 557 'grade' => '0.0000000', 558 'raw_grade' => '0.0000000', 559 'penalty' => '0.1000000', 560 ), 561 297 => (object) array( 562 'id' => '297', 563 'attempt' => '18', 564 'question' => '28', 565 'seq_number' => '2', 566 'answer' => '1-frog', 567 'timestamp' => '1306425917', 568 'event' => '3', 569 'grade' => '1.0000000', 570 'raw_grade' => '1.0000000', 571 'penalty' => '0.1000000', 572 ), 573 298 => (object) array( 574 'id' => '298', 575 'attempt' => '18', 576 'question' => '28', 577 'seq_number' => '3', 578 'answer' => '1-frog', 579 'timestamp' => '1306425917', 580 'event' => '6', 581 'grade' => '1.0000000', 582 'raw_grade' => '1.0000000', 583 'penalty' => '0.1000000', 584 ), 585 ); 586 587 $qa = $this->updater->convert_question_attempt($quiz, $attempt, $question, $qsession, $qstates); 588 589 $expectedqa = (object) array( 590 'behaviour' => 'adaptivenopenalty', 591 'questionid' => 28, 592 'variant' => 1, 593 'maxmark' => 1.0000000, 594 'minfraction' => 0, 595 'maxfraction' => 1, 596 'flagged' => 0, 597 'questionsummary' => 'An answer _____.', 598 'rightanswer' => 'part 1: frog', 599 'responsesummary' => 'part 1: frog', 600 'timemodified' => 1306425917, 601 'steps' => array( 602 0 => (object) array( 603 'sequencenumber' => 0, 604 'state' => 'todo', 605 'fraction' => null, 606 'timecreated' => 1306425784, 607 'userid' => 3, 608 'data' => array(), 609 ), 610 1 => (object) array( 611 'sequencenumber' => 1, 612 'state' => 'complete', 613 'fraction' => null, 614 'timecreated' => 1306425801, 615 'userid' => 3, 616 'data' => array('sub1_answer' => 'ds,-afg'), 617 ), 618 2 => (object) array( 619 'sequencenumber' => 2, 620 'state' => 'complete', 621 'fraction' => 1, 622 'timecreated' => 1306425917, 623 'userid' => 3, 624 'data' => array('sub1_answer' => 'frog', '-_try' => 1, 625 '-_rawfraction' => 1.0, '-submit' => 1), 626 ), 627 3 => (object) array( 628 'sequencenumber' => 3, 629 'state' => 'gradedright', 630 'fraction' => 1, 631 'timecreated' => 1306425917, 632 'userid' => 3, 633 'data' => array('sub1_answer' => 'frog', '-_try' => 1, 634 '-_rawfraction' => 1.0, '-finish' => 1), 635 ), 636 ), 637 ); 638 639 $this->compare_qas($expectedqa, $qa); 640 } 641 642 public function test_multianswer_adaptivenopenalty_qsession105() { 643 $quiz = (object) array( 644 'id' => '5', 645 'course' => '2', 646 'name' => 'Multianswer quiz', 647 'intro' => '', 648 'introformat' => '1', 649 'timeopen' => '0', 650 'timeclose' => '0', 651 'attempts' => '0', 652 'attemptonlast' => '0', 653 'grademethod' => '1', 654 'decimalpoints' => '2', 655 'questiondecimalpoints' => '-1', 656 'review' => '4459503', 657 'questionsperpage' => '1', 658 'shufflequestions' => '0', 659 'shuffleanswers' => '1', 660 'sumgrades' => '14.00000', 661 'grade' => '10.00000', 662 'timecreated' => '0', 663 'timemodified' => '1306424728', 664 'timelimit' => '0', 665 'password' => '', 666 'subnet' => '', 667 'popup' => '0', 668 'delay1' => '0', 669 'delay2' => '0', 670 'showuserpicture' => '0', 671 'showblocks' => '0', 672 'preferredbehaviour' => 'adaptivenopenalty', 673 ); 674 $attempt = (object) array( 675 'id' => '16', 676 'uniqueid' => '16', 677 'quiz' => '5', 678 'userid' => '4', 679 'attempt' => '1', 680 'sumgrades' => '6.00000', 681 'timestart' => '1306425691', 682 'timefinish' => '1306425746', 683 'timemodified' => '1306425746', 684 'layout' => '28,19,0', 685 'preview' => '0', 686 ); 687 $question = (object) array( 688 'id' => '19', 689 'category' => '2', 690 'parent' => '0', 691 'name' => 'Cloze', 692 'questiontext' => '<p>This question consists of some text with an answer embedded right here {#1}</p> 693 <p>and right after that you will have to deal with this short answer {#2}</p> 694 <p>and finally we have a floating point number {#3}.</p> 695 <p>The multichoice question can also be shown in the vertical display of the standard moodle multiple choice. {#4}</p> 696 <p>Or in an horizontal display that is included here in a table {#5}</p> 697 <p>A shortanswer question where case must match. Write moodle in upper case letters {#6}</p> 698 <p>Note that addresses like www.moodle.org and smileys :-) all work as normal:</p> 699 <p>a) How good is this? {#7}</p> 700 <p>b) What grade would you give it? {#8}</p>', 701 'questiontextformat' => '1', 702 'generalfeedback' => '', 703 'generalfeedbackformat' => '1', 704 'penalty' => '0.1000000', 705 'qtype' => 'multianswer', 706 'length' => '1', 707 'stamp' => 'tjh238.vledev2.open.ac.uk+110525164438+iwiint', 708 'version' => 'tjh238.vledev2.open.ac.uk+110525164441+AAjnIy', 709 'hidden' => '0', 710 'timecreated' => '1306341878', 711 'timemodified' => '1306341879', 712 'createdby' => '2', 713 'modifiedby' => '2', 714 'maxmark' => '13.0000000', 715 'options' => (object) array( 716 'questions' => array( 717 1 => (object) array( 718 'id' => '20', 719 'category' => '2', 720 'parent' => '19', 721 'name' => 'Cloze', 722 'questiontext' => '{1:MULTICHOICE:Wrong answer#Feedback for this wrong answer~Another wrong answer#Feedback for the other wrong answer~=Correct answer#Feedback for correct answer~%50%Answer that gives half the credit#Feedback for half credit answer}', 723 'questiontextformat' => '0', 724 'generalfeedback' => '', 725 'generalfeedbackformat' => '1', 726 'defaultgrade' => '1.0000000', 727 'penalty' => '0.0000000', 728 'qtype' => 'multichoice', 729 'length' => '1', 730 'stamp' => 'tjh238.vledev2.open.ac.uk+110525164439+cAuJ4r', 731 'version' => 'tjh238.vledev2.open.ac.uk+110525164439+5bnnys', 732 'hidden' => '0', 733 'timecreated' => '1306341879', 734 'timemodified' => '1306341879', 735 'createdby' => '2', 736 'modifiedby' => '2', 737 'options' => (object) array( 738 'id' => '3', 739 'question' => '20', 740 'layout' => '0', 741 'answers' => array( 742 29 => (object) array( 743 'id' => '29', 744 'question' => '20', 745 'answer' => 'Wrong answer', 746 'answerformat' => '1', 747 'fraction' => '0.0000000', 748 'feedback' => 'Feedback for this wrong answer', 749 'feedbackformat' => '1', 750 ), 751 30 => (object) array( 752 'id' => '30', 753 'question' => '20', 754 'answer' => 'Another wrong answer', 755 'answerformat' => '1', 756 'fraction' => '0.0000000', 757 'feedback' => 'Feedback for the other wrong answer', 758 'feedbackformat' => '1', 759 ), 760 31 => (object) array( 761 'id' => '31', 762 'question' => '20', 763 'answer' => 'Correct answer', 764 'answerformat' => '1', 765 'fraction' => '1.0000000', 766 'feedback' => 'Feedback for correct answer', 767 'feedbackformat' => '1', 768 ), 769 32 => (object) array( 770 'id' => '32', 771 'question' => '20', 772 'answer' => 'Answer that gives half the credit', 773 'answerformat' => '1', 774 'fraction' => '0.5000000', 775 'feedback' => 'Feedback for half credit answer', 776 'feedbackformat' => '1', 777 ), 778 ), 779 'single' => '1', 780 'shuffleanswers' => '1', 781 'correctfeedback' => '', 782 'correctfeedbackformat' => '1', 783 'partiallycorrectfeedback' => '', 784 'partiallycorrectfeedbackformat' => '1', 785 'incorrectfeedback' => '', 786 'incorrectfeedbackformat' => '1', 787 'answernumbering' => '0', 788 ), 789 'maxgrade' => '1.0000000', 790 ), 791 2 => (object) array( 792 'id' => '21', 793 'category' => '2', 794 'parent' => '19', 795 'name' => 'Cloze', 796 'questiontext' => '{1:SHORTANSWER:Wrong answer#Feedback for this wrong answer~=Correct answer#Feedback for correct answer~%50%Answer that gives half the credit#Feedback for half credit answer}', 797 'questiontextformat' => '0', 798 'generalfeedback' => '', 799 'generalfeedbackformat' => '1', 800 'defaultgrade' => '1.0000000', 801 'penalty' => '0.0000000', 802 'qtype' => 'shortanswer', 803 'length' => '1', 804 'stamp' => 'tjh238.vledev2.open.ac.uk+110525164440+EN6wCk', 805 'version' => 'tjh238.vledev2.open.ac.uk+110525164440+bQzatI', 806 'hidden' => '0', 807 'timecreated' => '1306341880', 808 'timemodified' => '1306341880', 809 'createdby' => '2', 810 'modifiedby' => '2', 811 'options' => (object) array( 812 'answers' => array( 813 33 => (object) array( 814 'id' => '33', 815 'question' => '21', 816 'answer' => 'Wrong answer', 817 'answerformat' => '0', 818 'fraction' => '0.0000000', 819 'feedback' => 'Feedback for this wrong answer', 820 'feedbackformat' => '1', 821 ), 822 34 => (object) array( 823 'id' => '34', 824 'question' => '21', 825 'answer' => 'Correct answer', 826 'answerformat' => '0', 827 'fraction' => '1.0000000', 828 'feedback' => 'Feedback for correct answer', 829 'feedbackformat' => '1', 830 ), 831 35 => (object) array( 832 'id' => '35', 833 'question' => '21', 834 'answer' => 'Answer that gives half the credit', 835 'answerformat' => '0', 836 'fraction' => '0.5000000', 837 'feedback' => 'Feedback for half credit answer', 838 'feedbackformat' => '1', 839 ), 840 ), 841 'usecase' => '0', 842 ), 843 'maxgrade' => '1.0000000', 844 ), 845 3 => (object) array( 846 'id' => '22', 847 'category' => '2', 848 'parent' => '19', 849 'name' => 'Cloze', 850 'questiontext' => '{2:NUMERICAL:=23.8:0.1#Feedback for correct answer 23.8~%50%23.8:2#Feedback for half credit answer in the nearby region of the correct answer}', 851 'questiontextformat' => '0', 852 'generalfeedback' => '', 853 'generalfeedbackformat' => '1', 854 'defaultgrade' => '2.0000000', 855 'penalty' => '0.0000000', 856 'qtype' => 'numerical', 857 'length' => '1', 858 'stamp' => 'tjh238.vledev2.open.ac.uk+110525164440+Xr29c2', 859 'version' => 'tjh238.vledev2.open.ac.uk+110525164441+QTwsGM', 860 'hidden' => '0', 861 'timecreated' => '1306341880', 862 'timemodified' => '1306341880', 863 'createdby' => '2', 864 'modifiedby' => '2', 865 'options' => (object) array( 866 'answers' => array( 867 36 => (object) array( 868 'id' => '36', 869 'question' => '22', 870 'answer' => '23.8', 871 'answerformat' => '0', 872 'fraction' => '1.0000000', 873 'feedback' => 'Feedback for correct answer 23.8', 874 'feedbackformat' => '1', 875 'tolerance' => '0.1', 876 ), 877 37 => (object) array( 878 'id' => '37', 879 'question' => '22', 880 'answer' => '23.8', 881 'answerformat' => '0', 882 'fraction' => '0.5000000', 883 'feedback' => 'Feedback for half credit answer in the nearby region of the correct answer', 884 'feedbackformat' => '1', 885 'tolerance' => '2', 886 ), 887 ), 888 'units' => array( 889 ), 890 'unitgradingtype' => '0', 891 'unitpenalty' => '1.0000000', 892 'showunits' => '3', 893 'unitsleft' => '0', 894 'instructions' => '', 895 'instructionsformat' => '1', 896 ), 897 'maxgrade' => '2.0000000', 898 ), 899 4 => (object) array( 900 'id' => '23', 901 'category' => '2', 902 'parent' => '19', 903 'name' => 'Cloze', 904 'questiontext' => '{2:MCV:1. Wrong answer#Feedback for this wrong answer~2. Another wrong answer#Feedback for the other wrong answer~=3. Correct answer#Feedback for correct answer~%50%4. Answer that gives half the credit#Feedback for half credit answer}', 905 'questiontextformat' => '0', 906 'generalfeedback' => '', 907 'generalfeedbackformat' => '1', 908 'defaultgrade' => '2.0000000', 909 'penalty' => '0.0000000', 910 'qtype' => 'multichoice', 911 'length' => '1', 912 'stamp' => 'tjh238.vledev2.open.ac.uk+110525164441+7R55HA', 913 'version' => 'tjh238.vledev2.open.ac.uk+110525164441+uCMoQc', 914 'hidden' => '0', 915 'timecreated' => '1306341881', 916 'timemodified' => '1306341881', 917 'createdby' => '2', 918 'modifiedby' => '2', 919 'options' => (object) array( 920 'id' => '4', 921 'question' => '23', 922 'layout' => '1', 923 'answers' => array( 924 38 => (object) array( 925 'id' => '38', 926 'question' => '23', 927 'answer' => '1. Wrong answer', 928 'answerformat' => '1', 929 'fraction' => '0.0000000', 930 'feedback' => 'Feedback for this wrong answer', 931 'feedbackformat' => '1', 932 ), 933 39 => (object) array( 934 'id' => '39', 935 'question' => '23', 936 'answer' => '2. Another wrong answer', 937 'answerformat' => '1', 938 'fraction' => '0.0000000', 939 'feedback' => 'Feedback for the other wrong answer', 940 'feedbackformat' => '1', 941 ), 942 40 => (object) array( 943 'id' => '40', 944 'question' => '23', 945 'answer' => '3. Correct answer', 946 'answerformat' => '1', 947 'fraction' => '1.0000000', 948 'feedback' => 'Feedback for correct answer', 949 'feedbackformat' => '1', 950 ), 951 41 => (object) array( 952 'id' => '41', 953 'question' => '23', 954 'answer' => '4. Answer that gives half the credit', 955 'answerformat' => '1', 956 'fraction' => '0.5000000', 957 'feedback' => 'Feedback for half credit answer', 958 'feedbackformat' => '1', 959 ), 960 ), 961 'single' => '1', 962 'shuffleanswers' => '1', 963 'correctfeedback' => '', 964 'correctfeedbackformat' => '1', 965 'partiallycorrectfeedback' => '', 966 'partiallycorrectfeedbackformat' => '1', 967 'incorrectfeedback' => '', 968 'incorrectfeedbackformat' => '1', 969 'answernumbering' => '0', 970 ), 971 'maxgrade' => '2.0000000', 972 ), 973 5 => (object) array( 974 'id' => '24', 975 'category' => '2', 976 'parent' => '19', 977 'name' => 'Cloze', 978 'questiontext' => '{2:MCH:a. Wrong answer#Feedback for this wrong answer~b. Another wrong answer#Feedback for the other wrong answer~=c. Correct answer#Feedback for correct answer~%50%d. Answer that gives half the credit#Feedback for half credit answer}', 979 'questiontextformat' => '0', 980 'generalfeedback' => '', 981 'generalfeedbackformat' => '1', 982 'defaultgrade' => '2.0000000', 983 'penalty' => '0.0000000', 984 'qtype' => 'multichoice', 985 'length' => '1', 986 'stamp' => 'tjh238.vledev2.open.ac.uk+110525164441+QGvRpd', 987 'version' => 'tjh238.vledev2.open.ac.uk+110525164441+03GsSs', 988 'hidden' => '0', 989 'timecreated' => '1306341881', 990 'timemodified' => '1306341881', 991 'createdby' => '2', 992 'modifiedby' => '2', 993 'options' => (object) array( 994 'id' => '5', 995 'question' => '24', 996 'layout' => '2', 997 'answers' => array( 998 42 => (object) array( 999 'id' => '42', 1000 'question' => '24', 1001 'answer' => 'a. Wrong answer', 1002 'answerformat' => '1', 1003 'fraction' => '0.0000000', 1004 'feedback' => 'Feedback for this wrong answer', 1005 'feedbackformat' => '1', 1006 ), 1007 43 => (object) array( 1008 'id' => '43', 1009 'question' => '24', 1010 'answer' => 'b. Another wrong answer', 1011 'answerformat' => '1', 1012 'fraction' => '0.0000000', 1013 'feedback' => 'Feedback for the other wrong answer', 1014 'feedbackformat' => '1', 1015 ), 1016 44 => (object) array( 1017 'id' => '44', 1018 'question' => '24', 1019 'answer' => 'c. Correct answer', 1020 'answerformat' => '1', 1021 'fraction' => '1.0000000', 1022 'feedback' => 'Feedback for correct answer', 1023 'feedbackformat' => '1', 1024 ), 1025 45 => (object) array( 1026 'id' => '45', 1027 'question' => '24', 1028 'answer' => 'd. Answer that gives half the credit', 1029 'answerformat' => '1', 1030 'fraction' => '0.5000000', 1031 'feedback' => 'Feedback for half credit answer', 1032 'feedbackformat' => '1', 1033 ), 1034 ), 1035 'single' => '1', 1036 'shuffleanswers' => '1', 1037 'correctfeedback' => '', 1038 'correctfeedbackformat' => '1', 1039 'partiallycorrectfeedback' => '', 1040 'partiallycorrectfeedbackformat' => '1', 1041 'incorrectfeedback' => '', 1042 'incorrectfeedbackformat' => '1', 1043 'answernumbering' => '0', 1044 ), 1045 'maxgrade' => '2.0000000', 1046 ), 1047 6 => (object) array( 1048 'id' => '25', 1049 'category' => '2', 1050 'parent' => '19', 1051 'name' => 'Cloze', 1052 'questiontext' => '{1:SHORTANSWER_C:moodle#Feedback for moodle in lower case ~=MOODLE#Feedback for MOODLE in upper case ~%50%Moodle#Feedback for only first letter in upper case}', 1053 'questiontextformat' => '0', 1054 'generalfeedback' => '', 1055 'generalfeedbackformat' => '1', 1056 'defaultgrade' => '1.0000000', 1057 'penalty' => '0.0000000', 1058 'qtype' => 'shortanswer', 1059 'length' => '1', 1060 'stamp' => 'tjh238.vledev2.open.ac.uk+110525164441+n9ETJC', 1061 'version' => 'tjh238.vledev2.open.ac.uk+110525164441+Bvqo6c', 1062 'hidden' => '0', 1063 'timecreated' => '1306341881', 1064 'timemodified' => '1306341881', 1065 'createdby' => '2', 1066 'modifiedby' => '2', 1067 'options' => (object) array( 1068 'answers' => array( 1069 46 => (object) array( 1070 'id' => '46', 1071 'question' => '25', 1072 'answer' => 'moodle', 1073 'answerformat' => '0', 1074 'fraction' => '0.0000000', 1075 'feedback' => 'Feedback for moodle in lower case', 1076 'feedbackformat' => '1', 1077 ), 1078 47 => (object) array( 1079 'id' => '47', 1080 'question' => '25', 1081 'answer' => 'MOODLE', 1082 'answerformat' => '0', 1083 'fraction' => '1.0000000', 1084 'feedback' => 'Feedback for MOODLE in upper case', 1085 'feedbackformat' => '1', 1086 ), 1087 48 => (object) array( 1088 'id' => '48', 1089 'question' => '25', 1090 'answer' => 'Moodle', 1091 'answerformat' => '0', 1092 'fraction' => '0.5000000', 1093 'feedback' => 'Feedback for only first letter in upper case', 1094 'feedbackformat' => '1', 1095 ), 1096 ), 1097 'usecase' => '1', 1098 ), 1099 'maxgrade' => '1.0000000', 1100 ), 1101 7 => (object) array( 1102 'id' => '26', 1103 'category' => '2', 1104 'parent' => '19', 1105 'name' => 'Cloze', 1106 'questiontext' => '{:MULTICHOICE:=Yes#Correct~No#We have a different opinion}', 1107 'questiontextformat' => '0', 1108 'generalfeedback' => '', 1109 'generalfeedbackformat' => '1', 1110 'defaultgrade' => '1.0000000', 1111 'penalty' => '0.0000000', 1112 'qtype' => 'multichoice', 1113 'length' => '1', 1114 'stamp' => 'tjh238.vledev2.open.ac.uk+110525164441+0YjnZ7', 1115 'version' => 'tjh238.vledev2.open.ac.uk+110525164441+1giLRX', 1116 'hidden' => '0', 1117 'timecreated' => '1306341881', 1118 'timemodified' => '1306341881', 1119 'createdby' => '2', 1120 'modifiedby' => '2', 1121 'options' => (object) array( 1122 'id' => '6', 1123 'question' => '26', 1124 'layout' => '0', 1125 'answers' => array( 1126 49 => (object) array( 1127 'id' => '49', 1128 'question' => '26', 1129 'answer' => 'Yes', 1130 'answerformat' => '1', 1131 'fraction' => '1.0000000', 1132 'feedback' => 'Correct', 1133 'feedbackformat' => '1', 1134 ), 1135 50 => (object) array( 1136 'id' => '50', 1137 'question' => '26', 1138 'answer' => 'No', 1139 'answerformat' => '1', 1140 'fraction' => '0.0000000', 1141 'feedback' => 'We have a different opinion', 1142 'feedbackformat' => '1', 1143 ), 1144 ), 1145 'single' => '1', 1146 'shuffleanswers' => '1', 1147 'correctfeedback' => '', 1148 'correctfeedbackformat' => '1', 1149 'partiallycorrectfeedback' => '', 1150 'partiallycorrectfeedbackformat' => '1', 1151 'incorrectfeedback' => '', 1152 'incorrectfeedbackformat' => '1', 1153 'answernumbering' => '0', 1154 ), 1155 'maxgrade' => '1.0000000', 1156 ), 1157 8 => (object) array( 1158 'id' => '27', 1159 'category' => '2', 1160 'parent' => '19', 1161 'name' => 'Cloze', 1162 'questiontext' => '{3:NUMERICAL:=3:2}', 1163 'questiontextformat' => '0', 1164 'generalfeedback' => '', 1165 'generalfeedbackformat' => '1', 1166 'defaultgrade' => '3.0000000', 1167 'penalty' => '0.0000000', 1168 'qtype' => 'numerical', 1169 'length' => '1', 1170 'stamp' => 'tjh238.vledev2.open.ac.uk+110525164441+glbCBN', 1171 'version' => 'tjh238.vledev2.open.ac.uk+110525164441+xWusxR', 1172 'hidden' => '0', 1173 'timecreated' => '1306341881', 1174 'timemodified' => '1306341881', 1175 'createdby' => '2', 1176 'modifiedby' => '2', 1177 'options' => (object) array( 1178 'answers' => array( 1179 51 => (object) array( 1180 'id' => '51', 1181 'question' => '27', 1182 'answer' => '3', 1183 'answerformat' => '0', 1184 'fraction' => '1.0000000', 1185 'feedback' => '', 1186 'feedbackformat' => '1', 1187 'tolerance' => '2', 1188 ), 1189 ), 1190 'units' => array( 1191 ), 1192 'unitgradingtype' => '0', 1193 'unitpenalty' => '1.0000000', 1194 'showunits' => '3', 1195 'unitsleft' => '0', 1196 'instructions' => '', 1197 'instructionsformat' => '1', 1198 ), 1199 'maxgrade' => '3.0000000', 1200 ), 1201 ), 1202 ), 1203 'defaultmark' => '13.0000000', 1204 ); 1205 $qsession = (object) array( 1206 'id' => '105', 1207 'attemptid' => '16', 1208 'questionid' => '19', 1209 'newest' => '286', 1210 'newgraded' => '286', 1211 'sumpenalty' => '2.6000000', 1212 'manualcomment' => '', 1213 'manualcommentformat' => '1', 1214 'flagged' => '0', 1215 ); 1216 $qstates = array( 1217 282 => (object) array( 1218 'id' => '282', 1219 'attempt' => '16', 1220 'question' => '19', 1221 'seq_number' => '0', 1222 'answer' => '1-,2-,3-,4-,5-,6-,7-,8-', 1223 'timestamp' => '1306425691', 1224 'event' => '0', 1225 'grade' => '0.0000000', 1226 'raw_grade' => '0.0000000', 1227 'penalty' => '0.0000000', 1228 ), 1229 284 => (object) array( 1230 'id' => '284', 1231 'attempt' => '16', 1232 'question' => '19', 1233 'seq_number' => '1', 1234 'answer' => '1-31,2-dsf,3-sadf,4-39,5-44,6-MOODLE,7-49,8-100%', 1235 'timestamp' => '1306425739', 1236 'event' => '3', 1237 'grade' => '5.0000000', 1238 'raw_grade' => '5.0000000', 1239 'penalty' => '1.3000000', 1240 ), 1241 286 => (object) array( 1242 'id' => '286', 1243 'attempt' => '16', 1244 'question' => '19', 1245 'seq_number' => '2', 1246 'answer' => '1-31,2-dsf,3-sadf,4-39,5-44,6-MOODLE,7-49,8-100%', 1247 'timestamp' => '1306425739', 1248 'event' => '6', 1249 'grade' => '5.0000000', 1250 'raw_grade' => '5.0000000', 1251 'penalty' => '1.3000000', 1252 ), 1253 ); 1254 1255 $qa = $this->updater->convert_question_attempt($quiz, $attempt, $question, $qsession, $qstates); 1256 1257 $expectedqa = (object) array( 1258 'behaviour' => 'adaptivenopenalty', 1259 'questionid' => '19', 1260 'variant' => 1, 1261 'maxmark' => '13.0000000', 1262 'minfraction' => 0, 1263 'maxfraction' => 1, 1264 'flagged' => 0, 1265 'questionsummary' => 'This question consists of some text with an answer embedded right here {Wrong answer; Another wrong answer; Correct answer; Answer that gives half the credit} 1266 1267 and right after that you will have to deal with this short answer _____ 1268 1269 and finally we have a floating point number _____. 1270 1271 The multichoice question can also be shown in the vertical display of the standard moodle multiple choice. {1. Wrong answer; 2. Another wrong answer; 3. Correct answer; 4. Answer that gives half the credit} 1272 1273 Or in an horizontal display that is included here in a table {a. Wrong answer; b. Another wrong answer; c. Correct answer; d. Answer that gives half the credit} 1274 1275 A shortanswer question where case must match. Write moodle in upper case letters _____ 1276 1277 Note that addresses like www.moodle.org and smileys :-) all work as normal: 1278 1279 a) How good is this? {Yes; No} 1280 1281 b) What grade would you give it? _____', 1282 'rightanswer' => 'part 1: Correct answer; part 2: Correct answer; part 3: 23.8; part 4: 3. Correct answer; part 5: c. Correct answer; part 6: MOODLE; part 7: Yes; part 8: 3', 1283 'responsesummary' => 'part 1: Correct answer; part 2: dsf; part 3: sadf; part 4: 2. Another wrong answer; part 5: c. Correct answer; part 6: MOODLE; part 7: Yes; part 8: 100%', 1284 'timemodified' => '1306425739', 1285 'steps' => array( 1286 0 => (object) array( 1287 'data' => array('_sub1_order' => '29,30,31,32', 1288 '_sub3_separators' => '.$,', '_sub4_order' => '38,39,40,41', 1289 '_sub5_order' => '42,43,44,45', '_sub7_order' => '49,50', 1290 '_sub8_separators' => '.$,'), 1291 'fraction' => null, 1292 'timecreated' => 1306425691, 1293 'userid' => 4, 1294 'state' => 'todo', 1295 'sequencenumber' => 0, 1296 ), 1297 1 => (object) array( 1298 'data' => array('sub1_answer' => 2, 'sub2_answer' => 'dsf', 1299 'sub3_answer' => 'sadf', 'sub4_answer' => 1, 1300 'sub5_answer' => 2, 'sub6_answer' => 'MOODLE', 1301 'sub7_answer' => 0, 'sub8_answer' => '100%', '-_try' => 1, 1302 '-_rawfraction' => 0.38461538461538466, '-submit' => 1), 1303 'fraction' => 0.38461538461538466, 1304 'timecreated' => '1306425739', 1305 'userid' => '4', 1306 'state' => 'todo', 1307 'sequencenumber' => 1, 1308 ), 1309 2 => (object) array( 1310 'data' => array('sub1_answer' => 2, 'sub2_answer' => 'dsf', 1311 'sub3_answer' => 'sadf', 'sub4_answer' => 1, 1312 'sub5_answer' => 2, 'sub6_answer' => 'MOODLE', 1313 'sub7_answer' => 0, 'sub8_answer' => '100%', '-finish' => 1, 1314 '-_try' => 1, '-_rawfraction' => 0.38461538461538466), 1315 'fraction' => 0.38461538461538466, 1316 'timecreated' => '1306425739', 1317 'userid' => '4', 1318 'state' => 'gradedpartial', 1319 'sequencenumber' => 2, 1320 ), 1321 ), 1322 ); 1323 1324 $this->compare_qas($expectedqa, $qa); 1325 } 1326 1327 public function test_multianswer_adaptivenopenalty_qsession107() { 1328 $quiz = (object) array( 1329 'id' => '5', 1330 'course' => '2', 1331 'name' => 'Multianswer quiz', 1332 'intro' => '', 1333 'introformat' => '1', 1334 'timeopen' => '0', 1335 'timeclose' => '0', 1336 'attempts' => '0', 1337 'attemptonlast' => '0', 1338 'grademethod' => '1', 1339 'decimalpoints' => '2', 1340 'questiondecimalpoints' => '-1', 1341 'review' => '4459503', 1342 'questionsperpage' => '1', 1343 'shufflequestions' => '0', 1344 'shuffleanswers' => '1', 1345 'sumgrades' => '14.00000', 1346 'grade' => '10.00000', 1347 'timecreated' => '0', 1348 'timemodified' => '1306424728', 1349 'timelimit' => '0', 1350 'password' => '', 1351 'subnet' => '', 1352 'popup' => '0', 1353 'delay1' => '0', 1354 'delay2' => '0', 1355 'showuserpicture' => '0', 1356 'showblocks' => '0', 1357 'preferredbehaviour' => 'adaptivenopenalty', 1358 ); 1359 $attempt = (object) array( 1360 'id' => '17', 1361 'uniqueid' => '17', 1362 'quiz' => '5', 1363 'userid' => '4', 1364 'attempt' => '2', 1365 'sumgrades' => '0.00000', 1366 'timestart' => '1306425757', 1367 'timefinish' => '1306425762', 1368 'timemodified' => '1306425762', 1369 'layout' => '28,19,0', 1370 'preview' => '0', 1371 ); 1372 $question = (object) array( 1373 'id' => '19', 1374 'category' => '2', 1375 'parent' => '0', 1376 'name' => 'Cloze', 1377 'questiontext' => '<p>This question consists of some text with an answer embedded right here {#1}</p> 1378 <p>and right after that you will have to deal with this short answer {#2}</p> 1379 <p>and finally we have a floating point number {#3}.</p> 1380 <p>The multichoice question can also be shown in the vertical display of the standard moodle multiple choice. {#4}</p> 1381 <p>Or in an horizontal display that is included here in a table {#5}</p> 1382 <p>A shortanswer question where case must match. Write moodle in upper case letters {#6}</p> 1383 <p>Note that addresses like www.moodle.org and smileys :-) all work as normal:</p> 1384 <p>a) How good is this? {#7}</p> 1385 <p>b) What grade would you give it? {#8}</p>', 1386 'questiontextformat' => '1', 1387 'generalfeedback' => '', 1388 'generalfeedbackformat' => '1', 1389 'penalty' => '0.1000000', 1390 'qtype' => 'multianswer', 1391 'length' => '1', 1392 'stamp' => 'tjh238.vledev2.open.ac.uk+110525164438+iwiint', 1393 'version' => 'tjh238.vledev2.open.ac.uk+110525164441+AAjnIy', 1394 'hidden' => '0', 1395 'timecreated' => '1306341878', 1396 'timemodified' => '1306341879', 1397 'createdby' => '2', 1398 'modifiedby' => '2', 1399 'maxmark' => '13.0000000', 1400 'options' => (object) array( 1401 'questions' => array( 1402 1 => (object) array( 1403 'id' => '20', 1404 'category' => '2', 1405 'parent' => '19', 1406 'name' => 'Cloze', 1407 'questiontext' => '{1:MULTICHOICE:Wrong answer#Feedback for this wrong answer~Another wrong answer#Feedback for the other wrong answer~=Correct answer#Feedback for correct answer~%50%Answer that gives half the credit#Feedback for half credit answer}', 1408 'questiontextformat' => '0', 1409 'generalfeedback' => '', 1410 'generalfeedbackformat' => '1', 1411 'defaultgrade' => '1.0000000', 1412 'penalty' => '0.0000000', 1413 'qtype' => 'multichoice', 1414 'length' => '1', 1415 'stamp' => 'tjh238.vledev2.open.ac.uk+110525164439+cAuJ4r', 1416 'version' => 'tjh238.vledev2.open.ac.uk+110525164439+5bnnys', 1417 'hidden' => '0', 1418 'timecreated' => '1306341879', 1419 'timemodified' => '1306341879', 1420 'createdby' => '2', 1421 'modifiedby' => '2', 1422 'options' => (object) array( 1423 'id' => '3', 1424 'question' => '20', 1425 'layout' => '0', 1426 'answers' => array( 1427 29 => (object) array( 1428 'id' => '29', 1429 'question' => '20', 1430 'answer' => 'Wrong answer', 1431 'answerformat' => '1', 1432 'fraction' => '0.0000000', 1433 'feedback' => 'Feedback for this wrong answer', 1434 'feedbackformat' => '1', 1435 ), 1436 30 => (object) array( 1437 'id' => '30', 1438 'question' => '20', 1439 'answer' => 'Another wrong answer', 1440 'answerformat' => '1', 1441 'fraction' => '0.0000000', 1442 'feedback' => 'Feedback for the other wrong answer', 1443 'feedbackformat' => '1', 1444 ), 1445 31 => (object) array( 1446 'id' => '31', 1447 'question' => '20', 1448 'answer' => 'Correct answer', 1449 'answerformat' => '1', 1450 'fraction' => '1.0000000', 1451 'feedback' => 'Feedback for correct answer', 1452 'feedbackformat' => '1', 1453 ), 1454 32 => (object) array( 1455 'id' => '32', 1456 'question' => '20', 1457 'answer' => 'Answer that gives half the credit', 1458 'answerformat' => '1', 1459 'fraction' => '0.5000000', 1460 'feedback' => 'Feedback for half credit answer', 1461 'feedbackformat' => '1', 1462 ), 1463 ), 1464 'single' => '1', 1465 'shuffleanswers' => '1', 1466 'correctfeedback' => '', 1467 'correctfeedbackformat' => '1', 1468 'partiallycorrectfeedback' => '', 1469 'partiallycorrectfeedbackformat' => '1', 1470 'incorrectfeedback' => '', 1471 'incorrectfeedbackformat' => '1', 1472 'answernumbering' => '0', 1473 ), 1474 'maxgrade' => '1.0000000', 1475 ), 1476 2 => (object) array( 1477 'id' => '21', 1478 'category' => '2', 1479 'parent' => '19', 1480 'name' => 'Cloze', 1481 'questiontext' => '{1:SHORTANSWER:Wrong answer#Feedback for this wrong answer~=Correct answer#Feedback for correct answer~%50%Answer that gives half the credit#Feedback for half credit answer}', 1482 'questiontextformat' => '0', 1483 'generalfeedback' => '', 1484 'generalfeedbackformat' => '1', 1485 'defaultgrade' => '1.0000000', 1486 'penalty' => '0.0000000', 1487 'qtype' => 'shortanswer', 1488 'length' => '1', 1489 'stamp' => 'tjh238.vledev2.open.ac.uk+110525164440+EN6wCk', 1490 'version' => 'tjh238.vledev2.open.ac.uk+110525164440+bQzatI', 1491 'hidden' => '0', 1492 'timecreated' => '1306341880', 1493 'timemodified' => '1306341880', 1494 'createdby' => '2', 1495 'modifiedby' => '2', 1496 'options' => (object) array( 1497 'answers' => array( 1498 33 => (object) array( 1499 'id' => '33', 1500 'question' => '21', 1501 'answer' => 'Wrong answer', 1502 'answerformat' => '0', 1503 'fraction' => '0.0000000', 1504 'feedback' => 'Feedback for this wrong answer', 1505 'feedbackformat' => '1', 1506 ), 1507 34 => (object) array( 1508 'id' => '34', 1509 'question' => '21', 1510 'answer' => 'Correct answer', 1511 'answerformat' => '0', 1512 'fraction' => '1.0000000', 1513 'feedback' => 'Feedback for correct answer', 1514 'feedbackformat' => '1', 1515 ), 1516 35 => (object) array( 1517 'id' => '35', 1518 'question' => '21', 1519 'answer' => 'Answer that gives half the credit', 1520 'answerformat' => '0', 1521 'fraction' => '0.5000000', 1522 'feedback' => 'Feedback for half credit answer', 1523 'feedbackformat' => '1', 1524 ), 1525 ), 1526 'usecase' => '0', 1527 ), 1528 'maxgrade' => '1.0000000', 1529 ), 1530 3 => (object) array( 1531 'id' => '22', 1532 'category' => '2', 1533 'parent' => '19', 1534 'name' => 'Cloze', 1535 'questiontext' => '{2:NUMERICAL:=23.8:0.1#Feedback for correct answer 23.8~%50%23.8:2#Feedback for half credit answer in the nearby region of the correct answer}', 1536 'questiontextformat' => '0', 1537 'generalfeedback' => '', 1538 'generalfeedbackformat' => '1', 1539 'defaultgrade' => '2.0000000', 1540 'penalty' => '0.0000000', 1541 'qtype' => 'numerical', 1542 'length' => '1', 1543 'stamp' => 'tjh238.vledev2.open.ac.uk+110525164440+Xr29c2', 1544 'version' => 'tjh238.vledev2.open.ac.uk+110525164441+QTwsGM', 1545 'hidden' => '0', 1546 'timecreated' => '1306341880', 1547 'timemodified' => '1306341880', 1548 'createdby' => '2', 1549 'modifiedby' => '2', 1550 'options' => (object) array( 1551 'answers' => array( 1552 36 => (object) array( 1553 'id' => '36', 1554 'question' => '22', 1555 'answer' => '23.8', 1556 'answerformat' => '0', 1557 'fraction' => '1.0000000', 1558 'feedback' => 'Feedback for correct answer 23.8', 1559 'feedbackformat' => '1', 1560 'tolerance' => '0.1', 1561 ), 1562 37 => (object) array( 1563 'id' => '37', 1564 'question' => '22', 1565 'answer' => '23.8', 1566 'answerformat' => '0', 1567 'fraction' => '0.5000000', 1568 'feedback' => 'Feedback for half credit answer in the nearby region of the correct answer', 1569 'feedbackformat' => '1', 1570 'tolerance' => '2', 1571 ), 1572 ), 1573 'units' => array( 1574 ), 1575 'unitgradingtype' => '0', 1576 'unitpenalty' => '1.0000000', 1577 'showunits' => '3', 1578 'unitsleft' => '0', 1579 'instructions' => '', 1580 'instructionsformat' => '1', 1581 ), 1582 'maxgrade' => '2.0000000', 1583 ), 1584 4 => (object) array( 1585 'id' => '23', 1586 'category' => '2', 1587 'parent' => '19', 1588 'name' => 'Cloze', 1589 'questiontext' => '{2:MCV:1. Wrong answer#Feedback for this wrong answer~2. Another wrong answer#Feedback for the other wrong answer~=3. Correct answer#Feedback for correct answer~%50%4. Answer that gives half the credit#Feedback for half credit answer}', 1590 'questiontextformat' => '0', 1591 'generalfeedback' => '', 1592 'generalfeedbackformat' => '1', 1593 'defaultgrade' => '2.0000000', 1594 'penalty' => '0.0000000', 1595 'qtype' => 'multichoice', 1596 'length' => '1', 1597 'stamp' => 'tjh238.vledev2.open.ac.uk+110525164441+7R55HA', 1598 'version' => 'tjh238.vledev2.open.ac.uk+110525164441+uCMoQc', 1599 'hidden' => '0', 1600 'timecreated' => '1306341881', 1601 'timemodified' => '1306341881', 1602 'createdby' => '2', 1603 'modifiedby' => '2', 1604 'options' => (object) array( 1605 'id' => '4', 1606 'question' => '23', 1607 'layout' => '1', 1608 'answers' => array( 1609 38 => (object) array( 1610 'id' => '38', 1611 'question' => '23', 1612 'answer' => '1. Wrong answer', 1613 'answerformat' => '1', 1614 'fraction' => '0.0000000', 1615 'feedback' => 'Feedback for this wrong answer', 1616 'feedbackformat' => '1', 1617 ), 1618 39 => (object) array( 1619 'id' => '39', 1620 'question' => '23', 1621 'answer' => '2. Another wrong answer', 1622 'answerformat' => '1', 1623 'fraction' => '0.0000000', 1624 'feedback' => 'Feedback for the other wrong answer', 1625 'feedbackformat' => '1', 1626 ), 1627 40 => (object) array( 1628 'id' => '40', 1629 'question' => '23', 1630 'answer' => '3. Correct answer', 1631 'answerformat' => '1', 1632 'fraction' => '1.0000000', 1633 'feedback' => 'Feedback for correct answer', 1634 'feedbackformat' => '1', 1635 ), 1636 41 => (object) array( 1637 'id' => '41', 1638 'question' => '23', 1639 'answer' => '4. Answer that gives half the credit', 1640 'answerformat' => '1', 1641 'fraction' => '0.5000000', 1642 'feedback' => 'Feedback for half credit answer', 1643 'feedbackformat' => '1', 1644 ), 1645 ), 1646 'single' => '1', 1647 'shuffleanswers' => '1', 1648 'correctfeedback' => '', 1649 'correctfeedbackformat' => '1', 1650 'partiallycorrectfeedback' => '', 1651 'partiallycorrectfeedbackformat' => '1', 1652 'incorrectfeedback' => '', 1653 'incorrectfeedbackformat' => '1', 1654 'answernumbering' => '0', 1655 ), 1656 'maxgrade' => '2.0000000', 1657 ), 1658 5 => (object) array( 1659 'id' => '24', 1660 'category' => '2', 1661 'parent' => '19', 1662 'name' => 'Cloze', 1663 'questiontext' => '{2:MCH:a. Wrong answer#Feedback for this wrong answer~b. Another wrong answer#Feedback for the other wrong answer~=c. Correct answer#Feedback for correct answer~%50%d. Answer that gives half the credit#Feedback for half credit answer}', 1664 'questiontextformat' => '0', 1665 'generalfeedback' => '', 1666 'generalfeedbackformat' => '1', 1667 'defaultgrade' => '2.0000000', 1668 'penalty' => '0.0000000', 1669 'qtype' => 'multichoice', 1670 'length' => '1', 1671 'stamp' => 'tjh238.vledev2.open.ac.uk+110525164441+QGvRpd', 1672 'version' => 'tjh238.vledev2.open.ac.uk+110525164441+03GsSs', 1673 'hidden' => '0', 1674 'timecreated' => '1306341881', 1675 'timemodified' => '1306341881', 1676 'createdby' => '2', 1677 'modifiedby' => '2', 1678 'options' => (object) array( 1679 'id' => '5', 1680 'question' => '24', 1681 'layout' => '2', 1682 'answers' => array( 1683 42 => (object) array( 1684 'id' => '42', 1685 'question' => '24', 1686 'answer' => 'a. Wrong answer', 1687 'answerformat' => '1', 1688 'fraction' => '0.0000000', 1689 'feedback' => 'Feedback for this wrong answer', 1690 'feedbackformat' => '1', 1691 ), 1692 43 => (object) array( 1693 'id' => '43', 1694 'question' => '24', 1695 'answer' => 'b. Another wrong answer', 1696 'answerformat' => '1', 1697 'fraction' => '0.0000000', 1698 'feedback' => 'Feedback for the other wrong answer', 1699 'feedbackformat' => '1', 1700 ), 1701 44 => (object) array( 1702 'id' => '44', 1703 'question' => '24', 1704 'answer' => 'c. Correct answer', 1705 'answerformat' => '1', 1706 'fraction' => '1.0000000', 1707 'feedback' => 'Feedback for correct answer', 1708 'feedbackformat' => '1', 1709 ), 1710 45 => (object) array( 1711 'id' => '45', 1712 'question' => '24', 1713 'answer' => 'd. Answer that gives half the credit', 1714 'answerformat' => '1', 1715 'fraction' => '0.5000000', 1716 'feedback' => 'Feedback for half credit answer', 1717 'feedbackformat' => '1', 1718 ), 1719 ), 1720 'single' => '1', 1721 'shuffleanswers' => '1', 1722 'correctfeedback' => '', 1723 'correctfeedbackformat' => '1', 1724 'partiallycorrectfeedback' => '', 1725 'partiallycorrectfeedbackformat' => '1', 1726 'incorrectfeedback' => '', 1727 'incorrectfeedbackformat' => '1', 1728 'answernumbering' => '0', 1729 ), 1730 'maxgrade' => '2.0000000', 1731 ), 1732 6 => (object) array( 1733 'id' => '25', 1734 'category' => '2', 1735 'parent' => '19', 1736 'name' => 'Cloze', 1737 'questiontext' => '{1:SHORTANSWER_C:moodle#Feedback for moodle in lower case ~=MOODLE#Feedback for MOODLE in upper case ~%50%Moodle#Feedback for only first letter in upper case}', 1738 'questiontextformat' => '0', 1739 'generalfeedback' => '', 1740 'generalfeedbackformat' => '1', 1741 'defaultgrade' => '1.0000000', 1742 'penalty' => '0.0000000', 1743 'qtype' => 'shortanswer', 1744 'length' => '1', 1745 'stamp' => 'tjh238.vledev2.open.ac.uk+110525164441+n9ETJC', 1746 'version' => 'tjh238.vledev2.open.ac.uk+110525164441+Bvqo6c', 1747 'hidden' => '0', 1748 'timecreated' => '1306341881', 1749 'timemodified' => '1306341881', 1750 'createdby' => '2', 1751 'modifiedby' => '2', 1752 'options' => (object) array( 1753 'answers' => array( 1754 46 => (object) array( 1755 'id' => '46', 1756 'question' => '25', 1757 'answer' => 'moodle', 1758 'answerformat' => '0', 1759 'fraction' => '0.0000000', 1760 'feedback' => 'Feedback for moodle in lower case', 1761 'feedbackformat' => '1', 1762 ), 1763 47 => (object) array( 1764 'id' => '47', 1765 'question' => '25', 1766 'answer' => 'MOODLE', 1767 'answerformat' => '0', 1768 'fraction' => '1.0000000', 1769 'feedback' => 'Feedback for MOODLE in upper case', 1770 'feedbackformat' => '1', 1771 ), 1772 48 => (object) array( 1773 'id' => '48', 1774 'question' => '25', 1775 'answer' => 'Moodle', 1776 'answerformat' => '0', 1777 'fraction' => '0.5000000', 1778 'feedback' => 'Feedback for only first letter in upper case', 1779 'feedbackformat' => '1', 1780 ), 1781 ), 1782 'usecase' => '1', 1783 ), 1784 'maxgrade' => '1.0000000', 1785 ), 1786 7 => (object) array( 1787 'id' => '26', 1788 'category' => '2', 1789 'parent' => '19', 1790 'name' => 'Cloze', 1791 'questiontext' => '{:MULTICHOICE:=Yes#Correct~No#We have a different opinion}', 1792 'questiontextformat' => '0', 1793 'generalfeedback' => '', 1794 'generalfeedbackformat' => '1', 1795 'defaultgrade' => '1.0000000', 1796 'penalty' => '0.0000000', 1797 'qtype' => 'multichoice', 1798 'length' => '1', 1799 'stamp' => 'tjh238.vledev2.open.ac.uk+110525164441+0YjnZ7', 1800 'version' => 'tjh238.vledev2.open.ac.uk+110525164441+1giLRX', 1801 'hidden' => '0', 1802 'timecreated' => '1306341881', 1803 'timemodified' => '1306341881', 1804 'createdby' => '2', 1805 'modifiedby' => '2', 1806 'options' => (object) array( 1807 'id' => '6', 1808 'question' => '26', 1809 'layout' => '0', 1810 'answers' => array( 1811 49 => (object) array( 1812 'id' => '49', 1813 'question' => '26', 1814 'answer' => 'Yes', 1815 'answerformat' => '1', 1816 'fraction' => '1.0000000', 1817 'feedback' => 'Correct', 1818 'feedbackformat' => '1', 1819 ), 1820 50 => (object) array( 1821 'id' => '50', 1822 'question' => '26', 1823 'answer' => 'No', 1824 'answerformat' => '1', 1825 'fraction' => '0.0000000', 1826 'feedback' => 'We have a different opinion', 1827 'feedbackformat' => '1', 1828 ), 1829 ), 1830 'single' => '1', 1831 'shuffleanswers' => '1', 1832 'correctfeedback' => '', 1833 'correctfeedbackformat' => '1', 1834 'partiallycorrectfeedback' => '', 1835 'partiallycorrectfeedbackformat' => '1', 1836 'incorrectfeedback' => '', 1837 'incorrectfeedbackformat' => '1', 1838 'answernumbering' => '0', 1839 ), 1840 'maxgrade' => '1.0000000', 1841 ), 1842 8 => (object) array( 1843 'id' => '27', 1844 'category' => '2', 1845 'parent' => '19', 1846 'name' => 'Cloze', 1847 'questiontext' => '{3:NUMERICAL:=3:2}', 1848 'questiontextformat' => '0', 1849 'generalfeedback' => '', 1850 'generalfeedbackformat' => '1', 1851 'defaultgrade' => '3.0000000', 1852 'penalty' => '0.0000000', 1853 'qtype' => 'numerical', 1854 'length' => '1', 1855 'stamp' => 'tjh238.vledev2.open.ac.uk+110525164441+glbCBN', 1856 'version' => 'tjh238.vledev2.open.ac.uk+110525164441+xWusxR', 1857 'hidden' => '0', 1858 'timecreated' => '1306341881', 1859 'timemodified' => '1306341881', 1860 'createdby' => '2', 1861 'modifiedby' => '2', 1862 'options' => (object) array( 1863 'answers' => array( 1864 51 => (object) array( 1865 'id' => '51', 1866 'question' => '27', 1867 'answer' => '3', 1868 'answerformat' => '0', 1869 'fraction' => '1.0000000', 1870 'feedback' => '', 1871 'feedbackformat' => '1', 1872 'tolerance' => '2', 1873 ), 1874 ), 1875 'units' => array( 1876 ), 1877 'unitgradingtype' => '0', 1878 'unitpenalty' => '1.0000000', 1879 'showunits' => '3', 1880 'unitsleft' => '0', 1881 'instructions' => '', 1882 'instructionsformat' => '1', 1883 ), 1884 'maxgrade' => '3.0000000', 1885 ), 1886 ), 1887 ), 1888 'defaultmark' => '13.0000000', 1889 ); 1890 $qsession = (object) array( 1891 'id' => '107', 1892 'attemptid' => '17', 1893 'questionid' => '19', 1894 'newest' => '290', 1895 'newgraded' => '290', 1896 'sumpenalty' => '1.3000000', 1897 'manualcomment' => '', 1898 'manualcommentformat' => '1', 1899 'flagged' => '0', 1900 ); 1901 $qstates = array( 1902 288 => (object) array( 1903 'id' => '288', 1904 'attempt' => '17', 1905 'question' => '19', 1906 'seq_number' => '0', 1907 'answer' => '1-,2-,3-,4-,5-,6-,7-,8-', 1908 'timestamp' => '1306425757', 1909 'event' => '0', 1910 'grade' => '0.0000000', 1911 'raw_grade' => '0.0000000', 1912 'penalty' => '0.0000000', 1913 ), 1914 290 => (object) array( 1915 'id' => '290', 1916 'attempt' => '17', 1917 'question' => '19', 1918 'seq_number' => '1', 1919 'answer' => '1-,2-,3-,4-,5-,6-,7-,8-', 1920 'timestamp' => '1306425757', 1921 'event' => '6', 1922 'grade' => '0.0000000', 1923 'raw_grade' => '0.0000000', 1924 'penalty' => '1.3000000', 1925 ), 1926 ); 1927 1928 $qa = $this->updater->convert_question_attempt($quiz, $attempt, $question, $qsession, $qstates); 1929 1930 $expectedqa = (object) array( 1931 'behaviour' => 'adaptivenopenalty', 1932 'questionid' => 19, 1933 'variant' => 1, 1934 'maxmark' => 13.0000000, 1935 'minfraction' => 0, 1936 'maxfraction' => 1, 1937 'flagged' => 0, 1938 'questionsummary' => 'This question consists of some text with an answer embedded right here {Wrong answer; Another wrong answer; Correct answer; Answer that gives half the credit} 1939 1940 and right after that you will have to deal with this short answer _____ 1941 1942 and finally we have a floating point number _____. 1943 1944 The multichoice question can also be shown in the vertical display of the standard moodle multiple choice. {1. Wrong answer; 2. Another wrong answer; 3. Correct answer; 4. Answer that gives half the credit} 1945 1946 Or in an horizontal display that is included here in a table {a. Wrong answer; b. Another wrong answer; c. Correct answer; d. Answer that gives half the credit} 1947 1948 A shortanswer question where case must match. Write moodle in upper case letters _____ 1949 1950 Note that addresses like www.moodle.org and smileys :-) all work as normal: 1951 1952 a) How good is this? {Yes; No} 1953 1954 b) What grade would you give it? _____', 1955 'rightanswer' => 'part 1: Correct answer; part 2: Correct answer; part 3: 23.8; part 4: 3. Correct answer; part 5: c. Correct answer; part 6: MOODLE; part 7: Yes; part 8: 3', 1956 'responsesummary' => 'part 1: ; part 2: ; part 3: ; part 4: ; part 5: ; part 6: ; part 7: ; part 8: ', 1957 'timemodified' => 1306425757, 1958 'steps' => array( 1959 0 => (object) array( 1960 'sequencenumber' => 0, 1961 'state' => 'todo', 1962 'fraction' => null, 1963 'timecreated' => 1306425757, 1964 'userid' => 4, 1965 'data' => array('_sub1_order' => '29,30,31,32', 1966 '_sub3_separators' => '.$,', '_sub4_order' => '38,39,40,41', 1967 '_sub5_order' => '42,43,44,45', '_sub7_order' => '49,50', 1968 '_sub8_separators' => '.$,'), 1969 ), 1970 1 => (object) array( 1971 'sequencenumber' => 1, 1972 'state' => 'gradedwrong', 1973 'fraction' => 0.0, 1974 'timecreated' => 1306425757, 1975 'userid' => 4, 1976 'data' => array('-finish' => '1', '-_try' => '1', '-_rawfraction' => 0.0), 1977 ), 1978 ), 1979 ); 1980 1981 $this->compare_qas($expectedqa, $qa); 1982 } 1983 1984 public function test_multianswer_adaptivenopenalty_qsession109() { 1985 $quiz = (object) array( 1986 'id' => '5', 1987 'course' => '2', 1988 'name' => 'Multianswer quiz', 1989 'intro' => '', 1990 'introformat' => '1', 1991 'timeopen' => '0', 1992 'timeclose' => '0', 1993 'attempts' => '0', 1994 'attemptonlast' => '0', 1995 'grademethod' => '1', 1996 'decimalpoints' => '2', 1997 'questiondecimalpoints' => '-1', 1998 'review' => '4459503', 1999 'questionsperpage' => '1', 2000 'shufflequestions' => '0', 2001 'shuffleanswers' => '1', 2002 'sumgrades' => '14.00000', 2003 'grade' => '10.00000', 2004 'timecreated' => '0', 2005 'timemodified' => '1306424728', 2006 'timelimit' => '0', 2007 'password' => '', 2008 'subnet' => '', 2009 'popup' => '0', 2010 'delay1' => '0', 2011 'delay2' => '0', 2012 'showuserpicture' => '0', 2013 'showblocks' => '0', 2014 'preferredbehaviour' => 'adaptivenopenalty', 2015 ); 2016 $attempt = (object) array( 2017 'id' => '18', 2018 'uniqueid' => '18', 2019 'quiz' => '5', 2020 'userid' => '3', 2021 'attempt' => '1', 2022 'sumgrades' => '10.40000', 2023 'timestart' => '1306425784', 2024 'timefinish' => '1306425931', 2025 'timemodified' => '1306425931', 2026 'layout' => '28,19,0', 2027 'preview' => '0', 2028 ); 2029 $question = (object) array( 2030 'id' => '19', 2031 'category' => '2', 2032 'parent' => '0', 2033 'name' => 'Cloze', 2034 'questiontext' => '<p>This question consists of some text with an answer embedded right here {#1}</p> 2035 <p>and right after that you will have to deal with this short answer {#2}</p> 2036 <p>and finally we have a floating point number {#3}.</p> 2037 <p>The multichoice question can also be shown in the vertical display of the standard moodle multiple choice. {#4}</p> 2038 <p>Or in an horizontal display that is included here in a table {#5}</p> 2039 <p>A shortanswer question where case must match. Write moodle in upper case letters {#6}</p> 2040 <p>Note that addresses like www.moodle.org and smileys :-) all work as normal:</p> 2041 <p>a) How good is this? {#7}</p> 2042 <p>b) What grade would you give it? {#8}</p>', 2043 'questiontextformat' => '1', 2044 'generalfeedback' => '', 2045 'generalfeedbackformat' => '1', 2046 'penalty' => '0.1000000', 2047 'qtype' => 'multianswer', 2048 'length' => '1', 2049 'stamp' => 'tjh238.vledev2.open.ac.uk+110525164438+iwiint', 2050 'version' => 'tjh238.vledev2.open.ac.uk+110525164441+AAjnIy', 2051 'hidden' => '0', 2052 'timecreated' => '1306341878', 2053 'timemodified' => '1306341879', 2054 'createdby' => '2', 2055 'modifiedby' => '2', 2056 'maxmark' => '13.0000000', 2057 'options' => (object) array( 2058 'questions' => array( 2059 1 => (object) array( 2060 'id' => '20', 2061 'category' => '2', 2062 'parent' => '19', 2063 'name' => 'Cloze', 2064 'questiontext' => '{1:MULTICHOICE:Wrong answer#Feedback for this wrong answer~Another wrong answer#Feedback for the other wrong answer~=Correct answer#Feedback for correct answer~%50%Answer that gives half the credit#Feedback for half credit answer}', 2065 'questiontextformat' => '0', 2066 'generalfeedback' => '', 2067 'generalfeedbackformat' => '1', 2068 'defaultgrade' => '1.0000000', 2069 'penalty' => '0.0000000', 2070 'qtype' => 'multichoice', 2071 'length' => '1', 2072 'stamp' => 'tjh238.vledev2.open.ac.uk+110525164439+cAuJ4r', 2073 'version' => 'tjh238.vledev2.open.ac.uk+110525164439+5bnnys', 2074 'hidden' => '0', 2075 'timecreated' => '1306341879', 2076 'timemodified' => '1306341879', 2077 'createdby' => '2', 2078 'modifiedby' => '2', 2079 'options' => (object) array( 2080 'id' => '3', 2081 'question' => '20', 2082 'layout' => '0', 2083 'answers' => array( 2084 29 => (object) array( 2085 'id' => '29', 2086 'question' => '20', 2087 'answer' => 'Wrong answer', 2088 'answerformat' => '1', 2089 'fraction' => '0.0000000', 2090 'feedback' => 'Feedback for this wrong answer', 2091 'feedbackformat' => '1', 2092 ), 2093 30 => (object) array( 2094 'id' => '30', 2095 'question' => '20', 2096 'answer' => 'Another wrong answer', 2097 'answerformat' => '1', 2098 'fraction' => '0.0000000', 2099 'feedback' => 'Feedback for the other wrong answer', 2100 'feedbackformat' => '1', 2101 ), 2102 31 => (object) array( 2103 'id' => '31', 2104 'question' => '20', 2105 'answer' => 'Correct answer', 2106 'answerformat' => '1', 2107 'fraction' => '1.0000000', 2108 'feedback' => 'Feedback for correct answer', 2109 'feedbackformat' => '1', 2110 ), 2111 32 => (object) array( 2112 'id' => '32', 2113 'question' => '20', 2114 'answer' => 'Answer that gives half the credit', 2115 'answerformat' => '1', 2116 'fraction' => '0.5000000', 2117 'feedback' => 'Feedback for half credit answer', 2118 'feedbackformat' => '1', 2119 ), 2120 ), 2121 'single' => '1', 2122 'shuffleanswers' => '1', 2123 'correctfeedback' => '', 2124 'correctfeedbackformat' => '1', 2125 'partiallycorrectfeedback' => '', 2126 'partiallycorrectfeedbackformat' => '1', 2127 'incorrectfeedback' => '', 2128 'incorrectfeedbackformat' => '1', 2129 'answernumbering' => '0', 2130 ), 2131 'maxgrade' => '1.0000000', 2132 ), 2133 2 => (object) array( 2134 'id' => '21', 2135 'category' => '2', 2136 'parent' => '19', 2137 'name' => 'Cloze', 2138 'questiontext' => '{1:SHORTANSWER:Wrong answer#Feedback for this wrong answer~=Correct answer#Feedback for correct answer~%50%Answer that gives half the credit#Feedback for half credit answer}', 2139 'questiontextformat' => '0', 2140 'generalfeedback' => '', 2141 'generalfeedbackformat' => '1', 2142 'defaultgrade' => '1.0000000', 2143 'penalty' => '0.0000000', 2144 'qtype' => 'shortanswer', 2145 'length' => '1', 2146 'stamp' => 'tjh238.vledev2.open.ac.uk+110525164440+EN6wCk', 2147 'version' => 'tjh238.vledev2.open.ac.uk+110525164440+bQzatI', 2148 'hidden' => '0', 2149 'timecreated' => '1306341880', 2150 'timemodified' => '1306341880', 2151 'createdby' => '2', 2152 'modifiedby' => '2', 2153 'options' => (object) array( 2154 'answers' => array( 2155 33 => (object) array( 2156 'id' => '33', 2157 'question' => '21', 2158 'answer' => 'Wrong answer', 2159 'answerformat' => '0', 2160 'fraction' => '0.0000000', 2161 'feedback' => 'Feedback for this wrong answer', 2162 'feedbackformat' => '1', 2163 ), 2164 34 => (object) array( 2165 'id' => '34', 2166 'question' => '21', 2167 'answer' => 'Correct answer', 2168 'answerformat' => '0', 2169 'fraction' => '1.0000000', 2170 'feedback' => 'Feedback for correct answer', 2171 'feedbackformat' => '1', 2172 ), 2173 35 => (object) array( 2174 'id' => '35', 2175 'question' => '21', 2176 'answer' => 'Answer that gives half the credit', 2177 'answerformat' => '0', 2178 'fraction' => '0.5000000', 2179 'feedback' => 'Feedback for half credit answer', 2180 'feedbackformat' => '1', 2181 ), 2182 ), 2183 'usecase' => '0', 2184 ), 2185 'maxgrade' => '1.0000000', 2186 ), 2187 3 => (object) array( 2188 'id' => '22', 2189 'category' => '2', 2190 'parent' => '19', 2191 'name' => 'Cloze', 2192 'questiontext' => '{2:NUMERICAL:=23.8:0.1#Feedback for correct answer 23.8~%50%23.8:2#Feedback for half credit answer in the nearby region of the correct answer}', 2193 'questiontextformat' => '0', 2194 'generalfeedback' => '', 2195 'generalfeedbackformat' => '1', 2196 'defaultgrade' => '2.0000000', 2197 'penalty' => '0.0000000', 2198 'qtype' => 'numerical', 2199 'length' => '1', 2200 'stamp' => 'tjh238.vledev2.open.ac.uk+110525164440+Xr29c2', 2201 'version' => 'tjh238.vledev2.open.ac.uk+110525164441+QTwsGM', 2202 'hidden' => '0', 2203 'timecreated' => '1306341880', 2204 'timemodified' => '1306341880', 2205 'createdby' => '2', 2206 'modifiedby' => '2', 2207 'options' => (object) array( 2208 'answers' => array( 2209 36 => (object) array( 2210 'id' => '36', 2211 'question' => '22', 2212 'answer' => '23.8', 2213 'answerformat' => '0', 2214 'fraction' => '1.0000000', 2215 'feedback' => 'Feedback for correct answer 23.8', 2216 'feedbackformat' => '1', 2217 'tolerance' => '0.1', 2218 ), 2219 37 => (object) array( 2220 'id' => '37', 2221 'question' => '22', 2222 'answer' => '23.8', 2223 'answerformat' => '0', 2224 'fraction' => '0.5000000', 2225 'feedback' => 'Feedback for half credit answer in the nearby region of the correct answer', 2226 'feedbackformat' => '1', 2227 'tolerance' => '2', 2228 ), 2229 ), 2230 'units' => array( 2231 ), 2232 'unitgradingtype' => '0', 2233 'unitpenalty' => '1.0000000', 2234 'showunits' => '3', 2235 'unitsleft' => '0', 2236 'instructions' => '', 2237 'instructionsformat' => '1', 2238 ), 2239 'maxgrade' => '2.0000000', 2240 ), 2241 4 => (object) array( 2242 'id' => '23', 2243 'category' => '2', 2244 'parent' => '19', 2245 'name' => 'Cloze', 2246 'questiontext' => '{2:MCV:1. Wrong answer#Feedback for this wrong answer~2. Another wrong answer#Feedback for the other wrong answer~=3. Correct answer#Feedback for correct answer~%50%4. Answer that gives half the credit#Feedback for half credit answer}', 2247 'questiontextformat' => '0', 2248 'generalfeedback' => '', 2249 'generalfeedbackformat' => '1', 2250 'defaultgrade' => '2.0000000', 2251 'penalty' => '0.0000000', 2252 'qtype' => 'multichoice', 2253 'length' => '1', 2254 'stamp' => 'tjh238.vledev2.open.ac.uk+110525164441+7R55HA', 2255 'version' => 'tjh238.vledev2.open.ac.uk+110525164441+uCMoQc', 2256 'hidden' => '0', 2257 'timecreated' => '1306341881', 2258 'timemodified' => '1306341881', 2259 'createdby' => '2', 2260 'modifiedby' => '2', 2261 'options' => (object) array( 2262 'id' => '4', 2263 'question' => '23', 2264 'layout' => '1', 2265 'answers' => array( 2266 38 => (object) array( 2267 'id' => '38', 2268 'question' => '23', 2269 'answer' => '1. Wrong answer', 2270 'answerformat' => '1', 2271 'fraction' => '0.0000000', 2272 'feedback' => 'Feedback for this wrong answer', 2273 'feedbackformat' => '1', 2274 ), 2275 39 => (object) array( 2276 'id' => '39', 2277 'question' => '23', 2278 'answer' => '2. Another wrong answer', 2279 'answerformat' => '1', 2280 'fraction' => '0.0000000', 2281 'feedback' => 'Feedback for the other wrong answer', 2282 'feedbackformat' => '1', 2283 ), 2284 40 => (object) array( 2285 'id' => '40', 2286 'question' => '23', 2287 'answer' => '3. Correct answer', 2288 'answerformat' => '1', 2289 'fraction' => '1.0000000', 2290 'feedback' => 'Feedback for correct answer', 2291 'feedbackformat' => '1', 2292 ), 2293 41 => (object) array( 2294 'id' => '41', 2295 'question' => '23', 2296 'answer' => '4. Answer that gives half the credit', 2297 'answerformat' => '1', 2298 'fraction' => '0.5000000', 2299 'feedback' => 'Feedback for half credit answer', 2300 'feedbackformat' => '1', 2301 ), 2302 ), 2303 'single' => '1', 2304 'shuffleanswers' => '1', 2305 'correctfeedback' => '', 2306 'correctfeedbackformat' => '1', 2307 'partiallycorrectfeedback' => '', 2308 'partiallycorrectfeedbackformat' => '1', 2309 'incorrectfeedback' => '', 2310 'incorrectfeedbackformat' => '1', 2311 'answernumbering' => '0', 2312 ), 2313 'maxgrade' => '2.0000000', 2314 ), 2315 5 => (object) array( 2316 'id' => '24', 2317 'category' => '2', 2318 'parent' => '19', 2319 'name' => 'Cloze', 2320 'questiontext' => '{2:MCH:a. Wrong answer#Feedback for this wrong answer~b. Another wrong answer#Feedback for the other wrong answer~=c. Correct answer#Feedback for correct answer~%50%d. Answer that gives half the credit#Feedback for half credit answer}', 2321 'questiontextformat' => '0', 2322 'generalfeedback' => '', 2323 'generalfeedbackformat' => '1', 2324 'defaultgrade' => '2.0000000', 2325 'penalty' => '0.0000000', 2326 'qtype' => 'multichoice', 2327 'length' => '1', 2328 'stamp' => 'tjh238.vledev2.open.ac.uk+110525164441+QGvRpd', 2329 'version' => 'tjh238.vledev2.open.ac.uk+110525164441+03GsSs', 2330 'hidden' => '0', 2331 'timecreated' => '1306341881', 2332 'timemodified' => '1306341881', 2333 'createdby' => '2', 2334 'modifiedby' => '2', 2335 'options' => (object) array( 2336 'id' => '5', 2337 'question' => '24', 2338 'layout' => '2', 2339 'answers' => array( 2340 42 => (object) array( 2341 'id' => '42', 2342 'question' => '24', 2343 'answer' => 'a. Wrong answer', 2344 'answerformat' => '1', 2345 'fraction' => '0.0000000', 2346 'feedback' => 'Feedback for this wrong answer', 2347 'feedbackformat' => '1', 2348 ), 2349 43 => (object) array( 2350 'id' => '43', 2351 'question' => '24', 2352 'answer' => 'b. Another wrong answer', 2353 'answerformat' => '1', 2354 'fraction' => '0.0000000', 2355 'feedback' => 'Feedback for the other wrong answer', 2356 'feedbackformat' => '1', 2357 ), 2358 44 => (object) array( 2359 'id' => '44', 2360 'question' => '24', 2361 'answer' => 'c. Correct answer', 2362 'answerformat' => '1', 2363 'fraction' => '1.0000000', 2364 'feedback' => 'Feedback for correct answer', 2365 'feedbackformat' => '1', 2366 ), 2367 45 => (object) array( 2368 'id' => '45', 2369 'question' => '24', 2370 'answer' => 'd. Answer that gives half the credit', 2371 'answerformat' => '1', 2372 'fraction' => '0.5000000', 2373 'feedback' => 'Feedback for half credit answer', 2374 'feedbackformat' => '1', 2375 ), 2376 ), 2377 'single' => '1', 2378 'shuffleanswers' => '1', 2379 'correctfeedback' => '', 2380 'correctfeedbackformat' => '1', 2381 'partiallycorrectfeedback' => '', 2382 'partiallycorrectfeedbackformat' => '1', 2383 'incorrectfeedback' => '', 2384 'incorrectfeedbackformat' => '1', 2385 'answernumbering' => '0', 2386 ), 2387 'maxgrade' => '2.0000000', 2388 ), 2389 6 => (object) array( 2390 'id' => '25', 2391 'category' => '2', 2392 'parent' => '19', 2393 'name' => 'Cloze', 2394 'questiontext' => '{1:SHORTANSWER_C:moodle#Feedback for moodle in lower case ~=MOODLE#Feedback for MOODLE in upper case ~%50%Moodle#Feedback for only first letter in upper case}', 2395 'questiontextformat' => '0', 2396 'generalfeedback' => '', 2397 'generalfeedbackformat' => '1', 2398 'defaultgrade' => '1.0000000', 2399 'penalty' => '0.0000000', 2400 'qtype' => 'shortanswer', 2401 'length' => '1', 2402 'stamp' => 'tjh238.vledev2.open.ac.uk+110525164441+n9ETJC', 2403 'version' => 'tjh238.vledev2.open.ac.uk+110525164441+Bvqo6c', 2404 'hidden' => '0', 2405 'timecreated' => '1306341881', 2406 'timemodified' => '1306341881', 2407 'createdby' => '2', 2408 'modifiedby' => '2', 2409 'options' => (object) array( 2410 'answers' => array( 2411 46 => (object) array( 2412 'id' => '46', 2413 'question' => '25', 2414 'answer' => 'moodle', 2415 'answerformat' => '0', 2416 'fraction' => '0.0000000', 2417 'feedback' => 'Feedback for moodle in lower case', 2418 'feedbackformat' => '1', 2419 ), 2420 47 => (object) array( 2421 'id' => '47', 2422 'question' => '25', 2423 'answer' => 'MOODLE', 2424 'answerformat' => '0', 2425 'fraction' => '1.0000000', 2426 'feedback' => 'Feedback for MOODLE in upper case', 2427 'feedbackformat' => '1', 2428 ), 2429 48 => (object) array( 2430 'id' => '48', 2431 'question' => '25', 2432 'answer' => 'Moodle', 2433 'answerformat' => '0', 2434 'fraction' => '0.5000000', 2435 'feedback' => 'Feedback for only first letter in upper case', 2436 'feedbackformat' => '1', 2437 ), 2438 ), 2439 'usecase' => '1', 2440 ), 2441 'maxgrade' => '1.0000000', 2442 ), 2443 7 => (object) array( 2444 'id' => '26', 2445 'category' => '2', 2446 'parent' => '19', 2447 'name' => 'Cloze', 2448 'questiontext' => '{:MULTICHOICE:=Yes#Correct~No#We have a different opinion}', 2449 'questiontextformat' => '0', 2450 'generalfeedback' => '', 2451 'generalfeedbackformat' => '1', 2452 'defaultgrade' => '1.0000000', 2453 'penalty' => '0.0000000', 2454 'qtype' => 'multichoice', 2455 'length' => '1', 2456 'stamp' => 'tjh238.vledev2.open.ac.uk+110525164441+0YjnZ7', 2457 'version' => 'tjh238.vledev2.open.ac.uk+110525164441+1giLRX', 2458 'hidden' => '0', 2459 'timecreated' => '1306341881', 2460 'timemodified' => '1306341881', 2461 'createdby' => '2', 2462 'modifiedby' => '2', 2463 'options' => (object) array( 2464 'id' => '6', 2465 'question' => '26', 2466 'layout' => '0', 2467 'answers' => array( 2468 49 => (object) array( 2469 'id' => '49', 2470 'question' => '26', 2471 'answer' => 'Yes', 2472 'answerformat' => '1', 2473 'fraction' => '1.0000000', 2474 'feedback' => 'Correct', 2475 'feedbackformat' => '1', 2476 ), 2477 50 => (object) array( 2478 'id' => '50', 2479 'question' => '26', 2480 'answer' => 'No', 2481 'answerformat' => '1', 2482 'fraction' => '0.0000000', 2483 'feedback' => 'We have a different opinion', 2484 'feedbackformat' => '1', 2485 ), 2486 ), 2487 'single' => '1', 2488 'shuffleanswers' => '1', 2489 'correctfeedback' => '', 2490 'correctfeedbackformat' => '1', 2491 'partiallycorrectfeedback' => '', 2492 'partiallycorrectfeedbackformat' => '1', 2493 'incorrectfeedback' => '', 2494 'incorrectfeedbackformat' => '1', 2495 'answernumbering' => '0', 2496 ), 2497 'maxgrade' => '1.0000000', 2498 ), 2499 8 => (object) array( 2500 'id' => '27', 2501 'category' => '2', 2502 'parent' => '19', 2503 'name' => 'Cloze', 2504 'questiontext' => '{3:NUMERICAL:=3:2}', 2505 'questiontextformat' => '0', 2506 'generalfeedback' => '', 2507 'generalfeedbackformat' => '1', 2508 'defaultgrade' => '3.0000000', 2509 'penalty' => '0.0000000', 2510 'qtype' => 'numerical', 2511 'length' => '1', 2512 'stamp' => 'tjh238.vledev2.open.ac.uk+110525164441+glbCBN', 2513 'version' => 'tjh238.vledev2.open.ac.uk+110525164441+xWusxR', 2514 'hidden' => '0', 2515 'timecreated' => '1306341881', 2516 'timemodified' => '1306341881', 2517 'createdby' => '2', 2518 'modifiedby' => '2', 2519 'options' => (object) array( 2520 'answers' => array( 2521 51 => (object) array( 2522 'id' => '51', 2523 'question' => '27', 2524 'answer' => '3', 2525 'answerformat' => '0', 2526 'fraction' => '1.0000000', 2527 'feedback' => '', 2528 'feedbackformat' => '1', 2529 'tolerance' => '2', 2530 ), 2531 ), 2532 'units' => array( 2533 ), 2534 'unitgradingtype' => '0', 2535 'unitpenalty' => '1.0000000', 2536 'showunits' => '3', 2537 'unitsleft' => '0', 2538 'instructions' => '', 2539 'instructionsformat' => '1', 2540 ), 2541 'maxgrade' => '3.0000000', 2542 ), 2543 ), 2544 ), 2545 'defaultmark' => '13.0000000', 2546 ); 2547 $qsession = (object) array( 2548 'id' => '109', 2549 'attemptid' => '18', 2550 'questionid' => '19', 2551 'newest' => '299', 2552 'newgraded' => '299', 2553 'sumpenalty' => '5.2000000', 2554 'manualcomment' => '', 2555 'manualcommentformat' => '1', 2556 'flagged' => '0', 2557 ); 2558 $qstates = array( 2559 292 => (object) array( 2560 'id' => '292', 2561 'attempt' => '18', 2562 'question' => '19', 2563 'seq_number' => '0', 2564 'answer' => '1-,2-,3-,4-,5-,6-,7-,8-', 2565 'timestamp' => '1306425784', 2566 'event' => '0', 2567 'grade' => '0.0000000', 2568 'raw_grade' => '0.0000000', 2569 'penalty' => '0.0000000', 2570 ), 2571 294 => (object) array( 2572 'id' => '294', 2573 'attempt' => '18', 2574 'question' => '19', 2575 'seq_number' => '1', 2576 'answer' => '1-32,2-asdgf,3-saedf,4-39,5-43,6-sadf,7-,8-', 2577 'timestamp' => '1306425801', 2578 'event' => '3', 2579 'grade' => '0.5000000', 2580 'raw_grade' => '0.5000000', 2581 'penalty' => '1.3000000', 2582 ), 2583 295 => (object) array( 2584 'id' => '295', 2585 'attempt' => '18', 2586 'question' => '19', 2587 'seq_number' => '2', 2588 'answer' => '1-31,2-asdgf,3-28.3,4-40,5-44,6-MOODLE,7-49,8-13', 2589 'timestamp' => '1306425836', 2590 'event' => '3', 2591 'grade' => '5.7000000', 2592 'raw_grade' => '7.0000000', 2593 'penalty' => '1.3000000', 2594 ), 2595 296 => (object) array( 2596 'id' => '296', 2597 'attempt' => '18', 2598 'question' => '19', 2599 'seq_number' => '3', 2600 'answer' => '1-31,2-Correct answer,3-23.8,4-40,5-44,6-MOODLE,7-49,8-3', 2601 'timestamp' => '1306425886', 2602 'event' => '3', 2603 'grade' => '9.4000000', 2604 'raw_grade' => '12.0000000', 2605 'penalty' => '1.3000000', 2606 ), 2607 299 => (object) array( 2608 'id' => '299', 2609 'attempt' => '18', 2610 'question' => '19', 2611 'seq_number' => '4', 2612 'answer' => '1-31,2-Correct answer,3-23.8,4-40,5-44,6-MOODLE,7-49,8-3', 2613 'timestamp' => '1306425886', 2614 'event' => '6', 2615 'grade' => '9.4000000', 2616 'raw_grade' => '12.0000000', 2617 'penalty' => '1.3000000', 2618 ), 2619 ); 2620 2621 $qa = $this->updater->convert_question_attempt($quiz, $attempt, $question, $qsession, $qstates); 2622 2623 $expectedqa = (object) array( 2624 'behaviour' => 'adaptivenopenalty', 2625 'questionid' => '19', 2626 'variant' => 1, 2627 'maxmark' => '13.0000000', 2628 'minfraction' => 0, 2629 'maxfraction' => 1, 2630 'flagged' => 0, 2631 'questionsummary' => 'This question consists of some text with an answer embedded right here {Wrong answer; Another wrong answer; Correct answer; Answer that gives half the credit} 2632 2633 and right after that you will have to deal with this short answer _____ 2634 2635 and finally we have a floating point number _____. 2636 2637 The multichoice question can also be shown in the vertical display of the standard moodle multiple choice. {1. Wrong answer; 2. Another wrong answer; 3. Correct answer; 4. Answer that gives half the credit} 2638 2639 Or in an horizontal display that is included here in a table {a. Wrong answer; b. Another wrong answer; c. Correct answer; d. Answer that gives half the credit} 2640 2641 A shortanswer question where case must match. Write moodle in upper case letters _____ 2642 2643 Note that addresses like www.moodle.org and smileys :-) all work as normal: 2644 2645 a) How good is this? {Yes; No} 2646 2647 b) What grade would you give it? _____', 2648 'rightanswer' => 'part 1: Correct answer; part 2: Correct answer; part 3: 23.8; part 4: 3. Correct answer; part 5: c. Correct answer; part 6: MOODLE; part 7: Yes; part 8: 3', 2649 'responsesummary' => 'part 1: Correct answer; part 2: Correct answer; part 3: 23.8; part 4: 3. Correct answer; part 5: c. Correct answer; part 6: MOODLE; part 7: Yes; part 8: 3', 2650 'timemodified' => '1306425886', 2651 'steps' => array( 2652 0 => (object) array( 2653 'sequencenumber' => 0, 2654 'state' => 'todo', 2655 'fraction' => null, 2656 'timecreated' => 1306425784, 2657 'userid' => 3, 2658 'data' => array('_sub1_order' => '29,30,31,32', 2659 '_sub3_separators' => '.$,', '_sub4_order' => '38,39,40,41', 2660 '_sub5_order' => '42,43,44,45', '_sub7_order' => '49,50', 2661 '_sub8_separators' => '.$,'), 2662 ), 2663 1 => (object) array( 2664 'sequencenumber' => 1, 2665 'state' => 'todo', 2666 'fraction' => 0.038461538461538464, 2667 'timecreated' => '1306425801', 2668 'userid' => '3', 2669 'data' => array('sub1_answer' => '3', 'sub2_answer' => 'asdgf', 2670 'sub3_answer' => 'saedf', 'sub4_answer' => '1', 2671 'sub5_answer' => '1', 'sub6_answer' => 'sadf', 2672 '-_try' => '1', 2673 '-_rawfraction' => '0.038461538461538464', '-submit' => '1'), 2674 ), 2675 2 => (object) array( 2676 'sequencenumber' => 2, 2677 'state' => 'todo', 2678 'fraction' => 0.43846153846153845, 2679 'timecreated' => 1306425836, 2680 'userid' => 3, 2681 'data' => array('sub1_answer' => '2', 'sub2_answer' => 'asdgf', 2682 'sub3_answer' => '28.3', 'sub4_answer' => '2', 2683 'sub5_answer' => '2', 'sub6_answer' => 'MOODLE', 2684 'sub7_answer' => '0', 'sub8_answer' => '13', '-_try' => 2, 2685 '-_rawfraction' => 0.53846153846153845, '-submit' => 1), 2686 ), 2687 3 => (object) array( 2688 'sequencenumber' => 3, 2689 'state' => 'todo', 2690 'fraction' => 0.72307692307692311, 2691 'timecreated' => 1306425886, 2692 'userid' => 3, 2693 'data' => array('sub1_answer' => '2', 'sub2_answer' => 'Correct answer', 2694 'sub3_answer' => '23.8', 'sub4_answer' => '2', 2695 'sub5_answer' => '2', 'sub6_answer' => 'MOODLE', 2696 'sub7_answer' => '0', 'sub8_answer' => '3', '-_try' => 3, 2697 '-_rawfraction' => 0.92307692307692311, '-submit' => 1), 2698 ), 2699 4 => (object) array( 2700 'sequencenumber' => 4, 2701 'state' => 'gradedpartial', 2702 'fraction' => 0.72307692307692311, 2703 'timecreated' => 1306425886, 2704 'userid' => 3, 2705 'data' => array('sub1_answer' => '2', 'sub2_answer' => 'Correct answer', 2706 'sub3_answer' => '23.8', 'sub4_answer' => '2', 2707 'sub5_answer' => '2', 'sub6_answer' => 'MOODLE', 2708 'sub7_answer' => '0', 'sub8_answer' => '3', '-_try' => 3, 2709 '-_rawfraction' => 0.92307692307692311, '-finish' => 1), 2710 ), 2711 ), 2712 ); 2713 2714 $this->compare_qas($expectedqa, $qa); 2715 } 2716 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body