MDL-67810 core_contentbank: placed the edit action in the view page
authorVictor Deniz Falcon <victor@moodle.com>
Tue, 28 Apr 2020 21:09:34 +0000 (22:09 +0100)
committerVictor Deniz Falcon <victor@moodle.com>
Wed, 27 May 2020 09:27:13 +0000 (10:27 +0100)
contentbank/classes/output/viewcontent.php [new file with mode: 0644]
contentbank/templates/viewcontent.mustache [new file with mode: 0644]
contentbank/templates/viewcontent/toolbarview.mustache [new file with mode: 0644]
contentbank/view.php
lang/en/contentbank.php

diff --git a/contentbank/classes/output/viewcontent.php b/contentbank/classes/output/viewcontent.php
new file mode 100644 (file)
index 0000000..efb403e
--- /dev/null
@@ -0,0 +1,94 @@
+<?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;
+    }
+}
diff --git a/contentbank/templates/viewcontent.mustache b/contentbank/templates/viewcontent.mustache
new file mode 100644 (file)
index 0000000..7c7d5c0
--- /dev/null
@@ -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 <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>
diff --git a/contentbank/templates/viewcontent/toolbarview.mustache b/contentbank/templates/viewcontent/toolbarview.mustache
new file mode 100644 (file)
index 0000000..25eaaa5
--- /dev/null
@@ -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 <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}}
index c95d7fd..1cf7500 100644 (file)
@@ -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();
index 8b451e9..4d6aa44 100644 (file)
@@ -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';