. namespace core_question\output; use renderer_base; use templatable; use renderable; use question_bank; require_once($CFG->dirroot . '/question/engine/bank.php'); /** * A UI widget to select other versions of a particular question. * * It will help plugins to enable version selection in locations like modal, page etc. * * @package core_question * @copyright 2022 Catalyst IT Australia Pty Ltd * @author Safat Shahin * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later */ class question_version_selection implements templatable, renderable { /** @var string */ private $uniqueidentifier; /** @var int */ private $currentselectedquestionid = null; /** * Constructor. * * @param string $uniqueidentifier unique identifier for the api usage. * @param int $currentlyselectedquestionid selected question id in dropdown. */ protected function __construct(string $uniqueidentifier, int $currentlyselectedquestionid) { $this->uniqueidentifier = $uniqueidentifier; $this->currentselectedquestionid = $currentlyselectedquestionid; } /** * Set the selected question id for the currently selected question. * * @param string $uniqueidentifier unique identifier for the api usage. * @param int $currentlyselectedquestionid selected question id in dropdown. * @return self an instance of this UI widget for the given question. */ public static function make_for_question(string $uniqueidentifier, int $currentlyselectedquestionid): self { return new self($uniqueidentifier, $currentlyselectedquestionid); } /** * Export the data for version selection mustache. * * @param renderer_base $output renderer of the output * @return array */ public function export_for_template(renderer_base $output): array { $displaydata = []; $versionsoptions = question_bank::get_all_versions_of_question($this->currentselectedquestionid); foreach ($versionsoptions as $versionsoption) { $versionsoption->selected = false; $a = new \stdClass(); $a->version = $versionsoption->version; $versionsoption->name = get_string('version_selection', 'core_question', $a); if ($versionsoption->questionid == $this->currentselectedquestionid) { $versionsoption->selected = true; } $displaydata[] = $versionsoption; } return [ 'options' => $displaydata, 'uniqueidentifier' => $this->uniqueidentifier, ]; } }