spCloneSite_DeepCopy

This is the legacy Blackbaud Internet Solutions main site copy procedure

Parameters

Parameter Parameter Type Mode Description
@SourceClientSitesID int IN
@TargetClientSitesID int IN
@CurrentUserID int IN
@CopyBatchGUID uniqueidentifier IN
@CopyDepth int IN
@CopySecurity bit IN

Definition

Copy


CREATE PROCEDURE [dbo].[spCloneSite_DeepCopy]
(
@SourceClientSitesID int,
@TargetClientSitesID int,
@CurrentUserID int,
@CopyBatchGUID uniqueidentifier,
@CopyDepth int,
@CopySecurity bit
)
AS

----------------------------------------

--CopyDepth

-- 0 - Settings only

-- 1 - Layouts only

-- 2 - Templates and containing parts

-- 3 - Pages and all parts

-----------------------------------------    

INSERT INTO SiteCopy (ID, OwnerUserID, [SourceClientSitesID], [TargetClientSitesID], Status, ErrorLog)
VALUES (@CopyBatchGUID,@CurrentUserID,@SourceClientSitesID,@TargetClientSitesID,0, 'Initializing...' + CHAR(13))

if @@Error <> 0
    UPDATE SiteCopy SET Status = 99, ErrorLog = ErrorLog + 'An error occurred in the site copy.' + CHAR(13) WHERE ID = @CopyBatchGUID
else

begin
    if @CopyDepth > 0
    begin
        UPDATE SiteCopy SET Status = 1, ErrorLog = ErrorLog + 'Copying Site Folders...' + CHAR(13) WHERE ID = @CopyBatchGUID

        --Site Folders are used by many objects. They don't have dependencies so we will get them out of the way.

        exec spCloneSite_Folders @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID

        UPDATE SiteCopy SET Status = 2, ErrorLog = ErrorLog + 'Copying Images...' + CHAR(13) WHERE ID = @CopyBatchGUID

        --We need to get images out of the way since they are used by any object that contains HTML

        exec spCloneSite_Images @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID

        UPDATE SiteCopy SET Status = 3, ErrorLog = ErrorLog +  'Updating Image Folders...' + CHAR(13) WHERE ID = @CopyBatchGUID

        --Let's put the new images into their new folder homes

        exec spCloneSite_ImageFolders @CopyBatchGUID

        UPDATE SiteCopy SET Status = 4, ErrorLog = ErrorLog +  'Copying Style sheets...' + CHAR(13) WHERE ID = @CopyBatchGUID

        --Needed for Layouts

        exec spCloneSite_StyleSheets @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID

        UPDATE SiteCopy SET Status = 5, ErrorLog = ErrorLog +  'Copying Layouts...' + CHAR(13) WHERE ID = @CopyBatchGUID

        --Basic building block of a page. HTML will need to be replaced with new images, etc.

        exec spCloneSite_Layouts @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID

        if @CopyDepth > 1
        begin

            DECLARE @TemplatesOnly bit
            SET @TemplatesOnly = 1

            if @CopyDepth > 2 
                SET @TemplatesOnly = 0

            UPDATE SiteCopy SET Status = 6, ErrorLog = ErrorLog +  'Copying Pages...' + CHAR(13) WHERE ID = @CopyBatchGUID

            --*************************************

            --Content and Page Copying

            --Please tread with caution

            --*************************************


            --Let's get the pages copied. The actual page object is a trivial copy

            exec spCloneSite_Pages @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID, @TemplatesOnly

            exec USP_CLONESITE_CMSTEMPLATELAYOUT @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID

            UPDATE SiteCopy SET Status = 7, ErrorLog = ErrorLog +  'Copying Email Templates...' + CHAR(13) WHERE ID = @CopyBatchGUID

            declare @IDS xml            
            set @IDs = 
            (
                select ID
                from dbo.[EMAILTEMPLATE] ET
                left outer join vwEmailTemplateDataSources DS on DS.DataSourceID = ET.DataSourceID
                left outer join (select PAGEMODELITEM.OBJECTGUID
                                from [dbo].PAGEMODEL
                                inner join [dbo].PAGEMODELITEM on PAGEMODEL.ID = PAGEMODELITEM.PAGEMODELID
                                where PAGEMODEL.LOCKARTIFACTS=1)PM on PM.OBJECTGUID = ET.Guid
                where
                ET.Type = 0
                and ET.IsInternalUse = 0
                and ET.Deleted = 0
                and ET.ClientsID = 1
                and DS.DataSourceID is not null
                and PM.OBJECTGUID is null
                and ET.IsSample = 0
                and ET.CLIENTSITESID = @SourceClientSitesID
                FOR XML RAW, ELEMENTS
           )                    
            exec spCloneSite_EmailTemplate @TargetClientSitesID,@CurrentUserID, @CopyBatchGUID, @IDs

            --Copy eCard templates and their folders

            UPDATE SiteCopy SET Status = 8, ErrorLog = ErrorLog + 'Copying eCard templates...' + CHAR(13) WHERE ID = @CopyBatchGUID
            exec USP_CLONESITE_ECARDTEMPLATES @SourceClientSitesID, @TargetClientSitesID, @CurrentUserID, @CopyBatchGuid

            UPDATE SiteCopy SET Status = 9, ErrorLog = ErrorLog + 'Copying eCard templates folders...' + CHAR(13) WHERE ID = @CopyBatchGUID
            exec USP_CLONESITE_ECARDTEMPLATEFOLDERS @CopyBatchGUID

            UPDATE SiteCopy SET Status = 15, ErrorLog = ErrorLog +  'Copying Parts...' + CHAR(13) WHERE ID = @CopyBatchGUID

            --Copy each type of content we allow to be copied

            exec spCloneSite_Content @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID,@TemplatesOnly

            --Run special case SPs for each content type that needs one

            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_USERLOGIN', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_PROFILEFORM', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_MENU', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_USEREMAILPREFERENCESFORM', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_TARGETEDCONTENT', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_TRANSACTIONMANAGER', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_ADVANCEDDONATIONFORM', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_DONATIONFORM_ECARD', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_PAYMENT', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_PAYMENTSUMMARY', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_SEARCH', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_QUICKSEARCH', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID

            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_PAGESHARING', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_FACEBOOKPROFILELINK', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_ANONNEWSLETTERSUBSCRIPTION', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_TAGDISPLAY', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_USERPHOTOS', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_NEWSREADER', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_NAVIGATIONBUTTONS', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_DOCUMENTS', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_DISCUSSIONGROUP', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID

            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_WEBLOG', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_POLL', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_CONTENTCOMPARISON', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_EVENTCALENDAR', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_EVENTCALENDARGROUP', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_EVENTCALENDARHIGHLIGHT', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_SURVEY', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_MEMBERSHIP', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_USERLINKMODULE', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_GIVINGSEARCH', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_EVENTREGISTRATION', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_EMAILFORWARDINGFORM', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_PAYMENT2', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_SPONSORSHIPFORM', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_SPONSORSHIPSEARCH', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_PAYMENTSUMMARY2', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID

            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_FORM', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_FAFACCOUNTSETTINGS', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_FAFPARTICIPANTPAGE', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_ROLESELECTIONCONTROL', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_FAFOFFLINEFORM', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID-->      

            exec dbo.USP_CLONESITE_WRAPPER 'dbo.USP_CLONESITE_THEME', @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID

            UPDATE SiteCopy SET Status = 9, ErrorLog = ErrorLog +  'Updating Page Content...' + CHAR(13) WHERE ID = @CopyBatchGUID

            --Copy the Page Content. This will wire up the new parts on the new pages

            exec spCloneSite_PageContent @CopyBatchGUID

            if @TemplatesOnly = 0
            begin
                UPDATE SiteCopy SET Status = 10, ErrorLog = ErrorLog +  'Copying Friendly URLs...' + CHAR(13) WHERE ID = @CopyBatchGUID

                --Copy Friendly URLs      

                exec spCloneSite_VanityURLs @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID

                UPDATE SiteCopy SET Status = 11, ErrorLog = ErrorLog +  'Finishing...' + CHAR(13) WHERE ID = @CopyBatchGUID

            end

        end
    --Let's go back and make this official.

        --We need to update all the page ids and such that got copied

        --Also updates image folder reference... moved from 'if @TemplatesOnly = 0'                

        exec spCloneSite_ClientSites @SourceClientSitesID,@TargetClientSitesID,@CurrentUserID,@CopyBatchGUID
    end

    if @CopySecurity = 1
    begin
        UPDATE SiteCopy SET Status = 12, ErrorLog = ErrorLog + 'Copying Security Settings...' + CHAR(13) WHERE ID = @CopyBatchGUID

        -- Copy Object Security

        exec spCloneSite_ObjectSecurity @SourceClientSitesID,@TargetClientSitesID,@CopyBatchGUID

        -- Copy Security Assignments

        exec USP_CMSSECURITYASSIGNMENT_ADDBYID null, @SourceClientSitesID, @TargetClientSitesID
    end

    --This completes the copy. Don't set the status to 100 until you are completely finished.

    UPDATE SiteCopy SET Status = 100, ErrorLog = ErrorLog +  'Complete.' + CHAR(13) WHERE ID = @CopyBatchGUID

end