spModifySiteStyleSheets

Parameters

Parameter Parameter Type Mode Description
@nameLike nvarchar(100) IN
@className nvarchar(250) IN
@style nvarchar(max) IN
@markToFlushBrowserCache bit IN

Definition

Copy


-- To remove a class: exec spModifySiteStyleSheets 'faf theme%', '.existingclass', null

-- To add a class: exec spModifySiteStyleSheets 'faf theme%', '.newclass', 'somestyle;'

-- To modify a class: exec spModifySiteStyleSheets 'faf theme%', '.existingclass', 'somestyle;'      --  equivalent to remove+add


CREATE procedure dbo.spModifySiteStyleSheets(
    @nameLike nvarchar(100),
    @className nvarchar(250) = null,
    @style nvarchar(max) = null,
    @markToFlushBrowserCache bit = 0
) as
begin
    if Len(@nameLike) = 0
        raiserror('@nameLike are required.', 13, 1);

    if Len(@className) > 0
    begin    
        set @className = @className + ' {'

        while exists(select 1 from dbo.SiteStyleSheets
                     where charindex(@className, cast(customcss as nvarchar(max))) > 0 and Name like @nameLike)
        begin
            -- Search for @className, then remove the substring from @classNameToDel to the next "}", effectively removing 'class { some_styles; }' from the chunk.

            update dbo.SiteStyleSheets
            set CustomCSS = SUBSTRING(cast(customcss as nvarchar(max)), 1, charindex(@className,cast(customcss as nvarchar(max)))-1)
                            + SUBSTRING(cast(customcss as nvarchar(max)),
                                CHARINDEX('}', cast(customcss as nvarchar(max)), charindex(@className, cast(customcss as nvarchar(max)))) + 1,
                                LEN(cast(customcss as nvarchar(max))) - CHARINDEX('}', cast(customcss as nvarchar(max)), charindex(@className,cast(customcss as nvarchar(max)))))
            where charindex(@className,cast(customcss as nvarchar(max))) > 0 and Name like @nameLike
        end

        -- append new style

        if len(@style) > 0
        begin
            update dbo.SiteStyleSheets set customcss = cast(customcss as nvarchar(max)) + ' ' + @className + ' ' + @style + ' }'
            where Name like @nameLike
        end
    end

    if @markToFlushBrowserCache = 1
    begin
        -- "touch"(spAuditThis) these records so that stylesheet handler will clear cache and load new stuff

        declare item_cursor cursor for  
            select Guid from dbo.SiteStyleSheets where Name like @nameLike

        declare @guid uniqueidentifier

        open item_cursor   
        fetch next from item_cursor into @guid

        while @@fetch_status = 0   
        begin
            exec spAuditThis -1, 2, @guid, 30
            fetch next from item_cursor into @guid
        end   

        close item_cursor   
        deallocate item_cursor
    end
end