Merge branch 'master_MDL-71576-viewquestionname' of https://github.com/catalyst/moodle-MDL-70329

This commit is contained in:
Sara Arjona 2021-08-31 08:40:13 +02:00
commit bfe57a0ddf
10 changed files with 318 additions and 2 deletions

View File

@ -1943,6 +1943,7 @@ class core_plugin_manager {
'editquestion',
'exportquestions',
'importquestions',
'viewquestionname',
],
'qbehaviour' => array(

View File

@ -0,0 +1,36 @@
<?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/>.
namespace qbank_viewquestionname;
use core_question\local\bank\plugin_features_base;
/**
* Plugin entrypoint for columns.
*
* @package qbank_viewquestionname
* @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 plugin_features_base {
public function get_question_columns($qbank): array {
return [
new question_name_idnumber_tags_column($qbank)
];
}
}

View File

@ -0,0 +1,32 @@
<?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/>.
namespace qbank_viewquestionname\privacy;
/**
* Privacy Subsystem for qbank_viewquestionname implementing null_provider.
*
* @package qbank_viewquestionname
* @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 provider implements \core_privacy\local\metadata\null_provider {
public static function get_reason(): string {
return 'privacy:metadata';
}
}

View File

@ -0,0 +1,83 @@
<?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/>.
namespace qbank_viewquestionname;
/**
* A question bank column showing the question name with idnumber and tags.
*
* @package qbank_viewquestionname
* @copyright 2019 The Open University
* @author 2021 Safat Shahin <safatshahin@catalyst-au.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class question_name_idnumber_tags_column extends viewquestionname_column_helper {
public function get_name(): string {
return 'qnameidnumbertags';
}
protected function display_content($question, $rowclasses): void {
global $OUTPUT;
$layoutclasses = 'd-inline-flex flex-nowrap overflow-hidden w-100';
$labelfor = $this->label_for($question);
if ($labelfor) {
echo \html_writer::start_tag('label', ['for' => $labelfor, 'class' => $layoutclasses]);
$closetag = \html_writer::end_tag('label');
} else {
echo \html_writer::start_tag('span', ['class' => $layoutclasses]);
echo \html_writer::end_tag('span');
}
// Question name.
echo \html_writer::span(format_string($question->name), 'questionname flex-grow-1 flex-shrink-1 text-truncate');
// Question idnumber.
if ($question->idnumber !== null && $question->idnumber !== '') {
echo ' ' . \html_writer::span(
\html_writer::span(get_string('idnumber', 'question'), 'accesshide')
. ' ' . \html_writer::span(s($question->idnumber), 'badge badge-primary'), 'ml-1');
}
// Question tags.
if (!empty($question->tags)) {
$tags = \core_tag_tag::get_item_tags('core_question', 'question', $question->id);
echo $OUTPUT->tag_list($tags, null, 'd-inline flex-shrink-1 text-truncate ml-1', 0, null, true);
}
echo $closetag; // Computed above to ensure it matches.
}
public function get_required_fields(): array {
$fields = parent::get_required_fields();
$fields[] = 'q.idnumber';
return $fields;
}
public function is_sortable(): array {
return [
'name' => ['field' => 'q.name', 'title' => get_string('questionname', 'question')],
'idnumber' => ['field' => 'q.idnumber', 'title' => get_string('idnumber', 'question')],
];
}
public function load_additional_data(array $questions): void {
parent::load_additional_data($questions);
parent::load_question_tags($questions);
}
}

View File

@ -0,0 +1,75 @@
<?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/>.
namespace qbank_viewquestionname;
use core_question\local\bank\column_base;
/**
* A column type for the name of the question name.
*
* @package qbank_viewquestionname
* @copyright 2009 Tim Hunt
* @author 2021 Safat Shahin <safatshahin@catalyst-au.net>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class viewquestionname_column_helper extends column_base {
/**
* @var null $checkboxespresent
*/
protected $checkboxespresent = null;
public function get_name(): string {
return 'questionname';
}
protected function get_title(): string {
return get_string('question');
}
protected function label_for($question): string {
if (is_null($this->checkboxespresent)) {
$this->checkboxespresent = $this->qbank->has_column('core_question\local\bank\checkbox_column');
}
if ($this->checkboxespresent) {
return 'checkq' . $question->id;
}
return '';
}
protected function display_content($question, $rowclasses): void {
$labelfor = $this->label_for($question);
if ($labelfor) {
echo \html_writer::start_tag('label', array('for' => $labelfor));
}
echo format_string($question->name);
if ($labelfor) {
echo \html_writer::end_tag('label');
}
}
public function get_required_fields(): array {
return ['q.id', 'q.name'];
}
public function is_sortable() {
return 'q.name';
}
}

View File

@ -0,0 +1,27 @@
<?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/>.
/**
* Strings for component qbank_viewquestionname, language 'en'
*
* @package qbank_viewquestionname
* @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
*/
$string['pluginname'] = 'View question name';
$string['privacy:metadata'] = 'View question name question bank plugin does not store any user data.';

View File

@ -0,0 +1,31 @@
@qbank @qbank_viewquestionname
Feature: Use the qbank plugin manager page for viewquestionname
In order to check the plugin behaviour with enable and disable
Background:
Given the following "courses" exist:
| fullname | shortname | category |
| Course 1 | C1 | 0 |
And the following "activities" exist:
| activity | name | course | idnumber |
| quiz | Test quiz | C1 | quiz1 |
And the following "question categories" exist:
| contextlevel | reference | name |
| Course | C1 | Test questions |
And the following "questions" exist:
| questioncategory | qtype | name | questiontext |
| Test questions | truefalse | First question | Answer the first question |
Scenario: Enable/disable viewquestionname column from the base view
Given I log in as "admin"
And I navigate to "Plugins > Question bank plugins > Manage question bank plugins" in site administration
And I should see "View question name"
When I click on "Disable" "link" in the "View question name" "table_row"
And I am on the "Test quiz" "quiz activity" page
And I navigate to "Question bank > Questions" in current page administration
Then I should not see "First question"
And I navigate to "Plugins > Question bank plugins > Manage question bank plugins" in site administration
And I click on "Enable" "link" in the "View question name" "table_row"
And I am on the "Test quiz" "quiz activity" page
And I navigate to "Question bank > Questions" in current page administration
And I should see "First question"

View File

@ -0,0 +1,31 @@
<?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/>.
/**
* Version information for qbank_viewquestionname.
*
* @package qbank_viewquestionname
* @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
*/
defined('MOODLE_INTERNAL') || die();
$plugin->component = 'qbank_viewquestionname';
$plugin->version = 2021070700;
$plugin->requires = 2021052500;
$plugin->maturity = MATURITY_STABLE;

View File

@ -324,7 +324,7 @@ class view {
* @return string Column name for the heading
*/
protected function heading_column(): string {
return 'question_bank_question_name_column';
return 'qbank_viewquestionname\viewquestionname_column_helper';
}
/**

View File

@ -178,7 +178,7 @@ class_alias('core_question\bank\question_type_column', 'question_bank_question_t
* @deprecated since Moodle 2.7 MDL-40457
* @todo MDl-72004 delete the class alias, not done in MDL-71516 for any potential error from other plugins.
*/
class_alias('core_question\bank\question_name_column', 'question_bank_question_name_column', true);
class_alias('qbank_viewquestionname\viewquestionname_column_helper', 'question_bank_question_name_column', true);
/**