<?php
/******************************************************************************
* Karma.php                                                                   *
*******************************************************************************
* SMF: Simple Machines Forum                                                  *
* Open-Source Project Inspired by Zef Hemel (zef@zefhemel.com)                *
* =========================================================================== *
* Software Version:           SMF 1.0                                         *
* Software by:                Simple Machines (http://www.simplemachines.org) *
* Copyright 2001-2004 by:     Lewis Media (http://www.lewismedia.com)         *
* Support, News, Updates at:  http://www.simplemachines.org                   *
*******************************************************************************
* This program is free software; you may redistribute it and/or modify it     *
* under the terms of the provided license as published by Lewis Media.        *
*                                                                             *
* This program is distributed in the hope that it is and will be useful,      *
* but WITHOUT ANY WARRANTIES; without even any implied warranty of            *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.                        *
*                                                                             *
* See the "license.txt" file for details of the Simple Machines license.      *
* The latest version can always be found at http://www.simplemachines.org.    *
******************************************************************************/
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.
*/

function ModKarm()
{
        global $modSettings, $db_prefix, $txt, $ID_MEMBER, $user_info, $topic;

        // If the mod is disabled, show an error.
        if (empty($modSettings['karmaMode']))
                fatal_lang_error('smf63');

        // 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['posts'] < $modSettings['karmaMinPosts'])
                fatal_error($txt['smf60'] . $modSettings['karmaMinPosts'] . '.');

        // And you can't modify your own, punk! (use the profile if you need to.)
        if (empty($_REQUEST['uid']) || (int) $_REQUEST['uid'] == $ID_MEMBER)
                fatal_lang_error('smf61', 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;

        // Users can change karma to only topic starter if you check this function
        if (!empty($modSettings['karmatopicstarter']))
        {
        $request = db_query("
                        SELECT ID_MEMBER_STARTED
                        FROM {$db_prefix}topics
                        WHERE ID_TOPIC = $_REQUEST[topic]
                        LIMIT 1", __FILE__, __LINE__);
        $row = mysql_fetch_row($request);
                mysql_free_result($request);
        if ($_REQUEST['uid'] != $row[0] && $user_info['is_admin']!=1)
              fatal_lang_error('karma_not_topic_starter', false);
        }

        // Start off with no change in karma.
        $action = 0;

        (!isset($modSettings['karmawhatwrite'])) ? $Description='' : $Description=$modSettings['karmawhatwrite'];


          // 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 = db_query("
                        SELECT action
                        FROM {$db_prefix}log_karma
                        WHERE ID_TARGET = $_REQUEST[uid]
                                AND ID_EXECUTOR = $ID_MEMBER
                        LIMIT 1", __FILE__, __LINE__);
                if (mysql_num_rows($request) > 0)
                        list ($action) = mysql_fetch_row($request);
                mysql_free_result($request);
        }

        // They haven't, not before now, anyhow.
        if (empty($action) || empty($modSettings['karmaWaitTime']))
        {
                //Prepare link
                    if (isset ($_REQUEST['topic'])) {
                         $link = ($_REQUEST['topic']).'.msg'.($_REQUEST['m']).'#'.'msg'.($_REQUEST['m']);
                         $link = AddSlashes($link);
                         }
                elseif (isset($_REQUEST['f'])) {
                         $link = 'PM';
                         }

                // Put it in the log.
                db_query("
                        INSERT INTO {$db_prefix}log_karma
                                (action, ID_TARGET, Description, link, ID_EXECUTOR, logTime)
                        VALUES ($dir, $_REQUEST[uid], '$Description', '$link', $ID_MEMBER, ". time()." )
                        ", __FILE__, __LINE__);

                // Change by one.
                updateMemberData($_REQUEST['uid'], array($dir == 1 ? 'karmaGood' : 'karmaBad' => '+'));
        }
        else
        {       $request = db_query("
                                        SELECT logTime
                                        FROM {$db_prefix}log_karma
                                        WHERE ID_TARGET=$_REQUEST[uid]
                                        AND ID_EXECUTOR=$ID_MEMBER
                                        ORDER BY logTime DESC
                                        LIMIT 1
                                        ", __FILE__, __LINE__);
                $row = mysql_fetch_assoc($request);
                mysql_free_result($request);

                $restricttime = time() - $row['logTime'];
                $timelog = (int) ($modSettings['karmaWaitTime'] * 3600);

                // If you are gonna try to repeat.... don't allow it.
                if ($restricttime < $timelog)
                        fatal_error($txt['smf62'] . ' ' . $modSettings['karmaWaitTime'] . ' ' . $txt[578] . '.', false);

                //Prepare link
                    if (isset ($_REQUEST['topic'])) {
                         $link = ($_REQUEST['topic']).'.msg'.($_REQUEST['m']).'#'.'msg'.($_REQUEST['m']);
                         $link = AddSlashes($link);
                         }
                elseif (isset($_REQUEST['f'])) {
                         $link = 'PM';
                         }

                // You decided to go back on your previous choice?
                db_query("
                        INSERT INTO {$db_prefix}log_karma
                                (action, ID_TARGET, Description, link, ID_EXECUTOR, logTime)
                        VALUES ($dir, $_REQUEST[uid], '$Description', '$link', $ID_MEMBER, ". time()." )
                        ", __FILE__, __LINE__);

                // It was recently changed the OTHER way... so... reverse it!
                if ($dir == 1)
                        updateMemberData($_REQUEST['uid'], array('karmaGood' => '+'));
                else
                        updateMemberData($_REQUEST['uid'], array('karmaBad' => '+'));
        }

        // Figure out where to go back to.... the topic?
        if (isset($topic))
                redirectexit('topic=' . $topic . '.' . $_REQUEST['start'] . '#msg' . $_REQUEST['m']);
        // Hrm... maybe a personal message?
        elseif (isset($_REQUEST['f']))
                redirectexit('action=pm;f=' . $_REQUEST['f'] . ';start=' . $_REQUEST['start'] . (isset($_REQUEST['l']) ? ';l=' . $_REQUEST['l'] : '') . (isset($_REQUEST['pm']) ? '#' . $_REQUEST['pm'] : ''));

          else
        {
                echo '
<html>
        <head>
                <title>...</title>
                <script language="JavaScript" type="text/javascript"><![CDATA[
                        history.go(-1);
                // ]',']></script>
        </head>
        <body>&laquo;</body>
</html>';

                obExit(false);
        }
}


// Modify a user's karma.
function ModifyKarma()
{
	global $modSettings, $db_prefix, $txt, $ID_MEMBER, $user_info, $topic, $scripturl;

	// If the mod is disabled, show an error.
	if (empty($modSettings['karmaMode']))
		fatal_lang_error('smf63');

	        if (!empty($modSettings['karmasurv']))
                ModKarm();
// If you're a guest or can't do this, blow you off...
	is_not_guest();
	// If you have ANY warning, also blow you off
	if ($user_info['warning'] > 1)
		fatal_error($txt['visual_no_karma']);
	isAllowedTo('karma_edit');

	// If you don't have enough posts, tough luck.
	if ($user_info['posts'] < $modSettings['karmaMinPosts'])
		fatal_error($txt['smf60'] . $modSettings['karmaMinPosts'] . '.');

	// And you can't modify your own, punk! (use the profile if you need to.)
	if (empty($_REQUEST['uid']) || (int) $_REQUEST['uid'] == $ID_MEMBER)
		fatal_lang_error('smf61', 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;
        // Users can change karma to only topic starter if you check this function
        if (!empty($modSettings['karmatopicstarter']))
        {
        $request = db_query("
                        SELECT ID_MEMBER_STARTED
                        FROM {$db_prefix}topics
                        WHERE ID_TOPIC = $_REQUEST[topic]
                        LIMIT 1", __FILE__, __LINE__);
        $row = mysql_fetch_row($request);
                mysql_free_result($request);
        if ($_REQUEST['uid'] != $row[0] && $user_info['is_admin']!=1)
              fatal_lang_error('karma_not_topic_starter', false);
        }

	
//Loading Template of Description
if (!empty($modSettings['karmadescmod'])){
        loadTemplate('DescriptionKarma');}

        //Prepare some variables
        $context['page_title'] = $txt['viewkarma_title'];
        $context['linktree'][] = array(
            'url' => $scripturl . '?action=modifykarma',
            'name' => $txt['viewkarma_title'] );

	// 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 = db_query("
			SELECT action
			FROM {$db_prefix}log_karma
			WHERE ID_TARGET = $_REQUEST[uid]
				AND ID_EXECUTOR = $ID_MEMBER
			LIMIT 1", __FILE__, __LINE__);
		if (mysql_num_rows($request) > 0)
			list ($action) = mysql_fetch_row($request);
		mysql_free_result($request);
	}

	// They haven't, not before now, anyhow.

/*
	if (empty($action))
	{
		// Put it in the log.
		db_query("
			REPLACE INTO {$db_prefix}log_karma
				(action, ID_TARGET, ID_EXECUTOR, logTime)
			VALUES ($dir, $_REQUEST[uid], $ID_MEMBER, " . time() . ')', __FILE__, __LINE__);

		// Change by one.
		updateMemberData($_REQUEST['uid'], array($dir == 1 ? 'karmaGood' : 'karmaBad' => '+'));
	}
	else
	{
		// If you are gonna try to repeat.... don't allow it.
		if ($action == $dir)
			fatal_error($txt['smf62'] . ' ' . $modSettings['karmaWaitTime'] . ' ' . $txt[578] . '.', false);

		// You decided to go back on your previous choice?
		db_query("
			UPDATE {$db_prefix}log_karma
			SET action = $dir, logTime = " . time() . "
			WHERE ID_TARGET = $_REQUEST[uid]
				AND ID_EXECUTOR = $ID_MEMBER
			LIMIT 1", __FILE__, __LINE__);

		
*/
/* They haven't, not before now, anyhow.
           If the key isn't in the array it will return.
           Or if it does exist and it's length is 0 then it will return.
           If Karma Description Mod disable then easy smite or applaud */
if (!empty($modSettings['karmadescmod'])){
if (!array_key_exists('Description',$_POST) || strlen($_POST["Description"]) == 0){return;}}


{ if ( empty($action) || empty($modSettings['karmaWaitTime']))
        { $_POST['Description'] = AddSlashes($_POST['Description']);
          if (!empty($modSettings['karmacensor']))
          censorText($_POST['Description']);
      
		//Prepare link
		    if (isset ($_REQUEST['topic'])) {
                         $link = ($_REQUEST['topic']).'.msg'.($_REQUEST['m']).'#'.'msg'.($_REQUEST['m']);
                         $link = AddSlashes($link);
                         }
                elseif (isset($_REQUEST['f'])) {
                         $link = 'PM';
                         }

		// Put it in the log.
                db_query("
                        INSERT INTO {$db_prefix}log_karma
                                (action, ID_TARGET, Description, link, ID_EXECUTOR, logTime)
                        VALUES ($dir, $_REQUEST[uid], '$_POST[Description]', '$link', $ID_MEMBER, ". time()." )
                        ", __FILE__, __LINE__);
// Change by one.
		updateMemberData($_REQUEST['uid'], array($dir == 1 ? 'karmaGood' : 'karmaBad' => '+'));
	}
	else
	{
		$request = db_query("
					SELECT logTime
					FROM {$db_prefix}log_karma
					WHERE ID_TARGET=$_REQUEST[uid]
					AND ID_EXECUTOR=$ID_MEMBER
					ORDER BY logTime DESC
					LIMIT 1
					", __FILE__, __LINE__);
		$row = mysql_fetch_assoc($request);
		mysql_free_result($request);
				
		$restricttime = time() - $row['logTime'];
		$timelog = (int) ($modSettings['karmaWaitTime'] * 3600);

		// If you are gonna try to repeat.... don't allow it.
		if ($restricttime < $timelog)
			fatal_error($txt['smf62'] . ' ' . $modSettings['karmaWaitTime'] . ' ' . $txt[578] . '.', false);

		//Prepare link
		    if (isset ($_REQUEST['topic'])) {
                         $link = ($_REQUEST['topic']).'.msg'.($_REQUEST['m']).'#'.'msg'.($_REQUEST['m']);
                         $link = AddSlashes($link);
                         }
                elseif (isset($_REQUEST['f'])) {
                         $link = 'PM';
                         }

		// You decided to go back on your previous choice?
		db_query("
			INSERT INTO {$db_prefix}log_karma
                                (action, ID_TARGET, Description, link, ID_EXECUTOR, logTime)
                        VALUES ($dir, $_REQUEST[uid], '$_POST[Description]', '$link', $ID_MEMBER, ". time()." )
                        ", __FILE__, __LINE__);

// It was recently changed the OTHER way... so... reverse it!
		if ($dir == 1)
			updateMemberData($_REQUEST['uid'], array('karmaGood' => '+'));
		else
			updateMemberData($_REQUEST['uid'], array('karmaBad' => '+'));
}
	}

	// Figure out where to go back to.... the topic?
	if (isset($topic))
		redirectexit('topic=' . $topic . '.' . $_REQUEST['start'] . '#msg' . $_REQUEST['m']);
	// Hrm... maybe a personal message?
	elseif (isset($_REQUEST['f']))
		redirectexit('action=pm;f=' . $_REQUEST['f'] . ';start=' . $_REQUEST['start']);
	// 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>
	<head>
		<title>...</title>
		<script language="JavaScript" type="text/javascript"><!--
			history.go(-1);
		// --></script>
	</head>
	<body>&laquo;</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/', false);
	elseif (strpos($_GET['action'], 'mozilla') !== false)
		redirectexit('about:mozilla', false);

	echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
	<head>
		<title>The Book of Unknown, 2:18</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;">
			Woe, it was that his name wasn\'t <em>known</em>, that he came in mystery, and was recognized by none.&nbsp;And it became to be in those days <em>something</em>.&nbsp; Something not yet <em id="unknown" name="[Unknown]">unknown</em> to mankind.&nbsp; And thus what was to be known the <em>secret project</em> began into its existence.&nbsp; Henceforth the opposition was only <em>weary</em> and <em>fearful</em>, for now their match was at arms against them.
		</div>
		<div style="margin-top: 2ex; font-size: 2em; text-align: right;">
			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>
		</div>
	</body>
</html>';

	obExit(false);
}

}

?>