From 0f041170372b9dfcba7645d8b05066867c0d3f75 Mon Sep 17 00:00:00 2001 From: Michael Save Date: Sun, 20 May 2012 19:06:27 +1000 Subject: [PATCH] Cache unread PM notices --- inc/cache.php | 2 +- inc/config.php | 1 - inc/mod/auth.php | 25 ++++++++++++++++++++----- inc/mod/pages.php | 28 ++++++++++++++++++++++++---- 4 files changed, 45 insertions(+), 11 deletions(-) diff --git a/inc/cache.php b/inc/cache.php index 19e6b356..0bb73589 100644 --- a/inc/cache.php +++ b/inc/cache.php @@ -48,7 +48,7 @@ class Cache { } // debug - if ($data && $config['debug']) { + if ($data !== false && $config['debug']) { $debug['cached'][] = $key; } diff --git a/inc/config.php b/inc/config.php index d39f1158..75475a9a 100644 --- a/inc/config.php +++ b/inc/config.php @@ -38,7 +38,6 @@ $config['check_updates_time'] = 43200; // 12 hours // Shows some extra information at the bottom of pages. Good for debugging development. - // Also experimental. $config['debug'] = false; // For development purposes. Turns 'display_errors' on. Not recommended for production. $config['verbose_errors'] = true; diff --git a/inc/mod/auth.php b/inc/mod/auth.php index f9b863c8..d200c23f 100644 --- a/inc/mod/auth.php +++ b/inc/mod/auth.php @@ -123,15 +123,30 @@ if (isset($_COOKIE[$config['cookies']['mod']])) { } function create_pm_header() { - global $mod; + global $mod, $config; + + if ($config['cache']['enabled'] && ($header = cache::get('pm_unread_' . $mod['id'])) !== false) { + if ($header === true) + return false; + + return $header; + } + $query = prepare("SELECT `id` FROM `pms` WHERE `to` = :id AND `unread` = 1"); $query->bindValue(':id', $mod['id'], PDO::PARAM_INT); $query->execute() or error(db_error($query)); - if ($pm = $query->fetch()) { - return Array('id' => $pm['id'], 'waiting' => $query->rowCount() - 1); - } + if ($pm = $query->fetch()) + $header = Array('id' => $pm['id'], 'waiting' => $query->rowCount() - 1); + else + $header = true; + + if ($config['cache']['enabled']) + cache::set('pm_unread_' . $mod['id'], $header); + + if ($header === true) + return false; - return false; + return $header; } diff --git a/inc/mod/pages.php b/inc/mod/pages.php index 6c79e21f..6b644867 100644 --- a/inc/mod/pages.php +++ b/inc/mod/pages.php @@ -88,10 +88,15 @@ function mod_dashboard() { } } - $query = prepare('SELECT COUNT(*) FROM `pms` WHERE `to` = :id AND `unread` = 1'); - $query->bindValue(':id', $mod['id']); - $query->execute() or error(db_error($query)); - $args['unread_pms'] = $query->fetchColumn(0); + if (!$config['cache']['enabled'] || ($args['unread_pms'] = cache::get('pm_unreadcount_' . $mod['id'])) === false) { + $query = prepare('SELECT COUNT(*) FROM `pms` WHERE `to` = :id AND `unread` = 1'); + $query->bindValue(':id', $mod['id']); + $query->execute() or error(db_error($query)); + $args['unread_pms'] = $query->fetchColumn(0); + + if ($config['cache']['enabled']) + cache::set('pm_unreadcount_' . $mod['id'], $args['unread_pms']); + } if ($mod['type'] >= ADMIN && $config['check_updates']) { if (!$config['version']) @@ -1247,6 +1252,11 @@ function mod_pm($id, $reply = false) { $query->bindValue(':id', $id); $query->execute() or error(db_error($query)); + if ($config['cache']['enabled']) { + cache::delete('pm_unread_' . $mod['id']); + cache::delete('pm_unreadcount_' . $mod['id']); + } + header('Location: ?/', true, $config['redirect_http']); return; } @@ -1256,6 +1266,11 @@ function mod_pm($id, $reply = false) { $query->bindValue(':id', $id); $query->execute() or error(db_error($query)); + if ($config['cache']['enabled']) { + cache::delete('pm_unread_' . $mod['id']); + cache::delete('pm_unreadcount_' . $mod['id']); + } + modLog('Read a PM'); } @@ -1325,6 +1340,11 @@ function mod_new_pm($username) { $query->bindValue(':time', time()); $query->execute() or error(db_error($query)); + if ($config['cache']['enabled']) { + cache::delete('pm_unread_' . $id); + cache::delete('pm_unreadcount_' . $id); + } + modLog('Sent a PM to ' . utf8tohtml($username)); header('Location: ?/', true, $config['redirect_http']);