Rev 11 | 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/>.
/**
* Contains the default section controls output class.
*
* @package format_topics
* @copyright 2020 Ferran Recio <ferran@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace format_topics\output\courseformat\content\section;
use core\output\action_menu\link as action_menu_link;
use core\output\action_menu\link_secondary as action_menu_link_secondary;
use core\output\pix_icon;
use core_courseformat\output\local\content\section\controlmenu as controlmenu_base;
use core\url;
/**
* Base class to render a course section menu.
*
* @package format_topics
* @copyright 2020 Ferran Recio <ferran@moodle.com>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class controlmenu extends controlmenu_base {
/** @var \core_courseformat\base the course format class */
protected $format;
/** @var \section_info the course section class */
protected $section;
/**
* Generate the edit control items of a section.
*
* This method must remain public until the final deprecation of section_edit_control_items.
*
* @return array of edit control items
*/
public function section_control_items() {
$section = $this->section;
$parentcontrols = parent::section_control_items();
if ($section->is_orphan() || !$section->sectionnum) {
return $parentcontrols;
}
if (!has_capability('moodle/course:setcurrentsection', $this->coursecontext)) {
return $parentcontrols;
}
return $this->add_control_after($parentcontrols, 'edit', 'highlight', $this->get_section_highlight_item());
}
/**
* Return the course url.
*
* @return url
*/
#[\core\attribute\deprecated(
since: '5.0',
mdl: 'MDL-82767',
reason: 'Not used anymore, use $this->format->get_update_url instead',
)]
protected function get_course_url(): url {
\core\deprecation::emit_deprecation([self::class, __FUNCTION__]);
$format = $this->format;
$section = $this->section;
$course = $format->get_course();
$sectionreturn = $format->get_sectionnum();
if ($sectionreturn) {
$url = course_get_url($course, $section->sectionnum);
} else {
$url = course_get_url($course);
}
$url->param('sesskey', sesskey());
return $url;
}
/**
* Retrieves the view item for the section control menu.
*
* @return action_menu_link|null The menu item if applicable, otherwise null.
*/
protected function get_section_highlight_item(): action_menu_link_secondary {
$format = $this->format;
$section = $this->section;
$course = $format->get_course();
$sectionreturn = $format->get_sectionnum();
$highlightoff = get_string('highlightoff');
$highlightofficon = 'i/marked';
$highlighton = get_string('highlight');
$highlightonicon = 'i/marker';
if ($course->marker == $section->sectionnum) { // Show the "light globe" on/off.
$action = 'section_unhighlight';
$icon = $highlightofficon;
$name = $highlightoff;
$attributes = [
'class' => 'editing_highlight',
'data-action' => 'sectionUnhighlight',
'data-sectionreturn' => $sectionreturn,
'data-id' => $section->id,
'data-icon' => $highlightofficon,
'data-swapname' => $highlighton,
'data-swapicon' => $highlightonicon,
];
} else {
$action = 'section_highlight';
$icon = $highlightonicon;
$name = $highlighton;
$attributes = [
'class' => 'editing_highlight',
'data-action' => 'sectionHighlight',
'data-sectionreturn' => $sectionreturn,
'data-id' => $section->id,
'data-icon' => $highlightonicon,
'data-swapname' => $highlightoff,
'data-swapicon' => $highlightofficon,
];
}
$url = $this->format->get_update_url(
action: $action,
ids: [$section->id],
returnurl: $this->baseurl,
);
return new action_menu_link_secondary(
url: $url,
icon: new pix_icon($icon, ''),
text: $name,
attributes: $attributes,
);
}
/**
* Return the specific section highlight action.
*
* @deprecated since Moodle 5.0
* @todo Remove this method in Moodle 6.0 (MDL-83530).
* @return array the action element.
*/
#[\core\attribute\deprecated(
replacement: 'get_section_highlight_item',
since: '5.0',
mdl: 'MDL-83527',
reason: 'Wrong return type',
)]
protected function get_highlight_control(): array {
\core\deprecation::emit_deprecation([self::class, __FUNCTION__]);
$format = $this->format;
$section = $this->section;
$course = $format->get_course();
$sectionreturn = $format->get_sectionnum();
$url = $this->get_course_url();
if (!is_null($sectionreturn)) {
$url->param('sectionid', $format->get_sectionid());
}
$highlightoff = get_string('highlightoff');
$highlightofficon = 'i/marked';
$highlighton = get_string('highlight');
$highlightonicon = 'i/marker';
if ($course->marker == $section->section) { // Show the "light globe" on/off.
$url->param('marker', 0);
$result = [
'url' => $url,
'icon' => $highlightofficon,
'name' => $highlightoff,
'pixattr' => ['class' => ''],
'attr' => [
'class' => 'editing_highlight',
'data-action' => 'sectionUnhighlight',
'data-sectionreturn' => $sectionreturn,
'data-id' => $section->id,
'data-icon' => $highlightofficon,
'data-swapname' => $highlighton,
'data-swapicon' => $highlightonicon,
],
];
} else {
$url->param('marker', $section->section);
$result = [
'url' => $url,
'icon' => $highlightonicon,
'name' => $highlighton,
'pixattr' => ['class' => ''],
'attr' => [
'class' => 'editing_highlight',
'data-action' => 'sectionHighlight',
'data-sectionreturn' => $sectionreturn,
'data-id' => $section->id,
'data-icon' => $highlightonicon,
'data-swapname' => $highlightoff,
'data-swapicon' => $highlightofficon,
],
];
}
return $result;
}
}