Skip to content

Commit bfc2093

Browse files
authored
Merge pull request #325 from Leinad4Mind/fix-acp-pagination
Fix acp/mcp pagination
2 parents eb00b74 + ff6d6e5 commit bfc2093

File tree

3 files changed

+115
-70
lines changed

3 files changed

+115
-70
lines changed

core/acp/gallery_logs_module.php

Lines changed: 81 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
*
44
* @package phpBB Gallery
55
* @version $Id$
6-
* @copyright (c) 2007 nickvergessen nickvergessen@gmx.de http://www.flying-bits.org
6+
* @copyright (c) 2025 Leinad4Mind https://leinad4mind.top/forum
77
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
88
*
99
*/
@@ -23,29 +23,54 @@ function main($id, $mode)
2323
global $phpbb_container;
2424

2525
$this->language = $phpbb_container->get('language');
26+
$this->language->add_lang(['info_acp_gallery_logs'], 'phpbbgallery/core');
2627

27-
$this->language->add_lang(array('info_acp_gallery_logs'), 'phpbbgallery/core');
2828
$this->tpl_name = 'gallery_logs';
2929
add_form_key('acp_logs');
30-
$page = $request->variable('page', 0);
31-
$filter_log = $request->variable('lf', 'all');
32-
$sort_days = $request->variable('st', 0);
33-
$sort_key = $request->variable('sk', 't');
34-
$sort_dir = $request->variable('sd', 'd');
35-
$deletemark = $request->variable('delmarked', false, false, \phpbb\request\request_interface::POST);
36-
$marked = $request->variable('mark', array(0));
30+
31+
$page = $request->variable('page', 0);
32+
$filter_log = $request->variable('lf', 'all');
33+
$sort_days = $request->variable('st', 0);
34+
$sort_key = $request->variable('sk', 't');
35+
$sort_dir = $request->variable('sd', 'd');
36+
$deletemark = $request->is_set_post('delmarked');
37+
$marked = $request->variable('mark', []);
38+
3739
$log = $phpbb_container->get('phpbbgallery.core.log');
3840

41+
$valid_filters = ['all', 'admin', 'moderator', 'system'];
42+
$valid_sort_keys = ['u', 't', 'i', 'o'];
43+
$valid_sort_dirs = ['a', 'd'];
44+
45+
// Sanitize inputs
46+
if (!in_array($filter_log, $valid_filters))
47+
{
48+
$filter_log = 'all';
49+
}
50+
if (!in_array($sort_key, $valid_sort_keys))
51+
{
52+
$sort_key = 't';
53+
}
54+
if (!in_array($sort_dir, $valid_sort_dirs))
55+
{
56+
$sort_dir = 'd';
57+
}
58+
3959
// Delete entries if requested and able
40-
if (($deletemark) && $auth->acl_get('a_clearlogs'))
60+
if ($deletemark && $auth->acl_get('a_clearlogs') && !empty($marked))
4161
{
62+
if (!check_form_key('acp_logs'))
63+
{
64+
trigger_error($this->language->lang('FORM_INVALID'));
65+
}
66+
4267
if (confirm_box(true))
4368
{
4469
$log->delete_logs($marked);
4570
}
4671
else
4772
{
48-
confirm_box(false, $this->language->lang('CONFIRM_OPERATION'), build_hidden_fields(array(
73+
confirm_box(false, $this->language->lang('CONFIRM_OPERATION'), build_hidden_fields([
4974
'page' => $page,
5075
'delmarked' => $deletemark,
5176
'mark' => $marked,
@@ -54,50 +79,47 @@ function main($id, $mode)
5479
'sd' => $sort_dir,
5580
'i' => $id,
5681
'mode' => $mode,
57-
'action' => $this->u_action,
58-
)));
82+
'action' => $this->u_action,
83+
]));
5984
}
6085
}
86+
6187
switch ($mode)
6288
{
6389
case 'main':
64-
switch ($filter_log)
65-
{
66-
case 'all':
67-
$title = 'ACP_GALLERY_LOGS';
68-
$template->assign_vars(array(
69-
'L_TITLE' => $this->language->lang('ACP_GALLERY_LOGS'),
70-
'L_EXPLAIN' => '',
71-
'S_SELECT_OPTION' => 'all'
72-
));
73-
break;
74-
case 'admin':
75-
$title = 'ACP_LOG_GALLERY_ADM';
76-
$template->assign_vars(array(
77-
'L_TITLE' => $this->language->lang('ACP_LOG_GALLERY_ADM'),
78-
'L_EXPLAIN' => $this->language->lang('ACP_LOG_GALLERY_ADM_EXP'),
79-
'S_SELECT_OPTION' => 'admin'
80-
));
81-
break;
82-
case 'moderator':
83-
$title = 'ACP_LOG_GALLERY_MOD';
84-
$template->assign_vars(array(
85-
'L_TITLE' => $this->language->lang('ACP_LOG_GALLERY_MOD'),
86-
'L_EXPLAIN' => $this->language->lang('ACP_LOG_GALLERY_MOD_EXP'),
87-
'S_SELECT_OPTION' => 'moderator'
88-
));
89-
break;
90-
case 'system':
91-
$title = 'ACP_LOG_GALLERY_SYSTEM';
92-
$template->assign_vars(array(
93-
'L_TITLE' => $this->language->lang('ACP_LOG_GALLERY_SYSTEM'),
94-
'L_EXPLAIN' => $this->language->lang('ACP_LOG_GALLERY_SYSTEM_EXP'),
95-
'S_SELECT_OPTION' => 'system'
96-
));
97-
break;
98-
}
99-
$limit_days = array(0 => $this->language->lang('ALL_ENTRIES'), 1 => $this->language->lang('1_DAY'), 7 => $this->language->lang('7_DAYS'), 14 => $this->language->lang('2_WEEKS'), 30 => $this->language->lang('1_MONTH'), 90 => $this->language->lang('3_MONTHS'), 180 => $this->language->lang('6_MONTHS'), 365 => $this->language->lang('1_YEAR'));
100-
$sort_by_text = array('u' => $this->language->lang('SORT_USER_ID'), 't' => $this->language->lang('SORT_DATE'), 'i' => $this->language->lang('SORT_IP'), 'o' => $this->language->lang('SORT_ACTION'));
90+
// Template vars based on filter
91+
$log_titles = [
92+
'all' => ['ACP_GALLERY_LOGS', ''],
93+
'admin' => ['ACP_LOG_GALLERY_ADM', 'ACP_LOG_GALLERY_ADM_EXP'],
94+
'moderator'=> ['ACP_LOG_GALLERY_MOD', 'ACP_LOG_GALLERY_MOD_EXP'],
95+
'system' => ['ACP_LOG_GALLERY_SYSTEM', 'ACP_LOG_GALLERY_SYSTEM_EXP'],
96+
];
97+
$title = $log_titles[$filter_log][0];
98+
99+
$template->assign_vars([
100+
'L_TITLE' => $this->language->lang($log_titles[$filter_log][0]),
101+
'L_EXPLAIN' => $log_titles[$filter_log][1] ? $this->language->lang($log_titles[$filter_log][1]) : '',
102+
'S_SELECT_OPTION' => $filter_log,
103+
]);
104+
105+
// Sorting
106+
$limit_days = [
107+
0 => $this->language->lang('ALL_ENTRIES'),
108+
1 => $this->language->lang('1_DAY'),
109+
7 => $this->language->lang('7_DAYS'),
110+
14 => $this->language->lang('2_WEEKS'),
111+
30 => $this->language->lang('1_MONTH'),
112+
90 => $this->language->lang('3_MONTHS'),
113+
180 => $this->language->lang('6_MONTHS'),
114+
365 => $this->language->lang('1_YEAR'),
115+
];
116+
$sort_by_text = [
117+
'u' => $this->language->lang('SORT_USER_ID'),
118+
't' => $this->language->lang('SORT_DATE'),
119+
'i' => $this->language->lang('SORT_IP'),
120+
'o' => $this->language->lang('SORT_ACTION'),
121+
];
122+
101123
$s_limit_days = $s_sort_key = $s_sort_dir = $u_sort_param = '';
102124
gen_sort_selects($limit_days, $sort_by_text, $sort_days, $sort_key, $sort_dir, $s_limit_days, $s_sort_key, $s_sort_dir, $u_sort_param);
103125

@@ -106,24 +128,27 @@ function main($id, $mode)
106128
'S_SORT_KEY' => $s_sort_key,
107129
'S_SORT_DIR' => $s_sort_dir,
108130
'S_CLEARLOGS' => $auth->acl_get('a_clearlogs'),
109-
'U_ACTION' => $this->u_action . "&$u_sort_param&page=$page",
131+
'U_ACTION' => $this->u_action . "&$u_sort_param&page=$page",
110132
));
111133
$this->page_title = $this->language->lang($title);
112-
// Let's build some additional parameters for the log
113-
$additional = array();
134+
135+
// Build additional filters
136+
$additional = [];
114137
if ($sort_days > 0)
115138
{
116139
$additional['sort_days'] = $sort_days;
117140
}
118-
if ($sort_key != 't')
141+
if ($sort_key !== 't')
119142
{
120143
$additional['sort_key'] = $sort_key;
121144
}
122-
if ($sort_dir != 'd')
145+
if ($sort_dir !== 'd')
123146
{
124147
$additional['sort_dir'] = $sort_dir;
125148
}
126-
$log->build_list($filter_log, 25, ($page/25) + 1, -1, 0, $additional);
149+
150+
// Build list
151+
$log->build_list($filter_log, 0, $page, -1, 0, $additional);
127152
break;
128153

129154
default:

core/controller/moderate.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -324,6 +324,7 @@ public function action_log($page, $album_id)
324324
'U_GALLERY_MCP_LOGS' => $album_id > 0 ? $this->helper->route('phpbbgallery_core_moderate_action_log_album', array('album_id' => $album_id)) : $this->helper->route('phpbbgallery_core_moderate_action_log'),
325325
'U_ALBUM_NAME' => $album_id > 0 ? $album['album_name'] : false,
326326
));
327+
327328
$this->gallery_log->build_list('moderator', 0, $page, $album_id);
328329
return $this->helper->render('gallery/moderate_actions.html', $this->language->lang('GALLERY'));
329330
}

core/log.php

Lines changed: 33 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,11 @@ public function build_list($type, $limit = 0, $page = 1, $album = 0, $image = 0,
132132
if ($limit == 0)
133133
{
134134
$limit = $this->gallery_config->get('items_per_page');
135+
// If its called from ACP album is -1, if from MCP then is not
136+
if ($album == -1)
137+
{
138+
$page = (int) ($page / $limit) + 1;
139+
}
135140
}
136141
$this->language->add_lang(['info_acp_gallery_logs'], 'phpbbgallery/core');
137142

@@ -193,39 +198,51 @@ public function build_list($type, $limit = 0, $page = 1, $album = 0, $image = 0,
193198
{
194199
case 'u':
195200
$sql_array['ORDER_BY'] = 'l.log_user ' . (isset($additional['sort_dir']) ? 'ASC' : 'DESC');
196-
$sql_array['GROUP_BY'] = 'l.log_user, l.log_id, i.image_id';
201+
$sql_array['GROUP_BY'] = 'l.log_user, l.log_id, i.image_id, i.image_album_id';
197202
break;
198203
case 'i':
199204
$sql_array['ORDER_BY'] = 'l.log_ip ' . (isset($additional['sort_dir']) ? 'ASC' : 'DESC');
200-
$sql_array['GROUP_BY'] = 'l.log_ip, l.log_id, i.image_id';
205+
$sql_array['GROUP_BY'] = 'l.log_ip, l.log_id, i.image_id, i.image_album_id';
201206
break;
202207
case 'o':
203208
$sql_array['ORDER_BY'] = 'l.description ' . (isset($additional['sort_dir']) ? 'ASC' : 'DESC');
204-
$sql_array['GROUP_BY'] = 'l.description, l.log_id, i.image_id';
209+
$sql_array['GROUP_BY'] = 'l.description, l.log_id, i.image_id, i.image_album_id';
205210
break;
206211
}
207212
}
208213
else
209214
{
210215
$sql_array['ORDER_BY'] = 'l.log_time ' . (isset($additional['sort_dir']) ? 'ASC' : 'DESC');
211-
$sql_array['GROUP_BY'] = 'l.log_time, l.log_id, i.image_id';
216+
$sql_array['GROUP_BY'] = 'l.log_time, l.log_id, i.image_id, i.image_album_id';
212217
}
213-
214218
// So we need count - so define SELECT
215-
$sql_array['SELECT'] = 'SUM(l.log_id) as count';
216-
$sql = $this->db->sql_build_query('SELECT', $sql_array);
217-
$result = $this->db->sql_query($sql);
218-
$row = $this->db->sql_fetchrow($result);
219-
$this->db->sql_freeresult($result);
220-
if ($row)
219+
$count_sql_array = $sql_array;
220+
221+
// Remove SELECT for correct count
222+
$count_sql_array['SELECT'] = 'COUNT(DISTINCT l.log_id) as count';
223+
unset($count_sql_array['GROUP_BY']);
224+
unset($count_sql_array['ORDER_BY']);
225+
$filtering_on_image_album = false;
226+
foreach ($sql_where as $where_clause)
221227
{
222-
$count = $row['count'];
228+
if (strpos($where_clause, 'i.image_album_id') !== false)
229+
{
230+
$filtering_on_image_album = true;
231+
break;
232+
}
223233
}
224-
else
234+
if (!$filtering_on_image_album)
225235
{
226-
$count = 0;
236+
unset($count_sql_array['LEFT_JOIN']);
227237
}
228238

239+
$sql = $this->db->sql_build_query('SELECT', $count_sql_array);
240+
$result = $this->db->sql_query($sql);
241+
$row = $this->db->sql_fetchrow($result);
242+
$this->db->sql_freeresult($result);
243+
244+
$count = $row ? $row['count'] : 0;
245+
229246
$sql_array['SELECT'] = '*';
230247
$sql = $this->db->sql_build_query('SELECT', $sql_array);
231248
$result = $this->db->sql_query_limit($sql, $limit, ($page - 1) * $limit);
@@ -249,6 +266,7 @@ public function build_list($type, $limit = 0, $page = 1, $album = 0, $image = 0,
249266
$this->db->sql_freeresult($result);
250267

251268
$this->user_loader->load_users(array_keys($users_array));
269+
252270
// Let's build template vars
253271
if (!empty($logoutput))
254272
{
@@ -287,6 +305,7 @@ public function build_list($type, $limit = 0, $page = 1, $album = 0, $image = 0,
287305
$url_array = array(
288306
'i' => '-phpbbgallery-core-acp-gallery_logs_module',
289307
'mode' => 'main',
308+
'lf' => $type
290309
);
291310
if (isset($additional['sort_days']))
292311
{

0 commit comments

Comments
 (0)