Rev 1 | AutorÃa | Comparar con el anterior | Ultima modificación | Ver Log |
<?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 mod_feedback\output;
use moodle_url;
use action_menu;
use action_menu_link;
use pix_icon;
/**
* Class actionbar - Display the action bar
*
* @package mod_feedback
* @copyright 2021 Peter Dias
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class edit_action_bar extends base_action_bar {
/** @var moodle_url $currenturl The current page url */
private $currenturl;
/** @var int|null $lastposition The index of the last question type in the feedback module */
private $lastposition;
/**
* edit_action_bar constructor.
*
* @param int $cmid The course module id
* @param moodle_url $pageurl The current page url
* @param int|null $lastposition Index of the last question in the feedback
*/
public function __construct(int $cmid, moodle_url $pageurl, ?int $lastposition = null) {
parent::__construct($cmid);
$this->currenturl = $pageurl;
$this->lastposition = $lastposition;
}
/**
* Return the items to be used for the tertiary nav
*
* @return array
*/
public function get_items(): array {
if (!has_capability('mod/feedback:edititems', $this->context)) {
return [];
}
return [
'addselect' => $this->get_add_question_menu(),
'actionsselect' => $this->get_edit_actions_menu(),
];
}
/**
* Return the add question menu
*
* @return action_menu
*/
private function get_add_question_menu(): action_menu {
$addselect = new action_menu();
$addselect->set_menu_trigger(get_string('add_item', 'mod_feedback'), 'btn btn-primary');
$addselect->set_menu_left();
$addselectparams = ['cmid' => $this->cmid, 'position' => $this->lastposition, 'sesskey' => sesskey()];
foreach (feedback_load_feedback_items_options() as $key => $value) {
$addselect->add(new action_menu_link(
new moodle_url('/mod/feedback/edit_item.php', $addselectparams + ['typ' => $key]),
null,
$value,
false,
));
}
return $addselect;
}
/**
* Return the edit actions menu
*
* @return action_menu
*/
private function get_edit_actions_menu(): action_menu {
global $DB, $PAGE;
$actionsselect = new action_menu();
$actionsselect->set_menu_trigger(get_string('actions'), 'btn btn-outline-primary');
$hasitems = $DB->record_exists('feedback_item', ['feedback' => $this->feedback->id]);
// Export.
if ($hasitems) {
$exporturl = new moodle_url('/mod/feedback/export.php', $this->urlparams + ['action' => 'exportfile']);
$actionsselect->add(new action_menu_link(
$exporturl,
new pix_icon('i/file_export', get_string('export_questions', 'feedback')),
get_string('export_questions', 'feedback'),
false,
));
}
// Import.
$importurl = new moodle_url('/mod/feedback/import.php', $this->urlparams);
$actionsselect->add(new action_menu_link(
$importurl,
new pix_icon('i/file_import', get_string('import_questions', 'feedback')),
get_string('import_questions', 'feedback'),
false,
));
// Save as template.
$cancreatetemplates = has_any_capability([
'mod/feedback:createprivatetemplate',
'mod/feedback:createpublictemplate'], \context_module::instance($this->cmid));
if ($cancreatetemplates && $hasitems) {
$PAGE->requires->js_call_amd('mod_feedback/createtemplate', 'init');
$actionsselect->add(new action_menu_link(
new moodle_url('#'),
new pix_icon('i/file_plus', get_string('save_as_new_template', 'feedback')),
get_string('save_as_new_template', 'feedback'),
false,
['data-action' => 'createtemplate', 'data-dataid' => $this->cmid],
));
}
return $actionsselect;
}
}