Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
21 / 21
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
AdminActivityRenderer
100.00% covered (success)
100.00%
20 / 20
100.00% covered (success)
100.00%
2 / 2
4
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
5 / 5
100.00% covered (success)
100.00%
1 / 1
1
 renderItem
100.00% covered (success)
100.00%
15 / 15
100.00% covered (success)
100.00%
1 / 1
3
1<?php
2
3App::uses('DataTableRenderer', 'Utility');
4
5class AdminActivityRenderer extends DataTableRenderer
6{
7    public function __construct($urlParams)
8    {
9        $this->count = Util::query("SELECT COUNT(*) as total FROM admin_activity")[0]['total'];
10        parent::__construct($urlParams, 'activity_page', 'Admin Activity');
11        $this->data = Util::query("
12SELECT
13    admin_activity.created AS created,
14    admin_activity_type.id AS type,
15    admin_activity_type.name AS readable_type,
16    admin_activity.old_value AS old_value,
17    admin_activity.new_value AS new_value,
18    tsumego.id AS tsumego_id,
19    user.id AS user_id,
20    user.name AS user_name,
21    user.picture AS user_picture,
22    user.external_id AS user_external_id,
23    user.rating AS user_rating,
24    set_connection.id AS set_connection_id,
25    set_connection.num AS num,
26    tsumego_status.status AS status,
27    CONCAT(`set`.title, ' ', `set`.title2) AS set_title
28FROM
29    admin_activity
30    JOIN admin_activity_type
31        ON admin_activity.type = admin_activity_type.id
32    LEFT JOIN tsumego
33        ON admin_activity.tsumego_id = tsumego.id
34
35    /* pick exactly ONE set_connection per tsumego */
36    LEFT JOIN (
37        SELECT *
38        FROM (
39            SELECT
40                set_connection.*,
41                ROW_NUMBER() OVER (
42                    PARTITION BY set_connection.tsumego_id
43                    ORDER BY set_connection.id
44                ) AS rn
45            FROM set_connection
46        ) ranked_set_connection
47        WHERE ranked_set_connection.rn = 1
48    ) set_connection
49        ON set_connection.tsumego_id = admin_activity.tsumego_id
50
51    LEFT JOIN `set`
52        ON `set`.id = set_connection.set_id
53    LEFT JOIN user
54        ON admin_activity.user_id = user.id
55    LEFT JOIN tsumego_status
56        ON tsumego_status.user_id = ?
57       AND tsumego_status.tsumego_id = tsumego.id
58ORDER BY admin_activity.id DESC
59LIMIT " . self::$PAGE_SIZE . "
60OFFSET " . $this->offset, [Auth::getUserID()]);
61    }
62
63    public function renderItem(int $index, array $item): void
64    {
65        // Format date without seconds
66        $timestamp = strtotime($item['created']);
67        $dateFormatted = date('Y-m-d H:i', $timestamp);
68
69        echo '<td>' . ($index + 1 + 100 * ($this->page - 1)) . '</td>';
70        echo '<td>';
71        if ($item['set_connection_id'])
72            new TsumegoButton($item['tsumego_id'], $item['set_connection_id'], $item['num'], $item['status'])->render();
73        echo '</td>';
74        echo '<td>';
75        if ($item['set_connection_id'])
76            echo '<a href="/' . $item['set_connection_id'] . '">' . $item['set_title'] . ' - ' . $item['num'] . '</a>';
77        else
78            echo '(Set-wide)';
79        echo '<div style="color:#666; margin-top:5px;">' . AdminActivity::renderChange($item) . '</div>
80                </td>
81                <td>
82                    <div>' . $dateFormatted . '</div>
83                    <div style="font-size:0.9em; color:#666; margin-top:2px;">' . User::renderLink($item) . '</div>
84                </td>';
85    }
86}