--- /dev/null
+<?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/>.
+
+/**
+ * Class containing data for a content view.
+ *
+ * @package core_contentbank
+ * @copyright 2020 Victor Deniz <victor@moodle.com>
+ * @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 <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;
+ }
+
+ /**
+ * 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;
+ }
+}
--- /dev/null
+{{!
+ 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 <http://www.gnu.org/licenses/>.
+}}
+{{!
+ @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" : "<iframe src=\"http://something/h5p/embed.php?url=h5pfileurl\"></iframe>",
+ "usercanedit" : true,
+ "editcontenturl" : "http://something/contentbank/edit.php?contextid=1&plugin=h5p&id=1",
+ "closeurl" : "http://moodle.test/h5pcb/moodle/contentbank/index.php"
+ }
+}}
+<div class="core_contentbank_viewcontent">
+ <div class="d-flex justify-content-end flex-column flex-sm-row">
+ {{>core_contentbank/viewcontent/toolbarview}}
+ </div>
+ <div class="container mt-1 mb-1" data-region="viewcontent-content">
+ {{{ contenthtml }}}
+ </div>
+ <div class="d-flex justify-content-end flex-column flex-sm-row">
+ {{>core_contentbank/viewcontent/toolbarview}}
+ </div>
+</div>
--- /dev/null
+{{!
+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 <http://www.gnu.org/licenses/>.
+}}
+{{!
+ @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}}
+<div class="cb-toolbar-container mb-2">
+ <a href="{{editcontenturl}}" class="btn btn-primary" data-action="edit-content">
+ {{#str}}edit{{/str}}
+ </a>
+ <a href="{{closeurl}}" class="btn btn-secondary" data-action="close-content">
+ {{#str}}close, core_contentbank{{/str}}
+ </a>
+</div>
+{{/usercanedit}}
$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');
));
echo $OUTPUT->header();
-echo $OUTPUT->box_start('generalbox');
// If needed, display notifications.
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();
$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';