From 613281cd25f6bd1f5fa3acfcc1fd87ecf3791b28 Mon Sep 17 00:00:00 2001 From: Victor Deniz Falcon Date: Tue, 28 Apr 2020 22:09:34 +0100 Subject: [PATCH] MDL-67810 core_contentbank: placed the edit action in the view page --- contentbank/classes/output/viewcontent.php | 94 +++++++++++++++++++ contentbank/templates/viewcontent.mustache | 52 ++++++++++ .../viewcontent/toolbarview.mustache | 50 ++++++++++ contentbank/view.php | 10 +- lang/en/contentbank.php | 1 + 5 files changed, 203 insertions(+), 4 deletions(-) create mode 100644 contentbank/classes/output/viewcontent.php create mode 100644 contentbank/templates/viewcontent.mustache create mode 100644 contentbank/templates/viewcontent/toolbarview.mustache diff --git a/contentbank/classes/output/viewcontent.php b/contentbank/classes/output/viewcontent.php new file mode 100644 index 00000000000..efb403ed6ad --- /dev/null +++ b/contentbank/classes/output/viewcontent.php @@ -0,0 +1,94 @@ +. + +/** + * Class containing data for a content view. + * + * @package core_contentbank + * @copyright 2020 Victor Deniz + * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later + */ + +namespace core_contentbank\output; + +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 + * @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; + } + + /** + * 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()) { + $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); + } + + $closeurl = new moodle_url('/contentbank/index.php', ['contextid' => $this->content->get_contextid()]); + $data->closeurl = $closeurl->out(false); + + return $data; + } +} diff --git a/contentbank/templates/viewcontent.mustache b/contentbank/templates/viewcontent.mustache new file mode 100644 index 00000000000..7c7d5c0203b --- /dev/null +++ b/contentbank/templates/viewcontent.mustache @@ -0,0 +1,52 @@ +{{! + 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 comments. + + You should have received a copy of the GNU General Public License + along with Moodle. If not, see . +}} +{{! + @template core_contentbank/view_content + + View content page. + + Classes required for JS: + * none + + Data attributes required for JS: + * none + + Context variables required for this template: + * contenthtml - string - content html. + * usercanedit - boolean - whether the user has permission to edit the content. + * editcontenturl - string - edit page URL. + * closeurl - string - close landing page. + + Example context (json): + { + "contenthtml" : "", + "usercanedit" : true, + "editcontenturl" : "http://something/contentbank/edit.php?contextid=1&plugin=h5p&id=1", + "closeurl" : "http://moodle.test/h5pcb/moodle/contentbank/index.php" + } +}} +
+
+ {{>core_contentbank/viewcontent/toolbarview}} +
+
+ {{{ contenthtml }}} +
+
+ {{>core_contentbank/viewcontent/toolbarview}} +
+
diff --git a/contentbank/templates/viewcontent/toolbarview.mustache b/contentbank/templates/viewcontent/toolbarview.mustache new file mode 100644 index 00000000000..25eaaa50b41 --- /dev/null +++ b/contentbank/templates/viewcontent/toolbarview.mustache @@ -0,0 +1,50 @@ +{{! +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 comments. + +You should have received a copy of the GNU General Public License +along with Moodle. If not, see . +}} +{{! + @template core_contentbank/viewcontent/toolbarview + + Contentbank view toolbar. + + Classes required for JS: + * none + + Data attributes required for JS: + * none + + Context variables required for this template: + * contenthtml - string - content html. + * usercanedit - boolean - whether the user has permission to edit the content. + * editcontenturl - string - edit page URL. + * closeurl - string - close landing page. + + Example context (json): + { + "usercanedit" : true, + "editcontenturl" : "http://something/contentbank/edit.php?contextid=1&plugin=h5p&id=1", + "closeurl" : "http://moodle.test/h5pcb/moodle/contentbank/index.php" + } +}} +{{#usercanedit}} + +{{/usercanedit}} diff --git a/contentbank/view.php b/contentbank/view.php index c95d7fd72f3..1cf7500dd97 100644 --- a/contentbank/view.php +++ b/contentbank/view.php @@ -53,7 +53,7 @@ if ($PAGE->course) { $PAGE->set_url(new \moodle_url('/contentbank/view.php', ['id' => $id])); $PAGE->set_context($context); $PAGE->navbar->add($record->name); -$PAGE->set_heading($title); +$PAGE->set_heading($record->name); $title .= ": ".$record->name; $PAGE->set_title($title); $PAGE->set_pagetype('contenbank'); @@ -109,7 +109,6 @@ $PAGE->add_header_action(html_writer::div( )); echo $OUTPUT->header(); -echo $OUTPUT->box_start('generalbox'); // If needed, display notifications. if ($errormsg !== '') { @@ -118,8 +117,11 @@ if ($errormsg !== '') { echo $OUTPUT->notification($statusmsg, 'notifysuccess'); } if ($contenttype->can_access()) { - echo $contenttype->get_view_content($content); + $viewcontent = new core_contentbank\output\viewcontent($contenttype, $content); + echo $OUTPUT->render($viewcontent); +} else { + $message = get_string('contenttypenoaccess', 'core_contentbank', $record->contenttype); + echo $OUTPUT->notification($message, 'error'); } -echo $OUTPUT->box_end(); echo $OUTPUT->footer(); diff --git a/lang/en/contentbank.php b/lang/en/contentbank.php index 8b451e95fb6..4d6aa44f723 100644 --- a/lang/en/contentbank.php +++ b/lang/en/contentbank.php @@ -31,6 +31,7 @@ $string['contentnotdeleted'] = 'An error was encountered while trying to delete $string['contentnotrenamed'] = 'An error was encountered while trying to rename the content.'; $string['contentrenamed'] = 'The content has been renamed.'; $string['contentsmoved'] = 'Content bank contents moved to {$a}.'; +$string['contenttypenoaccess'] = 'You can not view this {$a} instance'; $string['eventcontentcreated'] = 'Content created'; $string['eventcontentdeleted'] = 'Content deleted'; $string['eventcontentupdated'] = 'Content updated';