41538878fcc561b8978e9bcc9af3d62306501dc3
[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      * @return array With the following:
104      *               - Page title
105      *               - Page sub title
106      *               - Return URL (main templates page)
107      */
108     public static function setup_for_template($pagecontextid, moodle_url $url, $template = null, $subtitle = '') {
109         global $PAGE, $SITE;
111         $pagecontext = context::instance_by_id($pagecontextid);
112         $context = $pagecontext;
113         if (!empty($template)) {
114             $context = $template->get_context();
115         }
117         $templatesurl = new moodle_url('/admin/tool/lp/learningplans.php', array('pagecontextid' => $pagecontextid));
119         $PAGE->navigation->override_active_url($templatesurl);
120         $PAGE->set_context($pagecontext);
122         if (!empty($template)) {
123             $title = format_string($template->get_shortname(), true, array('context' => $context));
124         } else {
125             $title = get_string('templates', 'tool_lp');
126         }
128         if ($pagecontext->contextlevel == CONTEXT_SYSTEM) {
129             $heading = $SITE->fullname;
130         } else if ($pagecontext->contextlevel == CONTEXT_COURSECAT) {
131             $heading = $pagecontext->get_context_name();
132         } else {
133             throw new coding_exception('Unexpected context!');
134         }
136         $PAGE->set_pagelayout('admin');
137         $PAGE->set_url($url);
138         $PAGE->set_title($title);
139         $PAGE->set_heading($heading);
141         if (!empty($template)) {
142             $PAGE->navbar->add($title);
143             $PAGE->navbar->add($subtitle, $url);
145         } else if (!empty($subtitle)) {
146             // We're in a sub page without a specific template.
147             $PAGE->navbar->add($subtitle, $url);
148         }
150         return array($title, $subtitle, $templatesurl);
151     }
153     /**
154      * Set-up a plan page.
155      *
156      * Example:
157      * list($title, $subtitle) = page_helper::setup_for_plan($url, $template, $pagetitle);
158      * echo $OUTPUT->heading($title);
159      * echo $OUTPUT->heading($subtitle, 3);
160      *
161      * @param  int $userid The user ID.
162      * @param  moodle_url $url The current page.
163      * @param  \tool_lp\plan $plan The plan, if any.
164      * @param  string $subtitle The title of the subpage, if any.
165      * @param  string $returntype The desired return page.
166      * @return array With the following:
167      *               - Page title
168      *               - Page sub title
169      *               - Return URL (main plan page)
170      */
171     public static function setup_for_plan($userid, moodle_url $url, $plan = null, $subtitle = '', $returntype = null) {
172         global $PAGE, $USER;
174         // Check that the user is a valid user.
175         $user = core_user::get_user($userid);
176         if (!$user || !core_user::is_real_user($userid)) {
177             throw new moodle_exception('invaliduser', 'error');
178         }
180         $context = context_user::instance($user->id);
182         $plansurl = new moodle_url('/admin/tool/lp/plans.php', array('userid' => $userid));
183         $planurl = null;
184         if ($plan) {
185             $planurl = new moodle_url('/admin/tool/lp/plan.php', array('id' => $plan->get_id()));
186         }
188         $returnurl = $plansurl;
189         if ($returntype == 'plan' && $planurl) {
190             $returnurl = $planurl;
191         }
193         $PAGE->navigation->override_active_url($plansurl);
194         $PAGE->set_context($context);
196         // If not his own plan, we want to extend the navigation for the user.
197         $iscurrentuser = ($USER->id == $user->id);
198         if (!$iscurrentuser) {
199             $PAGE->navigation->extend_for_user($user);
200             $PAGE->navigation->set_userid_for_parent_checks($user->id);
201         }
203         if (!empty($plan)) {
204             $title = format_string($plan->get_name(), true, array('context' => $context));
205         } else {
206             $title = get_string('learningplans', 'tool_lp');
207         }
209         $PAGE->set_pagelayout('standard');
210         $PAGE->set_url($url);
211         $PAGE->set_title($title);
212         $PAGE->set_heading($title);
214         if (!empty($plan)) {
215             $PAGE->navbar->add($title, $planurl);
216             if (!empty($subtitle)) {
217                 $PAGE->navbar->add($subtitle, $url);
218             }
219         } else if (!empty($subtitle)) {
220             // We're in a sub page without a specific plan.
221             $PAGE->navbar->add($subtitle, $url);
222         }
224         return array($title, $subtitle, $returnurl);
225     }
227     /**
228      * Set-up a user evidence page.
229      *
230      * Example:
231      * list($title, $subtitle) = page_helper::setup_for_user_evidence($url, $template, $pagetitle);
232      * echo $OUTPUT->heading($title);
233      * echo $OUTPUT->heading($subtitle, 3);
234      *
235      * @param  int $userid The user ID.
236      * @param  moodle_url $url The current page.
237      * @param  \tool_lp\user_evidence $evidence The user evidence, if any.
238      * @param  string $subtitle The title of the subpage, if any.
239      * @param  string $returntype The desired return page.
240      * @return array With the following:
241      *               - Page title
242      *               - Page sub title
243      *               - Return URL (main plan page)
244      */
245     public static function setup_for_user_evidence($userid, moodle_url $url, $evidence = null, $subtitle = '', $returntype = null) {
246         global $PAGE, $USER;
248         // Check that the user is a valid user.
249         $user = core_user::get_user($userid);
250         if (!$user || !core_user::is_real_user($userid)) {
251             throw new moodle_exception('invaliduser', 'error');
252         }
254         $context = context_user::instance($user->id);
256         $evidencelisturl = new moodle_url('/admin/tool/lp/user_evidence_list.php', array('userid' => $userid));
257         $evidenceurl = null;
258         if ($evidence) {
259             $evidenceurl = new moodle_url('/admin/tool/lp/user_evidence.php', array('id' => $evidence->get_id()));
260         }
262         $returnurl = $evidencelisturl;
263         if ($returntype == 'evidence' && $evidenceurl) {
264             $returnurl = $evidenceurl;
265         }
267         $PAGE->navigation->override_active_url($evidencelisturl);
268         $PAGE->set_context($context);
270         // If not his own evidence, we want to extend the navigation for the user.
271         $iscurrentuser = ($USER->id == $user->id);
272         if (!$iscurrentuser) {
273             $PAGE->navigation->extend_for_user($user);
274             $PAGE->navigation->set_userid_for_parent_checks($user->id);
275         }
277         if (!empty($evidence)) {
278             $title = format_string($evidence->get_name(), true, array('context' => $context));
279         } else {
280             $title = get_string('userevidence', 'tool_lp');
281         }
283         $PAGE->set_pagelayout('standard');
284         $PAGE->set_url($url);
285         $PAGE->set_title($title);
286         $PAGE->set_heading($title);
288         if (!empty($evidence)) {
289             $PAGE->navbar->add($title, $evidenceurl);
290             if (!empty($subtitle)) {
291                 $PAGE->navbar->add($subtitle, $url);
292             }
293         } else if (!empty($subtitle)) {
294             // We're in a sub page without a specific evidence.
295             $PAGE->navbar->add($subtitle, $url);
296         }
298         return array($title, $subtitle, $returnurl);
299     }