| Línea 23... | 
            Línea 23... | 
          
          
            | 23 | 
             * @package    mod_quiz
  | 
            23 | 
             * @package    mod_quiz
  | 
          
          
            | 24 | 
             * @copyright  1999 onwards Martin Dougiamas {@link http://moodle.com}
  | 
            24 | 
             * @copyright  1999 onwards Martin Dougiamas {@link http://moodle.com}
  | 
          
          
            | 25 | 
             * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  | 
            25 | 
             * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
  | 
          
          
            | 26 | 
             */
  | 
            26 | 
             */
  | 
          
          
            | Línea 27... | 
            Línea -... | 
          
          
            | 27 | 
             
  | 
            - | 
               | 
          
          
            | - | 
               | 
            27 | 
             
  | 
          
          
            | 28 | 
             
  | 
            28 | 
            use core_question\local\bank\question_bank_helper;
  | 
          
          
            | Línea 29... | 
            Línea 29... | 
          
          
            | 29 | 
            use qbank_managecategories\helper;
  | 
            29 | 
            use qbank_managecategories\helper;
  | 
          
          
            | Línea 30... | 
            Línea 30... | 
          
          
            | 30 | 
             
  | 
            30 | 
             
  | 
          
          
            | Línea 252... | 
            Línea 252... | 
          
          
            | 252 | 
                // Check for group overrides.
  | 
            252 | 
                // Check for group overrides.
  | 
          
          
            | 253 | 
                $groupings = groups_get_user_groups($quiz->course, $userid);
  | 
            253 | 
                $groupings = groups_get_user_groups($quiz->course, $userid);
  | 
          
          
            | Línea 254... | 
            Línea 254... | 
          
          
            | 254 | 
             
  | 
            254 | 
             
  | 
          
          
            | 255 | 
                if (!empty($groupings[0])) {
  | 
            255 | 
                if (!empty($groupings[0])) {
  | 
          
          
            | 256 | 
                    // Select all overrides that apply to the User's groups.
  | 
            256 | 
                    // Select all overrides that apply to the User's groups.
  | 
          
          
            | 257 | 
                    list($extra, $params) = $DB->get_in_or_equal(array_values($groupings[0]));
  | 
            257 | 
                    [$extra, $params] = $DB->get_in_or_equal(array_values($groupings[0]));
  | 
          
          
            | 258 | 
                    $sql = "SELECT * FROM {quiz_overrides}
  | 
            258 | 
                    $sql = "SELECT * FROM {quiz_overrides}
  | 
          
          
            | 259 | 
                            WHERE groupid $extra AND quiz = ?";
  | 
            259 | 
                            WHERE groupid $extra AND quiz = ?";
  | 
          
          
            | 260 | 
                    $params[] = $quiz->id;
  | 
            260 | 
                    $params[] = $quiz->id;
  | 
          
          
            | Línea 522... | 
            Línea 522... | 
          
          
            | 522 | 
                    case 'all':
  | 
            522 | 
                    case 'all':
  | 
          
          
            | 523 | 
                        $statuscondition = '';
  | 
            523 | 
                        $statuscondition = '';
  | 
          
          
            | 524 | 
                        break;
  | 
            524 | 
                        break;
  | 
          
          
            | Línea 525... | 
            Línea 525... | 
          
          
            | 525 | 
             
  | 
            525 | 
             
  | 
          
          
            | 526 | 
                    case 'finished':
  | 
            526 | 
                    case 'finished':
  | 
          
          
            | 527 | 
                        $statuscondition = ' AND state IN (:state1, :state2)';
  | 
            527 | 
                        $statuscondition = ' AND state IN (:state1, :state2, :state3)';
  | 
          
          
            | 528 | 
                        $params['state1'] = quiz_attempt::FINISHED;
  | 
            528 | 
                        $params['state1'] = quiz_attempt::FINISHED;
  | 
          
          
            | - | 
               | 
            529 | 
                        $params['state2'] = quiz_attempt::ABANDONED;
  | 
          
          
            | 529 | 
                        $params['state2'] = quiz_attempt::ABANDONED;
  | 
            530 | 
                        $params['state3'] = quiz_attempt::SUBMITTED;
  | 
          
          
            | Línea 530... | 
            Línea 531... | 
          
          
            | 530 | 
                        break;
  | 
            531 | 
                        break;
  | 
          
          
            | 531 | 
             
  | 
            532 | 
             
  | 
          
          
            | 532 | 
                    case 'unfinished':
  | 
            533 | 
                    case 'unfinished':
  | 
          
          
            | 533 | 
                        $statuscondition = ' AND state IN (:state1, :state2)';
  | 
            534 | 
                        $statuscondition = ' AND state IN (:state1, :state2)';
  | 
          
          
            | 534 | 
                        $params['state1'] = quiz_attempt::IN_PROGRESS;
  | 
            535 | 
                        $params['state1'] = quiz_attempt::IN_PROGRESS;
  | 
          
          
            | 535 | 
                        $params['state2'] = quiz_attempt::OVERDUE;
  | 
            536 | 
                        $params['state2'] = quiz_attempt::OVERDUE;
  | 
          
          
            | Línea 536... | 
            Línea 537... | 
          
          
            | 536 | 
                        break;
  | 
            537 | 
                        break;
  | 
          
          
            | 537 | 
                }
  | 
            538 | 
                }
  | 
          
          
            | 538 | 
             
  | 
            539 | 
             
  | 
          
          
            | 539 | 
                $quizids = (array) $quizids;
  | 
            540 | 
                $quizids = (array) $quizids;
  | 
          
          
            | Línea 540... | 
            Línea 541... | 
          
          
            | 540 | 
                list($insql, $inparams) = $DB->get_in_or_equal($quizids, SQL_PARAMS_NAMED);
  | 
            541 | 
                [$insql, $inparams] = $DB->get_in_or_equal($quizids, SQL_PARAMS_NAMED);
  | 
          
          
            | 541 | 
                $params += $inparams;
  | 
            542 | 
                $params += $inparams;
  | 
          
          
            | Línea 1413... | 
            Línea 1414... | 
          
          
            | 1413 | 
             *
  | 
            1414 | 
             *
  | 
          
          
            | 1414 | 
             * @param MoodleQuickForm $mform the course reset form that is being built.
  | 
            1415 | 
             * @param MoodleQuickForm $mform the course reset form that is being built.
  | 
          
          
            | 1415 | 
             */
  | 
            1416 | 
             */
  | 
          
          
            | 1416 | 
            function quiz_reset_course_form_definition($mform) {
  | 
            1417 | 
            function quiz_reset_course_form_definition($mform) {
  | 
          
          
            | 1417 | 
                $mform->addElement('header', 'quizheader', get_string('modulenameplural', 'quiz'));
  | 
            1418 | 
                $mform->addElement('header', 'quizheader', get_string('modulenameplural', 'quiz'));
  | 
          
          
            | - | 
               | 
            1419 | 
                $mform->addElement('static', 'quizdelete', get_string('delete'));
  | 
          
          
            | 1418 | 
                $mform->addElement('advcheckbox', 'reset_quiz_attempts',
  | 
            1420 | 
                $mform->addElement('advcheckbox', 'reset_quiz_attempts',
  | 
          
          
            | 1419 | 
                        get_string('removeallquizattempts', 'quiz'));
  | 
            1421 | 
                        get_string('removeallquizattempts', 'quiz'));
  | 
          
          
            | 1420 | 
                $mform->addElement('advcheckbox', 'reset_quiz_user_overrides',
  | 
            1422 | 
                $mform->addElement('advcheckbox', 'reset_quiz_user_overrides',
  | 
          
          
            | 1421 | 
                        get_string('removealluseroverrides', 'quiz'));
  | 
            1423 | 
                        get_string('removealluseroverrides', 'quiz'));
  | 
          
          
            | 1422 | 
                $mform->addElement('advcheckbox', 'reset_quiz_group_overrides',
  | 
            1424 | 
                $mform->addElement('advcheckbox', 'reset_quiz_group_overrides',
  | 
          
          
            | Línea 1480... | 
            Línea 1482... | 
          
          
            | 1480 | 
             
  | 
            1482 | 
             
  | 
          
          
            | 1481 | 
                    $DB->delete_records_select('quiz_attempts',
  | 
            1483 | 
                    $DB->delete_records_select('quiz_attempts',
  | 
          
          
            | 1482 | 
                            'quiz IN (SELECT id FROM {quiz} WHERE course = ?)', [$data->courseid]);
  | 
            1484 | 
                            'quiz IN (SELECT id FROM {quiz} WHERE course = ?)', [$data->courseid]);
  | 
          
          
            | 1483 | 
                    $status[] = [
  | 
            1485 | 
                    $status[] = [
  | 
          
          
            | 1484 | 
                        'component' => $componentstr,
  | 
            1486 | 
                        'component' => $componentstr,
  | 
          
          
            | 1485 | 
                        'item' => get_string('attemptsdeleted', 'quiz'),
  | 
            1487 | 
                        'item' => get_string('removeallquizattempts', 'quiz'),
  | 
          
          
            | Línea 1486... | 
            Línea 1488... | 
          
          
            | 1486 | 
                        'error' => false];
  | 
            1488 | 
                        'error' => false];
  | 
          
          
            | 1487 | 
             
  | 
            1489 | 
             
  | 
          
          
            | 1488 | 
                    // Remove all grades from gradebook.
  | 
            1490 | 
                    // Remove all grades from gradebook.
  | 
          
          
            | 1489 | 
                    $DB->delete_records_select('quiz_grades',
  | 
            1491 | 
                    $DB->delete_records_select('quiz_grades',
  | 
          
          
            | 1490 | 
                            'quiz IN (SELECT id FROM {quiz} WHERE course = ?)', [$data->courseid]);
  | 
            1492 | 
                            'quiz IN (SELECT id FROM {quiz} WHERE course = ?)', [$data->courseid]);
  | 
          
          
            | 1491 | 
                    if (empty($data->reset_gradebook_grades)) {
  | 
            1493 | 
                    if (empty($data->reset_gradebook_grades)) {
  | 
          
          
            | 1492 | 
                        quiz_reset_gradebook($data->courseid);
  | 
            1494 | 
                        quiz_reset_gradebook($data->courseid);
  | 
          
          
            | 1493 | 
                    }
  | 
            1495 | 
                    }
  | 
          
          
            | 1494 | 
                    $status[] = [
  | 
            1496 | 
                    $status[] = [
  | 
          
          
            | 1495 | 
                        'component' => $componentstr,
  | 
            1497 | 
                        'component' => $componentstr,
  | 
          
          
            | 1496 | 
                        'item' => get_string('gradesdeleted', 'quiz'),
  | 
            1498 | 
                        'item' => get_string('grades'),
  | 
          
          
            | Línea 1497... | 
            Línea 1499... | 
          
          
            | 1497 | 
                        'error' => false];
  | 
            1499 | 
                        'error' => false];
  | 
          
          
            | Línea 1503... | 
            Línea 1505... | 
          
          
            | 1503 | 
                if (!empty($data->reset_quiz_user_overrides)) {
  | 
            1505 | 
                if (!empty($data->reset_quiz_user_overrides)) {
  | 
          
          
            | 1504 | 
                    $DB->delete_records_select('quiz_overrides',
  | 
            1506 | 
                    $DB->delete_records_select('quiz_overrides',
  | 
          
          
            | 1505 | 
                            'quiz IN (SELECT id FROM {quiz} WHERE course = ?) AND userid IS NOT NULL', [$data->courseid]);
  | 
            1507 | 
                            'quiz IN (SELECT id FROM {quiz} WHERE course = ?) AND userid IS NOT NULL', [$data->courseid]);
  | 
          
          
            | 1506 | 
                    $status[] = [
  | 
            1508 | 
                    $status[] = [
  | 
          
          
            | 1507 | 
                        'component' => $componentstr,
  | 
            1509 | 
                        'component' => $componentstr,
  | 
          
          
            | 1508 | 
                        'item' => get_string('useroverridesdeleted', 'quiz'),
  | 
            1510 | 
                        'item' => get_string('useroverrides', 'quiz'),
  | 
          
          
            | 1509 | 
                        'error' => false];
  | 
            1511 | 
                        'error' => false];
  | 
          
          
            | 1510 | 
                    $purgeoverrides = true;
  | 
            1512 | 
                    $purgeoverrides = true;
  | 
          
          
            | 1511 | 
                }
  | 
            1513 | 
                }
  | 
          
          
            | 1512 | 
                // Remove group overrides.
  | 
            1514 | 
                // Remove group overrides.
  | 
          
          
            | 1513 | 
                if (!empty($data->reset_quiz_group_overrides)) {
  | 
            1515 | 
                if (!empty($data->reset_quiz_group_overrides)) {
  | 
          
          
            | 1514 | 
                    $DB->delete_records_select('quiz_overrides',
  | 
            1516 | 
                    $DB->delete_records_select('quiz_overrides',
  | 
          
          
            | 1515 | 
                            'quiz IN (SELECT id FROM {quiz} WHERE course = ?) AND groupid IS NOT NULL', [$data->courseid]);
  | 
            1517 | 
                            'quiz IN (SELECT id FROM {quiz} WHERE course = ?) AND groupid IS NOT NULL', [$data->courseid]);
  | 
          
          
            | 1516 | 
                    $status[] = [
  | 
            1518 | 
                    $status[] = [
  | 
          
          
            | 1517 | 
                        'component' => $componentstr,
  | 
            1519 | 
                        'component' => $componentstr,
  | 
          
          
            | 1518 | 
                        'item' => get_string('groupoverridesdeleted', 'quiz'),
  | 
            1520 | 
                        'item' => get_string('groupoverrides', 'quiz'),
  | 
          
          
            | 1519 | 
                        'error' => false];
  | 
            1521 | 
                        'error' => false];
  | 
          
          
            | 1520 | 
                    $purgeoverrides = true;
  | 
            1522 | 
                    $purgeoverrides = true;
  | 
          
          
            | 1521 | 
                }
  | 
            1523 | 
                }
  | 
          
          
            | Línea 1522... | 
            Línea 1524... | 
          
          
            | 1522 | 
             
  | 
            1524 | 
             
  | 
          
          
            | Línea 1578... | 
            Línea 1580... | 
          
          
            | 1578 | 
                                    '{groups_members} gm ON qa.userid = gm.userid ' .
  | 
            1580 | 
                                    '{groups_members} gm ON qa.userid = gm.userid ' .
  | 
          
          
            | 1579 | 
                                    'WHERE quiz = ? AND preview = 0 AND groupid = ?',
  | 
            1581 | 
                                    'WHERE quiz = ? AND preview = 0 AND groupid = ?',
  | 
          
          
            | 1580 | 
                                    [$quiz->id, $currentgroup]);
  | 
            1582 | 
                                    [$quiz->id, $currentgroup]);
  | 
          
          
            | 1581 | 
                            return get_string('attemptsnumthisgroup', 'quiz', $a);
  | 
            1583 | 
                            return get_string('attemptsnumthisgroup', 'quiz', $a);
  | 
          
          
            | 1582 | 
                        } else if ($groups = groups_get_all_groups($cm->course, $USER->id, $cm->groupingid)) {
  | 
            1584 | 
                        } else if ($groups = groups_get_all_groups($cm->course, $USER->id, $cm->groupingid)) {
  | 
          
          
            | 1583 | 
                            list($usql, $params) = $DB->get_in_or_equal(array_keys($groups));
  | 
            1585 | 
                            [$usql, $params] = $DB->get_in_or_equal(array_keys($groups));
  | 
          
          
            | 1584 | 
                            $a->group = $DB->count_records_sql('SELECT COUNT(DISTINCT qa.id) FROM ' .
  | 
            1586 | 
                            $a->group = $DB->count_records_sql('SELECT COUNT(DISTINCT qa.id) FROM ' .
  | 
          
          
            | 1585 | 
                                    '{quiz_attempts} qa JOIN ' .
  | 
            1587 | 
                                    '{quiz_attempts} qa JOIN ' .
  | 
          
          
            | 1586 | 
                                    '{groups_members} gm ON qa.userid = gm.userid ' .
  | 
            1588 | 
                                    '{groups_members} gm ON qa.userid = gm.userid ' .
  | 
          
          
            | 1587 | 
                                    'WHERE quiz = ? AND preview = 0 AND ' .
  | 
            1589 | 
                                    'WHERE quiz = ? AND preview = 0 AND ' .
  | 
          
          
            | 1588 | 
                                    "groupid $usql", array_merge([$quiz->id], $params));
  | 
            1590 | 
                                    "groupid $usql", array_merge([$quiz->id], $params));
  | 
          
          
            | Línea 1870... | 
            Línea 1872... | 
          
          
            | 1870 | 
                $updates->questions = (object) ['updated' => false];
  | 
            1872 | 
                $updates->questions = (object) ['updated' => false];
  | 
          
          
            | 1871 | 
                $quizobj = quiz_settings::create($cm->instance, $USER->id);
  | 
            1873 | 
                $quizobj = quiz_settings::create($cm->instance, $USER->id);
  | 
          
          
            | 1872 | 
                $quizobj->preload_questions();
  | 
            1874 | 
                $quizobj->preload_questions();
  | 
          
          
            | 1873 | 
                $questionids = array_keys($quizobj->get_questions(null, false));
  | 
            1875 | 
                $questionids = array_keys($quizobj->get_questions(null, false));
  | 
          
          
            | 1874 | 
                if (!empty($questionids)) {
  | 
            1876 | 
                if (!empty($questionids)) {
  | 
          
          
            | 1875 | 
                    list($questionsql, $params) = $DB->get_in_or_equal($questionids, SQL_PARAMS_NAMED);
  | 
            1877 | 
                    [$questionsql, $params] = $DB->get_in_or_equal($questionids, SQL_PARAMS_NAMED);
  | 
          
          
            | 1876 | 
                    $select = 'id ' . $questionsql . ' AND (timemodified > :time1 OR timecreated > :time2)';
  | 
            1878 | 
                    $select = 'id ' . $questionsql . ' AND (timemodified > :time1 OR timecreated > :time2)';
  | 
          
          
            | 1877 | 
                    $params['time1'] = $from;
  | 
            1879 | 
                    $params['time1'] = $from;
  | 
          
          
            | 1878 | 
                    $params['time2'] = $from;
  | 
            1880 | 
                    $params['time2'] = $from;
  | 
          
          
            | 1879 | 
                    $questions = $DB->get_records_select('question', $select, $params, '', 'id');
  | 
            1881 | 
                    $questions = $DB->get_records_select('question', $select, $params, '', 'id');
  | 
          
          
            | 1880 | 
                    if (!empty($questions)) {
  | 
            1882 | 
                    if (!empty($questions)) {
  | 
          
          
            | Línea 1908... | 
            Línea 1910... | 
          
          
            | 1908 | 
                    if (groups_get_activity_groupmode($cm) == SEPARATEGROUPS) {
  | 
            1910 | 
                    if (groups_get_activity_groupmode($cm) == SEPARATEGROUPS) {
  | 
          
          
            | 1909 | 
                        $groupusers = array_keys(groups_get_activity_shared_group_members($cm));
  | 
            1911 | 
                        $groupusers = array_keys(groups_get_activity_shared_group_members($cm));
  | 
          
          
            | 1910 | 
                        if (empty($groupusers)) {
  | 
            1912 | 
                        if (empty($groupusers)) {
  | 
          
          
            | 1911 | 
                            return $updates;
  | 
            1913 | 
                            return $updates;
  | 
          
          
            | 1912 | 
                        }
  | 
            1914 | 
                        }
  | 
          
          
            | 1913 | 
                        list($insql, $inparams) = $DB->get_in_or_equal($groupusers);
  | 
            1915 | 
                        [$insql, $inparams] = $DB->get_in_or_equal($groupusers);
  | 
          
          
            | 1914 | 
                        $select .= ' AND userid ' . $insql;
  | 
            1916 | 
                        $select .= ' AND userid ' . $insql;
  | 
          
          
            | 1915 | 
                        $params = array_merge($params, $inparams);
  | 
            1917 | 
                        $params = array_merge($params, $inparams);
  | 
          
          
            | 1916 | 
                    }
  | 
            1918 | 
                    }
  | 
          
          
            | Línea 1917... | 
            Línea 1919... | 
          
          
            | 1917 | 
             
  | 
            1919 | 
             
  | 
          
          
            | Línea 2326... | 
            Línea 2328... | 
          
          
            | 2326 | 
                $params = [];
  | 
            2328 | 
                $params = [];
  | 
          
          
            | 2327 | 
                $extraparams = [];
  | 
            2329 | 
                $extraparams = [];
  | 
          
          
            | 2328 | 
                $querystring = parse_url($args['querystring'], PHP_URL_QUERY);
  | 
            2330 | 
                $querystring = parse_url($args['querystring'], PHP_URL_QUERY);
  | 
          
          
            | 2329 | 
                parse_str($querystring, $params);
  | 
            2331 | 
                parse_str($querystring, $params);
  | 
          
          
            | Línea -... | 
            Línea 2332... | 
          
          
            | - | 
               | 
            2332 | 
             
  | 
          
          
            | - | 
               | 
            2333 | 
                // Load the bank we are looking at rather than always the quiz module itself.
  | 
          
          
            | - | 
               | 
            2334 | 
                $params['cmid'] = clean_param($args['bankcmid'], PARAM_INT);
  | 
          
          
            | 2330 | 
             
  | 
            2335 | 
             
  | 
          
          
            | 2331 | 
                $viewclass = \mod_quiz\question\bank\custom_view::class;
  | 
            2336 | 
                $viewclass = \mod_quiz\question\bank\custom_view::class;
  | 
          
          
            | Línea -... | 
            Línea 2337... | 
          
          
            | - | 
               | 
            2337 | 
                $extraparams['view'] = $viewclass;
  | 
          
          
            | - | 
               | 
            2338 | 
             
  | 
          
          
            | - | 
               | 
            2339 | 
                // We need the quiz modid to POST back to.
  | 
          
          
            | 2332 | 
                $extraparams['view'] = $viewclass;
  | 
            2340 | 
                $extraparams['quizcmid'] = clean_param($args['quizcmid'], PARAM_INT);
  | 
          
          
            | 2333 | 
             
  | 
            2341 | 
             
  | 
          
          
            | 2334 | 
                // Build required parameters.
  | 
            2342 | 
                // Build required parameters.
  | 
          
          
            | Línea 2335... | 
            Línea 2343... | 
          
          
            | 2335 | 
                [$contexts, $thispageurl, $cm, $pagevars, $extraparams] =
  | 
            2343 | 
                [$contexts, $thispageurl, $cm, $pagevars, $extraparams] =
  | 
          
          
            | - | 
               | 
            2344 | 
                        build_required_parameters_for_custom_view($params, $extraparams);
  | 
          
          
            | 2336 | 
                        build_required_parameters_for_custom_view($params, $extraparams);
  | 
            2345 | 
             
  | 
          
          
            | - | 
               | 
            2346 | 
                $course = get_course($cm->course);
  | 
          
          
            | Línea 2337... | 
            Línea 2347... | 
          
          
            | 2337 | 
             
  | 
            2347 | 
                if (!has_capability('moodle/question:useall', $contexts->lowest())) {
  | 
          
          
            | 2338 | 
                $course = get_course($cm->course);
  | 
            2348 | 
                    require_capability('moodle/question:usemine', $contexts->lowest());
  | 
          
          
            | Línea 2339... | 
            Línea 2349... | 
          
          
            | 2339 | 
                require_capability('mod/quiz:manage', $contexts->lowest());
  | 
            2349 | 
                }
  | 
          
          
            | 2340 | 
             
  | 
            2350 | 
             
  | 
          
          
            | 2341 | 
                // Custom View.
  | 
            2351 | 
                // Custom View.
  | 
          
          
            | 2342 | 
                $questionbank = new $viewclass($contexts, $thispageurl, $course, $cm, $pagevars, $extraparams);
  | 
            2352 | 
                $questionbank = new $viewclass($contexts, $thispageurl, $course, $cm, $pagevars, $extraparams);
  | 
          
          
            | Línea 2343... | 
            Línea 2353... | 
          
          
            | 2343 | 
             
  | 
            2353 | 
             
  | 
          
          
            | - | 
               | 
            2354 | 
                // Output.
  | 
          
          
            | - | 
               | 
            2355 | 
                $renderer = $PAGE->get_renderer('mod_quiz', 'edit');
  | 
          
          
            | - | 
               | 
            2356 | 
                return $renderer->question_bank_contents($questionbank, $pagevars);
  | 
          
          
            | - | 
               | 
            2357 | 
            }
  | 
          
          
            | - | 
               | 
            2358 | 
             
  | 
          
          
            | - | 
               | 
            2359 | 
            /**
  | 
          
          
            | - | 
               | 
            2360 | 
             * Build and return the output for the question bank and category chooser.
  | 
          
          
            | - | 
               | 
            2361 | 
             *
  | 
          
          
            | - | 
               | 
            2362 | 
             * @param array $args provided by the AJAX request.
  | 
          
          
            | - | 
               | 
            2363 | 
             * @return string html to render to the modal.
  | 
          
          
            | - | 
               | 
            2364 | 
             */
  | 
          
          
            | - | 
               | 
            2365 | 
            function mod_quiz_output_fragment_switch_question_bank($args): string {
  | 
          
          
            | - | 
               | 
            2366 | 
                global $USER, $COURSE, $OUTPUT;
  | 
          
          
            | - | 
               | 
            2367 | 
             
  | 
          
          
            | - | 
               | 
            2368 | 
                $quizcmid = clean_param($args['quizcmid'], PARAM_INT);
  | 
          
          
            | - | 
               | 
            2369 | 
             
  | 
          
          
            | 2344 | 
                // Output.
  | 
            2370 | 
                $switchbankwidget = new \core_question\output\switch_question_bank($quizcmid, $COURSE->id, $USER->id);
  | 
          
          
            | 2345 | 
                $renderer = $PAGE->get_renderer('mod_quiz', 'edit');
  | 
            2371 | 
             
  | 
          
          
            | 2346 | 
                return $renderer->question_bank_contents($questionbank, $pagevars);
  | 
            2372 | 
                return $OUTPUT->render($switchbankwidget);
  | 
          
          
            | 2347 | 
            }
  | 
            2373 | 
            }
  | 
          
          
            | 2348 | 
             
  | 
            - | 
               | 
          
          
            | 2349 | 
            /**
  | 
            2374 | 
             
  | 
          
          
            | 2350 | 
             * Generates the add random question in a fragment output. This allows the
  | 
            2375 | 
            /**
  | 
          
          
            | 2351 | 
             * form to be rendered in javascript, for example inside a modal.
  | 
            2376 | 
             * Generates the add random question in a fragment output. This allows the
  | 
          
          
            | - | 
               | 
            2377 | 
             * form to be rendered in javascript, for example inside a modal.
  | 
          
          
            | 2352 | 
             *
  | 
            2378 | 
             *
  | 
          
          
            | 2353 | 
             * The required arguments as keys in the $args array are:
  | 
            2379 | 
             * The required arguments as keys in the $args array are:
  | 
          
          
            | 2354 | 
             *      cat {string} The category and category context ids comma separated.
  | 
            2380 | 
             *      addonpage {int} The page id to add this question to.
  | 
          
          
            | 2355 | 
             *      addonpage {int} The page id to add this question to.
  | 
            2381 | 
             *      returnurl {string} URL to return to after form submission.
  | 
          
          
            | 2356 | 
             *      returnurl {string} URL to return to after form submission.
  | 
            2382 | 
             *      quizcmid {int} The quiz course module id the questions are being added to.
  | 
          
          
            | 2357 | 
             *      cmid {int} The course module id the questions are being added to.
  | 
            2383 | 
             *      bankcmid {int} The question bank course module id the questions are being added from.
  | 
          
          
            | - | 
               | 
            2384 | 
             *
  | 
          
          
            | - | 
               | 
            2385 | 
             * @param array $args The fragment arguments.
  | 
          
          
            | - | 
               | 
            2386 | 
             * @return string The rendered mform fragment.
  | 
          
          
            | - | 
               | 
            2387 | 
             */
  | 
          
          
            | - | 
               | 
            2388 | 
            function mod_quiz_output_fragment_add_random_question_form($args) {
  | 
          
          
            | - | 
               | 
            2389 | 
                global $PAGE, $OUTPUT, $DB;
  | 
          
          
            | - | 
               | 
            2390 | 
             
  | 
          
          
            | - | 
               | 
            2391 | 
                $slotid = clean_param($args['slotid'] ?? 0, PARAM_INT);
  | 
          
          
            | - | 
               | 
            2392 | 
                if (empty($slotid)) {
  | 
          
          
            | - | 
               | 
            2393 | 
                    $params = $args;
  | 
          
          
            | - | 
               | 
            2394 | 
                } else {
  | 
          
          
            | - | 
               | 
            2395 | 
                    // Load the stored filters for the current slot.
  | 
          
          
            | - | 
               | 
            2396 | 
                    $setreference = $DB->get_record('question_set_references',
  | 
          
          
            | - | 
               | 
            2397 | 
                        ['itemid' => $slotid, 'component' => 'mod_quiz', 'questionarea' => 'slot']);
  | 
          
          
            | - | 
               | 
            2398 | 
                    $filterconditions = json_decode($setreference->filtercondition, true);
  | 
          
          
            | - | 
               | 
            2399 | 
                    $filterconditions = \core_question\question_reference_manager::convert_legacy_set_reference_filter_condition(
  | 
          
          
            | - | 
               | 
            2400 | 
                        $filterconditions,
  | 
          
          
            | - | 
               | 
            2401 | 
                    );
  | 
          
          
            | - | 
               | 
            2402 | 
                    $params = \core_question\local\bank\filter_condition_manager::filter_invalid_values($filterconditions);
  | 
          
          
            | Línea 2358... | 
            Línea 2403... | 
          
          
            | 2358 | 
             *
  | 
            2403 | 
                }
  | 
          
          
            | - | 
               | 
            2404 | 
             
  | 
          
          
            | - | 
               | 
            2405 | 
                if (!empty($args['savedfiltercondition'])) {
  | 
          
          
            | Línea 2359... | 
            Línea 2406... | 
          
          
            | 2359 | 
             * @param array $args The fragment arguments.
  | 
            2406 | 
                    $filtercondition = json_decode($args['savedfiltercondition'], true);
  | 
          
          
            | 2360 | 
             * @return string The rendered mform fragment.
  | 
            2407 | 
                    $params['filter'] = $filtercondition['filter'];
  | 
          
          
            | 2361 | 
             */
  | 
            2408 | 
                }
  | 
          
          
            | Línea 2362... | 
            Línea 2409... | 
          
          
            | 2362 | 
            function mod_quiz_output_fragment_add_random_question_form($args) {
  | 
            2409 | 
             
  | 
          
          
            | 2363 | 
                global $PAGE, $OUTPUT;
  | 
            2410 | 
                $extraparams = [];
  | 
          
          
            | Línea 2364... | 
            Línea 2411... | 
          
          
            | 2364 | 
             
  | 
            2411 | 
                $extraparams['quizcmid'] = clean_param($args['quizcmid'], PARAM_INT);
  | 
          
          
            | Línea 2402... | 
            Línea 2449... | 
          
          
            | 2402 | 
                $data = [
  | 
            2449 | 
                $data = [
  | 
          
          
            | 2403 | 
                    'questionbank' => $questionbankoutput,
  | 
            2450 | 
                    'questionbank' => $questionbankoutput,
  | 
          
          
            | 2404 | 
                    'randomoptions' => $randomcount,
  | 
            2451 | 
                    'randomoptions' => $randomcount,
  | 
          
          
            | 2405 | 
                    'questioncategoryoptions' => $catoptions,
  | 
            2452 | 
                    'questioncategoryoptions' => $catoptions,
  | 
          
          
            | 2406 | 
                ];
  | 
            2453 | 
                ];
  | 
          
          
            | - | 
               | 
            2454 | 
                if (!empty($slotid)) {
  | 
          
          
            | - | 
               | 
            2455 | 
                    $data['slotid'] = $slotid;
  | 
          
          
            | - | 
               | 
            2456 | 
                }
  | 
          
          
            | Línea 2407... | 
            Línea 2457... | 
          
          
            | 2407 | 
             
  | 
            2457 | 
             
  | 
          
          
            | 2408 | 
                $helpicon = new \help_icon('parentcategory', 'question');
  | 
            2458 | 
                $helpicon = new \help_icon('parentcategory', 'question');
  | 
          
          
            | Línea 2409... | 
            Línea 2459... | 
          
          
            | 2409 | 
                $data['questioncategoryhelp'] = $helpicon->export_for_template($renderer);
  | 
            2459 | 
                $data['questioncategoryhelp'] = $helpicon->export_for_template($renderer);
  | 
          
          
            | Línea 2475... | 
            Línea 2525... | 
          
          
            | 2475 | 
                // Build required parameters.
  | 
            2525 | 
                // Build required parameters.
  | 
          
          
            | 2476 | 
                $cmid = clean_param($args['cmid'], PARAM_INT);
  | 
            2526 | 
                $cmid = clean_param($args['cmid'], PARAM_INT);
  | 
          
          
            | 2477 | 
                $thispageurl = new \moodle_url('/mod/quiz/edit.php', ['cmid' => $cmid]);
  | 
            2527 | 
                $thispageurl = new \moodle_url('/mod/quiz/edit.php', ['cmid' => $cmid]);
  | 
          
          
            | 2478 | 
                $thiscontext = \context_module::instance($cmid);
  | 
            2528 | 
                $thiscontext = \context_module::instance($cmid);
  | 
          
          
            | 2479 | 
                $contexts = new \core_question\local\bank\question_edit_contexts($thiscontext);
  | 
            2529 | 
                $contexts = new \core_question\local\bank\question_edit_contexts($thiscontext);
  | 
          
          
            | 2480 | 
                $defaultcategory = question_make_default_categories($contexts->all());
  | 
            2530 | 
                $defaultcategory = question_get_default_category($contexts->lowest()->id, true);
  | 
          
          
            | 2481 | 
                $params['cat'] = implode(',', [$defaultcategory->id, $defaultcategory->contextid]);
  | 
            2531 | 
                $params['cat'] = implode(',', [$defaultcategory->id, $defaultcategory->contextid]);
  | 
          
          
            | Línea 2482... | 
            Línea 2532... | 
          
          
            | 2482 | 
             
  | 
            2532 | 
             
  | 
          
          
            | - | 
               | 
            2533 | 
                $course = get_course($params['courseid']);
  | 
          
          
            | 2483 | 
                $course = get_course($params['courseid']);
  | 
            2534 | 
                // The viewing bank mod id.
  | 
          
          
            | 2484 | 
                [, $cm] = get_module_from_cmid($cmid);
  | 
            2535 | 
                [, $cm] = get_module_from_cmid(clean_param($args['cmid'], PARAM_INT));
  | 
          
          
            | - | 
               | 
            2536 | 
                $params['tabname'] = 'questions';
  | 
          
          
            | Línea 2485... | 
            Línea 2537... | 
          
          
            | 2485 | 
                $params['tabname'] = 'questions';
  | 
            2537 | 
                $extraparams['quizcmid'] = clean_param($args['quizcmid'], PARAM_INT);
  | 
          
          
            | 2486 | 
             
  | 
            2538 | 
             
  | 
          
          
            | 2487 | 
                // Custom question bank View.
  | 
            2539 | 
                // Custom question bank View.
  | 
          
          
            | Línea 2514... | 
            Línea 2566... | 
          
          
            | 2514 | 
                        $defaultpagesize);
  | 
            2566 | 
                        $defaultpagesize);
  | 
          
          
            | Línea 2515... | 
            Línea 2567... | 
          
          
            | 2515 | 
             
  | 
            2567 | 
             
  | 
          
          
            | 2516 | 
                // Add cmid so we can retrieve later in extra params.
  | 
            2568 | 
                // Add cmid so we can retrieve later in extra params.
  | 
          
          
            | Línea -... | 
            Línea 2569... | 
          
          
            | - | 
               | 
            2569 | 
                $extraparams['cmid'] = $cmid;
  | 
          
          
            | - | 
               | 
            2570 | 
             
  | 
          
          
            | 2517 | 
                $extraparams['cmid'] = $cmid;
  | 
            2571 | 
                $extraparams['requirebankswitch'] = !empty(question_bank_helper::get_activity_types_with_shareable_questions());
  | 
          
          
            | 2518 | 
             
  | 
            2572 | 
             
  | 
          
          
            | Línea 2519... | 
            Línea 2573... | 
          
          
            | 2519 | 
                return [$contexts, $thispageurl, $cm, $pagevars, $extraparams];
  | 
            2573 | 
                return [$contexts, $thispageurl, $cm, $pagevars, $extraparams];
  | 
          
          
            | 2520 | 
            }
  | 
            2574 | 
            }
  |