From c5a4ad3d31047f9580b19b3401ef523b0fd53733 Mon Sep 17 00:00:00 2001 From: Tristan Darricau Date: Sat, 10 May 2014 16:58:11 +0200 Subject: [PATCH] [ticket/10899] Using Delete All in log viewer with keyword search https://tracker.phpbb.com/browse/PHPBB3-10899 PHPBB3-10899 --- phpBB/includes/acp/acp_logs.php | 12 ++++++++++-- phpBB/includes/mcp/mcp_logs.php | 10 ++++++++-- phpBB/phpbb/log/log.php | 9 +++++---- 3 files changed, 23 insertions(+), 8 deletions(-) diff --git a/phpBB/includes/acp/acp_logs.php b/phpBB/includes/acp/acp_logs.php index 2c795bb77b..4e5db058fb 100644 --- a/phpBB/includes/acp/acp_logs.php +++ b/phpBB/includes/acp/acp_logs.php @@ -26,7 +26,7 @@ class acp_logs { global $db, $user, $auth, $template, $cache, $phpbb_container; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx; - global $request; + global $request, $phpbb_log; $user->add_lang('mcp'); @@ -66,7 +66,15 @@ class acp_logs unset($sql_in); } - if ($where_sql || $deleteall) + if ($deleteall) + { + $where_sql = ($sort_days) ? 'AND log_time >= ' . (time() - ($sort_days * 86400)) : ''; + $keywords = utf8_normalize_nfc(request_var('keywords', '', true)); + $keywords_where = $phpbb_log->generate_sql_keyword($keywords, ''); + $where_sql .= ' ' . $keywords_where; + } + + if ($where_sql) { $sql = 'DELETE FROM ' . LOG_TABLE . " WHERE log_type = {$this->log_type} diff --git a/phpBB/includes/mcp/mcp_logs.php b/phpBB/includes/mcp/mcp_logs.php index 7bcb0fc477..c51877002b 100644 --- a/phpBB/includes/mcp/mcp_logs.php +++ b/phpBB/includes/mcp/mcp_logs.php @@ -33,7 +33,7 @@ class mcp_logs function main($id, $mode) { global $auth, $db, $user, $template; - global $config, $phpbb_root_path, $phpEx, $phpbb_container; + global $config, $phpbb_root_path, $phpEx, $phpbb_container, $phpbb_log; $user->add_lang('acp/common'); @@ -121,9 +121,15 @@ class mcp_logs } else if ($deleteall) { + $where_sql = ($sort_days) ? 'AND log_time >= ' . (time() - ($sort_days * 86400)) : ''; + $keywords = utf8_normalize_nfc(request_var('keywords', '', true)); + $keywords_where = $phpbb_log->generate_sql_keyword($keywords, ''); + $where_sql .= ' ' . $keywords_where; + $sql = 'DELETE FROM ' . LOG_TABLE . ' WHERE log_type = ' . LOG_MOD . ' - AND ' . $db->sql_in_set('forum_id', $forum_list); + AND ' . $db->sql_in_set('forum_id', $forum_list) . + $where_sql; if ($mode == 'topic_logs') { diff --git a/phpBB/phpbb/log/log.php b/phpBB/phpbb/log/log.php index e4c5ce47d9..e3a0fa0261 100644 --- a/phpBB/phpbb/log/log.php +++ b/phpBB/phpbb/log/log.php @@ -636,11 +636,12 @@ class log implements \phpbb\log\log_interface /** * Generates a sql condition for the specified keywords * - * @param string $keywords The keywords the user specified to search for + * @param string $keywords The keywords the user specified to search for + * @param string $table_alias The alias of the logs' table ('l.' by default) * * @return string Returns the SQL condition searching for the keywords */ - protected function generate_sql_keyword($keywords) + public function generate_sql_keyword($keywords, $table_alias = 'l.') { // Use no preg_quote for $keywords because this would lead to sole // backslashes being added. We also use an OR connection here for @@ -688,9 +689,9 @@ class log implements \phpbb\log\log_interface $sql_keywords = 'AND ('; if (!empty($operations)) { - $sql_keywords .= $this->db->sql_in_set('l.log_operation', $operations) . ' OR '; + $sql_keywords .= $this->db->sql_in_set($table_alias . 'log_operation', $operations) . ' OR '; } - $sql_lower = $this->db->sql_lower_text('l.log_data'); + $sql_lower = $this->db->sql_lower_text($table_alias . 'log_data'); $sql_keywords .= " $sql_lower " . implode(" OR $sql_lower ", $keywords) . ')'; }