USP_DATALIST_INFORMATIONLIBRARY_QUERYFOLDERS
Parameters
Parameter | Parameter Type | Mode | Description |
---|---|---|---|
@GROUPBY | tinyint | IN | |
@CURRENTAPPUSERID | uniqueidentifier | IN |
Definition
Copy
CREATE procedure dbo.USP_DATALIST_INFORMATIONLIBRARY_QUERYFOLDERS
(
@GROUPBY tinyint = 0,
@CURRENTAPPUSERID uniqueidentifier
)
as
set nocount on;
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;
select @HASQUERYVIEWSYSTEMPRIVILEGE = dbo.[UFN_SECURITY_APPUSER_GRANTED_SYSTEMPRIVILEGE_IN_SYSTEMROLE](@CURRENTAPPUSERID, '5f9bbcaf-9c67-4539-9880-ae4f709a9c1f');
---------------
/* folders user has permission to see */
if OBJECT_ID('tempdb..#PERMISSIONEDFOLDERS') is not null
drop table #PERMISSIONEDFOLDERS;
create table #PERMISSIONEDFOLDERS
(
[FOLDERID] uniqueidentifier primary key,
[PARENTFOLDERID] uniqueidentifier,
[FOLDERNAME] nvarchar(max) collate database_default,
[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)
union all
select '00000000-0000-0000-0000-000000000000', '00000000-0000-0000-0000-000000000003', 'root', 1
union all
select '00000000-0000-0000-0000-000000000001', '00000000-0000-0000-0000-000000000000', '<none>', 0;
----------------
/* queries user has permission to see */
if OBJECT_ID('tempdb..#QUERIESTOINCLUDE') is not null
drop table #QUERIESTOINCLUDE;
create table #QUERIESTOINCLUDE
(
[QUERYID] uniqueidentifier primary key,
[FOLDERID] uniqueidentifier,
[QUERYCATEGORYCODEID] uniqueidentifier,
[OWNERID] uniqueidentifier,
[RECORDTYPEID] uniqueidentifier,
[ISFAVORITE] bit
);
/* Filter out any ad-hoc queries involving query views to which the current user does not have access */
if(COALESCE(@ISSYSADMIN,0) = 0 and COALESCE(@HASQUERYVIEWSYSTEMPRIVILEGE,0) = 0 )
begin
insert into #QUERIESTOINCLUDE ([QUERYID], [FOLDERID], [QUERYCATEGORYCODEID], [OWNERID], [RECORDTYPEID], [ISFAVORITE])
select
[QUERY].[ID],
isnull([QUERY].[FOLDERID], '00000000-0000-0000-0000-000000000001') [FOLDERID],
isnull([QUERY].[QUERYCATEGORYCODEID], '00000000-0000-0000-0000-000000000001') [QUERYCATEGORYCODEID],
[QUERY].[OWNERID],
[QUERYVIEWCATALOG].[RECORDTYPEID],
case
when [FAVORITE].[ID] is not null then convert(bit, 1)
else convert(bit, 0)
end as [ISFAVORITE]
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 ([QUERY].[OWNERID] = @CURRENTAPPUSERID) and (
[QUERYVIEWCATALOG].[ROOTOBJECT] = 1
and
(
[QUERY].[SITEID] is null
or
(
exists (select 1 from dbo.[UFN_SITESFORUSERONFEATURE](@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where [SITEID] = [QUERY].[SITEID] or ([SITEID] is null and [QUERY].[SITEID] is null)))
)
)
Union
select
[QUERY].[ID],
isnull([QUERY].[FOLDERID], '00000000-0000-0000-0000-000000000001') [FOLDERID],
isnull([QUERY].[QUERYCATEGORYCODEID], '00000000-0000-0000-0000-000000000001') [QUERYCATEGORYCODEID],
[QUERY].[OWNERID],
[QUERYVIEWCATALOG].[RECORDTYPEID],
case
when [FAVORITE].[ID] is not null then convert(bit, 1)
else convert(bit, 0)
end as [ISFAVORITE]
from dbo.[ADHOCQUERY] [QUERY]
inner join dbo.[UFN_ADHOCQUERY_GETUSERQUERIES](@CURRENTAPPUSERID) [OTHERQUERIES] on [OTHERQUERIES].[ID] = [QUERY].[ID] and (@ISSYSADMIN = 0 and @HASQUERYVIEWSYSTEMPRIVILEGE = 0 )
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
([QUERYVIEWCATALOG].[ROOTOBJECT] = 1
and
(
[QUERY].[SITEID] is null
or
(exists (select 1 from dbo.[UFN_SITESFORUSERONFEATURE](@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where [SITEID] = [QUERY].[SITEID] or ([SITEID] is null and [QUERY].[SITEID] is null)))
))
option(recompile)
end
else if(COALESCE(@ISSYSADMIN,0) = 0 and COALESCE(@HASQUERYVIEWSYSTEMPRIVILEGE,0) = 1 )
begin
with xmlnamespaces ('Blackbaud.AppFx.WebService.API.1' as [ns]),
[USERQUERIES] as
(
select
[SECURITYVIEW].[ADHOCQUERYID] as [ID]
from
dbo.[V_SECURITY_SYSTEMROLEASSIGNMENT_USER_ADHOCQUERYINSTANCE] [SECURITYVIEW]
where
([SECURITYVIEW].[APPUSERID] = @CURRENTAPPUSERID)
group by [ADHOCQUERYID]
having min(cast([SECURITYVIEW].[GRANTORDENY] as tinyint)) = 1
union all
select
[ID]
from dbo.[ADHOCQUERY]
where [OWNERID] = @CURRENTAPPUSERID or [SECURITYLEVEL] = 0
)
insert into #QUERIESTOINCLUDE ([QUERYID], [FOLDERID], [QUERYCATEGORYCODEID], [OWNERID], [RECORDTYPEID], [ISFAVORITE])
select
[QUERY].[ID],
isnull([QUERY].[FOLDERID], '00000000-0000-0000-0000-000000000001') [FOLDERID],
isnull([QUERY].[QUERYCATEGORYCODEID], '00000000-0000-0000-0000-000000000001') [QUERYCATEGORYCODEID],
[QUERY].[OWNERID],
[QUERYVIEWCATALOG].[RECORDTYPEID],
case
when [FAVORITE].[ID] is not null then convert(bit, 1)
else convert(bit, 0)
end as [ISFAVORITE]
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
(
exists(
select
[USERQUERIES].[ID]
from [USERQUERIES]
where [USERQUERIES].[ID] = [QUERY].[ID]
)
)
and
([QUERYVIEWCATALOG].[ROOTOBJECT] = 1
and
(
[QUERY].[SITEID] is null
or
(
exists (select 1 from dbo.[UFN_SITESFORUSERONFEATURE](@CURRENTAPPUSERID,@SECURITYFEATUREID,@SECURITYFEATURETYPE) where [SITEID] = [QUERY].[SITEID] or ([SITEID] is null and [QUERY].[SITEID] is null))
)
)
)
option(recompile)
end
else if(COALESCE(@ISSYSADMIN,0) = 1)
begin
insert into #QUERIESTOINCLUDE ([QUERYID], [FOLDERID], [QUERYCATEGORYCODEID], [OWNERID], [RECORDTYPEID], [ISFAVORITE])
select
[QUERY].[ID],
isnull([QUERY].[FOLDERID], '00000000-0000-0000-0000-000000000001') [FOLDERID],
isnull([QUERY].[QUERYCATEGORYCODEID], '00000000-0000-0000-0000-000000000001') [QUERYCATEGORYCODEID],
[QUERY].[OWNERID],
[QUERYVIEWCATALOG].[RECORDTYPEID],
case
when [FAVORITE].[ID] is not null then convert(bit, 1)
else convert(bit, 0)
end as [ISFAVORITE]
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
(
[QUERYVIEWCATALOG].[ROOTOBJECT] = 1
)
end ;
/* 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], [QUERYCATEGORYCODEID], [OWNERID], [RECORDTYPEID], [ISFAVORITE])
select
[QUERY].[ID],
isnull([QUERY].[FOLDERID], '00000000-0000-0000-0000-000000000001') [FOLDERID],
isnull([QUERY].[QUERYCATEGORYCODEID], '00000000-0000-0000-0000-000000000001') [QUERYCATEGORYCODEID],
[QUERY].[OWNERID],
[SMARTQUERYCATALOG].[RECORDTYPEID],
case
when [FAVORITE].[ID] is not null then convert(bit, 1)
else convert(bit, 0)
end as [ISFAVORITE]
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)
or
([QUERY].[OWNERID] = @CURRENTAPPUSERID)
/*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
);
--Rollup by folders
if @GROUPBY = 0
begin
insert into @NODES([NODEID], [PARENTNODEID], [NODENAME], [DISPLAYORDER], [COUNT])
select
f.[FOLDERID],
f.[PARENTFOLDERID],
f.[FOLDERNAME],
f.[DISPLAYORDER],
count(distinct q.[QUERYID])
from #PERMISSIONEDFOLDERS f
left join #QUERIESTOINCLUDE q on q.[FOLDERID] = f.[FOLDERID]
group by
f.[FOLDERID],
f.[PARENTFOLDERID],
f.[FOLDERNAME],
f.[DISPLAYORDER];
end
--Rollup by categories
else if @GROUPBY = 1
begin
declare @CATEGORIES table
(
[ID] uniqueidentifier,
[PARENTID] uniqueidentifier,
[DESCRIPTION] nvarchar(max),
[DISPLAYORDER] int,
[ACTIVE] bit
);
insert into @CATEGORIES ([ID], [PARENTID], [DESCRIPTION], [DISPLAYORDER], [ACTIVE])
select
[ID],
'00000000-0000-0000-0000-000000000000' [PARENTID],
[DESCRIPTION],
row_number() over(order by [DESCRIPTION]) as [DISPLAYORDER],
[ACTIVE]
from dbo.[QUERYCATEGORYCODE]
union all
select '00000000-0000-0000-0000-000000000000', '00000000-0000-0000-0000-000000000003', 'root', 1, 1
union all
select '00000000-0000-0000-0000-000000000001', '00000000-0000-0000-0000-000000000000', '<none>', 0, 1;
insert into @NODES([NODEID], [PARENTNODEID], [NODENAME], [DISPLAYORDER], [COUNT])
select
c.[ID],
c.[PARENTID],
c.[DESCRIPTION],
c.[DISPLAYORDER],
count(distinct q.[QUERYID])
from @CATEGORIES c
left join #QUERIESTOINCLUDE q on q.[QUERYCATEGORYCODEID] = c.[ID]
group by
c.[ID],
c.[PARENTID],
c.[DESCRIPTION],
c.[DISPLAYORDER],
c.[ACTIVE]
having c.[ACTIVE] = 1 or count(distinct q.[QUERYID]) > 0;
end
--Rollup by owner
else if @GROUPBY = 2
begin
declare @OWNERS table
(
[ID] uniqueidentifier,
[PARENTID] uniqueidentifier,
[NODENAME] nvarchar(max),
[DISPLAYORDER] int
);
insert into @OWNERS ([ID], [PARENTID], [NODENAME], [DISPLAYORDER])
select
a.[ID],
'00000000-0000-0000-0000-000000000000' [PARENTID],
case
when a.[DISPLAYNAME] = '' then a.[USERNAME]
else a.[DISPLAYNAME]
end [NODENAME],
row_number() over(order by
case
when a.[DISPLAYNAME] = '' then a.[USERNAME]
else a.[DISPLAYNAME]
end
) [DISPLAYORDER]
from (
select distinct query.[OWNERID]
from #QUERIESTOINCLUDE query
) q
inner join dbo.[APPUSER] a on q.[OWNERID] = a.[ID]
insert into @NODES([NODEID], [PARENTNODEID], [NODENAME], [DISPLAYORDER], [COUNT])
select
a.[ID],
a.[PARENTID],
a.[NODENAME],
a.[DISPLAYORDER],
count(distinct q.[QUERYID]) [COUNT]
from #QUERIESTOINCLUDE q
inner join @OWNERS a on q.[OWNERID] = a.[ID]
group by
a.[ID],
a.[PARENTID],
a.[NODENAME],
a.[DISPLAYORDER]
union all
select '00000000-0000-0000-0000-000000000000', '00000000-0000-0000-0000-000000000003', 'root', 1, 0;
end
--Rollup by recordtype
else if @GROUPBY = 3
begin
declare @RECORDTYPES table
(
[ID] uniqueidentifier,
[PARENTID] uniqueidentifier,
[NODENAME] nvarchar(max),
[DISPLAYORDER] int
);
insert into @RECORDTYPES ([ID], [PARENTID], [NODENAME], [DISPLAYORDER])
select distinct
r.[ID],
'00000000-0000-0000-0000-000000000000' [PARENTID],
r.[NAME] [NODENAME],
row_number() over(order by r.[NAME]) [DISPLAYORDER]
from (
select distinct query.[RECORDTYPEID]
from #QUERIESTOINCLUDE query
) q
inner join dbo.[RECORDTYPE] r on q.[RECORDTYPEID] = r.[ID]
insert into @NODES([NODEID], [PARENTNODEID], [NODENAME], [DISPLAYORDER], [COUNT])
select
r.[ID],
r.[PARENTID],
r.[NODENAME],
r.[DISPLAYORDER],
count(distinct q.[QUERYID]) [COUNT]
from #QUERIESTOINCLUDE q
inner join @RECORDTYPES r on q.[RECORDTYPEID] = r.[ID]
group by
r.[ID],
r.[PARENTID],
r.[NODENAME],
r.[DISPLAYORDER]
union all
select '00000000-0000-0000-0000-000000000000', '00000000-0000-0000-0000-000000000003', 'root', 1, 0;
end
/* Favorites */
insert into @NODES([NODEID], [PARENTNODEID], [NODENAME], [DISPLAYORDER], [COUNT])
select
'00000000-0000-0000-0000-000000000002',
'00000000-0000-0000-0000-000000000003',
'Favorite',
0,
count(distinct [QUERYID])
from #QUERIESTOINCLUDE
where [ISFAVORITE] = 1;
---------
/* 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]
)
select
f.[NODEID],
f.[PARENTNODEID],
f.[NODENAME],
f.[DISPLAYORDER],
sum(r.[COUNT]) [COUNT]
from [ROLLUP] r
inner join @NODES f on r.[PARENTNODEID] = f.[NODEID]
group by
f.[NODEID],
f.[PARENTNODEID],
f.[NODENAME],
f.[DISPLAYORDER];
if OBJECT_ID('tempdb..#QUERIESTOINCLUDE') is not null
drop table #QUERIESTOINCLUDE;
if OBJECT_ID('tempdb..#PERMISSIONEDFOLDERS') is not null
drop table #PERMISSIONEDFOLDERS;