
[dbo].[Forum_Thread_Split]
CREATE PROCEDURE dbo.[Forum_Thread_Split]
(
@PostID INT,
@ThreadID INT,
@NewForumID INT,
@ModeratorUserID INT,
@Subject NVARCHAR(150),
@Notes NVARCHAR(1024)
)
AS
DECLARE @AnswerPostID INT
DECLARE @UserID INT
DECLARE @Status INT
DECLARE @ParentPostID INT
DECLARE @LastPostedPostID INT
DECLARE @OldThreadNewLastPostID INT
DECLARE @OldForumID INT
DECLARE @OldForumOldLastPostID INT
DECLARE @OldForumNewLastPostID INT
DECLARE @NewForumNewLastPostID INT
DECLARE @IsApproved BIT
DECLARE @OldGroupID INT
DECLARE @NewGroupID INT
DECLARE @PortalID INT
IF EXISTS ( SELECT [ForumID]
FROM dbo.Forum_Forums
WHERE ForumID = @NewForumID )
BEGIN
INSERT INTO dbo.Forum_Threads
(
ThreadID,
ForumID,
IsPinned,
PollID,
LastPostedPostID,
Replies,
AnswerPostID,
AnswerUserID,
ThreadStatus
)
VALUES (
@PostID,
@NewForumID,
0,
-1,
@PostID,
0,
-1,
-1,
-1
)
SET @AnswerPostID = ( SELECT AnswerPostID
FROM dbo.Forum_Threads
WHERE ThreadID = @ThreadID
)
IF @AnswerPostID = @PostID
BEGIN
SET @UserID = ( SELECT AnswerUserID
FROM dbo.Forum_Threads
WHERE ThreadID = @ThreadID
)
SET @Status = ( SELECT ThreadStatus
FROM dbo.Forum_Threads
WHERE ThreadID = @ThreadID
)
EXEC dbo.Forum_Thread_StatusChange @PostID, @UserID,
@Status, @PostID
EXEC dbo.Forum_Thread_StatusChange @ThreadID, -1, 0, 0
END
ELSE
BEGIN
SET @Status = ( SELECT ThreadStatus
FROM dbo.Forum_Threads
WHERE ThreadID = @ThreadID
)
EXEC dbo.Forum_Thread_StatusChange @ThreadID, -1, @Status,
0
END
SET @ParentPostID = ( SELECT ParentPostID
FROM dbo.Forum_Posts
WHERE PostID = @PostID
)
IF @ParentPostID > 0
BEGIN
UPDATE dbo.Forum_Posts
SET ParentPostID = 0,
[Subject] = @Subject,
ThreadID = @PostID
WHERE PostID = @PostID
END
SET @LastPostedPostID = ( SELECT LastPostedPostID
FROM dbo.Forum_Threads
WHERE ThreadID = @ThreadID
)
SET @OldForumID = ( SELECT ForumID
FROM dbo.Forum_Threads
WHERE ThreadID = @ThreadID
)
IF @LastPostedPostID = @PostID
BEGIN
SET @OldThreadNewLastPostID = ( SELECT TOP 1
PostID
FROM dbo.Forum_Posts
WHERE ThreadID = @ThreadID
AND IsApproved = 1
ORDER BY DateApproved DESC
)
UPDATE dbo.Forum_Threads
SET LastPostedPostID = @OldThreadNewLastPostID
WHERE ThreadID = @ThreadID
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 = @ThreadID
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 = @ThreadID
AND IsApproved = 1
ORDER BY DateApproved DESC
)
UPDATE dbo.Forum_Threads
SET LastPostedPostID = @OldThreadNewLastPostID
WHERE ThreadID = @ThreadID
END
SET @IsApproved = ( SELECT IsApproved
FROM dbo.Forum_Posts
WHERE PostID = @PostID
)
IF @IsApproved = 1
BEGIN
UPDATE dbo.Forum_Forums
SET TotalThreads = TotalThreads + 1
WHERE ForumID = @NewForumID
IF @OldForumID <> @NewForumID
BEGIN
UPDATE dbo.Forum_Forums
SET TotalPosts = TotalPosts + 1
WHERE ForumID = @NewForumID
UPDATE dbo.Forum_Forums
SET TotalPosts = TotalPosts - 1
WHERE ForumID = @OldForumID
END
END
SET @PortalID = ( SELECT PortalID
FROM dbo.Forum_Threads T ( NOLOCK )
INNER JOIN dbo.Forum_Forums F ( NOLOCK ) ON T.ForumID = F.ForumID
INNER JOIN dbo.Forum_Groups G ( NOLOCK ) ON F.GroupID = G.GroupID
WHERE T.ThreadID = @ThreadID
)
EXEC dbo.Forum_Moderate_AddHistory @PostID, @PortalID,
@ModeratorUserID, @Notes, 5
SET @IsApproved = ( SELECT IsApproved
FROM dbo.Forum_Posts
WHERE PostID = @PostID
)
IF @IsApproved = 1
BEGIN
UPDATE dbo.Forum_Threads
SET Replies = Replies - 1
WHERE ThreadID = @ThreadID
END
ELSE
BEGIN
EXEC dbo.Forum_Moderate_Approve @PostID, @ModeratorUserID,
'Post Approved after Split'
END
END
GO