Search moodle.org's
Developer Documentation

See Release Notes

  • Bug fixes for general core bugs in 4.2.x will end 22 April 2024 (12 months).
  • Bug fixes for security issues in 4.2.x will end 7 October 2024 (18 months).
  • PHP version: minimum PHP 8.0.0 Note: minimum PHP version has increased since Moodle 4.1. PHP 8.1.x is supported too.
<?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 helper.
 *
 * @package    tool_log
 * @copyright  2018 Frédéric Massart
 * @author     Frédéric Massart <fred@branchup.tech>
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */

namespace tool_log\local\privacy;
defined('MOODLE_INTERNAL') || die();

use core_privacy\local\request\transform;

/**
 * Privacy helper class.
 *
 * @package    tool_log
 * @copyright  2018 Frédéric Massart
 * @author     Frédéric Massart <fred@branchup.tech>
 * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
class helper {
    use \tool_log\helper\reader;

    /**
     * Returns an event from a standard record.
     *
     * @see \logstore_standard\log\store::get_log_event()
     * @param object $data Log data.
     * @return \core\event\base
     */
    protected static function restore_event_from_standard_record($data) {
        $extra = ['origin' => $data->origin, 'ip' => $data->ip, 'realuserid' => $data->realuserid];
        $data = (array) $data;
        $id = $data['id'];
        $data['other'] = self::decode_other($data['other']);
        if ($data['other'] === false) {
            $data['other'] = [];
        }
        unset($data['origin']);
        unset($data['ip']);
        unset($data['realuserid']);
        unset($data['id']);

        if (!$event = \core\event\base::restore($data, $extra)) {
            return null;
        }

        return $event;
    }

    /**
     * Transform a standard log record for a user.
     *
     * @param object $record The record.
     * @param int $userid The user ID.
     * @return array
     */
    public static function transform_standard_log_record_for_userid($record, $userid) {

        // Restore the event to try to get the name, description and other field.
        $restoredevent = static::restore_event_from_standard_record($record);
        if ($restoredevent) {
            $name = $restoredevent->get_name();
            $description = $restoredevent->get_description();
            $other = $restoredevent->other;

        } else {
            $name = $record->eventname;
            $description = "Unknown event ({$name})";
< $other = \tool_log\helper\reader::decode_other($record->other);
> $other = self::decode_other($record->other);
} $realuserid = $record->realuserid; $isauthor = $record->userid == $userid; $isrelated = $record->relateduserid == $userid; $isrealuser = $realuserid == $userid; $ismasqueraded = $realuserid !== null && $record->userid != $realuserid; $ismasquerading = $isrealuser && !$isauthor; $isanonymous = $record->anonymous; $data = [ 'name' => $name, 'description' => $description, 'timecreated' => transform::datetime($record->timecreated), 'origin' => static::transform_origin($record->origin), 'ip' => $isauthor ? $record->ip : '', 'other' => $other ? $other : [] ]; if ($isanonymous) { $data['action_was_done_anonymously'] = transform::yesno($isanonymous); } if ($isauthor || !$isanonymous) { $data['authorid'] = transform::user($record->userid); $data['author_of_the_action_was_you'] = transform::yesno($isauthor); } if ($record->relateduserid) { $data['relateduserid'] = transform::user($record->relateduserid); $data['related_user_was_you'] = transform::yesno($isrelated); } if ($ismasqueraded) { $data['author_of_the_action_was_masqueraded'] = transform::yesno(true); if ($ismasquerading || !$isanonymous) { $data['masqueradinguserid'] = transform::user($realuserid); $data['masquerading_user_was_you'] = transform::yesno($ismasquerading); } } return $data; } /** * Transform origin. * * @param string $origin The page request origin. * @return string */ public static function transform_origin($origin) { switch ($origin) { case 'cli': case 'restore': case 'web': case 'ws': return get_string('privacy:request:origin:' . $origin, 'tool_log'); break; } return $origin; } }