MDL-53473 tool_lp: Improvement to navigation flow of templates
[moodle.git] / admin / tool / lp / classes / page_helper.php
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17 /**
18  * Page helper.
19  *
20  * @package    tool_lp
21  * @copyright  2015 Frédéric Massart - FMCorz.net
22  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
25 namespace tool_lp;
26 defined('MOODLE_INTERNAL') || die();
28 use coding_exception;
29 use context;
30 use moodle_url;
31 use core_user;
32 use context_user;
33 use context_course;
34 use stdClass;
36 /**
37  * Page helper.
38  *
39  * @package    tool_lp
40  * @copyright  2015 Frédéric Massart - FMCorz.net
41  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
42  */
43 class page_helper {
45     /**
46      * Set-up a course page.
47      *
48      * Example:
49      * list($title, $subtitle) = page_helper::setup_for_course($pagecontextid, $url, $course, $pagetitle);
50      * echo $OUTPUT->heading($title);
51      * echo $OUTPUT->heading($subtitle, 3);
52      *
53      * @param  moodle_url $url The current page.
54      * @param  stdClass $course The course.
55      * @param  string $subtitle The title of the subpage, if any.
56      * @return array With the following:
57      *               - Page title
58      *               - Page sub title
59      *               - Return URL (course competencies page)
60      */
61     public static function setup_for_course(moodle_url $url, $course, $subtitle = '') {
62         global $PAGE, $SITE;
64         $context = context_course::instance($course->id);
66         $PAGE->set_course($course);
68         if (!empty($subtitle)) {
69             $title = $subtitle;
70         } else {
71             $title = get_string('coursecompetencies', 'tool_lp');
72         }
74         $returnurl = new moodle_url('/admin/tool/lp/coursecompetencies.php', array('courseid' => $course->id));
76         $heading = $context->get_context_name();
77         $PAGE->set_pagelayout('incourse');
78         $PAGE->set_url($url);
79         $PAGE->set_title($title);
80         $PAGE->set_heading($heading);
82         if (!empty($subtitle)) {
83             $PAGE->navbar->add(get_string('coursecompetencies', 'tool_lp'), $returnurl);
84             // We're in a sub page without a specific template.
85             $PAGE->navbar->add($subtitle, $url);
86         }
88         return array($title, $subtitle, $returnurl);
89     }
91     /**
92      * Set-up a template page.
93      *
94      * Example:
95      * list($title, $subtitle) = page_helper::setup_for_template($pagecontextid, $url, $template, $pagetitle);
96      * echo $OUTPUT->heading($title);
97      * echo $OUTPUT->heading($subtitle, 3);
98      *
99      * @param  int $pagecontextid The page context ID.
100      * @param  moodle_url $url The current page.
101      * @param  \tool_lp\template $template The template, if any.
102      * @param  string $subtitle The title of the subpage, if any.
103      * @param  string $returntype The desired return page.
104      * @return array With the following:
105      *               - Page title
106      *               - Page sub title
107      *               - Return URL
108      */
109     public static function setup_for_template($pagecontextid, moodle_url $url, $template = null, $subtitle = '',
110             $returntype = null) {
111         global $PAGE, $SITE;
113         $pagecontext = context::instance_by_id($pagecontextid);
114         $context = $pagecontext;
115         if (!empty($template)) {
116             $context = $template->get_context();
117         }
119         $templatesurl = new moodle_url('/admin/tool/lp/learningplans.php', array('pagecontextid' => $pagecontextid));
120         $templateurl = null;
121         if ($template) {
122             $templateurl = new moodle_url('/admin/tool/lp/templatecompetencies.php', [
123                 'templateid' => $template->get_id(),
124                 'pagecontextid' => $pagecontextid
125             ]);
126         }
128         $returnurl = $templatesurl;
129         if ($returntype != 'templates' && $templateurl) {
130             $returnurl = $templateurl;
131         }
133         $PAGE->navigation->override_active_url($templatesurl);
134         $PAGE->set_context($pagecontext);
136         if (!empty($template)) {
137             $title = format_string($template->get_shortname(), true, array('context' => $context));
138         } else {
139             $title = get_string('templates', 'tool_lp');
140         }
142         if ($pagecontext->contextlevel == CONTEXT_SYSTEM) {
143             $heading = $SITE->fullname;
144         } else if ($pagecontext->contextlevel == CONTEXT_COURSECAT) {
145             $heading = $pagecontext->get_context_name();
146         } else {
147             throw new coding_exception('Unexpected context!');
148         }
150         $PAGE->set_pagelayout('admin');
151         $PAGE->set_url($url);
152         $PAGE->set_title($title);
153         $PAGE->set_heading($heading);
155         if (!empty($template)) {
156             $PAGE->navbar->add($title, $templateurl);
157             if (!empty($subtitle)) {
158                 $PAGE->navbar->add($subtitle, $url);
159             }
161         } else if (!empty($subtitle)) {
162             // We're in a sub page without a specific template.
163             $PAGE->navbar->add($subtitle, $url);
164         }
166         return array($title, $subtitle, $returnurl);
167     }
169     /**
170      * Set-up a plan page.
171      *
172      * Example:
173      * list($title, $subtitle) = page_helper::setup_for_plan($url, $template, $pagetitle);
174      * echo $OUTPUT->heading($title);
175      * echo $OUTPUT->heading($subtitle, 3);
176      *
177      * @param  int $userid The user ID.
178      * @param  moodle_url $url The current page.
179      * @param  \tool_lp\plan $plan The plan, if any.
180      * @param  string $subtitle The title of the subpage, if any.
181      * @param  string $returntype The desired return page.
182      * @return array With the following:
183      *               - Page title
184      *               - Page sub title
185      *               - Return URL (main plan page)
186      */
187     public static function setup_for_plan($userid, moodle_url $url, $plan = null, $subtitle = '', $returntype = null) {
188         global $PAGE, $USER;
190         // Check that the user is a valid user.
191         $user = core_user::get_user($userid);
192         if (!$user || !core_user::is_real_user($userid)) {
193             throw new moodle_exception('invaliduser', 'error');
194         }
196         $context = context_user::instance($user->id);
198         $plansurl = new moodle_url('/admin/tool/lp/plans.php', array('userid' => $userid));
199         $planurl = null;
200         if ($plan) {
201             $planurl = new moodle_url('/admin/tool/lp/plan.php', array('id' => $plan->get_id()));
202         }
204         $returnurl = $plansurl;
205         if ($returntype == 'plan' && $planurl) {
206             $returnurl = $planurl;
207         }
209         $PAGE->navigation->override_active_url($plansurl);
210         $PAGE->set_context($context);
212         // If not his own plan, we want to extend the navigation for the user.
213         $iscurrentuser = ($USER->id == $user->id);
214         if (!$iscurrentuser) {
215             $PAGE->navigation->extend_for_user($user);
216             $PAGE->navigation->set_userid_for_parent_checks($user->id);
217         }
219         if (!empty($plan)) {
220             $title = format_string($plan->get_name(), true, array('context' => $context));
221         } else {
222             $title = get_string('learningplans', 'tool_lp');
223         }
225         $PAGE->set_pagelayout('standard');
226         $PAGE->set_url($url);
227         $PAGE->set_title($title);
228         $PAGE->set_heading($title);
230         if (!empty($plan)) {
231             $PAGE->navbar->add($title, $planurl);
232             if (!empty($subtitle)) {
233                 $PAGE->navbar->add($subtitle, $url);
234             }
235         } else if (!empty($subtitle)) {
236             // We're in a sub page without a specific plan.
237             $PAGE->navbar->add($subtitle, $url);
238         }
240         return array($title, $subtitle, $returnurl);
241     }
243     /**
244      * Set-up a user evidence page.
245      *
246      * Example:
247      * list($title, $subtitle) = page_helper::setup_for_user_evidence($url, $template, $pagetitle);
248      * echo $OUTPUT->heading($title);
249      * echo $OUTPUT->heading($subtitle, 3);
250      *
251      * @param  int $userid The user ID.
252      * @param  moodle_url $url The current page.
253      * @param  \tool_lp\user_evidence $evidence The user evidence, if any.
254      * @param  string $subtitle The title of the subpage, if any.
255      * @param  string $returntype The desired return page.
256      * @return array With the following:
257      *               - Page title
258      *               - Page sub title
259      *               - Return URL (main plan page)
260      */
261     public static function setup_for_user_evidence($userid, moodle_url $url, $evidence = null, $subtitle = '', $returntype = null) {
262         global $PAGE, $USER;
264         // Check that the user is a valid user.
265         $user = core_user::get_user($userid);
266         if (!$user || !core_user::is_real_user($userid)) {
267             throw new moodle_exception('invaliduser', 'error');
268         }
270         $context = context_user::instance($user->id);
272         $evidencelisturl = new moodle_url('/admin/tool/lp/user_evidence_list.php', array('userid' => $userid));
273         $evidenceurl = null;
274         if ($evidence) {
275             $evidenceurl = new moodle_url('/admin/tool/lp/user_evidence.php', array('id' => $evidence->get_id()));
276         }
278         $returnurl = $evidencelisturl;
279         if ($returntype == 'evidence' && $evidenceurl) {
280             $returnurl = $evidenceurl;
281         }
283         $PAGE->navigation->override_active_url($evidencelisturl);
284         $PAGE->set_context($context);
286         // If not his own evidence, we want to extend the navigation for the user.
287         $iscurrentuser = ($USER->id == $user->id);
288         if (!$iscurrentuser) {
289             $PAGE->navigation->extend_for_user($user);
290             $PAGE->navigation->set_userid_for_parent_checks($user->id);
291         }
293         if (!empty($evidence)) {
294             $title = format_string($evidence->get_name(), true, array('context' => $context));
295         } else {
296             $title = get_string('userevidence', 'tool_lp');
297         }
299         $PAGE->set_pagelayout('standard');
300         $PAGE->set_url($url);
301         $PAGE->set_title($title);
302         $PAGE->set_heading($title);
304         if (!empty($evidence)) {
305             $PAGE->navbar->add($title, $evidenceurl);
306             if (!empty($subtitle)) {
307                 $PAGE->navbar->add($subtitle, $url);
308             }
309         } else if (!empty($subtitle)) {
310             // We're in a sub page without a specific evidence.
311             $PAGE->navbar->add($subtitle, $url);
312         }
314         return array($title, $subtitle, $returnurl);
315     }