Mercurial > hg > vamp-website
diff forum/Sources/Notify.php @ 76:e3e11437ecea website
Add forum code
author | Chris Cannam |
---|---|
date | Sun, 07 Jul 2013 11:25:48 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/forum/Sources/Notify.php Sun Jul 07 11:25:48 2013 +0200 @@ -0,0 +1,187 @@ +<?php + +/** + * Simple Machines Forum (SMF) + * + * @package SMF + * @author Simple Machines http://www.simplemachines.org + * @copyright 2011 Simple Machines + * @license http://www.simplemachines.org/about/smf/license.php BSD + * + * @version 2.0 + */ + +if (!defined('SMF')) + die('Hacking attempt...'); + +/* This file contains just the functions that turn on and off notifications to + topics or boards. The following two functions are included: + + void Notify() + - is called to turn off/on notification for a particular topic. + - must be called with a topic specified in the URL. + - uses the Notify template (main sub template.) when called with no sa. + - the sub action can be 'on', 'off', or nothing for what to do. + - requires the mark_any_notify permission. + - upon successful completion of action will direct user back to topic. + - is accessed via ?action=notify. + + void BoardNotify() + - is called to turn off/on notification for a particular board. + - must be called with a board specified in the URL. + - uses the Notify template. (notify_board sub template.) + - only uses the template if no sub action is used. (on/off) + - requires the mark_notify permission. + - redirects the user back to the board after it is done. + - is accessed via ?action=notifyboard. +*/ + +// Turn on/off notifications... +function Notify() +{ + global $scripturl, $txt, $topic, $user_info, $context, $smcFunc; + + // Make sure they aren't a guest or something - guests can't really receive notifications! + is_not_guest(); + isAllowedTo('mark_any_notify'); + + // Make sure the topic has been specified. + if (empty($topic)) + fatal_lang_error('not_a_topic', false); + + // What do we do? Better ask if they didn't say.. + if (empty($_GET['sa'])) + { + // Load the template, but only if it is needed. + loadTemplate('Notify'); + + // Find out if they have notification set for this topic already. + $request = $smcFunc['db_query']('', ' + SELECT id_member + FROM {db_prefix}log_notify + WHERE id_member = {int:current_member} + AND id_topic = {int:current_topic} + LIMIT 1', + array( + 'current_member' => $user_info['id'], + 'current_topic' => $topic, + ) + ); + $context['notification_set'] = $smcFunc['db_num_rows']($request) != 0; + $smcFunc['db_free_result']($request); + + // Set the template variables... + $context['topic_href'] = $scripturl . '?topic=' . $topic . '.' . $_REQUEST['start']; + $context['start'] = $_REQUEST['start']; + $context['page_title'] = $txt['notification']; + + return; + } + elseif ($_GET['sa'] == 'on') + { + checkSession('get'); + + // Attempt to turn notifications on. + $smcFunc['db_insert']('ignore', + '{db_prefix}log_notify', + array('id_member' => 'int', 'id_topic' => 'int'), + array($user_info['id'], $topic), + array('id_member', 'id_topic') + ); + } + else + { + checkSession('get'); + + // Just turn notifications off. + $smcFunc['db_query']('', ' + DELETE FROM {db_prefix}log_notify + WHERE id_member = {int:current_member} + AND id_topic = {int:current_topic}', + array( + 'current_member' => $user_info['id'], + 'current_topic' => $topic, + ) + ); + } + + // Send them back to the topic. + redirectexit('topic=' . $topic . '.' . $_REQUEST['start']); +} + +function BoardNotify() +{ + global $scripturl, $txt, $board, $user_info, $context, $smcFunc; + + // Permissions are an important part of anything ;). + is_not_guest(); + isAllowedTo('mark_notify'); + + // You have to specify a board to turn notifications on! + if (empty($board)) + fatal_lang_error('no_board', false); + + // No subaction: find out what to do. + if (empty($_GET['sa'])) + { + // We're gonna need the notify template... + loadTemplate('Notify'); + + // Find out if they have notification set for this topic already. + $request = $smcFunc['db_query']('', ' + SELECT id_member + FROM {db_prefix}log_notify + WHERE id_member = {int:current_member} + AND id_board = {int:current_board} + LIMIT 1', + array( + 'current_board' => $board, + 'current_member' => $user_info['id'], + ) + ); + $context['notification_set'] = $smcFunc['db_num_rows']($request) != 0; + $smcFunc['db_free_result']($request); + + // Set the template variables... + $context['board_href'] = $scripturl . '?board=' . $board . '.' . $_REQUEST['start']; + $context['start'] = $_REQUEST['start']; + $context['page_title'] = $txt['notification']; + $context['sub_template'] = 'notify_board'; + + return; + } + // Turn the board level notification on.... + elseif ($_GET['sa'] == 'on') + { + checkSession('get'); + + // Turn notification on. (note this just blows smoke if it's already on.) + $smcFunc['db_insert']('ignore', + '{db_prefix}log_notify', + array('id_member' => 'int', 'id_board' => 'int'), + array($user_info['id'], $board), + array('id_member', 'id_board') + ); + } + // ...or off? + else + { + checkSession('get'); + + // Turn notification off for this board. + $smcFunc['db_query']('', ' + DELETE FROM {db_prefix}log_notify + WHERE id_member = {int:current_member} + AND id_board = {int:current_board}', + array( + 'current_board' => $board, + 'current_member' => $user_info['id'], + ) + ); + } + + // Back to the board! + redirectexit('board=' . $board . '.' . $_REQUEST['start']); +} + +?> \ No newline at end of file