mirrored from git://git.moodle.org/moodle.git
-
Notifications
You must be signed in to change notification settings - Fork 6.6k
/
subcontext_info.php
123 lines (105 loc) · 3.64 KB
/
subcontext_info.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Privacy Subsystem implementation for mod_forum.
*
* @package mod_forum
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
namespace mod_forum\privacy;
use \core_privacy\request\approved_contextlist;
use \core_privacy\request\writer;
use \core_privacy\metadata\item_collection;
defined('MOODLE_INTERNAL') || die();
/**
* Subcontext subcontext_info trait.
*
* @copyright 2018 Andrew Nicols <andrew@nicols.co.uk>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
trait subcontext_info {
/**
* Get the discussion part of the subcontext.
*
* @param \stdClass $discussion The discussion
* @return array
*/
protected static function get_discussion_area(\stdClass $discussion) {
$pathparts = [];
if (!empty($discussion->groupname)) {
$pathparts[] = get_string('groups');
$pathparts[] = $discussion->groupname;
}
$parts = [
$discussion->id,
$discussion->name,
];
$discussionname = implode('-', $parts);
$pathparts[] = get_string('discussions', 'mod_forum');
$pathparts[] = $discussionname;
return $pathparts;
}
/**
* Get the post part of the subcontext.
*
* @param \stdClass $post The post.
* @return array
*/
protected static function get_post_area(\stdClass $post) {
$parts = [
$post->created,
$post->subject,
$post->id,
];
$area[] = implode('-', $parts);
return $area;
}
/**
* Get the parent subcontext for the supplied forum, discussion, and post combination.
*
* @param \stdClass $post The post.
* @return array
*/
protected static function get_post_area_for_parent(\stdClass $post) {
global $DB;
$subcontext = [];
if ($parent = $DB->get_record('forum_posts', ['id' => $post->parent], 'id, created, subject')) {
$subcontext = array_merge($subcontext, static::get_post_area($parent));
}
$subcontext = array_merge($subcontext, static::get_post_area($post));
return $subcontext;
}
/**
* Get the subcontext for the supplied forum, discussion, and post combination.
*
* @param \stdClass $forum The forum.
* @param \stdClass $discussion The discussion
* @param \stdClass $post The post.
* @return array
*/
protected static function get_subcontext($forum, $discussion = null, $post = null) {
$subcontext = [];
if (null !== $discussion) {
$subcontext += self::get_discussion_area($discussion);
if (null !== $post) {
$subcontext[] = get_string('posts', 'mod_forum');
$subcontext = array_merge($subcontext, static::get_post_area_for_parent($post));
}
}
return $subcontext;
}
}