📄 cs_post_update.prc
字号:
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[cs_Post_Update]') and OBJECTPROPERTY(id, N'IsProcedure') = 1)
drop procedure [dbo].[cs_Post_Update]
GO
CREATE PROCEDURE [dbo].cs_Post_Update
(
@SectionID int = null,
@PostID int,
@Subject nvarchar(256),
@Body ntext,
@FormattedBody ntext,
@EmoticonID int = 0,
@IsSticky bit = null,
@StickyDate datetime = null,
@IsLocked bit,
@IsAnnouncement bit,
@EditedBy int,
@EditNotes ntext = null,
@PropertyNames ntext = null,
@PropertyValues ntext = null,
@SettingsID int,
@PostConfiguration int = 0,
@PostName nvarchar(256) = null,
@IsApproved bit = null,
@Points int = 0,
@PostMedia int = null,
@PostDate datetime = null,
@PostStatus int = null,
@SpamScore int = null
)
AS
-- This sproc updates a post
DECLARE @ThreadID int
DECLARE @CurrentStickyDate datetime
DECLARE @ParentID int
--DECLARE @CurrentIsSticky BIT
--DECLARE @CurrentSubject NVARCHAR(256)
--DECLARE @StickyHasRemoved BIT
--DECLARE @SubjectHasChanged BIT
-- Get the thread and postdate this applies to
SELECT
@ThreadID = P.ThreadID,
@CurrentStickyDate = T.StickyDate,
@ParentID = P.ParentID,
@SectionID = P.SectionID
--@CurrentIsSticky = T.IsSticky,
--@CurrentSubject = P.Subject
FROM
cs_Posts P
LEFT JOIN
cs_Threads T ON T.ThreadID = P.ThreadID
WHERE
P.PostID = @PostID AND P.SettingsID = @SettingsID
-- Check if subject has changed or stickiness has been removed.
--SET @StickyHasRemoved = 0
--SET @SubjectHasChanged = 0
--IF (@IsSticky IS NOT NULL) AND (@IsSticky = 0) AND (@CurrentIsSticky = 1)
-- SET @StickyHasRemoved = 1
--IF (@CurrentSubject <> @Subject)
-- SET @SubjectHasChanged = 1
-- Update post's details
UPDATE
cs_Posts
SET
Subject = @Subject,
Body = @Body,
FormattedBody = @FormattedBody,
IsLocked = @IsLocked,
EmoticonID = @EmoticonID,
PropertyNames = @PropertyNames,
PropertyValues = @PropertyValues,
PostConfiguration = @PostConfiguration,
PostName = @PostName,
Points = @Points,
IsApproved = IsNull(@IsApproved, IsApproved),
PostMedia = IsNull(@PostMedia, PostMedia),
PostStatus = IsNull(@PostStatus, PostStatus),
SpamScore = IsNull(@SpamScore, SpamScore)
WHERE
PostID = @PostID AND SettingsID = @SettingsID
if(@PostID = @ParentID AND @IsApproved is not null)
Begin
Update cs_Threads Set IsApproved = @IsApproved Where ThreadID = @ThreadID
End
/*
-- We need not to trigger thread and section stats rebuild if sticky has been
-- removed or subject has been changed.
-- If something else has changed then we will trigger stats rebuild of info
-- but not the dates (is the meaning of 0, a new param).
-- Update most recent info in cs_Threads but not any date
IF (@ThreadID > 0) AND (@StickyHasRemoved = 0) AND (@SubjectHasChanged = 0)
EXEC cs_system_UpdateThread @ThreadID, @PostID, @SettingsID, 0
-- Update most recent info in cs_Sections but not any date
IF (@SectionID > 0) AND (@StickyHasRemoved = 0) AND (@SubjectHasChanged = 0)
EXEC cs_system_UpdateForum @SectionID, @ThreadID, @PostID, @SettingsID, 0
*/
IF (@PostStatus IS NOT NULL)
EXEC cs_Thread_Status_Update @ThreadID, null, @SettingsID
-- Allow thread to update sticky properties.
-- Also if this post got locked, then mark the thread locked too
IF (@IsSticky IS NOT NULL) AND (@StickyDate IS NOT NULL)
BEGIN
DECLARE @ThreadIsLocked BIT
SET @ThreadIsLocked = (@IsAnnouncement | @IsLocked)
IF (@StickyDate > '1/1/2000')
BEGIN
-- valid date range given
UPDATE
cs_Threads
SET
IsSticky = @IsSticky,
StickyDate = @StickyDate,
IsLocked = @ThreadIsLocked
WHERE
ThreadID = @ThreadID AND SettingsID = @SettingsID
END
ELSE BEGIN
-- trying to remove a sticky
UPDATE
cs_Threads
SET
IsSticky = @IsSticky,
StickyDate = @CurrentStickyDate,
IsLocked = @ThreadIsLocked
WHERE
ThreadID = @ThreadID AND SettingsID = @SettingsID
END
END
IF @EditNotes IS NOT NULL
BEGIN
IF EXISTS (SELECT PostID FROM cs_PostEditNotes WHERE PostID = @PostID)
UPDATE
cs_PostEditNotes
SET
EditNotes = @EditNotes
WHERE
PostID = @PostID AND SettingsID = @SettingsID
ELSE
INSERT INTO
cs_PostEditNotes
VALUES
(@PostID, @EditNotes, @SettingsID)
END
IF @PostDate IS NOT NULL
BEGIN
UPDATE cs_Posts SET PostDate = @PostDate WHERE PostID = @PostID AND SettingsID = @SettingsID
if(@PostID = @ParentID)
Begin
Update cs_Threads Set PostDate = @PostDate Where ThreadID = @ThreadID AND SettingsID = @SettingsID
End
END
-- update thread emoticon if this is a thread starter
IF (@PostID = @ParentID)
BEGIN
UPDATE cs_Threads SET ThreadEmoticonID = @EmoticonID WHERE ThreadID = @ThreadID AND SettingsID = @SettingsID
END
-- Mark thread as not read for anyone but the editor
DELETE cs_ThreadsRead WHERE ThreadID = @ThreadID AND SettingsID = @SettingsID AND UserID <> @EditedBy
-- We want to track what happened
exec cs_system_ModerationAction_AuditEntry 2, @EditedBy, @PostID, NULL, NULL, @SettingsID, @EditNotes
EXEC cs_system_ResetThreadStatistics @ThreadID
IF @SectionID > 0 -- passing in "0" will recalculate stats for ALL sections (timeout on large sites)
BEGIN
EXEC cs_system_ResetForumStatistics @SectionID
END
EXEC cs_Posts_UpdatePostsInCategories @SectionID = @SectionID, @PostID = null
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
GRANT EXECUTE ON [dbo].[cs_Post_Update] TO [public]
GO
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -