'fullname' => get_string('fullnameuser'),
'postcount' => get_string('postcount', 'forumreport_summary'),
'replycount' => get_string('replycount', 'forumreport_summary'),
+ 'attachmentcount' => get_string('attachmentcount', 'forumreport_summary'),
];
$this->define_columns(array_keys($columnheaders));
return $data->replycount;
}
+ /**
+ * Generate the attachmentcount column.
+ *
+ * @param \stdClass $data The row data.
+ * @return int number of files attached to posts by user.
+ */
+ public function col_attachmentcount(\stdClass $data): int {
+ return $data->attachmentcount;
+ }
+
/**
* Override the default implementation to set a decent heading level.
*
$this->sortable(true, 'firstname', SORT_ASC);
$this->pageable(true);
$this->no_sorting('select');
+ $this->set_attribute('id', 'forumreport_summary_table');
}
/**
SUM(CASE WHEN p.parent = 0 THEN 1 ELSE 0 END) AS postcount,
SUM(CASE WHEN p.parent != 0 THEN 1 ELSE 0 END) AS replycount,
u.firstname,
- u.lastname';
+ u.lastname,
+ SUM(CASE WHEN att.attcount IS NULL THEN 0 ELSE att.attcount END) AS attachmentcount';
$this->sql->basefromjoins = ' {enrol} e
JOIN {user_enrolments} ue ON ue.enrolid = e.id
JOIN {forum_discussions} d ON d.forum = f.id
LEFT JOIN {forum_posts} p ON p.discussion = d.id
AND p.userid = ue.userid
- AND p.privatereplyto = 0';
+ AND p.privatereplyto = 0
+ LEFT JOIN (
+ SELECT COUNT(fi.id) AS attcount, fi.itemid AS postid, fi.userid
+ FROM {files} fi
+ WHERE fi.component = :component
+ AND fi.filesize > 0
+ GROUP BY fi.itemid, fi.userid
+ ) att ON att.postid = p.id
+ AND att.userid = ue.userid';
$this->sql->basewhere = 'e.courseid = :courseid';
$this->sql->basegroupby = 'ue.userid, e.courseid, f.id, u.firstname, u.lastname';
- $this->sql->params = ['courseid' => $this->courseid];
+ $this->sql->params = [
+ 'component' => 'mod_forum',
+ 'courseid' => $this->courseid,
+ ];
// Handle if a user is limited to viewing their own summary.
if (!empty($this->userid)) {
--- /dev/null
+@mod @mod_forum @forumreport @forumreport_summary
+Feature: Attachments count column data available
+ In order to gather data on users' forum attachments
+ As a teacher
+ I need to view accurate attachment count data in the forum summary report
+
+ Scenario: Add discussions and replies with attached files
+ Given the following "users" exist:
+ | username | firstname | lastname | email |
+ | teacher1 | Teacher | 1 | teacher1@example.com |
+ | student1 | Student | 1 | student1@example.com |
+ | student2 | Student | 2 | student1@example.com |
+ And the following "courses" exist:
+ | fullname | shortname | category |
+ | Course 1 | C1 | 0 |
+ | Course 2 | C2 | 0 |
+ And the following "course enrolments" exist:
+ | user | course | role |
+ | teacher1 | C1 | editingteacher |
+ | student1 | C1 | student |
+ | student2 | C1 | student |
+ | teacher1 | C2 | editingteacher |
+ And the following "activities" exist:
+ | activity | name | description | course | idnumber |
+ | forum | forum1 | C1 first forum | C1 | forum1 |
+ | forum | forum2 | C1 second forum | C1 | forum2 |
+ | forum | forum1 | C2 first forum | C2 | forum1 |
+ And the following forum discussions exist in course "Course 1":
+ | user | forum | name | message | attachments | inlineattachments |
+ | teacher1 | forum1 | discussion1 | message1 | att1.jpg, att2.txt | |
+ | teacher1 | forum2 | discussion2 | message2 | att3.jpg | in1.jpg |
+ | student1 | forum1 | discussion3 | message3 | att4.jpg | in2.jpg |
+ | student2 | forum1 | discussion4 | message4 | | |
+ And the following forum replies exist in course "Course 1":
+ | user | forum | discussion | message | attachments | inlineattachments |
+ | teacher1 | forum1 | discussion1 | reply1 | att5.jpg | in3.txt |
+ | teacher1 | forum1 | discussion1 | reply2 | att5.jpg | in3.txt |
+ | teacher1 | forum2 | discussion2 | reply2 | att6.jpg | |
+ | student1 | forum1 | discussion3 | reply3 | att7.jpg, att8.jpg | in2.jpg |
+ | student2 | forum1 | discussion4 | reply4 | | |
+ And the following forum discussions exist in course "Course 2":
+ | user | forum | name | message | attachments | inlineattachments |
+ | teacher1 | forum1 | discussion1 | message1 | att1.jpg, att2.txt | |
+ When I log in as "teacher1"
+ And I am on "Course 1" course homepage
+ And I follow "forum1"
+ And I navigate to "Summary report" in current page administration
+ Then "Teacher 1" row "Number of attachments" column of "forumreport_summary_table" table should contain "6"
+ And "Student 1" row "Number of attachments" column of "forumreport_summary_table" table should contain "5"
+ And "Student 2" row "Number of attachments" column of "forumreport_summary_table" table should contain "0"