Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
94.44% covered (success)
94.44%
17 / 18
0.00% covered (danger)
0.00%
0 / 1
CRAP
0.00% covered (danger)
0.00%
0 / 1
AdminActivityLogger
93.75% covered (success)
93.75%
15 / 16
0.00% covered (danger)
0.00%
0 / 1
2.00
0.00% covered (danger)
0.00%
0 / 1
 log
93.75% covered (success)
93.75%
15 / 16
0.00% covered (danger)
0.00%
0 / 1
2.00
1<?php
2
3App::uses('ClassRegistry', 'Utility');
4App::uses('Auth', 'Utility');
5
6/**
7 * AdminActivityLogger
8 *
9 * Centralized logging utility for all admin activities.
10 * Provides a simple, consistent API for recording admin actions with proper type IDs.
11 *
12 * Schema: admin_activity (id, user_id, tsumego_id, set_id, type, old_value, new_value, created)
13 * - type: INT FK to admin_activity_type(id)
14 * - old_value/new_value: VARCHAR(500) for state changes
15 *
16 * Usage:
17 *
18 *   // Edit with values (old → new)
19 *   AdminActivityLogger::log(AdminActivityType::DESCRIPTION_EDIT, $tsumegoId, null, $oldDesc, $newDesc);
20 *
21 *   // Simple action (no values)
22 *   AdminActivityLogger::log(AdminActivityType::PROBLEM_DELETE, $tsumegoId, $setId);
23 */
24class AdminActivityLogger
25{
26    /**
27     * Log any admin activity
28     *
29     * @param int $type Activity type ID (use class constants)
30     * @param int|null $tsumegoId Problem ID (null for set-only activities)
31     * @param int|null $setId Set ID (null for problem-only activities)
32     * @param string|null $oldValue Old value for state changes/edits (null if not applicable)
33     * @param string|null $newValue New value for state changes/edits (null if not applicable)
34     * @return bool True if saved successfully
35     *
36     * Examples:
37     *   // Description edit with old → new
38     *   AdminActivityLogger::log(AdminActivityType::DESCRIPTION_EDIT, $tsumegoId, null, $oldDesc, $newDesc);
39     *
40     *   // Simple action without values
41     *   AdminActivityLogger::log(AdminActivityType::PROBLEM_DELETE, $tsumegoId, $setId);
42     */
43    public static function log($type, $tsumegoId = null, $setId = null, $oldValue = null, $newValue = null)
44    {
45        $userId = Auth::getUserID();
46        if (!$userId)
47            return false; // Only logged-in users
48
49        $adminActivity = ClassRegistry::init('AdminActivity');
50        $adminActivity->create();
51
52        $data = [
53            'AdminActivity' => [
54                'user_id' => $userId,
55                'tsumego_id' => $tsumegoId,
56                'set_id' => $setId,
57                'type' => $type,
58                'old_value' => $oldValue,
59                'new_value' => $newValue,
60            ],
61        ];
62
63        return (bool) $adminActivity->save($data, false); // Skip validation for performance
64    }
65}