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'])) { if (check_perms('site_admin_forums')) { $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_NUM, 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, '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 { error(403); } } else { // If we're just editing it $Cache->begin_transaction('thread_'.$TopicID.'_info'); $UpdateArray = array( 'IsSticky' => $Sticky, 'IsLocked' => $Locked, 'Title' => Format::cut_string($RawTitle, 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(MYSQLI_NUM, false); $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, '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(MYSQLI_NUM, false); $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, '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' => $RawTitle, '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); // 7 days } $Cache->expire_value('thread_'.$TopicID.'_info', 3600 * 24 * 7); // 7 days $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); }