Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 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/>.
16
 
17
/**
18
 * Privacy helper.
19
 *
20
 * @package    tool_log
21
 * @copyright  2018 Frédéric Massart
22
 * @author     Frédéric Massart <fred@branchup.tech>
23
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
24
 */
25
 
26
namespace tool_log\local\privacy;
27
defined('MOODLE_INTERNAL') || die();
28
 
29
use core_privacy\local\request\transform;
30
 
31
/**
32
 * Privacy helper class.
33
 *
34
 * @package    tool_log
35
 * @copyright  2018 Frédéric Massart
36
 * @author     Frédéric Massart <fred@branchup.tech>
37
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
38
 */
39
class helper {
40
    use \tool_log\helper\reader;
41
 
42
    /**
43
     * Returns an event from a standard record.
44
     *
45
     * @see \logstore_standard\log\store::get_log_event()
46
     * @param object $data Log data.
47
     * @return \core\event\base
48
     */
49
    protected static function restore_event_from_standard_record($data) {
50
        $extra = ['origin' => $data->origin, 'ip' => $data->ip, 'realuserid' => $data->realuserid];
51
        $data = (array) $data;
52
        $id = $data['id'];
53
        $data['other'] = self::decode_other($data['other']);
54
        if ($data['other'] === false) {
55
            $data['other'] = [];
56
        }
57
        unset($data['origin']);
58
        unset($data['ip']);
59
        unset($data['realuserid']);
60
        unset($data['id']);
61
 
62
        if (!$event = \core\event\base::restore($data, $extra)) {
63
            return null;
64
        }
65
 
66
        return $event;
67
    }
68
 
69
    /**
70
     * Transform a standard log record for a user.
71
     *
72
     * @param object $record The record.
73
     * @param int $userid The user ID.
74
     * @return array
75
     */
76
    public static function transform_standard_log_record_for_userid($record, $userid) {
77
 
78
        // Restore the event to try to get the name, description and other field.
79
        $restoredevent = static::restore_event_from_standard_record($record);
80
        if ($restoredevent) {
81
            $name = $restoredevent->get_name();
82
            $description = $restoredevent->get_description();
83
            $other = $restoredevent->other;
84
 
85
        } else {
86
            $name = $record->eventname;
87
            $description = "Unknown event ({$name})";
88
            $other = self::decode_other($record->other);
89
        }
90
 
91
        $realuserid = $record->realuserid;
92
        $isauthor = $record->userid == $userid;
93
        $isrelated = $record->relateduserid == $userid;
94
        $isrealuser = $realuserid == $userid;
95
        $ismasqueraded = $realuserid !== null && $record->userid != $realuserid;
96
        $ismasquerading = $isrealuser && !$isauthor;
97
        $isanonymous = $record->anonymous;
98
 
99
        $data = [
100
            'name' => $name,
101
            'description' => $description,
102
            'timecreated' => transform::datetime($record->timecreated),
103
            'origin' => static::transform_origin($record->origin),
104
            'ip' => $isauthor ? $record->ip : '',
105
            'other' => $other ? $other : []
106
        ];
107
 
108
        if ($isanonymous) {
109
            $data['action_was_done_anonymously'] = transform::yesno($isanonymous);
110
        }
111
        if ($isauthor || !$isanonymous) {
112
            $data['authorid'] = transform::user($record->userid);
113
            $data['author_of_the_action_was_you'] = transform::yesno($isauthor);
114
        }
115
 
116
        if ($record->relateduserid) {
117
            $data['relateduserid'] = transform::user($record->relateduserid);
118
            $data['related_user_was_you'] = transform::yesno($isrelated);
119
        }
120
 
121
        if ($ismasqueraded) {
122
            $data['author_of_the_action_was_masqueraded'] = transform::yesno(true);
123
            if ($ismasquerading || !$isanonymous) {
124
                $data['masqueradinguserid'] = transform::user($realuserid);
125
                $data['masquerading_user_was_you'] = transform::yesno($ismasquerading);
126
            }
127
        }
128
 
129
        return $data;
130
    }
131
 
132
    /**
133
     * Transform origin.
134
     *
135
     * @param string $origin The page request origin.
136
     * @return string
137
     */
138
    public static function transform_origin($origin) {
139
        switch ($origin) {
140
            case 'cli':
141
            case 'restore':
142
            case 'web':
143
            case 'ws':
144
                return get_string('privacy:request:origin:' . $origin, 'tool_log');
145
                break;
146
        }
147
        return $origin;
148
    }
149
}