CREATE PROCEDURE dbo.[Forum_Post_Move]
@PostID INT,
@oldThreadID INT,
@newThreadID INT,
@newForumID INT,
@oldForumID INT,
@ModeratorUserID INT,
@SortOrder INT,
@Notes NVARCHAR(1024)
AS
DECLARE @AnswerPostID INT
DECLARE @UserID INT
DECLARE @Status INT
DECLARE @LastPostedPostID INT
DECLARE @OldThreadNewLastPostID INT
DECLARE @OldForumOldLastPostID INT
DECLARE @OldForumNewLastPostID INT
DECLARE @NewThreadNewLastPostID INT
DECLARE @NewForumNewLastPostID INT
DECLARE @IsApproved BIT
DECLARE @OldGroupID INT
DECLARE @NewGroupID INT
BEGIN
UPDATE dbo.Forum_Posts
SET
ParentPostID = @newThreadID,
ThreadID = @newThreadID
WHERE PostID = @PostID
END
IF @oldThreadID <> @newThreadID
BEGIN
SET @AnswerPostID = ( SELECT AnswerPostID
FROM dbo.Forum_Threads
WHERE ThreadID = @oldThreadID
)
IF @AnswerPostID = @PostID
BEGIN
SET @UserID = ( SELECT AnswerUserID
FROM dbo.Forum_Threads
WHERE ThreadID = @oldThreadID
)
SET @Status = ( SELECT ThreadStatus
FROM dbo.Forum_Threads
WHERE ThreadID = @oldThreadID
)
EXEC dbo.Forum_Thread_StatusChange @newThreadID, @UserID,
@Status, @PostID
EXEC dbo.Forum_Thread_StatusChange @oldThreadID, -1, 0, 0
END
BEGIN
SET @LastPostedPostID = ( SELECT LastPostedPostID
FROM dbo.Forum_Threads
WHERE ThreadID = @oldThreadID
)
IF @LastPostedPostID = @PostID
BEGIN
SET @OldThreadNewLastPostID = ( SELECT TOP 1
PostID
FROM dbo.Forum_Posts
WHERE ThreadID = @oldThreadID
AND IsApproved = 1
ORDER BY DateApproved DESC
)
UPDATE dbo.Forum_Threads
SET LastPostedPostID = @OldThreadNewLastPostID
WHERE ThreadID = @oldThreadID
IF @OldForumID <> @NewForumID
BEGIN
SET @OldForumOldLastPostID = ( SELECT MostRecentPostID
FROM dbo.Forum_Forums
WHERE ForumID = @oldForumID
)
IF @OldForumOldLastPostID = @PostID
BEGIN
SET @OldForumNewLastPostID = ( SELECT TOP 1
PostID
FROM dbo.Forum_Posts FP
INNER JOIN dbo.Forum_Threads FT ON FP.ThreadID = FT.ThreadID
WHERE FP.ThreadID = @oldThreadID
AND IsApproved = 1
AND ForumID = @oldForumID
ORDER BY DateApproved DESC
)
UPDATE dbo.Forum_Forums
SET MostRecentPostID = @OldForumNewLastPostID
WHERE ForumID = @oldForumID
END
SET @NewForumNewLastPostID = ( SELECT TOP 1
PostID
FROM dbo.Forum_Posts FP
INNER JOIN dbo.Forum_Threads FT ON FP.ThreadID = FT.ThreadID
WHERE IsApproved = 1
AND ForumID = @newForumID
ORDER BY DateApproved DESC
)
UPDATE dbo.Forum_Forums
SET MostRecentPostID = @NewForumNewLastPostID
WHERE ForumID = @newForumID
END
ELSE
SET @OldThreadNewLastPostID = ( SELECT TOP 1
PostID
FROM dbo.Forum_Posts
WHERE ThreadID = @oldThreadID
AND IsApproved = 1
ORDER BY DateApproved DESC
)
UPDATE dbo.Forum_Threads
SET LastPostedPostID = @OldThreadNewLastPostID
WHERE ThreadID = @oldThreadID
END
END
DECLARE @PortalID INT
DECLARE @GroupID INT
SET @GroupID = ( SELECT GroupID
FROM dbo.Forum_Forums
WHERE ForumID = @oldForumID
)
SET @PortalID = ( SELECT PortalID
FROM dbo.Forum_Groups
WHERE GroupID = @GroupID
)
EXEC dbo.Forum_Moderate_AddHistory @PostID, @PortalID,
@ModeratorUserID, @Notes, 14
SET @IsApproved = ( SELECT IsApproved
FROM dbo.Forum_Posts
WHERE PostID = @PostID
)
IF @IsApproved = 1
BEGIN
IF @oldThreadID <> @newThreadID
BEGIN
UPDATE dbo.Forum_Threads
SET Replies = Replies - 1
WHERE ThreadID = @oldThreadID
UPDATE dbo.Forum_Threads
SET Replies = Replies + 1
WHERE ThreadID = @newThreadID
END
IF @oldForumID <> @newForumID
BEGIN
UPDATE dbo.Forum_Forums
SET TotalPosts = TotalPosts - 1
WHERE ForumID = @oldForumID
UPDATE dbo.Forum_Forums
SET TotalPosts = TotalPosts + 1
WHERE ForumID = @NewForumID
END
END
ELSE
BEGIN
EXEC dbo.Forum_Moderate_Approve @PostID, @ModeratorUserID,
'Post Approved after Split'
END
END
GO