MDL-52426 tool_lp: Show template competencies page with read permission
authorSerge Gauthier <serge.gauthier.2@umontreal.ca>
Thu, 17 Dec 2015 17:12:32 +0000 (12:12 -0500)
committerFrederic Massart <fred@moodle.com>
Mon, 18 Apr 2016 02:58:48 +0000 (10:58 +0800)
12 files changed:
admin/tool/lp/classes/external/template_exporter.php
admin/tool/lp/classes/output/manage_templates_page.php
admin/tool/lp/classes/output/template_cohorts_table.php
admin/tool/lp/classes/output/template_plans_table.php
admin/tool/lp/classes/template.php
admin/tool/lp/learningplans.php
admin/tool/lp/lib.php
admin/tool/lp/settings.php
admin/tool/lp/template_cohorts.php
admin/tool/lp/template_plans.php
admin/tool/lp/templatecompetencies.php
admin/tool/lp/templates/manage_templates_page.mustache

index 435e501..9c491d1 100644 (file)
@@ -46,7 +46,7 @@ class template_exporter extends persistent_exporter {
             'duedateformatted' => userdate($this->persistent->get_duedate()),
             'cohortscount' => template_cohort::count_records(array('templateid' => $this->persistent->get_id())),
             'planscount' => plan::count_records(array('templateid' => $this->persistent->get_id())),
-            'canmanage' => $this->persistent->can_read(),
+            'canmanage' => $this->persistent->can_manage(),
             'canread' => $this->persistent->can_read(),
             'contextname' => $this->persistent->get_context()->get_context_name()
         );
index 3a25828..89083a5 100644 (file)
@@ -33,6 +33,7 @@ use stdClass;
 use moodle_url;
 use context_system;
 use tool_lp\api;
+use tool_lp\template;
 use tool_lp\external\template_exporter;
 
 /**
@@ -58,12 +59,14 @@ class manage_templates_page implements renderable, templatable {
     public function __construct(context $pagecontext) {
         $this->pagecontext = $pagecontext;
 
-        $addpage = new single_button(
-           new moodle_url('/admin/tool/lp/edittemplate.php', array('pagecontextid' => $this->pagecontext->id)),
-           get_string('addnewtemplate', 'tool_lp'),
-           'get'
-        );
-        $this->navigation[] = $addpage;
+        if (template::can_manage_context($this->pagecontext)) {
+            $addpage = new single_button(
+               new moodle_url('/admin/tool/lp/edittemplate.php', array('pagecontextid' => $this->pagecontext->id)),
+               get_string('addnewtemplate', 'tool_lp'),
+               'get'
+            );
+            $this->navigation[] = $addpage;
+        }
 
         $this->templates = api::list_templates('shortname', 'ASC', 0, 0, $this->pagecontext);
     }
index feee8d4..99da565 100644 (file)
@@ -30,6 +30,7 @@ require_once($CFG->libdir . '/tablelib.php');
 use html_writer;
 use moodle_url;
 use table_sql;
+use tool_lp\template;
 
 /**
  * Template cohorts table class.
@@ -59,8 +60,10 @@ class template_cohorts_table extends table_sql {
         global $CFG;
         parent::__construct($uniqueid);
 
-        // This object should not be used without the right permissions.
-        require_capability('tool/lp:templatemanage', $template->get_context());
+         // This object should not be used without the right permissions.
+        if (!$template->can_read()) {
+            throw new required_capability_exception($template->get_context(), 'tool/lp:templateread', 'nopermissions', '');
+        }
 
         // Set protected properties.
         $this->template = $template;
@@ -81,10 +84,16 @@ class template_cohorts_table extends table_sql {
      */
     protected function col_actions($row) {
         global $OUTPUT;
-        $action = new \confirm_action(get_string('areyousure'));
-        $url = new moodle_url($this->baseurl);
-        $url->params(array('removecohort' => $row->id, 'sesskey' => sesskey()));
-        return $OUTPUT->action_link($url, '', $action, null, new \pix_icon('t/delete', get_string('stopsyncingcohort', 'tool_lp')));
+        $actionlink = "";
+        if ($this->template->can_manage()) {
+            $action = new \confirm_action(get_string('areyousure'));
+            $url = new moodle_url($this->baseurl);
+            $url->params(array('removecohort' => $row->id, 'sesskey' => sesskey()));
+            $actionlink = $OUTPUT->action_link($url, '', $action, null, new \pix_icon('t/delete', get_string('stopsyncingcohort', 'tool_lp')));
+        }
+
+        return $actionlink;
+
     }
 
     /**
index 0b7f8b2..4494e02 100644 (file)
@@ -30,6 +30,7 @@ require_once($CFG->libdir . '/tablelib.php');
 use html_writer;
 use moodle_url;
 use table_sql;
+use tool_lp\template;
 
 /**
  * Template plans table class.
@@ -60,7 +61,9 @@ class template_plans_table extends table_sql {
         parent::__construct($uniqueid);
 
         // This object should not be used without the right permissions.
-        require_capability('tool/lp:templatemanage', $template->get_context());
+        if (!$template->can_read()) {
+            throw new required_capability_exception($template->get_context(), 'tool/lp:templateread', 'nopermissions', '');
+        }
 
         // Set protected properties.
         $this->template = $template;
index 2879d61..1108fde 100644 (file)
@@ -104,9 +104,18 @@ class template extends persistent {
      * @return bool
      */
     public function can_manage() {
-        return has_capability('tool/lp:templatemanage', $this->get_context());
+        return self::can_manage_context($this->get_context());
     }
 
+    /**
+     * Whether or not the current user can manage the template.
+     *
+     * @param  context $context
+     * @return bool
+     */
+    public static function can_manage_context($context) {
+        return has_capability('tool/lp:templatemanage', $context);
+    }
 
     /**
      * Whether or not the current user can read the template.
@@ -114,7 +123,17 @@ class template extends persistent {
      * @return bool
      */
     public function can_read() {
-        return has_any_capability(array('tool/lp:templateread', 'tool/lp:templatemanage'), $this->get_context());
+        return self::can_read_context($this->get_context());
+    }
+
+    /**
+     * Whether or not the current user can read the template.
+     *
+     * @param  context $context
+     * @return bool
+     */
+    public static function can_read_context($context) {
+        return has_capability('tool/lp:templateread', $context) || self::can_manage_context($context);
     }
 
     /**
index 8adfac8..48a7823 100644 (file)
@@ -29,7 +29,9 @@ $pagecontextid = required_param('pagecontextid', PARAM_INT);
 $context = context::instance_by_id($pagecontextid);
 
 require_login(0, false);
-require_capability('tool/lp:templatemanage', $context);
+if (!\tool_lp\template::can_read_context($context)) {
+    throw new required_capability_exception($context, 'tool/lp:templateread', 'nopermissions', '');
+}
 
 $url = new moodle_url('/admin/tool/lp/learningplans.php', array('pagecontextid' => $pagecontextid));
 list($title, $subtitle) = \tool_lp\page_helper::setup_for_template($pagecontextid, $url);
index e22fab0..cfb9e82 100644 (file)
@@ -97,14 +97,14 @@ function tool_lp_myprofile_navigation(core_user\output\myprofile\tree $tree, $us
  */
 function tool_lp_extend_navigation_category_settings($navigation, $coursecategorycontext) {
     // We check permissions before renderring the links.
-    $templatemanagecapability = has_capability('tool/lp:templatemanage', $coursecategorycontext);
+    $templatereadcapability = \tool_lp\template::can_read_context($coursecategorycontext);
     $competencymanagecapability = has_capability('tool/lp:competencymanage', $coursecategorycontext);
-    if (!$templatemanagecapability && !$competencymanagecapability) {
+    if (!$templatereadcapability && !$competencymanagecapability) {
         return false;
     }
 
     // The link to the learning plan page.
-    if ($templatemanagecapability) {
+    if ($templatereadcapability) {
         $title = get_string('learningplans', 'tool_lp');
         $path = new moodle_url("/admin/tool/lp/learningplans.php", array('pagecontextid' => $coursecategorycontext->id));
         $settingsnode = navigation_node::create($title,
index 4d29f41..d11f295 100644 (file)
@@ -38,7 +38,7 @@ $temp = new admin_externalpage(
     'toollplearningplans',
     get_string('learningplans', 'tool_lp'),
     new moodle_url('/admin/tool/lp/learningplans.php', array('pagecontextid' => context_system::instance()->id)),
-    'tool/lp:templatemanage'
+    array('tool/lp:templateread', 'tool/lp:templatemanage')
 );
 $ADMIN->add('root', $temp, 'toollpcompetencies');
 
index 5daabd0..99d529d 100644 (file)
@@ -31,7 +31,12 @@ require_login(0, false);
 
 $template = \tool_lp\api::read_template($id);
 $context = $template->get_context();
-require_capability('tool/lp:templatemanage', $context);
+$canreadtemplate = $template->can_read();
+$canmanagetemplate = $template->can_manage();
+
+if (!$canreadtemplate) {
+    throw new required_capability_exception($context, 'tool/lp:templateread', 'nopermissions', '');
+}
 
 // Set up the page.
 $url = new moodle_url('/admin/tool/lp/template_cohorts.php', array(
@@ -42,13 +47,13 @@ list($title, $subtitle) = \tool_lp\page_helper::setup_for_template($pagecontexti
     get_string('cohortssyncedtotemplate', 'tool_lp'));
 
 // Remove cohort.
-if (($removecohort = optional_param('removecohort', false, PARAM_INT)) !== false && confirm_sesskey()) {
+if ($canmanagetemplate && ($removecohort = optional_param('removecohort', false, PARAM_INT)) !== false && confirm_sesskey()) {
     \tool_lp\api::delete_template_cohort($template, $removecohort);
 }
 
 // Capture the form submission.
 $form = new \tool_lp\form\template_cohorts($url->out(false), array('pagecontextid' => $pagecontextid));
-if (($data = $form->get_data()) && !empty($data->cohorts)) {
+if ($canmanagetemplate && ($data = $form->get_data()) && !empty($data->cohorts)) {
     $i = 0;
     foreach ($data->cohorts as $cohortid) {
 
@@ -75,11 +80,14 @@ $output = $PAGE->get_renderer('tool_lp');
 echo $output->header();
 echo $output->heading($title);
 echo $output->heading($subtitle, 3);
-if ($template->get_visible() == false) {
-    // Display message to prevent that cohort will not be synchronzed if the template is hidden.
-    echo $output->notify_message(get_string('templatecohortnotsyncedwhilehidden', 'tool_lp'));
+if ($canmanagetemplate) {
+    if ($template->get_visible() == false) {
+        // Display message to prevent that cohort will not be synchronzed if the template is hidden.
+        echo $output->notify_message(get_string('templatecohortnotsyncedwhilehidden', 'tool_lp'));
+    }
+    echo $form->display();
 }
-echo $form->display();
+
 $page = new \tool_lp\output\template_cohorts_page($template, $url);
 echo $output->render($page);
 echo $output->footer();
index 497557d..18955a9 100644 (file)
@@ -31,7 +31,11 @@ require_login(0, false);
 
 $template = \tool_lp\api::read_template($id);
 $context = $template->get_context();
-require_capability('tool/lp:templatemanage', $context);
+$canreadtemplate = $template->can_read();
+$canmanagetemplate = $template->can_manage();
+if (!$canreadtemplate) {
+    throw new required_capability_exception($context, 'tool/lp:templateread', 'nopermissions', '');
+}
 
 // Set up the page.
 $url = new moodle_url('/admin/tool/lp/template_plans.php', array(
@@ -42,7 +46,7 @@ list($title, $subtitle) = \tool_lp\page_helper::setup_for_template($pagecontexti
 
 // Capture the form submission.
 $form = new \tool_lp\form\template_plans($url->out(false));
-if (($data = $form->get_data()) && !empty($data->users)) {
+if ($canmanagetemplate && ($data = $form->get_data()) && !empty($data->users)) {
     $i = 0;
     foreach ($data->users as $userid) {
         $result = \tool_lp\api::create_plan_from_template($template->get_id(), $userid);
@@ -65,13 +69,17 @@ $output = $PAGE->get_renderer('tool_lp');
 echo $output->header();
 echo $output->heading($title);
 echo $output->heading($subtitle, 3);
+
 // Do not display form when the template is hidden.
-if ($template->get_visible()) {
-    echo $form->display();
-} else {
-    // Display message that plan can not be created if the template is hidden.
-    echo $output->notify_message(get_string('cannotcreateuserplanswhentemplatehidden', 'tool_lp'));
+if ($canmanagetemplate) {
+    if ($template->get_visible()) {
+        echo $form->display();
+    } else {
+        // Display message that plan can not be created if the template is hidden.
+        echo $output->notify_message(get_string('cannotcreateuserplanswhentemplatehidden', 'tool_lp'));
+    }
 }
+
 $page = new \tool_lp\output\template_plans_page($template, $url);
 echo $output->render($page);
 echo $output->footer();
index b8a0925..8fedf26 100644 (file)
@@ -33,7 +33,9 @@ require_login(0, false);
 $pagecontext = context::instance_by_id($pagecontextid);
 $template = \tool_lp\api::read_template($templateid);
 $context = $template->get_context();
-require_capability('tool/lp:templatemanage', $context);
+if (!$template->can_read()) {
+    throw new required_capability_exception($context, 'tool/lp:templateread', 'nopermissions', '');
+}
 
 // Set up the page.
 $url = new moodle_url('/admin/tool/lp/templatecompetencies.php', array('templateid' => $template->get_id(),
index d512c1e..1a4dbaf 100644 (file)
@@ -40,7 +40,9 @@
             <th scope="col">{{#str}}context, core_role{{/str}}</th>
             <th scope="col">{{#str}}cohorts, core_cohort{{/str}}</th>
             <th scope="col">{{#str}}userplans, tool_lp{{/str}}</th>
+            {{#canmanage}}
             <th scope="col">{{#str}}actions, tool_lp{{/str}}</th>
+            {{/canmanage}}
         </tr>
     </thead>
     <tbody class="drag-parentnode">