You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
3.6 KiB
124 lines
3.6 KiB
2 years ago
|
<?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 helper 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) : Array {
|
||
|
$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) : Array {
|
||
|
$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;
|
||
|
|
||
|
}
|
||
|
}
|