. /** * Helper class for adding/editing a question. * * This code is based on question/editlib.php by Martin Dougiamas. * * @package qbank_editquestion * @copyright 2021 Catalyst IT Australia Pty Ltd * @author Safat Shahin * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ namespace qbank_editquestion; use core_question\local\bank\question_version_status; /** * Class editquestion_helper for methods related to add/edit/copy * * @package qbank_editquestion * @copyright 2021 Catalyst IT Australia Pty Ltd * @author Safat Shahin */ class editquestion_helper { /** * Print a form to let the user choose which question type to add. * When the form is submitted, it goes to the question.php script. * * @param array|null $hiddenparams hidden parameters to add to the form, in addition to * the qtype radio buttons. * @param array|null $allowedqtypes optional list of qtypes that are allowed. If given, only * those qtypes will be shown. Example value array('description', 'multichoice'). * @param bool $enablejs * @return bool|string */ public static function print_choose_qtype_to_add_form(array $hiddenparams, array $allowedqtypes = null, $enablejs = true) { global $PAGE; $chooser = \qbank_editquestion\qbank_chooser::get($PAGE->course, $hiddenparams, $allowedqtypes); $renderer = $PAGE->get_renderer('qbank_editquestion'); return $renderer->render($chooser); } /** * Print a button for creating a new question. This will open question/addquestion.php, * which in turn goes to question/question.php before getting back to $params['returnurl'] * (by default the question bank screen). * * @param int $categoryid The id of the category that the new question should be added to. * @param array $params Other paramters to add to the URL. You need either $params['cmid'] or * $params['courseid'], and you should probably set $params['returnurl'] * @param bool $canadd the text to display on the button. * @param string $tooltip a tooltip to add to the button (optional). * @param bool $disabled if true, the button will be disabled. */ public static function create_new_question_button($categoryid, $params, $canadd, $tooltip = '', $disabled = false) { global $PAGE, $OUTPUT; $addquestiondisplay = array(); $addquestiondisplay['canadd'] = $canadd; if ($canadd) { $params['category'] = $categoryid; $url = new \moodle_url('/question/bank/editquestion/addquestion.php', $params); $buttonparams = ['disabled' => $disabled]; if (!empty($tooltip)) { $buttonparams['title'] = $tooltip; } $addquestiondisplay['buttonhtml'] = $OUTPUT->single_button($url, get_string('createnewquestion', 'question'), 'get', $buttonparams); $addquestiondisplay['qtypeform'] = self::print_choose_qtype_to_add_form(array()); } return $PAGE->get_renderer('qbank_editquestion')->render_create_new_question_button($addquestiondisplay); } /** * Get the string for the status of the question. * * @param string $status * @return string */ public static function get_question_status_string($status): string { return get_string('questionstatus' . $status, 'qbank_editquestion'); } /** * Get the array of status of the questions. * * @return array */ public static function get_question_status_list(): array { $statuslist = []; $statuslist[question_version_status::QUESTION_STATUS_READY] = get_string('questionstatusready', 'qbank_editquestion'); $statuslist[question_version_status::QUESTION_STATUS_DRAFT] = get_string('questionstatusdraft', 'qbank_editquestion'); return $statuslist; } }