Skip to content

Commit

Permalink
MDL-71573 qbank_exportquestion: Add plugin to core
Browse files Browse the repository at this point in the history
This implementation will introduce a qbank plugin "exporquestions"
which will add the export feature in the question bank view
by replacing the core classes. Having this plugin will give users
the flexibility of enabling or disabling the export questions tab.

Co-Authored-By: Guillermo Gomez Arias <guillermogomez@catalyst-au.net>
  • Loading branch information
guillogo committed Aug 23, 2021
1 parent 1464843 commit 06f192a
Show file tree
Hide file tree
Showing 12 changed files with 387 additions and 28 deletions.
2 changes: 1 addition & 1 deletion lib/classes/plugin_manager.php
Expand Up @@ -1939,7 +1939,7 @@ public static function standard_plugins_list($type) {
),

'qbank' => [
'deletequestion',
'deletequestion', 'exportquestions',
],

'qbehaviour' => array(
Expand Down
4 changes: 4 additions & 0 deletions lib/questionlib.php
Expand Up @@ -2336,9 +2336,13 @@ function core_question_question_preview_pluginfile($previewcontext, $questionid,
* @param string $withcategories
* @param string $ithcontexts
* @param moodle_url export file url
* @deprecated since Moodle 4.0 MDL-71573
* @see qbank_exportquestions\exportquestions_helper
*/
function question_make_export_url($contextid, $categoryid, $format, $withcategories,
$withcontexts, $filename) {
debugging('Function question_make_export_url() has been deprecated and moved to qbank_exportquestions plugin,
Please use qbank_exportquestions\exportquestions_helper::question_make_export_url() instead.', DEBUG_DEVELOPER);
global $CFG;
$urlbase = "$CFG->wwwroot/pluginfile.php";
return moodle_url::make_file_url($urlbase,
Expand Down
58 changes: 58 additions & 0 deletions question/bank/exportquestions/classes/exportquestions_helper.php
@@ -0,0 +1,58 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.

/**
* Library functions used by qbank_exportquestions/export.php.
*
* This code is based on lib/questionlib.php by Martin Dougiamas.
*
* @package qbank_exportquestions
* @copyright 2021 Catalyst IT Australia Pty Ltd
* @author Guillermo Gomez Arias <guillermogomez@catalyst-au.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

namespace qbank_exportquestions;

use moodle_url;

/**
* Class exportquestions_helper contains all the library functions.
*
* @package qbank_exportquestions
*/
class exportquestions_helper {

/**
* Create url for question export.
*
* @param int $contextid Current context.
* @param int $categoryid Category id.
* @param string $format Format.
* @param string $withcategories nocategories or withcategories text.
* @param string $withcontexts nocontexts or withcontexts text.
* @param string $filename File name.
* @return moodle_url Return an URL.
*/
public static function question_make_export_url($contextid, $categoryid, $format, $withcategories,
$withcontexts, $filename): moodle_url {
global $CFG;
$urlbase = "$CFG->wwwroot/pluginfile.php";
return moodle_url::make_file_url($urlbase,
"/$contextid/question/export/{$categoryid}/{$format}/{$withcategories}" .
"/{$withcontexts}/{$filename}", true);
}
}
100 changes: 100 additions & 0 deletions question/bank/exportquestions/classes/form/export_form.php
@@ -0,0 +1,100 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.

/**
* Defines the export questions form.
*
* @package qbank_exportquestions
* @copyright 2007 Jamie Pratt me@jamiep.org
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

namespace qbank_exportquestions\form;

use moodleform;

defined('MOODLE_INTERNAL') || die();

require_once($CFG->libdir . '/formslib.php');


/**
* Form to export questions from the question bank.
*
* @copyright 2007 Jamie Pratt me@jamiep.org
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class export_form extends moodleform {

/**
* Build the form definition.
*
* This adds all the form fields that the export questions feature needs.
*/
protected function definition() {
global $OUTPUT;

$mform = $this->_form;

$defaultcategory = $this->_customdata['defaultcategory'];
$contexts = $this->_customdata['contexts'];

// Choice of format, with help.
$mform->addElement('header', 'fileformat', get_string('fileformat', 'question'));

$fileformatnames = get_import_export_formats('export');
$radioarray = [];
$separators = [];
foreach ($fileformatnames as $shortname => $fileformatname) {
$radioarray[] = $mform->createElement('radio', 'format', '', $fileformatname, $shortname);

$separator = '';
if (get_string_manager()->string_exists('pluginname_help', 'qformat_' . $shortname)) {
$separator .= $OUTPUT->help_icon('pluginname', 'qformat_' . $shortname);
}
$separator .= '<div class="w-100"></div>';
$separators[] = $separator;
}

$radioarray[] = $mform->createElement('static', 'makelasthelpiconshowup', '');
$mform->addGroup($radioarray, "formatchoices", '', $separators, false);
$mform->addRule("formatchoices", null, 'required', null, 'client');

// Export options.
$mform->addElement('header', 'general', get_string('general', 'form'));

$mform->addElement('questioncategory', 'category', get_string('exportcategory', 'question'),
['contexts' => $contexts, 'top' => true]);
$mform->setDefault('category', $defaultcategory);
$mform->addHelpButton('category', 'exportcategory', 'question');

$categorygroup = [];
$categorygroup[] = $mform->createElement('checkbox', 'cattofile', '', get_string('tofilecategory', 'question'));
$categorygroup[] = $mform->createElement('checkbox', 'contexttofile', '', get_string('tofilecontext', 'question'));
$mform->addGroup($categorygroup, 'categorygroup', '', '', false);
$mform->disabledIf('categorygroup', 'cattofile', 'notchecked');
$mform->setDefault('cattofile', 1);
$mform->setDefault('contexttofile', 1);

// Set a template for the format select elements.
$renderer = $mform->defaultRenderer();
$template = "{help} {element}\n";
$renderer->setGroupElementTemplate($template, 'format');

// Submit buttons.
$this->add_action_buttons(false, get_string('exportquestions', 'question'));
}
}
49 changes: 49 additions & 0 deletions question/bank/exportquestions/classes/navigation.php
@@ -0,0 +1,49 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.

/**
* Plugin entrypoint for navigation.
*
* @package qbank_exportquestions
* @copyright 2021 Catalyst IT Australia Pty Ltd
* @author Guillermo Gomez Arias <guillermogomez@catalyst-au.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

namespace qbank_exportquestions;

/**
* Class navigation.
*
* @package qbank_exportquestions
* @copyright 2021 Catalyst IT Australia Pty Ltd
* @author Guillermo Gomez Arias <guillermogomez@catalyst-au.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class navigation extends \core_question\local\bank\navigation_node_base {

public function get_navigation_title(): string {
return get_string('export', 'question');
}

public function get_navigation_key(): string {
return 'export';
}

public function get_navigation_url(): \moodle_url {
return new \moodle_url('/question/bank/exportquestions/export.php');
}
}
43 changes: 43 additions & 0 deletions question/bank/exportquestions/classes/plugin_feature.php
@@ -0,0 +1,43 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.

/**
* Entry point for plugin.
*
* Every qbank plugin must extent this class.
*
* @package qbank_exportquestions
* @copyright 2021 Catalyst IT Australia Pty Ltd
* @author Safat Shahin <safatshahin@catalyst-au.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

namespace qbank_exportquestions;

/**
* Class plugin_feature.
*
* @package qbank_exportquestions
* @copyright 2021 Catalyst IT Australia Pty Ltd
* @author Safat Shahin <safatshahin@catalyst-au.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class plugin_feature extends \core_question\local\bank\plugin_features_base {

public function get_navigation_node(): ?object {
return new navigation();
}
}
37 changes: 37 additions & 0 deletions question/bank/exportquestions/classes/privacy/provider.php
@@ -0,0 +1,37 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.

/**
* Privacy Subsystem for qbank_exportquestions implementing null_provider.
*
* @package qbank_exportquestions
* @category privacy
* @copyright 2021 Catalyst IT Australia Pty Ltd
* @author Guillermo Gomez Arias <guillermogomez@catalyst-au.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/

namespace qbank_exportquestions\privacy;

/**
* Class provider.
*/
class provider implements \core_privacy\local\metadata\null_provider {

public static function get_reason(): string {
return 'privacy:metadata';
}
}

0 comments on commit 06f192a

Please sign in to comment.