| 1 | <?php |
|---|
| 2 | /** |
|---|
| 3 | * name: Messaging |
|---|
| 4 | * description: Enable users to send private messages to each other |
|---|
| 5 | * version: 0.4 |
|---|
| 6 | * folder: messaging |
|---|
| 7 | * class: Messaging |
|---|
| 8 | * requires: users 1.5 |
|---|
| 9 | * hooks: install_plugin, theme_index_top, header_include, profile_navigation, breadcrumbs, theme_index_main, admin_maintenance_database, admin_maintenance_top, user_settings_pre_save, user_settings_fill_form, user_settings_extra_settings, userauth_checkcookie_success, hotaru_announcements, smart_cache_sql |
|---|
| 10 | * author: Nick Ramsay |
|---|
| 11 | * authorurl: http://hotarucms.org/member.php?1-Nick |
|---|
| 12 | */ |
|---|
| 13 | |
|---|
| 14 | class Messaging |
|---|
| 15 | { |
|---|
| 16 | /** |
|---|
| 17 | * Default settings on install |
|---|
| 18 | */ |
|---|
| 19 | public function install_plugin($h) |
|---|
| 20 | { |
|---|
| 21 | // Create a new empty table called "messaging" |
|---|
| 22 | $exists = $h->db->table_exists('messaging'); |
|---|
| 23 | if (!$exists) { |
|---|
| 24 | //echo "table doesn't exist. Stopping before creation."; exit; |
|---|
| 25 | $sql = "CREATE TABLE `" . DB_PREFIX . "messaging` ( |
|---|
| 26 | `message_id` int(20) NOT NULL AUTO_INCREMENT PRIMARY KEY, |
|---|
| 27 | `message_updatedts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, |
|---|
| 28 | `message_archived` enum('Y','N') NOT NULL DEFAULT 'N', |
|---|
| 29 | `message_from` int(20) NOT NULL DEFAULT 0, |
|---|
| 30 | `message_to` int(20) NOT NULL DEFAULT 0, |
|---|
| 31 | `message_date` timestamp NOT NULL, |
|---|
| 32 | `message_subject` varchar(255) NOT NULL DEFAULT '', |
|---|
| 33 | `message_content` text NULL, |
|---|
| 34 | `message_read` tinyint(1) NOT NULL DEFAULT '0', |
|---|
| 35 | `message_inbox` tinyint(1) NOT NULL DEFAULT '1', |
|---|
| 36 | `message_outbox` tinyint(1) NOT NULL DEFAULT '1', |
|---|
| 37 | `message_updateby` int(20) NOT NULL DEFAULT 0 |
|---|
| 38 | ) ENGINE=" . DB_ENGINE . " DEFAULT CHARSET=" . DB_CHARSET . " COLLATE=" . DB_COLLATE . " COMMENT='Messaging';"; |
|---|
| 39 | $h->db->query($sql); |
|---|
| 40 | } |
|---|
| 41 | |
|---|
| 42 | // Permissions |
|---|
| 43 | $site_perms = $h->getDefaultPermissions('all'); |
|---|
| 44 | if (!isset($site_perms['can_do_messaging'])) { |
|---|
| 45 | $perms['options']['can_do_messaging'] = array('yes', 'no'); |
|---|
| 46 | $perms['can_do_messaging']['admin'] = 'yes'; |
|---|
| 47 | $perms['can_do_messaging']['supermod'] = 'yes'; |
|---|
| 48 | $perms['can_do_messaging']['moderator'] = 'yes'; |
|---|
| 49 | $perms['can_do_messaging']['member'] = 'yes'; |
|---|
| 50 | $perms['can_do_messaging']['undermod'] = 'yes'; |
|---|
| 51 | $perms['can_do_messaging']['default'] = 'no'; |
|---|
| 52 | $h->updateDefaultPermissions($perms); |
|---|
| 53 | } |
|---|
| 54 | |
|---|
| 55 | // Add "pm notify" option to the default user settings |
|---|
| 56 | $base_settings = $h->getDefaultSettings('base'); // originals from plugins |
|---|
| 57 | $site_settings = $h->getDefaultSettings('site'); // site defaults updated by admin |
|---|
| 58 | if (!isset($base_settings['pm_notify'])) { |
|---|
| 59 | $base_settings['pm_notify'] = "checked"; |
|---|
| 60 | $site_settings['pm_notify'] = "checked"; |
|---|
| 61 | $h->updateDefaultSettings($base_settings, 'base'); |
|---|
| 62 | $h->updateDefaultSettings($site_settings, 'site'); |
|---|
| 63 | } |
|---|
| 64 | } |
|---|
| 65 | |
|---|
| 66 | |
|---|
| 67 | /** |
|---|
| 68 | * Determine page and get user details |
|---|
| 69 | */ |
|---|
| 70 | public function theme_index_top($h) |
|---|
| 71 | { |
|---|
| 72 | if ($h->currentUser->getPermission('can_do_messaging') == 'no') { return false; } |
|---|
| 73 | |
|---|
| 74 | $messaging = false; |
|---|
| 75 | |
|---|
| 76 | $user = $h->cage->get->testUsername('user'); |
|---|
| 77 | if (!$user) { $user = $h->currentUser->name; } |
|---|
| 78 | |
|---|
| 79 | switch ($h->pageName) |
|---|
| 80 | { |
|---|
| 81 | case 'inbox': |
|---|
| 82 | $messaging = true; |
|---|
| 83 | $h->pageTitle = $h->lang['messaging_inbox'] . "[delimiter]" . $user; |
|---|
| 84 | break; |
|---|
| 85 | case 'outbox': |
|---|
| 86 | $messaging = true; |
|---|
| 87 | $h->pageTitle = $h->lang['messaging_outbox'] . "[delimiter]" . $user; |
|---|
| 88 | break; |
|---|
| 89 | case 'compose': |
|---|
| 90 | $messaging = true; |
|---|
| 91 | $h->pageTitle = $h->lang['messaging_compose'] . "[delimiter]" . $user; |
|---|
| 92 | case 'show_message': |
|---|
| 93 | $messaging = true; |
|---|
| 94 | $h->pageTitle = $h->lang['messaging_view_message'] . "[delimiter]" . $user; |
|---|
| 95 | } |
|---|
| 96 | |
|---|
| 97 | // set page types & create UserAuth and MessagingFuncs objects |
|---|
| 98 | if ($messaging) { |
|---|
| 99 | $h->pageType = 'user'; // this setting hides the posts filter bar |
|---|
| 100 | $h->subPage = 'user'; |
|---|
| 101 | |
|---|
| 102 | include_once(PLUGINS . 'messaging/libs/MessagingFuncs.php'); |
|---|
| 103 | $msgFuncs = new MessagingFuncs(); |
|---|
| 104 | |
|---|
| 105 | // create a user object and fill it with user info (user being viewed) |
|---|
| 106 | $h->vars['user'] = new UserAuth(); |
|---|
| 107 | $h->vars['user']->getUserBasic($h, 0, $user); |
|---|
| 108 | |
|---|
| 109 | //defaults: |
|---|
| 110 | $h->vars['message_to'] = ''; |
|---|
| 111 | $h->vars['message_from'] = ''; |
|---|
| 112 | $h->vars['message_subject'] = ''; |
|---|
| 113 | $h->vars['message_body'] = ''; |
|---|
| 114 | $h->vars['message_reply'] = false; |
|---|
| 115 | $h->vars['message_id'] = 0; |
|---|
| 116 | } |
|---|
| 117 | |
|---|
| 118 | switch ($h->pageName) |
|---|
| 119 | { |
|---|
| 120 | case 'inbox': |
|---|
| 121 | |
|---|
| 122 | // see if we need to delete any messages: |
|---|
| 123 | if ($h->cage->post->keyExists('delete_selected') && $h->cage->post->keyExists('message')) { |
|---|
| 124 | foreach ($h->cage->post->keyExists('message') as $id => $checked) { |
|---|
| 125 | // delete checked message |
|---|
| 126 | $msgFuncs->deleteMessage($h, $id, 'inbox'); |
|---|
| 127 | } |
|---|
| 128 | } |
|---|
| 129 | $count = $msgFuncs->getBoxCount($h, 'inbox'); |
|---|
| 130 | $query = $msgFuncs->getBoxQuery($h, 'inbox'); |
|---|
| 131 | $h->vars['messages_list'] = $h->pagination($query, $count, 20); |
|---|
| 132 | break; |
|---|
| 133 | |
|---|
| 134 | case 'outbox': |
|---|
| 135 | |
|---|
| 136 | // see if we need to delete any messages: |
|---|
| 137 | if ($h->cage->post->keyExists('delete_selected') && $h->cage->post->keyExists('message')) { |
|---|
| 138 | foreach ($h->cage->post->keyExists('message') as $id => $checked) { |
|---|
| 139 | // delete checked message |
|---|
| 140 | $msgFuncs->deleteMessage($h, $id, 'outbox'); |
|---|
| 141 | } |
|---|
| 142 | } |
|---|
| 143 | |
|---|
| 144 | $count = $msgFuncs->getBoxCount($h, 'outbox'); |
|---|
| 145 | $query = $msgFuncs->getBoxQuery($h, 'outbox'); |
|---|
| 146 | $h->vars['messages_list'] = $h->pagination($query, $count, 20); |
|---|
| 147 | break; |
|---|
| 148 | |
|---|
| 149 | case 'compose': |
|---|
| 150 | |
|---|
| 151 | // when clicking "Send Message"... |
|---|
| 152 | $h->vars['message_to'] = $h->cage->get->testUsername('message_to'); |
|---|
| 153 | |
|---|
| 154 | // SENDING A NEW MESSAGE |
|---|
| 155 | if ($h->cage->get->testAlpha('action') == 'send') |
|---|
| 156 | { |
|---|
| 157 | // check CSRF key |
|---|
| 158 | if (!$h->csrf()) { |
|---|
| 159 | $h->messages[$h->lang['error_csrf']] = 'red'; |
|---|
| 160 | return false; |
|---|
| 161 | } |
|---|
| 162 | |
|---|
| 163 | // get submitted data |
|---|
| 164 | if (!$h->vars['message_to']) { |
|---|
| 165 | $h->vars['message_to'] = $h->cage->post->testUsername('message_to'); |
|---|
| 166 | } |
|---|
| 167 | $h->vars['message_subject'] = $h->cage->post->getHtmLawed('message_subject'); |
|---|
| 168 | $h->vars['message_body'] = $h->cage->post->getHtmLawed('message_body'); |
|---|
| 169 | |
|---|
| 170 | // Create and fill MessagingFuncs object |
|---|
| 171 | $msgFuncs->to = $h->vars['message_to']; |
|---|
| 172 | $msgFuncs->from = $h->currentUser->name; |
|---|
| 173 | $msgFuncs->subject = $h->vars['message_subject']; |
|---|
| 174 | $msgFuncs->body = $h->vars['message_body']; |
|---|
| 175 | |
|---|
| 176 | // Attempt to send the message |
|---|
| 177 | $result = $msgFuncs->sendMessage($h); |
|---|
| 178 | if ($result) { |
|---|
| 179 | $h->messages[$h->lang['messaging_sent']] = 'green'; |
|---|
| 180 | } else { |
|---|
| 181 | foreach ($msgFuncs->errors as $err) { |
|---|
| 182 | $error_message = "messaging_" . $err; |
|---|
| 183 | if (isset($h->lang[$error_message])) { |
|---|
| 184 | $h->messages[$h->lang[$error_message]] = 'red'; |
|---|
| 185 | } |
|---|
| 186 | } |
|---|
| 187 | } |
|---|
| 188 | } |
|---|
| 189 | |
|---|
| 190 | // REPLYING TO A MESSAGE |
|---|
| 191 | elseif ($h->cage->get->testInt('reply')) |
|---|
| 192 | { |
|---|
| 193 | $h->vars['message_id'] = $h->cage->get->testInt('reply'); |
|---|
| 194 | $original_message = $msgFuncs->getMessage($h, $h->vars['message_id']); |
|---|
| 195 | |
|---|
| 196 | if (!$original_message) { return false; } |
|---|
| 197 | $h->vars['message_to'] = $h->getUserNameFromId($original_message->message_from); |
|---|
| 198 | $h->vars['message_subject'] = urldecode($original_message->message_subject); |
|---|
| 199 | $h->vars['message_body'] = ""; |
|---|
| 200 | $h->vars['message_reply'] = true; |
|---|
| 201 | |
|---|
| 202 | // mark this message as read |
|---|
| 203 | $msgFuncs->markRead($h, $h->vars['message_id']); |
|---|
| 204 | } |
|---|
| 205 | break; |
|---|
| 206 | |
|---|
| 207 | case 'show_message': |
|---|
| 208 | |
|---|
| 209 | $h->vars['message_id'] = $h->cage->get->testInt('id'); |
|---|
| 210 | $original_message = $msgFuncs->getMessage($h, $h->vars['message_id']); |
|---|
| 211 | |
|---|
| 212 | if (!$original_message) { $h->vars['message_id'] = 0; return false; } |
|---|
| 213 | $h->vars['message_to_id'] = $original_message->message_to; |
|---|
| 214 | $h->vars['message_from_name'] = $h->getUserNameFromId($original_message->message_from); |
|---|
| 215 | $h->vars['message_from_id'] = $original_message->message_from; |
|---|
| 216 | $h->vars['message_date'] = $original_message->message_date; |
|---|
| 217 | $h->vars['message_subject'] = sanitize(urldecode($original_message->message_subject), 'all'); |
|---|
| 218 | $h->vars['message_body'] = sanitize(urldecode($original_message->message_content), 'all'); |
|---|
| 219 | |
|---|
| 220 | // mark this message as read |
|---|
| 221 | $msgFuncs->markRead($h, $h->vars['message_id']); |
|---|
| 222 | } |
|---|
| 223 | } |
|---|
| 224 | |
|---|
| 225 | |
|---|
| 226 | /** |
|---|
| 227 | * Profile menu link on other people's profiles for sending a message |
|---|
| 228 | */ |
|---|
| 229 | public function profile_navigation($h) |
|---|
| 230 | { |
|---|
| 231 | if ($h->currentUser->getPermission('can_do_messaging') == 'no') { return false; } |
|---|
| 232 | |
|---|
| 233 | if ($h->currentUser->name != $h->vars['user']->name) { |
|---|
| 234 | echo "<li><a href='" . $h->url(array('page'=>'compose', 'user'=>$h->currentUser->name, 'message_to'=>$h->vars['user']->name)) . "'>" . $h->lang['messaging_send_message'] . "</a></li>\n"; |
|---|
| 235 | } else { |
|---|
| 236 | echo "<li><a href='" . $h->url(array('page'=>'inbox', 'user'=>$h->vars['user']->name)) . "'>" . $h->lang['messaging_inbox'] . "</a></li>\n"; |
|---|
| 237 | echo "<li><a href='" . $h->url(array('page'=>'outbox', 'user'=>$h->vars['user']->name)) . "'>" . $h->lang['messaging_outbox'] . "</a></li>\n"; |
|---|
| 238 | echo "<li><a href='" . $h->url(array('page'=>'compose', 'user'=>$h->vars['user']->name)) . "'>" . $h->lang['messaging_compose'] . "</a></li>\n"; |
|---|
| 239 | } |
|---|
| 240 | } |
|---|
| 241 | |
|---|
| 242 | |
|---|
| 243 | /** |
|---|
| 244 | * Breadcrumbs for messaging pages |
|---|
| 245 | */ |
|---|
| 246 | public function breadcrumbs($h) |
|---|
| 247 | { |
|---|
| 248 | $user = $h->cage->get->testUsername('user'); |
|---|
| 249 | if (!$user) { $user = $h->currentUser->name; } |
|---|
| 250 | |
|---|
| 251 | switch ($h->pageName) |
|---|
| 252 | { |
|---|
| 253 | case 'inbox': |
|---|
| 254 | return "<a href='" . $h->url(array('user'=>$user)) . "'>" . $user . "</a> » " . $h->lang['messaging_inbox']; |
|---|
| 255 | break; |
|---|
| 256 | case 'outbox': |
|---|
| 257 | return "<a href='" . $h->url(array('user'=>$user)) . "'>" . $user . "</a> » " . $h->lang['messaging_outbox']; |
|---|
| 258 | break; |
|---|
| 259 | case 'compose': |
|---|
| 260 | return "<a href='" . $h->url(array('user'=>$user)) . "'>" . $user . "</a> » " . $h->lang['messaging_compose']; |
|---|
| 261 | break; |
|---|
| 262 | case 'show_message': |
|---|
| 263 | return "<a href='" . $h->url(array('user'=>$user)) . "'>" . $user . "</a> » " . $h->lang['messaging_view_message']; |
|---|
| 264 | break; |
|---|
| 265 | } |
|---|
| 266 | } |
|---|
| 267 | |
|---|
| 268 | |
|---|
| 269 | /** |
|---|
| 270 | * Display pages |
|---|
| 271 | */ |
|---|
| 272 | public function theme_index_main($h) |
|---|
| 273 | { |
|---|
| 274 | if (isset($h->vars['user']->id) && ($h->currentUser->id != $h->vars['user']->id)) { return false; } |
|---|
| 275 | |
|---|
| 276 | switch ($h->pageName) |
|---|
| 277 | { |
|---|
| 278 | case 'inbox': |
|---|
| 279 | $h->displayTemplate('messaging_inbox'); |
|---|
| 280 | return true; |
|---|
| 281 | break; |
|---|
| 282 | case 'outbox': |
|---|
| 283 | $h->displayTemplate('messaging_outbox'); |
|---|
| 284 | return true; |
|---|
| 285 | break; |
|---|
| 286 | case 'compose': |
|---|
| 287 | $h->displayTemplate('messaging_compose'); |
|---|
| 288 | return true; |
|---|
| 289 | break; |
|---|
| 290 | case 'show_message': |
|---|
| 291 | if (!$h->vars['message_id']) { return false; } |
|---|
| 292 | $h->displayTemplate('messaging_show_message'); |
|---|
| 293 | return true; |
|---|
| 294 | break; |
|---|
| 295 | } |
|---|
| 296 | } |
|---|
| 297 | |
|---|
| 298 | |
|---|
| 299 | /** |
|---|
| 300 | * Clear deleted messages on Maintenance page |
|---|
| 301 | */ |
|---|
| 302 | public function admin_maintenance_database($h) |
|---|
| 303 | { |
|---|
| 304 | echo "<li><a href='" . BASEURL . "admin_index.php?page=maintenance&action=clear_messages'>"; |
|---|
| 305 | echo $h->lang["messaging_maintenance_clear_messages"] . "</a> - "; |
|---|
| 306 | echo $h->lang["messaging_maintenance_clear_messages_desc"]; |
|---|
| 307 | echo "</li>"; |
|---|
| 308 | } |
|---|
| 309 | |
|---|
| 310 | |
|---|
| 311 | /** |
|---|
| 312 | * Delete messages that are no longer shown in either inbox or outbox |
|---|
| 313 | */ |
|---|
| 314 | public function admin_maintenance_top($h) |
|---|
| 315 | { |
|---|
| 316 | if (($h->pageName == 'maintenance') && ($h->cage->get->testAlnumLines('action') == 'clear_messages')) { |
|---|
| 317 | $sql = "DELETE FROM " . DB_PREFIX . "messaging WHERE message_inbox = %d AND message_outbox = %d"; |
|---|
| 318 | $h->db->query($h->db->prepare($sql, 0, 0)); |
|---|
| 319 | |
|---|
| 320 | // optimize the table |
|---|
| 321 | $h->db->query("OPTIMIZE TABLE " . DB_PREFIX . "messaging"); |
|---|
| 322 | |
|---|
| 323 | $h->message = $h->lang['messaging_maintenance_table_cleaned']; |
|---|
| 324 | $h->messageType = 'green'; |
|---|
| 325 | $h->showMessage(); |
|---|
| 326 | return true; |
|---|
| 327 | } |
|---|
| 328 | } |
|---|
| 329 | |
|---|
| 330 | |
|---|
| 331 | /** |
|---|
| 332 | * User Settings - before saving |
|---|
| 333 | */ |
|---|
| 334 | public function user_settings_pre_save($h) |
|---|
| 335 | { |
|---|
| 336 | if ($h->currentUser->getPermission('can_do_messaging') == 'no') { return false; } |
|---|
| 337 | |
|---|
| 338 | // Email notification of private messages: |
|---|
| 339 | if ($h->cage->post->getAlpha('pm_notify') == 'yes') { |
|---|
| 340 | $h->vars['settings']['pm_notify'] = "checked"; |
|---|
| 341 | } else { |
|---|
| 342 | $h->vars['settings']['pm_notify'] = ""; |
|---|
| 343 | } |
|---|
| 344 | } |
|---|
| 345 | |
|---|
| 346 | |
|---|
| 347 | /** |
|---|
| 348 | * User Settings - fill the form |
|---|
| 349 | */ |
|---|
| 350 | public function user_settings_fill_form($h) |
|---|
| 351 | { |
|---|
| 352 | if ($h->currentUser->getPermission('can_do_messaging') == 'no') { return false; } |
|---|
| 353 | |
|---|
| 354 | if (!isset($h->vars['settings']) || !$h->vars['settings']) { return false; } |
|---|
| 355 | |
|---|
| 356 | if ($h->vars['settings']['pm_notify']) { |
|---|
| 357 | $h->vars['pm_notify_yes'] = "checked"; |
|---|
| 358 | $h->vars['pm_notify_no'] = ""; |
|---|
| 359 | } else { |
|---|
| 360 | $h->vars['pm_notify_yes'] = ""; |
|---|
| 361 | $h->vars['pm_notify_no'] = "checked"; |
|---|
| 362 | } |
|---|
| 363 | } |
|---|
| 364 | |
|---|
| 365 | |
|---|
| 366 | /** |
|---|
| 367 | * User Settings - html for form |
|---|
| 368 | */ |
|---|
| 369 | public function user_settings_extra_settings($h) |
|---|
| 370 | { |
|---|
| 371 | if ($h->currentUser->getPermission('can_do_messaging') == 'no') { return false; } |
|---|
| 372 | |
|---|
| 373 | if (!isset($h->vars['settings']) || !$h->vars['settings']) { return false; } |
|---|
| 374 | |
|---|
| 375 | echo "<tr>\n"; |
|---|
| 376 | // Allow email notification of private messages? |
|---|
| 377 | echo "<td>" . $h->lang['users_settings_pm_notification_by_email'] . "</td>\n"; |
|---|
| 378 | echo "<td><input type='radio' name='pm_notify' value='yes' " . $h->vars['pm_notify_yes'] . "> " . $h->lang['users_settings_yes'] . " \n"; |
|---|
| 379 | echo "<input type='radio' name='pm_notify' value='no' " . $h->vars['pm_notify_no'] . "> " . $h->lang['users_settings_no'] . "</td>\n"; |
|---|
| 380 | echo "</tr>\n"; |
|---|
| 381 | } |
|---|
| 382 | |
|---|
| 383 | |
|---|
| 384 | /** |
|---|
| 385 | * Check for waiting messages |
|---|
| 386 | */ |
|---|
| 387 | public function userauth_checkcookie_success($h) |
|---|
| 388 | { |
|---|
| 389 | if ($h->currentUser->getPermission('can_do_messaging') == 'no') { return false; } |
|---|
| 390 | |
|---|
| 391 | $sql = "SELECT count(*) FROM " . DB_PREFIX . "messaging WHERE message_archived = %s AND message_to = %d AND message_read = %d AND message_inbox = %d"; |
|---|
| 392 | $query = $h->db->prepare($sql, 'N', $h->currentUser->id, 0, 1); |
|---|
| 393 | |
|---|
| 394 | $h->smartCache('on', 'messaging', 10, $query); // start using cache |
|---|
| 395 | $h->vars['messages_waiting'] = $h->db->get_var($query); |
|---|
| 396 | $h->smartCache('off'); // stop using cache |
|---|
| 397 | } |
|---|
| 398 | |
|---|
| 399 | |
|---|
| 400 | /** |
|---|
| 401 | * Show "You have unread messages in your inbox!" as an announcement |
|---|
| 402 | */ |
|---|
| 403 | public function hotaru_announcements($h) |
|---|
| 404 | { |
|---|
| 405 | if ($h->currentUser->getPermission('can_do_messaging') == 'no') { return false; } |
|---|
| 406 | |
|---|
| 407 | if (isset($h->vars['messages_waiting']) && $h->vars['messages_waiting'] > 0) { |
|---|
| 408 | $inbox_link = "<a href='" . $h->url(array('page'=>'inbox', 'user'=>$h->currentUser->name)) . "'>"; |
|---|
| 409 | $inbox_link .= $h->lang['messaging_unread_messages_announcement'] . "</a>"; |
|---|
| 410 | array_push($h->vars['hotaru_announcements'], $inbox_link); |
|---|
| 411 | } |
|---|
| 412 | } |
|---|
| 413 | |
|---|
| 414 | |
|---|
| 415 | /** |
|---|
| 416 | * Check for updates to the messages table |
|---|
| 417 | */ |
|---|
| 418 | public function smart_cache_sql($h) |
|---|
| 419 | { |
|---|
| 420 | $h->vars['smart_cache_sql'] = "SELECT message_updatedts FROM " . DB_PREFIX . "messaging ORDER BY message_updatedts DESC"; |
|---|
| 421 | } |
|---|
| 422 | } |
|---|
| 423 | ?> |
|---|