initial import. Probably needs some more cleanup
This commit is contained in:
194
Sources/LockTopic.php
Normal file
194
Sources/LockTopic.php
Normal file
@@ -0,0 +1,194 @@
|
||||
<?php
|
||||
/******************************************************************************
|
||||
* LockTopic.php *
|
||||
*******************************************************************************
|
||||
* SMF: Simple Machines Forum *
|
||||
* Open-Source Project Inspired by Zef Hemel (zef@zefhemel.com) *
|
||||
* =========================================================================== *
|
||||
* Software Version: SMF 1.0.6 *
|
||||
* Software by: Simple Machines (http://www.simplemachines.org) *
|
||||
* Copyright 2001-2005 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 only takes care of two things - locking and stickying.
|
||||
|
||||
void LockTopic()
|
||||
- locks a topic, toggles between locked/unlocked/admin locked.
|
||||
- only admins can unlock topics locked by other admins.
|
||||
- requires the lock_own or lock_any permission.
|
||||
- logs the action to the moderator log.
|
||||
- returns to the topic after it is done.
|
||||
- accessed via ?action=lock.
|
||||
|
||||
void Sticky()
|
||||
- stickies a topic - toggles between sticky and normal.
|
||||
- requires the make_sticky permission.
|
||||
- adds an entry to the moderator log.
|
||||
- when done, sends the user back to the topic.
|
||||
- accessed via ?action=sticky.
|
||||
*/
|
||||
|
||||
// Locks a topic... either by way of a moderator or the topic starter.
|
||||
function LockTopic()
|
||||
{
|
||||
global $db_prefix, $topic, $ID_MEMBER, $sourcedir;
|
||||
|
||||
// Just quit if there's no topic to lock.
|
||||
if (empty($topic))
|
||||
fatal_lang_error(472, false);
|
||||
|
||||
checkSession('get');
|
||||
|
||||
// Get Subs-Post.php for sendNotifications.
|
||||
require_once($sourcedir . '/Subs-Post.php');
|
||||
|
||||
// Find out who started the topic - in case User Topic Locking is enabled.
|
||||
$request = db_query("
|
||||
SELECT ID_MEMBER_STARTED, locked
|
||||
FROM {$db_prefix}topics
|
||||
WHERE ID_TOPIC = $topic
|
||||
LIMIT 1", __FILE__, __LINE__);
|
||||
list ($starter, $locked) = mysql_fetch_row($request);
|
||||
mysql_free_result($request);
|
||||
|
||||
// Can you lock topics here, mister?
|
||||
$user_lock = !allowedTo('lock_any');
|
||||
if ($user_lock && $starter == $ID_MEMBER)
|
||||
isAllowedTo('lock_own');
|
||||
else
|
||||
isAllowedTo('lock_any');
|
||||
|
||||
// Locking with high privileges.
|
||||
if ($locked == '0' && !$user_lock)
|
||||
$locked = '1';
|
||||
// Locking with low privileges.
|
||||
elseif ($locked == '0')
|
||||
$locked = '2';
|
||||
// Unlocking - make sure you don't unlock what you can't.
|
||||
elseif ($locked == '2' || ($locked == '1' && !$user_lock))
|
||||
$locked = '0';
|
||||
// You cannot unlock this!
|
||||
else
|
||||
fatal_lang_error('smf31');
|
||||
|
||||
// Actually lock the topic in the database with the new value.
|
||||
db_query("
|
||||
UPDATE {$db_prefix}topics
|
||||
SET locked = $locked
|
||||
WHERE ID_TOPIC = $topic
|
||||
LIMIT 1", __FILE__, __LINE__);
|
||||
|
||||
// If they are allowed a "moderator" permission, log it in the moderator log.
|
||||
if (!$user_lock)
|
||||
logAction('lock', array('topic' => $topic));
|
||||
// Notify people that this topic has been locked?
|
||||
sendNotifications($topic, empty($locked) ? 'unlock' : 'lock');
|
||||
|
||||
// Back to the topic!
|
||||
redirectexit('topic=' . $topic . '.' . $_REQUEST['start']);
|
||||
}
|
||||
|
||||
// Sticky a topic. Can't be done by topic starters - that would be annoying!
|
||||
function Sticky()
|
||||
{
|
||||
global $db_prefix, $modSettings, $topic, $sourcedir;
|
||||
|
||||
// Make sure the user can sticky it, and they are stickying *something*.
|
||||
isAllowedTo('make_sticky');
|
||||
|
||||
checkSession('get');
|
||||
|
||||
// We need Subs-Post.php for the sendNotifications() function.
|
||||
require_once($sourcedir . '/Subs-Post.php');
|
||||
|
||||
// You shouldn't be able to (un)sticky a topic if the setting is disabled.
|
||||
if (empty($modSettings['enableStickyTopics']))
|
||||
fatal_lang_error('cannot_make_sticky', false);
|
||||
|
||||
// You can't sticky a board or something!
|
||||
if (empty($topic))
|
||||
fatal_lang_error(472, false);
|
||||
|
||||
// Is this topic already stickied, or no?
|
||||
$request = db_query("
|
||||
SELECT isSticky
|
||||
FROM {$db_prefix}topics
|
||||
WHERE ID_TOPIC = $topic
|
||||
LIMIT 1", __FILE__, __LINE__);
|
||||
list ($isSticky) = mysql_fetch_row($request);
|
||||
mysql_free_result($request);
|
||||
|
||||
// Toggle the sticky value.... pretty simple ;).
|
||||
db_query("
|
||||
UPDATE {$db_prefix}topics
|
||||
SET isSticky = " . (empty($isSticky) ? 1 : 0) . "
|
||||
WHERE ID_TOPIC = $topic
|
||||
LIMIT 1", __FILE__, __LINE__);
|
||||
|
||||
// Log this sticky action - always a moderator thing.
|
||||
logAction('sticky', array('topic' => $topic));
|
||||
// Notify people that this topic has been stickied?
|
||||
if (empty($isSticky))
|
||||
sendNotifications($topic, 'sticky');
|
||||
|
||||
// Take them back to the now stickied topic.
|
||||
redirectexit('topic=' . $topic . '.' . $_REQUEST['start']);
|
||||
}
|
||||
|
||||
function FirstSticky()
|
||||
{
|
||||
global $db_prefix, $modSettings, $topic, $sourcedir;
|
||||
|
||||
// Make sure the user can sticky it, and they are stickying *something*.
|
||||
isAllowedTo('make_sticky');
|
||||
|
||||
checkSession('get');
|
||||
|
||||
// We need Subs-Post.php for the sendNotifications() function.
|
||||
require_once($sourcedir . '/Subs-Post.php');
|
||||
|
||||
// You shouldn't be able to (un)sticky a topic if the setting is disabled.
|
||||
if (empty($modSettings['enableStickyTopics']))
|
||||
fatal_lang_error('cannot_make_sticky', false);
|
||||
|
||||
// You can't sticky a board or something!
|
||||
if (empty($topic))
|
||||
fatal_lang_error(472, false);
|
||||
|
||||
// Is this topic already stickied, or no?
|
||||
$request = db_query("
|
||||
SELECT isFirstSticky
|
||||
FROM {$db_prefix}topics
|
||||
WHERE ID_TOPIC = $topic
|
||||
LIMIT 1", __FILE__, __LINE__);
|
||||
list ($isFirstSticky) = mysql_fetch_row($request);
|
||||
mysql_free_result($request);
|
||||
|
||||
// Toggle the sticky value.... pretty simple ;).
|
||||
db_query("
|
||||
UPDATE {$db_prefix}topics
|
||||
SET isFirstSticky = " . (empty($isFirstSticky) ? 1 : 0) . "
|
||||
WHERE ID_TOPIC = $topic
|
||||
LIMIT 1", __FILE__, __LINE__);
|
||||
|
||||
// Log this sticky action - always a moderator thing.
|
||||
logAction('first_sticky', array('topic' => $topic));
|
||||
|
||||
// Take them back to the now stickied topic.
|
||||
redirectexit('topic=' . $topic . '.' . $_REQUEST['start']);
|
||||
}
|
||||
|
||||
?>
|
||||
Reference in New Issue
Block a user