Skip to content

Commit 9700a72

Browse files
author
Matthias Opitz
committed
CTP-4443: showing assessments and markings
- amended mustache to show both sections - added is_student() function
1 parent 85cba77 commit 9700a72

File tree

2 files changed

+127
-40
lines changed

2 files changed

+127
-40
lines changed

block_my_feedback.php

+66-16
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,21 @@ class block_my_feedback extends block_base {
3434
*/
3535
private static array $markerroles;
3636

37+
/**
38+
* @var array array of roles a marker may have.
39+
*/
40+
private static array $studentroles;
41+
3742
/**
3843
* @var bool marker status.
3944
*/
4045
private static bool $ismarker;
4146

47+
/**
48+
* @var bool student status.
49+
*/
50+
private static bool $isstudent;
51+
4252
/**
4353
* Initialises the block.
4454
*
@@ -48,15 +58,12 @@ public function init() {
4858
global $USER;
4959

5060
self::$markerroles = self::get_marker_role_ids();
61+
self::$studentroles = self::get_student_role_ids();
5162
self::$ismarker = self::is_marker();
63+
self::$isstudent = self::is_student();
5264

53-
if (!isset($USER->firstname)) {
54-
$this->title = get_string('pluginname', 'block_my_feedback');
55-
} else if (self::$ismarker) {
56-
$this->title = get_string('markingfor', 'block_my_feedback').' '.$USER->firstname;
57-
} else {
58-
$this->title = get_string('feedbackfor', 'block_my_feedback').' '.$USER->firstname;
59-
}
65+
// No title for the block as each section will have one.
66+
$this->title = '';
6067
}
6168

6269
/**
@@ -78,6 +85,22 @@ private static function get_marker_role_ids(): array {
7885
);
7986
}
8087

88+
/**
89+
* Get the marker role IDs.
90+
*
91+
* @return array
92+
*/
93+
private static function get_student_role_ids(): array {
94+
global $DB;
95+
96+
return $DB->get_fieldset_select('role', 'id',
97+
'shortname IN (:role1)',
98+
[
99+
'role1' => 'student',
100+
]
101+
);
102+
}
103+
81104
/**
82105
* Gets the block contents.
83106
*
@@ -95,16 +118,20 @@ public function get_content(): stdClass {
95118

96119
$template = new stdClass();
97120

98-
if (self::$ismarker) {
99-
// Marker content.
100-
$template->mods = self::fetch_marking($USER);
101-
} else {
102-
// Student content.
103-
$template->mods = $this->fetch_feedback($USER);
121+
// Marker content.
122+
if (self::$ismarker && $template->markingmods = self::fetch_marking($USER)) {
123+
$template->showmarkings = true;
124+
$template->markingheader = get_string('markingfor', 'block_my_feedback').' '.$USER->firstname;
125+
}
126+
127+
// Student content.
128+
if (self::$isstudent && $template->assessmentmods = $this->fetch_feedback($USER)) {
104129
$template->showfeedbacktrackerlink = true;
130+
$template->showassessments = true;
131+
$template->assessmentheader = get_string('feedbackfor', 'block_my_feedback').' '.$USER->firstname;
105132
}
106133

107-
if (isset($template->mods)) {
134+
if (isset($template->markingmods) || isset($template->assessmentmods)) {
108135
$this->content->text = $OUTPUT->render_from_template('block_my_feedback/content', $template);
109136
}
110137

@@ -139,7 +166,8 @@ private static function is_marker(): bool {
139166
* @param stdClass $course
140167
* @return bool
141168
*/
142-
private static function is_course_marker(stdClass $course): bool {
169+
private static function is_course_marker(stdClass $course): bool
170+
{
143171
global $USER;
144172

145173
if (!$course) {
@@ -148,13 +176,35 @@ private static function is_course_marker(stdClass $course): bool {
148176

149177
// Check if user has a merker role in the given course.
150178
foreach (self::$markerroles as $role) {
151-
if (user_has_role_assignment($USER->id, (int) $role, $course->ctxid)) {
179+
if (user_has_role_assignment($USER->id, (int)$role, $course->ctxid)) {
152180
return true;
153181
}
154182
}
155183
return false;
156184
}
157185

186+
/**
187+
* Return if user has archetype student.
188+
*
189+
* @return bool
190+
*/
191+
public static function is_student(): bool {
192+
global $DB, $USER;
193+
// Get id's from role where archetype is student.
194+
if ($roles = self::$studentroles) {
195+
// Check if user has editingteacher role on any courses.
196+
list($roles, $params) = $DB->get_in_or_equal($roles, SQL_PARAMS_NAMED);
197+
$params['userid'] = $USER->id;
198+
$sql = "SELECT id
199+
FROM {role_assignments}
200+
WHERE userid = :userid
201+
AND roleid $roles";
202+
return $DB->record_exists_sql($sql, $params);
203+
} else {
204+
return false;
205+
}
206+
}
207+
158208
/**
159209
* Return marking for a user.
160210
*

templates/content.mustache

+61-24
Original file line numberDiff line numberDiff line change
@@ -32,35 +32,72 @@
3232
}}
3333

3434
{{! Mods for feedback and marking. }}
35-
{{#mods}}
36-
<div class="d-flex">
35+
{{#showassessments}}
36+
<h3>{{assessmentheader}}</h3>
37+
{{#assessmentmods}}
3738

38-
<div class="mr-3 bg-cover bg-light rounded-circle flex-shrink-0" style="background-image: url('{{{icon}}}'); height: 4rem; width: 4rem;"></div>
39+
<div class="d-flex">
3940

40-
<div>
41-
<div class="line-clamp-1 text-muted">
42-
<small>{{coursename}}</small>
43-
</div>
44-
<a href="{{{url}}}" class="font-weight-bold line-clamp-2">{{name}}</a>
41+
<div class="mr-3 bg-cover bg-light rounded-circle flex-shrink-0" style="background-image: url('{{{icon}}}'); height: 4rem; width: 4rem;"></div>
42+
43+
<div>
44+
<div class="line-clamp-1 text-muted">
45+
<small>{{coursename}}</small>
46+
</div>
47+
<a href="{{{url}}}" class="font-weight-bold line-clamp-2">{{name}}</a>
48+
49+
{{#duedate}}
50+
<div class="small">
51+
{{#str}} t:due, block_my_feedback {{/str}} {{duedate}}
52+
{{#requiremarking}}
53+
· <a href="{{{markingurl}}}">{{requiremarking}} {{#str}} t:needmarking, block_my_feedback {{/str}}</a>
54+
{{/requiremarking}}
55+
</div>
56+
{{/duedate}}
4557

46-
{{#duedate}}
47-
<div class="small">
48-
{{#str}} t:due, block_my_feedback {{/str}} {{duedate}}
49-
{{#requiremarking}}
50-
· <a href="{{{markingurl}}}">{{requiremarking}} {{#str}} t:needmarking, block_my_feedback {{/str}}</a>
51-
{{/requiremarking}}
58+
{{#releaseddate}}
59+
<div class="small">
60+
{{#tutorname}}{{.}} · {{/tutorname}} {{releaseddate}}
61+
</div>
62+
{{/releaseddate}}
63+
</div>
5264
</div>
53-
{{/duedate}}
65+
<hr>
66+
{{/assessmentmods}}
67+
{{/showassessments}}
5468

55-
{{#releaseddate}}
56-
<div class="small">
57-
{{#tutorname}}{{.}} · {{/tutorname}} {{releaseddate}}
58-
</div>
59-
{{/releaseddate}}
60-
</div>
61-
</div>
62-
<hr>
63-
{{/mods}}
69+
{{#showmarkings}}
70+
<h3>{{markingheader}}</h3>
71+
{{#markingmods}}
72+
<div class="d-flex">
73+
74+
<div class="mr-3 bg-cover bg-light rounded-circle flex-shrink-0" style="background-image: url('{{{icon}}}'); height: 4rem; width: 4rem;"></div>
75+
76+
<div>
77+
<div class="line-clamp-1 text-muted">
78+
<small>{{coursename}}</small>
79+
</div>
80+
<a href="{{{url}}}" class="font-weight-bold line-clamp-2">{{name}}</a>
81+
82+
{{#duedate}}
83+
<div class="small">
84+
{{#str}} t:due, block_my_feedback {{/str}} {{duedate}}
85+
{{#requiremarking}}
86+
· <a href="{{{markingurl}}}">{{requiremarking}} {{#str}} t:needmarking, block_my_feedback {{/str}}</a>
87+
{{/requiremarking}}
88+
</div>
89+
{{/duedate}}
90+
91+
{{#releaseddate}}
92+
<div class="small">
93+
{{#tutorname}}{{.}} · {{/tutorname}} {{releaseddate}}
94+
</div>
95+
{{/releaseddate}}
96+
</div>
97+
</div>
98+
<hr>
99+
{{/markingmods}}
100+
{{/showmarkings}}
64101

65102
{{#showfeedbacktrackerlink}}
66103
<div class="bg-light pt-2 pb-3 px-3">

0 commit comments

Comments
 (0)