Mercurial > hg > vamp-website
diff forum/Sources/Karma.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/Karma.php Sun Jul 07 11:25:48 2013 +0200 @@ -0,0 +1,204 @@ +<?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 one humble function, which applauds or smites a user. + + void ModifyKarma() + - gives or takes karma from a user. + - redirects back to the referrer afterward, whether by javascript or + the passed parameters. + - requires the karma_edit permission, and that the user isn't a guest. + - depends on the karmaMode, karmaWaitTime, and karmaTimeRestrictAdmins + settings. + - is accessed via ?action=modifykarma. +*/ + +// Modify a user's karma. +function ModifyKarma() +{ + global $modSettings, $txt, $user_info, $topic, $smcFunc, $context; + + // If the mod is disabled, show an error. + if (empty($modSettings['karmaMode'])) + fatal_lang_error('feature_disabled', true); + + // If you're a guest or can't do this, blow you off... + is_not_guest(); + isAllowedTo('karma_edit'); + + checkSession('get'); + + // If you don't have enough posts, tough luck. + // !!! Should this be dropped in favor of post group permissions? Should this apply to the member you are smiting/applauding? + if (!$user_info['is_admin'] && $user_info['posts'] < $modSettings['karmaMinPosts']) + fatal_lang_error('not_enough_posts_karma', true, array($modSettings['karmaMinPosts'])); + + // And you can't modify your own, punk! (use the profile if you need to.) + if (empty($_REQUEST['uid']) || (int) $_REQUEST['uid'] == $user_info['id']) + fatal_lang_error('cant_change_own_karma', false); + + // The user ID _must_ be a number, no matter what. + $_REQUEST['uid'] = (int) $_REQUEST['uid']; + + // Applauding or smiting? + $dir = $_REQUEST['sa'] != 'applaud' ? -1 : 1; + + // Delete any older items from the log. (karmaWaitTime is by hour.) + $smcFunc['db_query']('', ' + DELETE FROM {db_prefix}log_karma + WHERE {int:current_time} - log_time > {int:wait_time}', + array( + 'wait_time' => (int) ($modSettings['karmaWaitTime'] * 3600), + 'current_time' => time(), + ) + ); + + // Start off with no change in karma. + $action = 0; + + // Not an administrator... or one who is restricted as well. + if (!empty($modSettings['karmaTimeRestrictAdmins']) || !allowedTo('moderate_forum')) + { + // Find out if this user has done this recently... + $request = $smcFunc['db_query']('', ' + SELECT action + FROM {db_prefix}log_karma + WHERE id_target = {int:id_target} + AND id_executor = {int:current_member} + LIMIT 1', + array( + 'current_member' => $user_info['id'], + 'id_target' => $_REQUEST['uid'], + ) + ); + if ($smcFunc['db_num_rows']($request) > 0) + list ($action) = $smcFunc['db_fetch_row']($request); + $smcFunc['db_free_result']($request); + } + + // They haven't, not before now, anyhow. + if (empty($action) || empty($modSettings['karmaWaitTime'])) + { + // Put it in the log. + $smcFunc['db_insert']('replace', + '{db_prefix}log_karma', + array('action' => 'int', 'id_target' => 'int', 'id_executor' => 'int', 'log_time' => 'int'), + array($dir, $_REQUEST['uid'], $user_info['id'], time()), + array('id_target', 'id_executor') + ); + + // Change by one. + updateMemberData($_REQUEST['uid'], array($dir == 1 ? 'karma_good' : 'karma_bad' => '+')); + } + else + { + // If you are gonna try to repeat.... don't allow it. + if ($action == $dir) + fatal_lang_error('karma_wait_time', false, array($modSettings['karmaWaitTime'], $txt['hours'])); + + // You decided to go back on your previous choice? + $smcFunc['db_query']('', ' + UPDATE {db_prefix}log_karma + SET action = {int:action}, log_time = {int:current_time} + WHERE id_target = {int:id_target} + AND id_executor = {int:current_member}', + array( + 'current_member' => $user_info['id'], + 'action' => $dir, + 'current_time' => time(), + 'id_target' => $_REQUEST['uid'], + ) + ); + + // It was recently changed the OTHER way... so... reverse it! + if ($dir == 1) + updateMemberData($_REQUEST['uid'], array('karma_good' => '+', 'karma_bad' => '-')); + else + updateMemberData($_REQUEST['uid'], array('karma_bad' => '+', 'karma_good' => '-')); + } + + // Figure out where to go back to.... the topic? + if (!empty($topic)) + redirectexit('topic=' . $topic . '.' . $_REQUEST['start'] . '#msg' . (int) $_REQUEST['m']); + // Hrm... maybe a personal message? + elseif (isset($_REQUEST['f'])) + redirectexit('action=pm;f=' . $_REQUEST['f'] . ';start=' . $_REQUEST['start'] . (isset($_REQUEST['l']) ? ';l=' . (int) $_REQUEST['l'] : '') . (isset($_REQUEST['pm']) ? '#' . (int) $_REQUEST['pm'] : '')); + // JavaScript as a last resort. + else + { + echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"', $context['right_to_left'] ? ' dir="rtl"' : '', '> + <head> + <title>...</title> + <script type="text/javascript"><!-- // --><![CDATA[ + history.go(-1); + // ]]></script> + </head> + <body>«</body> +</html>'; + + obExit(false); + } +} + +// What's this? I dunno, what are you talking about? Never seen this before, nope. No siree. +function BookOfUnknown() +{ + global $context; + + if (strpos($_GET['action'], 'mozilla') !== false && !$context['browser']['is_gecko']) + redirectexit('http://www.getfirefox.com/'); + elseif (strpos($_GET['action'], 'mozilla') !== false) + redirectexit('about:mozilla'); + + echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"', $context['right_to_left'] ? ' dir="rtl"' : '', '> + <head> + <title>The Book of Unknown, ', @$_GET['verse'] == '2:18' ? '2:18' : '4:16', '</title> + <style type="text/css"> + em + { + font-size: 1.3em; + line-height: 0; + } + </style> + </head> + <body style="background-color: #444455; color: white; font-style: italic; font-family: serif;"> + <div style="margin-top: 12%; font-size: 1.1em; line-height: 1.4; text-align: center;">'; + if (@$_GET['verse'] == '2:18') + echo ' + Woe, it was that his name wasn\'t <em>known</em>, that he came in mystery, and was recognized by none. And it became to be in those days <em>something</em>. Something not yet <em id="unknown" name="[Unknown]">unknown</em> to mankind. And thus what was to be known the <em>secret project</em> began into its existence. Henceforth the opposition was only <em>weary</em> and <em>fearful</em>, for now their match was at arms against them.'; + else + echo ' + And it came to pass that the <em>unbelievers</em> dwindled in number and saw rise of many <em>proselytizers</em>, and the opposition found fear in the face of the <em>x</em> and the <em>j</em> while those who stood with the <em>something</em> grew stronger and came together. Still, this was only the <em>beginning</em>, and what lay in the future was <em id="unknown" name="[Unknown]">unknown</em> to all, even those on the right side.'; + echo ' + </div> + <div style="margin-top: 2ex; font-size: 2em; text-align: right;">'; + if (@$_GET['verse'] == '2:18') + echo ' + from <span style="font-family: Georgia, serif;"><strong><a href="http://www.unknownbrackets.com/about:unknown" style="color: white; text-decoration: none; cursor: text;">The Book of Unknown</a></strong>, 2:18</span>'; + else + echo ' + from <span style="font-family: Georgia, serif;"><strong><a href="http://www.unknownbrackets.com/about:unknown" style="color: white; text-decoration: none; cursor: text;">The Book of Unknown</a></strong>, 4:16</span>'; + echo ' + </div> + </body> +</html>'; + + obExit(false); +} + +?> \ No newline at end of file