| Línea 64... | Línea 64... | 
          
            | 64 |         $course = get_course($cm->course);
 | 64 |         $course = get_course($cm->course);
 | 
          
            | 65 |     }
 | 65 |     }
 | 
          
            | Línea 66... | Línea 66... | 
          
            | 66 |  
 | 66 |  
 | 
          
            | Línea -... | Línea 67... | 
          
            | - |   | 67 |     $viewclass = empty($args['view']) ? \core_question\local\bank\view::class : clean_param($args['view'], PARAM_NOTAGS);
 | 
          
            | - |   | 68 |  
 | 
          
            | - |   | 69 |     // Make sure the class passed through is valid (exists and is view or subclass of view).
 | 
          
            | - |   | 70 |     if (!class_exists($viewclass) || !is_a($viewclass, \core_question\local\bank\view::class, true)) {
 | 
          
            | - |   | 71 |         throw new invalid_parameter_exception('view parameter must be a valid view class');
 | 
          
            | 67 |     $viewclass = empty($args['view']) ? \core_question\local\bank\view::class : clean_param($args['view'], PARAM_NOTAGS);
 | 72 |     }
 | 
          
            | 68 |  
 | 73 |  
 | 
          
            | 69 |     if (!empty($args['lastchanged'])) {
 | 74 |     if (!empty($args['lastchanged'])) {
 | 
          
            | - |   | 75 |         $thispageurl->param('lastchanged', clean_param($args['lastchanged'], PARAM_INT));
 | 
          
            | 70 |         $thispageurl->param('lastchanged', clean_param($args['lastchanged'], PARAM_INT));
 | 76 |     }
 | 
          
            | - |   | 77 |     if (!empty($args['view'])) {
 | 
          
            | 71 |     }
 | 78 |         $thispageurl->param('view', clean_param($args['view'], PARAM_NOTAGS));
 | 
          
            | - |   | 79 |     }
 | 
          
            | - |   | 80 |     if (!empty($args['extraparams'])) {
 | 
          
            | 72 |     // This is highly suspicious, but it is the same approach taken in /question/edit.php. See MDL-79281.
 | 81 |         $thispageurl->param('extraparams', clean_param($args['extraparams'], PARAM_RAW));
 | 
          
            | 73 |     $thispageurl->param('deleteall', 1);
 | 82 |     }
 | 
          
            | 74 |     $questionbank = new $viewclass($contexts, $thispageurl, $course, $cm, $pagevars, $extraparams);
 | 83 |     $questionbank = new $viewclass($contexts, $thispageurl, $course, $cm, $pagevars, $extraparams);
 | 
          
            | 75 |     $questionbank->add_standard_search_conditions();
 | 84 |     $questionbank->add_standard_search_conditions();
 | 
          
            | 76 |     ob_start();
 | 85 |     ob_start();
 | 
          
            | 77 |     $questionbank->display_question_list();
 | 86 |     $questionbank->display_question_list();
 | 
          
            | - |   | 87 |     return ob_get_clean();
 | 
          
            | - |   | 88 | }
 | 
          
            | - |   | 89 |  
 | 
          
            | - |   | 90 | /**
 | 
          
            | - |   | 91 |  * Render and return a category selector for the categories in a given question bank.
 | 
          
            | - |   | 92 |  *
 | 
          
            | - |   | 93 |  * @param array $args ['bankcmid' => Course module ID of the question bank]
 | 
          
            | - |   | 94 |  * @return string The rendered selector.
 | 
          
            | - |   | 95 |  */
 | 
          
            | - |   | 96 | function core_question_output_fragment_category_selector(array $args): string {
 | 
          
            | - |   | 97 |     global $OUTPUT;
 | 
          
            | - |   | 98 |     $context = \core\context\module::instance($args['bankcmid']);
 | 
          
            | - |   | 99 |     $selector = new \core_question\output\question_category_selector([$context], autocomplete: true);
 |