Code Coverage |
||||||||||
Lines |
Functions and Methods |
Classes and Traits |
||||||||
| Total | |
100.00% |
21 / 21 |
|
100.00% |
2 / 2 |
CRAP | |
100.00% |
1 / 1 |
| AdminActivityRenderer | |
100.00% |
20 / 20 |
|
100.00% |
2 / 2 |
4 | |
100.00% |
1 / 1 |
| __construct | |
100.00% |
5 / 5 |
|
100.00% |
1 / 1 |
1 | |||
| renderItem | |
100.00% |
15 / 15 |
|
100.00% |
1 / 1 |
3 | |||
| 1 | <?php |
| 2 | |
| 3 | App::uses('DataTableRenderer', 'Utility'); |
| 4 | |
| 5 | class 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(" |
| 12 | SELECT |
| 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 |
| 28 | FROM |
| 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 |
| 58 | ORDER BY admin_activity.id DESC |
| 59 | LIMIT " . self::$PAGE_SIZE . " |
| 60 | OFFSET " . $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 | } |