a71da02635ac02f5e377f239159c10951755371c
[moodle.git] / blocks / completionstatus / details.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  * Block for displayed logged in user's course completion status
19  *
20  * @package    block
21  * @subpackage completion
22  * @copyright  2009 Catalyst IT Ltd
23  * @author     Aaron Barnes <aaronb@catalyst.net.nz>
24  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
25  */
27 require_once('../../config.php');
28 require_once($CFG->libdir.'/completionlib.php');
31 // TODO:  Make this page Moodle 2.0 compliant
34 ///
35 /// Load data
36 ///
37 $id = required_param('course', PARAM_INT);
38 // User id
39 $userid = optional_param('user', 0, PARAM_INT);
41 // Load course
42 $course = $DB->get_record('course', array('id' => $id));
44 // Load user
45 if ($userid) {
46     $user = $DB->get_record('user', array('id' => $userid), '*', MUST_EXIST);
47 } else {
48     $user = $USER;
49 }
52 // Check permissions
53 require_login($course);
55 $coursecontext   = context_course::instance($course->id);
56 $personalcontext = context_user::instance($user->id);
58 $can_view = false;
60 // Can view own report
61 if ($USER->id == $user->id) {
62     $can_view = true;
63 } else if (has_capability('moodle/user:viewuseractivitiesreport', $personalcontext)) {
64     $can_view = true;
65 } else if (has_capability('report/completion:view', $coursecontext)) {
66     $can_view = true;
67 } else if (has_capability('report/completion:view', $personalcontext)) {
68     $can_view = true;
69 }
71 if (!$can_view) {
72     print_error('cannotviewreport');
73 }
76 // Load completion data
77 $info = new completion_info($course);
79 $returnurl = "{$CFG->wwwroot}/course/view.php?id={$id}";
81 // Don't display if completion isn't enabled!
82 if (!$info->is_enabled()) {
83     print_error('completionnotenabled', 'completion', $returnurl);
84 }
86 // Load criteria to display
87 $completions = $info->get_completions($user->id);
89 // Check if this course has any criteria
90 if (empty($completions)) {
91     print_error('nocriteriaset', 'completion', $returnurl);
92 }
94 // Check this user is enroled
95 if (!$info->is_tracked_user($user->id)) {
96     if ($USER->id == $user->id) {
97         print_error('notenroled', 'completion', $returnurl);
98     } else {
99         print_error('usernotenroled', 'completion', $returnurl);
100     }
104 ///
105 /// Display page
106 ///
108 // Print header
109 $page = get_string('completionprogressdetails', 'block_completionstatus');
110 $title = format_string($course->fullname) . ': ' . $page;
112 $PAGE->navbar->add($page);
113 $PAGE->set_pagelayout('standard');
114 $PAGE->set_url('/blocks/completionstatus/details.php', array('course' => $course->id));
115 $PAGE->set_title(get_string('course') . ': ' . $course->fullname);
116 $PAGE->set_heading($title);
117 echo $OUTPUT->header();
120 // Display completion status
121 echo '<table class="generalbox boxaligncenter"><tbody>';
123 // If not display logged in user, show user name
124 if ($USER->id != $user->id) {
125     echo '<tr><td colspan="2"><b>'.get_string('showinguser', 'completion').'</b>: ';
126     echo '<a href="'.$CFG->wwwroot.'/user/view.php?id='.$user->id.'&course='.$course->id.'">'.fullname($user).'</a>';
127     echo '</td></tr>';
130 echo '<tr><td colspan="2"><b>'.get_string('status').':</b> ';
132 // Is course complete?
133 $coursecomplete = $info->is_course_complete($user->id);
135 // Has this user completed any criteria?
136 $criteriacomplete = $info->count_course_user_data($user->id);
138 if ($coursecomplete) {
139     echo get_string('complete');
140 } else if (!$criteriacomplete) {
141     echo '<i>'.get_string('notyetstarted', 'completion').'</i>';
142 } else {
143     echo '<i>'.get_string('inprogress','completion').'</i>';
146 echo '</td></tr>';
147 echo '<tr><td colspan="2"><b>'.get_string('required').':</b> ';
149 // Get overall aggregation method
150 $overall = $info->get_aggregation_method();
152 if ($overall == COMPLETION_AGGREGATION_ALL) {
153     echo get_string('criteriarequiredall', 'completion');
154 } else {
155     echo get_string('criteriarequiredany', 'completion');
158 echo '</td></tr></tbody></table>';
160 // Generate markup for criteria statuses
161 echo '<table class="generalbox boxaligncenter" cellpadding="3"><tbody>';
162 echo '<tr class="ccheader">';
163 echo '<th class="c0 header" scope="col">'.get_string('criteriagroup', 'block_completionstatus').'</th>';
164 echo '<th class="c1 header" scope="col">'.get_string('criteria', 'completion').'</th>';
165 echo '<th class="c2 header" scope="col">'.get_string('requirement', 'block_completionstatus').'</th>';
166 echo '<th class="c3 header" scope="col">'.get_string('status').'</th>';
167 echo '<th class="c4 header" scope="col">'.get_string('complete').'</th>';
168 echo '<th class="c5 header" scope="col">'.get_string('completiondate', 'report_completion').'</th>';
169 echo '</tr>';
171 // Save row data
172 $rows = array();
174 global $COMPLETION_CRITERIA_TYPES;
176 // Loop through course criteria
177 foreach ($completions as $completion) {
178     $criteria = $completion->get_criteria();
179     $complete = $completion->is_complete();
181     $row = array();
182     $row['type'] = $criteria->criteriatype;
183     $row['title'] = $criteria->get_title();
184     $row['status'] = $completion->get_status();
185     $row['timecompleted'] = $completion->timecompleted;
186     $row['details'] = $criteria->get_details($completion);
187     $rows[] = $row;
190 // Print table
191 $last_type = '';
192 $agg_type = false;
194 foreach ($rows as $row) {
196     // Criteria group
197     echo '<td class="c0">';
198     if ($last_type !== $row['details']['type']) {
199         $last_type = $row['details']['type'];
200         echo $last_type;
202         // Reset agg type
203         $agg_type = true;
204     } else {
205         // Display aggregation type
206         if ($agg_type) {
207             $agg = $info->get_aggregation_method($row['type']);
209             echo '(<i>';
211             if ($agg == COMPLETION_AGGREGATION_ALL) {
212                 echo strtolower(get_string('all', 'completion'));
213             } else {
214                 echo strtolower(get_string('any', 'completion'));
215             }
217             echo '</i> '.strtolower(get_string('required')).')';
218             $agg_type = false;
219         }
220     }
221     echo '</td>';
223     // Criteria title
224     echo '<td class="c1">';
225     echo $row['details']['criteria'];
226     echo '</td>';
228     // Requirement
229     echo '<td class="c2">';
230     echo $row['details']['requirement'];
231     echo '</td>';
233     // Status
234     echo '<td class="c3">';
235     echo $row['details']['status'];
236     echo '</td>';
238     // Is complete
239     echo '<td class="c4">';
240     echo ($row['status'] === get_string('yes')) ? get_string('yes') : get_string('no');
241     echo '</td>';
243     // Completion data
244     echo '<td class="c5">';
245     if ($row['timecompleted']) {
246         echo userdate($row['timecompleted'], '%e %B %G');
247     } else {
248         echo '-';
249     }
250     echo '</td>';
251     echo '</tr>';
254 echo '</tbody></table>';
256 echo $OUTPUT->footer();