0) { $Ranking = 0; } elseif (0 > $Ranking) { error("Ranking cannot be a negative value"); } $Title = db_string($_POST['title']); $RawTitle = $_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'])) { 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_value("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, 'Ranking' => $Ranking, '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', Ranking = '$Ranking', 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, t.Ranking 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, $NewRanking) = $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, 'Ranking' => $NewRanking ); $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, 'Ranking' => $Ranking ); $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); }