|
1
|
|
|
<?php declare(strict_types=1); defined('BASEPATH') OR exit('No direct script access allowed'); |
|
2
|
|
|
|
|
3
|
|
|
class UpdateStatus extends MY_Controller { |
|
4
|
|
|
public function __construct() { |
|
5
|
|
|
parent::__construct(); |
|
6
|
|
|
|
|
7
|
|
|
$this->load->library('table'); |
|
8
|
|
|
} |
|
9
|
|
|
|
|
10
|
|
|
public function index() : void { |
|
11
|
|
|
$this->header_data['title'] = "Update Status"; |
|
12
|
|
|
$this->header_data['page'] = "update_status"; |
|
13
|
|
|
|
|
14
|
|
|
$this->body_data['updates'] = array_merge([['Site', 'Title']], $this->_get_updates()); |
|
15
|
|
|
|
|
16
|
|
|
$template = array( |
|
17
|
|
|
'table_open' => '<table class="table table-striped">' |
|
18
|
|
|
); |
|
19
|
|
|
|
|
20
|
|
|
$this->table->set_template($template); |
|
21
|
|
|
$this->_render_page("UpdateStatus"); |
|
22
|
|
|
} |
|
23
|
|
|
|
|
24
|
|
|
private function _get_updates() { |
|
25
|
|
|
$update_time = $this->Tracker->admin->getNextUpdateTime("%H:%i"); |
|
26
|
|
|
$this->body_data['update_time'] = explode(':', $update_time); |
|
27
|
|
|
//FIXME: This is just a copy/paste of the query in the admin model. Maybe we should just have a way to grab this normally? |
|
28
|
|
|
// @formatter:off |
|
29
|
|
|
$query = $this->db |
|
30
|
|
|
->select(' |
|
31
|
|
|
tracker_titles.title, |
|
32
|
|
|
tracker_titles.title_url, |
|
33
|
|
|
tracker_sites.site_class, |
|
34
|
|
|
from_unixtime(MAX(auth_users.last_login)) AS timestamp |
|
35
|
|
|
') |
|
36
|
|
|
->from('tracker_titles') |
|
37
|
|
|
->join('tracker_sites', 'tracker_sites.id = tracker_titles.site_id', 'left') |
|
38
|
|
|
->join('tracker_chapters', 'tracker_titles.id = tracker_chapters.title_id', 'left') |
|
39
|
|
|
->join('auth_users', 'tracker_chapters.user_id = auth_users.id', 'left') |
|
40
|
|
|
->where('tracker_sites.status', 'enabled') |
|
41
|
|
|
->group_start() |
|
42
|
|
|
//Check if title is marked as on-going... |
|
43
|
|
|
->where('tracker_titles.status', 0) |
|
44
|
|
|
//AND matches one of where queries below |
|
45
|
|
|
->group_start() |
|
46
|
|
|
//Then check if it's NULL (only occurs for new series) |
|
47
|
|
|
->where('latest_chapter', NULL) |
|
48
|
|
|
//OR if it hasn't updated within the past 12 hours AND isn't a custom update site |
|
49
|
|
|
->or_group_start() |
|
50
|
|
|
->where('tracker_sites.use_custom', 'N') |
|
51
|
|
|
->where("last_checked < DATE_SUB(DATE_ADD(NOW(), INTERVAL '{$update_time}' HOUR_MINUTE), INTERVAL 12 HOUR)") |
|
52
|
|
|
->group_end() |
|
53
|
|
|
//OR it is a custom update site, has more than one follower and hasn't updated within the past 72 hours. |
|
54
|
|
|
->or_group_start() |
|
55
|
|
|
->where('tracker_titles.id IN ( |
|
56
|
|
|
SELECT title_id |
|
57
|
|
|
FROM tracker_chapters |
|
58
|
|
|
GROUP BY title_id |
|
59
|
|
|
HAVING COUNT(title_id) > 1 |
|
60
|
|
|
)', NULL, FALSE) |
|
61
|
|
|
|
|
62
|
|
|
->where("last_checked < DATE_SUB(DATE_ADD(NOW(), INTERVAL '{$update_time}' HOUR_MINUTE), INTERVAL 72 HOUR)") |
|
63
|
|
|
->group_end() |
|
64
|
|
|
//OR it is a custom update site and hasn't updated within the past 120 hours (5 days) |
|
65
|
|
|
->or_where("last_checked < DATE_SUB(DATE_ADD(NOW(), INTERVAL '{$update_time}' HOUR_MINUTE), INTERVAL 120 HOUR)") |
|
66
|
|
|
->group_end() |
|
67
|
|
|
->group_end() |
|
68
|
|
|
->or_group_start() |
|
69
|
|
|
//Check if title is marked as complete... |
|
70
|
|
|
->where('tracker_titles.status', 1) |
|
71
|
|
|
//Then check if it hasn't updated within the past week |
|
72
|
|
|
->where("last_checked < DATE_SUB(DATE_ADD(NOW(), INTERVAL '{$update_time}' HOUR_MINUTE), INTERVAL 1 WEEK)") |
|
73
|
|
|
->group_end() |
|
74
|
|
|
//Status 2 (One-shot) & 255 (Ignore) are both not updated intentionally. |
|
75
|
|
|
|
|
76
|
|
|
->group_by('tracker_titles.id, tracker_chapters.active') |
|
77
|
|
|
//Check if the series is actually being tracked by someone |
|
78
|
|
|
->having('timestamp IS NOT NULL') |
|
79
|
|
|
//AND if it's currently marked as active by the user |
|
80
|
|
|
->having('tracker_chapters.active', 'Y') |
|
81
|
|
|
//AND if they have been active in the last 120 hours (5 days) |
|
82
|
|
|
->having("timestamp > DATE_SUB(DATE_ADD(NOW(), INTERVAL '{$update_time}' HOUR_MINUTE), INTERVAL 120 HOUR)") |
|
83
|
|
|
->order_by('tracker_titles.title', 'ASC') |
|
84
|
|
|
->get(); |
|
85
|
|
|
// @formatter:on |
|
86
|
|
|
|
|
87
|
|
|
$resultArr = []; |
|
88
|
|
|
if($query->num_rows() > 0) { |
|
89
|
|
|
foreach($query->result() as $row) { |
|
90
|
|
|
$resultArr[] = [ |
|
91
|
|
|
'site' => $row->site_class, |
|
92
|
|
|
'full_title_url' => "{$row->title}" |
|
93
|
|
|
]; |
|
94
|
|
|
} |
|
95
|
|
|
} |
|
96
|
|
|
|
|
97
|
|
|
return $resultArr; |
|
98
|
|
|
} |
|
99
|
|
|
} |
|
100
|
|
|
|