--
-- static_page__revoke_permission/4
--
create or replace function static_page__revoke_permission(
integer,
integer,
character varying,
boolean
) returns int4 as $$
declare
p_item_id alias for $1;
p_grantee_id alias for $2;
p_privilege alias for $3;
p_recursive_p alias for $4;
v_file_row RECORD;
v_folder_row RECORD;
begin
if p_recursive_p = 't' then
-- For each folder that is a descendant of item_id, revoke.
for v_folder_row in
select s1.folder_id from sp_folders s1, sp_folders s2
where s2.folder_id = p_item_id
and s1.tree_sortkey between s2.tree_sortkey and tree_right(s2.tree_sortkey)
loop
perform acs_permission__revoke_permission(
v_folder_row.folder_id, -- object_id
p_grantee_id, -- grantee_id
p_privilege -- privilege
);
end loop;
-- For each file that is a descendant of item_id, revoke.
for v_file_row in
select sp.static_page_id
from static_pages sp, sp_folders s1, sp_folders s2
where sp.folder_id = s1.folder_id
and s2.folder_id = p_item_id
and s1.tree_sortkey between s2.tree_sortkey and tree_right(s2.tree_sortkey)
loop
perform acs_permission__revoke_permission(
v_file_row.static_page_id, -- object_id
p_grantee_id, -- grantee_id
p_privilege -- privilege
);
end loop;
else
perform acs_permission__revoke_permission(
p_item_id, -- object_id
p_grantee_id, -- grantee_id
p_privilege -- privilege
);
end if;
return 0;
end;$$ language plpgsql;