mirror of
https://github.com/WhatCD/Gazelle.git
synced 2024-12-13 19:06:27 +00:00
dcaa536e58
Allow indexing by column 0 in ->to_array() Only need numeric indices in 'ip_bans' key Cache keys were completely broken on the debug pages Add bbcode missing functions to staffpms Add border to improve layout of torrent pages with postmod Fix a bug where users could download anyone's snatch/upload/seedlist regardless of paranoia settings Don't escape thread titles before caching Better BBCode URL matching Fix user search by tracker IP for ocelot data Fix bug where the same thread would show up twice in the announcements forum Update tables before sending invite email to prevent sending multiple invites
254 lines
7.5 KiB
PHP
254 lines
7.5 KiB
PHP
<?
|
|
/*********************************************************************\
|
|
//--------------Mod thread-------------------------------------------//
|
|
|
|
This page gets called if we're editing a thread.
|
|
|
|
Known issues:
|
|
If multiple threads are moved before forum activity occurs then
|
|
threads will linger with the 'Moved' flag until they're knocked off
|
|
the front page.
|
|
|
|
\*********************************************************************/
|
|
|
|
// Quick SQL injection check
|
|
if(!is_number($_POST['threadid'])) { error(404); }
|
|
if($_POST['title'] == ''){ error(0); }
|
|
// End injection check
|
|
// Make sure they are moderators
|
|
if(!check_perms('site_moderate_forums')) { error(403); }
|
|
authorize();
|
|
|
|
// Variables for database input
|
|
|
|
$TopicID = (int)$_POST['threadid'];
|
|
$Sticky = (isset($_POST['sticky'])) ? 1 : 0;
|
|
$Locked = (isset($_POST['locked'])) ? 1 : 0;
|
|
$Title = db_string($_POST['title']);
|
|
$ForumID = (int)$_POST['forumid'];
|
|
$Page = (int)$_POST['page'];
|
|
|
|
if ($Locked == 1) {
|
|
$DB->query("DELETE FROM forums_last_read_topics WHERE TopicID='$TopicID'");
|
|
}
|
|
|
|
$DB->query("SELECT
|
|
t.ForumID,
|
|
f.MinClassWrite,
|
|
COUNT(p.ID) AS Posts
|
|
FROM forums_topics AS t
|
|
LEFT JOIN forums_posts AS p ON p.TopicID=t.ID
|
|
LEFT JOIN forums AS f ON f.ID=.t.ForumID
|
|
WHERE t.ID='$TopicID'
|
|
GROUP BY p.TopicID");
|
|
list($OldForumID, $MinClassWrite, $Posts) = $DB->next_record();
|
|
|
|
if($MinClassWrite > $LoggedUser['Class']) { error(403); }
|
|
|
|
// If we're moving
|
|
$Cache->delete_value('forums_'.$ForumID);
|
|
$Cache->delete_value('forums_'.$OldForumID);
|
|
|
|
// If we're deleting a thread
|
|
if(isset($_POST['delete'])) {
|
|
$DB->query("DELETE FROM forums_posts WHERE TopicID='$TopicID'");
|
|
$DB->query("DELETE FROM forums_topics WHERE ID='$TopicID'");
|
|
|
|
$DB->query("SELECT
|
|
t.ID,
|
|
t.LastPostID,
|
|
t.Title,
|
|
p.AuthorID,
|
|
um.Username,
|
|
p.AddedTime,
|
|
(SELECT COUNT(pp.ID) FROM forums_posts AS pp JOIN forums_topics AS tt ON pp.TopicID=tt.ID WHERE tt.ForumID='$ForumID'),
|
|
t.IsLocked,
|
|
t.IsSticky
|
|
FROM forums_topics AS t
|
|
JOIN forums_posts AS p ON p.ID=t.LastPostID
|
|
LEFT JOIN users_main AS um ON um.ID=p.AuthorID
|
|
WHERE t.ForumID='$ForumID'
|
|
GROUP BY t.ID
|
|
ORDER BY t.LastPostID DESC LIMIT 1");
|
|
list($NewLastTopic, $NewLastPostID, $NewLastTitle, $NewLastAuthorID, $NewLastAuthorName, $NewLastAddedTime, $NumPosts, $NewLocked, $NewSticky) = $DB->next_record(MYSQLI_BOTH, false);
|
|
|
|
$DB->query("UPDATE forums SET
|
|
NumTopics=NumTopics-1,
|
|
NumPosts=NumPosts-'$Posts',
|
|
LastPostTopicID='$NewLastTopic',
|
|
LastPostID='$NewLastPostID',
|
|
LastPostAuthorID='$NewLastAuthorID',
|
|
LastPostTime='$NewLastAddedTime'
|
|
WHERE ID='$ForumID'");
|
|
|
|
$Cache->delete('thread_'.$TopicID);
|
|
|
|
|
|
$Cache->begin_transaction('forums_list');
|
|
$UpdateArray = array(
|
|
'NumPosts'=>$NumPosts,
|
|
'NumTopics'=>'-1',
|
|
'LastPostID'=>$NewLastPostID,
|
|
'LastPostAuthorID'=>$NewLastAuthorID,
|
|
'Username'=>$NewLastAuthorName,
|
|
'LastPostTopicID'=>$NewLastTopic,
|
|
'LastPostTime'=>$NewLastAddedTime,
|
|
'Title'=>$NewLastTitle,
|
|
'IsLocked'=>$NewLocked,
|
|
'IsSticky'=>$NewSticky
|
|
);
|
|
|
|
$Cache->update_row($ForumID, $UpdateArray);
|
|
$Cache->commit_transaction(0);
|
|
$Cache->delete_value('thread_'.$TopicID.'_info');
|
|
|
|
header('Location: forums.php?action=viewforum&forumid='.$ForumID);
|
|
|
|
} else { // If we're just editing it
|
|
$Cache->begin_transaction('thread_'.$TopicID.'_info');
|
|
$UpdateArray = array(
|
|
'IsSticky'=>$Sticky,
|
|
'IsLocked'=>$Locked,
|
|
'Title'=>cut_string($_POST['title'], 150, 1, 0),
|
|
'ForumID'=>$ForumID
|
|
);
|
|
$Cache->update_row(false, $UpdateArray);
|
|
$Cache->commit_transaction(0);
|
|
|
|
$DB->query("UPDATE forums_topics SET
|
|
IsSticky = '$Sticky',
|
|
IsLocked = '$Locked',
|
|
Title = '$Title',
|
|
ForumID ='$ForumID'
|
|
WHERE ID='$TopicID'");
|
|
|
|
|
|
if($ForumID!=$OldForumID) { // If we're moving a thread, change the forum stats
|
|
|
|
$DB->query("SELECT MinClassRead, MinClassWrite, Name FROM forums WHERE ID='$ForumID'");
|
|
list($MinClassRead, $MinClassWrite, $ForumName) = $DB->next_record();
|
|
$Cache->begin_transaction('thread_'.$TopicID.'_info');
|
|
$UpdateArray = array(
|
|
'ForumName'=>$ForumName,
|
|
'MinClassRead'=>$MinClassRead,
|
|
'MinClassWrite'=>$MinClassWrite
|
|
);
|
|
$Cache->update_row(false, $UpdateArray);
|
|
$Cache->commit_transaction(3600*24*5);
|
|
|
|
$Cache->begin_transaction('forums_list');
|
|
|
|
|
|
// Forum we're moving from
|
|
$DB->query("SELECT
|
|
t.ID,
|
|
t.LastPostID,
|
|
t.Title,
|
|
p.AuthorID,
|
|
um.Username,
|
|
p.AddedTime,
|
|
(SELECT COUNT(pp.ID) FROM forums_posts AS pp JOIN forums_topics AS tt ON pp.TopicID=tt.ID WHERE tt.ForumID='$OldForumID'),
|
|
t.IsLocked,
|
|
t.IsSticky
|
|
FROM forums_topics AS t
|
|
JOIN forums_posts AS p ON p.ID=t.LastPostID
|
|
LEFT JOIN users_main AS um ON um.ID=p.AuthorID
|
|
WHERE t.ForumID='$OldForumID'
|
|
ORDER BY t.LastPostID DESC LIMIT 1");
|
|
list($NewLastTopic, $NewLastPostID, $NewLastTitle, $NewLastAuthorID, $NewLastAuthorName, $NewLastAddedTime, $NumPosts, $NewLocked, $NewSticky) = $DB->next_record(MYSQLI_NUM, false);
|
|
|
|
$DB->query("UPDATE forums SET
|
|
NumTopics=NumTopics-1,
|
|
NumPosts=NumPosts-'$Posts',
|
|
LastPostTopicID='$NewLastTopic',
|
|
LastPostID='$NewLastPostID',
|
|
LastPostAuthorID='$NewLastAuthorID',
|
|
LastPostTime='$NewLastAddedTime'
|
|
WHERE ID='$OldForumID'");
|
|
|
|
|
|
$UpdateArray = array(
|
|
'NumPosts'=>$NumPosts,
|
|
'NumTopics'=>'-1',
|
|
'LastPostID'=>$NewLastPostID,
|
|
'LastPostAuthorID'=>$NewLastAuthorID,
|
|
'Username'=>$NewLastAuthorName,
|
|
'LastPostTopicID'=>$NewLastTopic,
|
|
'LastPostTime'=>$NewLastAddedTime,
|
|
'Title'=>$NewLastTitle,
|
|
'IsLocked'=>$NewLocked,
|
|
'IsSticky'=>$NewSticky
|
|
);
|
|
|
|
|
|
$Cache->update_row($OldForumID, $UpdateArray);
|
|
|
|
// Forum we're moving to
|
|
|
|
$DB->query("SELECT
|
|
t.ID,
|
|
t.LastPostID,
|
|
t.Title,
|
|
p.AuthorID,
|
|
um.Username,
|
|
p.AddedTime,
|
|
(SELECT COUNT(pp.ID) FROM forums_posts AS pp JOIN forums_topics AS tt ON pp.TopicID=tt.ID WHERE tt.ForumID='$ForumID')
|
|
FROM forums_topics AS t
|
|
JOIN forums_posts AS p ON p.ID=t.LastPostID
|
|
LEFT JOIN users_main AS um ON um.ID=p.AuthorID
|
|
WHERE t.ForumID='$ForumID'
|
|
ORDER BY t.LastPostID DESC LIMIT 1");
|
|
list($NewLastTopic, $NewLastPostID, $NewLastTitle, $NewLastAuthorID, $NewLastAuthorName, $NewLastAddedTime, $NumPosts) = $DB->next_record();
|
|
|
|
$DB->query("UPDATE forums SET
|
|
NumTopics=NumTopics+1,
|
|
NumPosts=NumPosts+'$Posts',
|
|
LastPostTopicID='$NewLastTopic',
|
|
LastPostID='$NewLastPostID',
|
|
LastPostAuthorID='$NewLastAuthorID',
|
|
LastPostTime='$NewLastAddedTime'
|
|
WHERE ID='$ForumID'");
|
|
|
|
|
|
$UpdateArray = array(
|
|
'NumPosts'=>($NumPosts+$Posts),
|
|
'NumTopics'=>'+1',
|
|
'LastPostID'=>$NewLastPostID,
|
|
'LastPostAuthorID'=>$NewLastAuthorID,
|
|
'Username'=>$NewLastAuthorName,
|
|
'LastPostTopicID'=>$NewLastTopic,
|
|
'LastPostTime'=>$NewLastAddedTime,
|
|
'Title'=>$NewLastTitle
|
|
);
|
|
|
|
|
|
$Cache->update_row($ForumID, $UpdateArray);
|
|
|
|
$Cache->commit_transaction(0);
|
|
} else { // Editing
|
|
$DB->query("SELECT LastPostTopicID FROM forums WHERE ID='$ForumID'");
|
|
list($LastTopicID) = $DB->next_record();
|
|
if($LastTopicID == $TopicID) {
|
|
$UpdateArray = array(
|
|
'Title'=>$_POST['title'],
|
|
'IsLocked'=>$Locked,
|
|
'IsSticky'=>$Sticky
|
|
);
|
|
$Cache->begin_transaction('forums_list');
|
|
$Cache->update_row($ForumID, $UpdateArray);
|
|
$Cache->commit_transaction(0);
|
|
}
|
|
}
|
|
if($Locked) {
|
|
$CatalogueID = floor($NumPosts/THREAD_CATALOGUE);
|
|
for($i=0;$i<=$CatalogueID;$i++) {
|
|
$Cache->expire_value('thread_'.$TopicID.'_catalogue_'.$i,3600*24*7);
|
|
}
|
|
$Cache->expire_value('thread_'.$TopicID.'_info',3600*24*7);
|
|
|
|
$DB->query('UPDATE forums_polls SET Closed=\'0\' WHERE TopicID=\''.$TopicID.'\'');
|
|
$Cache->delete_value('polls_'.$TopicID);
|
|
}
|
|
header('Location: forums.php?action=viewthread&threadid='.$TopicID.'&page='.$Page);
|
|
}
|