UFN_QUERY_GETFOLDERS

Return

Return Type
table

Parameters

Parameter Parameter Type Mode Description
@CURRENTAPPUSERID uniqueidentifier IN

Definition

Copy


create function dbo.[UFN_QUERY_GETFOLDERS]
(
  @CURRENTAPPUSERID uniqueidentifier = null
)
returns @FOLDERS table 
(
  [FOLDERID] uniqueidentifier, 
  [PARENTFOLDERID] uniqueidentifier, 
  [FOLDERNAME] nvarchar(255),
  [DISPLAYORDER] int
  [COUNT] int
  [APPLYASDEFAULTPERMISSIONSFORALLSUBFOLDERS] bit,
  [SECURITYLEVELCODE] tinyint,
  [QUERYDEFAULTALLOWALLUSERSTORUN] bit,
  [QUERYDEFAULTALLOWALLUSERSTOEDIT] bit,
  [SMARTQUERYDEFAULTALLOWALLUSERSTORUN] bit,
  [SMARTQUERYDEFAULTALLOWALLUSERSTOEDIT] bit
)
as
begin 


    declare @ISSYSADMIN bit;
    declare @HASQUERYVIEWSYSTEMPRIVILEGE bit = 0;

    /* Query List Query is being used to drive site security */
    declare @SECURITYFEATUREID uniqueidentifier = '2043b264-918e-4c28-8b6c-250b62b0106b';
    declare @SECURITYFEATURETYPE tinyint = 10;

    select @ISSYSADMIN = [ISSYSADMIN] from dbo.[APPUSER] where [ID] = @CURRENTAPPUSERID;


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


  /* folders user has permission to see */
    declare @PERMISSIONEDFOLDERS table
    (
        [FOLDERID] uniqueidentifier,
        [PARENTFOLDERID] uniqueidentifier,
        [FOLDERNAME] nvarchar(max),
        [DISPLAYORDER] int
    );

    insert into @PERMISSIONEDFOLDERS ([FOLDERID], [PARENTFOLDERID], [FOLDERNAME], [DISPLAYORDER])
        select 
          [ID],
          isnull([PARENTFOLDERID], '00000000-0000-0000-0000-000000000000'),
          [NAME],
          [DISPLAYORDER]
        from dbo.[UFN_ADHOCQUERYFOLDERS_GETUSERSFOLDERS](@CURRENTAPPUSERID)

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


    /* queries user has permission to see */
      declare @QUERIESTOINCLUDE table
      (
          [QUERYID] uniqueidentifier,
          [FOLDERID] uniqueidentifier
          );        

        /* Filter out any ad-hoc queries involving query views to which the current user does not have access */
        with [ADHOCCATALOGITEMS] as
        (
            select [QUERYVIEWCATALOG].[OBJECTNAME]
            from dbo.[QUERYVIEWCATALOG]
            where    exists
            (
              select [ADHOCCATALOGITEMS].[QUERYVIEWCATALOGID]
              from dbo.[UFN_SECURITY_GETGRANTEDQUERYVIEWSFORUSER](@CURRENTAPPUSERID) as [ADHOCCATALOGITEMS] 
              where [ADHOCCATALOGITEMS].[QUERYVIEWCATALOGID] = [QUERYVIEWCATALOG].[ID]
            )
        )
      insert into @QUERIESTOINCLUDE ([QUERYID], [FOLDERID])
        select
          [QUERY].[ID],
          isnull([QUERY].[FOLDERID], '00000000-0000-0000-0000-000000000001') [FOLDERID]
        from dbo.[ADHOCQUERY] [QUERY]    
        inner join @PERMISSIONEDFOLDERS [FOLDER] on isnull([QUERY].[FOLDERID], '00000000-0000-0000-0000-000000000000') = [FOLDER].[FOLDERID]
        inner join dbo.[QUERYVIEWCATALOG] on [QUERY].[QUERYVIEWCATALOGID] = [QUERYVIEWCATALOG].[ID]
        left join dbo.[APPUSERADHOCQUERYFAVORITE] [FAVORITE] on [FAVORITE].[ADHOCQUERYID] = [QUERY].[ID] and [FAVORITE].[APPUSERID] = @CURRENTAPPUSERID
        where
        /* Filter out restricted query views */
        (
          (@ISSYSADMIN = 1 
          or
          (@HASQUERYVIEWSYSTEMPRIVILEGE = 1 and (dbo.[UFN_SECURITY_APPUSER_GRANTED_ADHOCQUERYINSTANCE_IN_SYSTEMROLE](@CURRENTAPPUSERID, [QUERY].[ID]) = 1)))
          /* This will return a list of query views in use by the ad-hoc query but not in the ADHOCCATALOGITEMS variable;
          These ad-hoc queries should not be returned to the client. */
          or
          (
            not exists(
              select [QUERYVIEWSINUSE].[OBJECTNAME]
              from dbo.[UFN_ADHOCQUERY_QUERYVIEWSINUSE]([QUERY].[QUERYDEFINITIONXML]) as [QUERYVIEWSINUSE]
              where not exists (
                select
                [ADHOCCATALOGITEMS].[OBJECTNAME]
                from [ADHOCCATALOGITEMS]
                where [ADHOCCATALOGITEMS].[OBJECTNAME] = [QUERYVIEWSINUSE].[OBJECTNAME]
              )
            )
          )
          and
          (
          dbo.[UFN_SECURITY_APPUSER_GRANTED_ADHOCQUERYINSTANCE_IN_SYSTEMROLE](@CURRENTAPPUSERID, [QUERY].[ID]) = 1
          )
        )
        and
        (    
          [QUERYVIEWCATALOG].[ROOTOBJECT] = 1
          and
          (
            [QUERY].[SITEID] is null
            or
            (
              dbo.[UFN_APPUSER_ISSYSADMIN](@CURRENTAPPUSERID) = 1 
              or exists (select 1 from dbo.[UFN_SITESFORUSERONFEATURE](@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where [SITEID] = [QUERY].[SITEID] or ([SITEID] is null and [QUERY].[SITEID] is null))
            )
          )
        );

      /* Filter out any smart queries involving query views to which the current user does not have access */
        with [SMARTCATALOGITEMS] as
        (
          select [SMARTQUERYCATALOG].[ID] [SMARTQUERYCATALOGID]
          from dbo.[SMARTQUERYCATALOG]
          where exists
            (
              select [SMARTCATALOGITEMS].[SMARTQUERYCATALOGID]
              from dbo.[UFN_SECURITY_GETGRANTEDSMARTQUERIESFORUSER](@CURRENTAPPUSERID) as [SMARTCATALOGITEMS] 
              where [SMARTCATALOGITEMS].[SMARTQUERYCATALOGID] = [SMARTQUERYCATALOG].[ID]
            )
    )
      insert into @QUERIESTOINCLUDE ([QUERYID], [FOLDERID])
        select
          [QUERY].[ID],
          isnull([QUERY].[FOLDERID], '00000000-0000-0000-0000-000000000001') [FOLDERID]
        from dbo.[SMARTQUERYINSTANCE] [QUERY]    
        inner join @PERMISSIONEDFOLDERS [FOLDER] on isnull([QUERY].[FOLDERID], '00000000-0000-0000-0000-000000000000') = [FOLDER].[FOLDERID]
        inner join dbo.[SMARTQUERYCATALOG] on [QUERY].[SMARTQUERYCATALOGID] = [SMARTQUERYCATALOG].[ID]
        left join dbo.[APPUSERSMARTQUERYINSTANCEFAVORITE] [FAVORITE] on [FAVORITE].[SMARTQUERYINSTANCEID] = [QUERY].[ID] and [FAVORITE].[APPUSERID] = @CURRENTAPPUSERID
        where
        /* Filter out restricted smart queries */
        (
          @ISSYSADMIN = 1
        /*This will return a list of smart queries in use by the smart query but not in the SMARTCATALOGITEMS variable;
        These smart queries should not be returned to the client.*/
          or
          exists (
            select
            [SMARTCATALOGITEMS].[SMARTQUERYCATALOGID]
            from [SMARTCATALOGITEMS] as [SMARTCATALOGITEMS]
            where [SMARTCATALOGITEMS].[SMARTQUERYCATALOGID] = [SMARTQUERYCATALOG].[ID]
          )
          and
          (
            dbo.[UFN_SECURITY_APPUSER_GRANTED_SMARTQUERYINSTANCE_IN_SYSTEMROLE](@CURRENTAPPUSERID, QUERY.ID) = 1
          )
        )
        and
        (
          [QUERY].[SITEID] is null
          or
          (
            dbo.[UFN_APPUSER_ISSYSADMIN](@CURRENTAPPUSERID) = 1
            or exists
            (
              select 1 from dbo.[UFN_SITESFORUSERONFEATURE](@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE)
              where [SITEID]=[QUERY].[SITEID] or ([SITEID] is null and [QUERY].[SITEID] is null))
          )
        );


    ---------

    /* nodes to show the user */    
      declare @NODES table
      (
        [NODEID] uniqueidentifier,
        [PARENTNODEID] uniqueidentifier,
        [NODENAME] nvarchar(max),
        [DISPLAYORDER] int,
        [COUNT] int default 0,
    [APPLYASDEFAULTPERMISSIONSFORALLSUBFOLDERS] bit,
    [SECURITYLEVELCODE] tinyint,
    [QUERYDEFAULTALLOWALLUSERSTORUN] bit,
    [QUERYDEFAULTALLOWALLUSERSTOEDIT] bit,
    [SMARTQUERYDEFAULTALLOWALLUSERSTORUN] bit,
    [SMARTQUERYDEFAULTALLOWALLUSERSTOEDIT] bit
      ); 

      --Rollup by folders

      begin   
          insert into @NODES([NODEID], [PARENTNODEID], [NODENAME], [DISPLAYORDER], [COUNT], [APPLYASDEFAULTPERMISSIONSFORALLSUBFOLDERS], [SECURITYLEVELCODE], [QUERYDEFAULTALLOWALLUSERSTORUN], [QUERYDEFAULTALLOWALLUSERSTOEDIT], [SMARTQUERYDEFAULTALLOWALLUSERSTORUN], [SMARTQUERYDEFAULTALLOWALLUSERSTOEDIT])
            select  
              f.[FOLDERID],
              f.[PARENTFOLDERID],
              f.[FOLDERNAME],
              f.[DISPLAYORDER],
              count(distinct q.[QUERYID]) as [COUNT],
        af.[APPLYASDEFAULTPERMISSIONSFORALLSUBFOLDERS],
        af.[SECURITYLEVELCODE],
        af.[QUERYDEFAULTALLOWALLUSERSTORUN],
        af.[QUERYDEFAULTALLOWALLUSERSTOEDIT],
        af.[SMARTQUERYDEFAULTALLOWALLUSERSTORUN],
        af.[SMARTQUERYDEFAULTALLOWALLUSERSTOEDIT]
            from @PERMISSIONEDFOLDERS f
            left join @QUERIESTOINCLUDE q on q.[FOLDERID] = f.[FOLDERID]
      left join dbo.[ADHOCQUERYFOLDER] af on f.[FOLDERID] = af.[ID]
            group by 
              f.[FOLDERID],
              f.[PARENTFOLDERID],
              f.[FOLDERNAME],
              f.[DISPLAYORDER],
        af.[APPLYASDEFAULTPERMISSIONSFORALLSUBFOLDERS],
        af.[SECURITYLEVELCODE],
        af.[QUERYDEFAULTALLOWALLUSERSTORUN],
        af.[QUERYDEFAULTALLOWALLUSERSTOEDIT],
        af.[SMARTQUERYDEFAULTALLOWALLUSERSTORUN],
        af.[SMARTQUERYDEFAULTALLOWALLUSERSTOEDIT];
      end;

    ---------

    /* rollup node counts */
    with [ROLLUP] as
    (  
      select 
        f.[NODEID] [PARENTNODEID],
        f.[NODEID],
        f.[COUNT]
      from @NODES f

      union all 

      select 
        r.[PARENTNODEID],
        f.[NODEID],
        f.[COUNT]
      from @NODES f
      inner join [ROLLUP] r on f.[PARENTNODEID] = r.[NODEID]
    )  

  insert into @FOLDERS ([FOLDERID], [PARENTFOLDERID], [FOLDERNAME], [DISPLAYORDER], [COUNT], [APPLYASDEFAULTPERMISSIONSFORALLSUBFOLDERS], [SECURITYLEVELCODE], [QUERYDEFAULTALLOWALLUSERSTORUN], [QUERYDEFAULTALLOWALLUSERSTOEDIT], [SMARTQUERYDEFAULTALLOWALLUSERSTORUN], [SMARTQUERYDEFAULTALLOWALLUSERSTOEDIT])
    select
      f.[NODEID],
      f.[PARENTNODEID],
      f.[NODENAME],
      f.[DISPLAYORDER],
      sum(r.[COUNT]) [COUNT],
    f.[APPLYASDEFAULTPERMISSIONSFORALLSUBFOLDERS],
    f.[SECURITYLEVELCODE],
    f.[QUERYDEFAULTALLOWALLUSERSTORUN],
    f.[QUERYDEFAULTALLOWALLUSERSTOEDIT],
    f.[SMARTQUERYDEFAULTALLOWALLUSERSTORUN],
    f.[SMARTQUERYDEFAULTALLOWALLUSERSTOEDIT]
    from [ROLLUP] r
    inner join @NODES f on r.[PARENTNODEID] = f.[NODEID]
    group by 
      f.[NODEID],
      f.[PARENTNODEID],
      f.[NODENAME],
      f.[DISPLAYORDER],
    f.[APPLYASDEFAULTPERMISSIONSFORALLSUBFOLDERS],
    f.[SECURITYLEVELCODE],
    f.[QUERYDEFAULTALLOWALLUSERSTORUN],
    f.[QUERYDEFAULTALLOWALLUSERSTOEDIT],
    f.[SMARTQUERYDEFAULTALLOWALLUSERSTORUN],
    f.[SMARTQUERYDEFAULTALLOWALLUSERSTOEDIT];


  return;

end