Ir a la última revisión | 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 core_contentbank\output;use context;use core_contentbank\content;use core_contentbank\contenttype;use moodle_url;use renderable;use renderer_base;use stdClass;use templatable;/*** Class containing data for the content view.** @copyright 2020 Victor Deniz <victor@moodle.com>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/class viewcontent implements renderable, templatable {/*** @var contenttype Content bank content type.*/private $contenttype;/*** @var stdClass Record of the contentbank_content table.*/private $content;/*** Construct this renderable.** @param contenttype $contenttype Content bank content type.* @param content $content Record of the contentbank_content table.*/public function __construct(contenttype $contenttype, content $content) {$this->contenttype = $contenttype;$this->content = $content;}/*** Get the content of the "More" dropdown in the tertiary navigation** @return array|null The options to be displayed in a dropdown in the tertiary navigation* @throws \moodle_exception*/protected function get_edit_actions_dropdown(): ?array {global $PAGE;$options = [];if ($this->contenttype->can_manage($this->content)) {// Add the visibility item to the menu.switch($this->content->get_visibility()) {case content::VISIBILITY_UNLISTED:$visibilitylabel = get_string('visibilitysetpublic', 'core_contentbank');$newvisibility = content::VISIBILITY_PUBLIC;break;case content::VISIBILITY_PUBLIC:$visibilitylabel = get_string('visibilitysetunlisted', 'core_contentbank');$newvisibility = content::VISIBILITY_UNLISTED;break;default:$url = new \moodle_url('/contentbank/index.php', ['contextid' => $this->content->get_contextid()]);throw new moodle_exception('contentvisibilitynotfound', 'error', $url, $this->content->get_visibility());}if ($visibilitylabel) {$options[$visibilitylabel] = ['data-action' => 'setcontentvisibility','data-visibility' => $newvisibility,'data-contentid' => $this->content->get_id(),];}// Add the rename content item to the menu.$options[get_string('rename')] = ['data-action' => 'renamecontent','data-contentname' => $this->content->get_name(),'data-contentid' => $this->content->get_id(),];if ($this->contenttype->can_upload()) {$options[get_string('replacecontent', 'contentbank')] = ['data-action' => 'upload'];$PAGE->requires->js_call_amd('core_contentbank/upload','initModal',['[data-action=upload]',\core_contentbank\form\upload_files::class,$this->content->get_contextid(),$this->content->get_id()]);}}if ($this->contenttype->can_download($this->content)) {$url = new moodle_url($this->contenttype->get_download_url($this->content));$options[get_string('download')] = ['url' => $url->out()];}if ($this->contenttype->can_copy($this->content)) {// Add the copy content item to the menu.$options[get_string('copycontent', 'contentbank')] = ['data-action' => 'copycontent','data-contentname' => get_string('copyof', 'contentbank', $this->content->get_name()),'data-contentid' => $this->content->get_id(),];}// Add the delete content item to the menu.if ($this->contenttype->can_delete($this->content)) {$options[get_string('delete')] = ['data-action' => 'deletecontent','data-contentname' => $this->content->get_name(),'data-uses' => count($this->content->get_uses()),'data-contentid' => $this->content->get_id(),'data-contextid' => $this->content->get_contextid(),'class' => 'text-danger',];}$dropdown = [];if ($options) {foreach ($options as $key => $attribs) {$url = $attribs['url'] ?? '#';$extraclasses = $attribs['class'] ?? '';$dropdown['options'][] = ['label' => $key,'url' => $url,'extraclasses' => $extraclasses,'attributes' => array_map(function ($key, $value) {return ['name' => $key,'value' => $value];}, array_keys($attribs), $attribs)];}}return $dropdown;}/*** Export this data so it can be used as the context for a mustache template.** @param renderer_base $output** @return stdClass*/public function export_for_template(renderer_base $output): stdClass {$data = new stdClass();// Get the content type html.$contenthtml = $this->contenttype->get_view_content($this->content);$data->contenthtml = $contenthtml;// Check if the user can edit this content type.if ($this->contenttype->can_edit($this->content)) {$data->usercanedit = true;$urlparams = ['contextid' => $this->content->get_contextid(),'plugin' => $this->contenttype->get_plugin_name(),'id' => $this->content->get_id()];$editcontenturl = new moodle_url('/contentbank/edit.php', $urlparams);$data->editcontenturl = $editcontenturl->out(false);}// Close/exit link for those users who can access that context.$context = context::instance_by_id($this->content->get_contextid());if (has_capability('moodle/contentbank:access', $context)) {$closeurl = new moodle_url('/contentbank/index.php', ['contextid' => $context->id]);$data->closeurl = $closeurl->out(false);}$data->actionmenu = $this->get_edit_actions_dropdown();$data->heading = $this->content->get_name();if ($this->content->get_visibility() == content::VISIBILITY_UNLISTED) {$data->heading = get_string('visibilitytitleunlisted', 'contentbank', $data->heading);}return $data;}}