-- @author jennie@ybos.net
-- @author wirth@ybos.net
--openacs port @samir.symphinity.com

--drop triggers
drop trigger faq_sc__itrg on faq_q_and_as;
drop trigger faq_sc__dtrg on faq_q_and_as;
drop trigger faq_sc__utrg on faq_q_and_as;

drop function faq_sc__itrg ();
drop function faq_sc__dtrg ();
drop function faq_sc__utrg ();

--drop functions
drop function faq__new_q_and_a (integer,integer,varchar,varchar,integer,varchar,timestamptz,integer,varchar,integer);
drop function faq__delete_q_and_a (integer);
drop function faq__new_faq (integer, varchar, boolean,varchar,timestamptz,integer,varchar,integer );
drop function faq__delete_faq (integer);
drop function faq__name (integer);
drop function faq__clone (integer,integer);

--drop permissions
delete from acs_permissions where object_id in (select entry_id from faq_q_and_as);
delete from acs_permissions where object_id in (select faq_id from faqs);




--
-- procedure inline_0/0
--
CREATE OR REPLACE FUNCTION inline_0(

) RETURNS integer AS $$
DECLARE
	object_rec		record;
  default_context 	acs_objects.object_id%TYPE;
  registered_users 	acs_objects.object_id%TYPE;
  the_public 				acs_objects.object_id%TYPE;
BEGIN


	--drop objects

	for object_rec in select object_id from acs_objects where object_type='faq'
	loop
		PERFORM acs_object__delete( object_rec.object_id );
	end loop;

	for object_rec in select object_id from acs_objects where object_type='faq_q_and_a'
	loop
		PERFORM acs_object__delete( object_rec.object_id );
	end loop;



-- bind privileges to global names

  default_context := acs__magic_object_id('default_context');
  registered_users := acs__magic_object_id('registered_users');
  the_public := acs__magic_object_id('the_public');

  -- revoke from the public the power to view faqs

  PERFORM acs_permission__revoke_permission (default_context, the_public, 'faq_view_faq');


  -- revoke from the public the power to view q_and_as

  PERFORM acs_permission__revoke_permission ( default_context,the_public, 'faq_view_q_and_a');



--drop permissions
	PERFORM acs_privilege__remove_child('create','faq_create_faq');
	PERFORM acs_privilege__remove_child('create','faq_create_q_and_a');
	PERFORM acs_privilege__remove_child('write','faq_modify_faq');
	PERFORM acs_privilege__remove_child('write','faq_modify_q_and_a');
	PERFORM acs_privilege__remove_child('read','faq_view_faq');
	PERFORM acs_privilege__remove_child('read','faq_view_q_and_a');
	PERFORM acs_privilege__remove_child('delete','faq_delete_faq');
	PERFORM acs_privilege__remove_child('delete','faq_delete_q_and_a');
	PERFORM acs_privilege__remove_child('admin','faq_admin_faq');

	PERFORM acs_privilege__remove_child('faq_admin_faq', 'faq_view_faq');
	PERFORM acs_privilege__remove_child('faq_admin_faq', 'faq_create_faq');
	PERFORM acs_privilege__remove_child('faq_admin_faq', 'faq_delete_faq');
	PERFORM acs_privilege__remove_child('faq_admin_faq', 'faq_modify_faq');
	PERFORM acs_privilege__remove_child('faq_admin_q_and_a', 'faq_view_q_and_a');
	PERFORM acs_privilege__remove_child('faq_admin_q_and_a', 'faq_create_q_and_a');
	PERFORM acs_privilege__remove_child('faq_admin_q_and_a', 'faq_delete_q_and_a');
	PERFORM acs_privilege__remove_child('faq_admin_q_and_a', 'faq_modify_q_and_a');
	PERFORM acs_privilege__remove_child('faq_admin_faq', 'faq_admin_q_and_a');

  	PERFORM acs_privilege__drop_privilege('faq_view_faq');
	PERFORM acs_privilege__drop_privilege('faq_create_faq');
	PERFORM acs_privilege__drop_privilege('faq_delete_faq');
	PERFORM acs_privilege__drop_privilege('faq_modify_faq');
	PERFORM acs_privilege__drop_privilege('faq_view_q_and_a');
	PERFORM acs_privilege__drop_privilege('faq_create_q_and_a');
	PERFORM acs_privilege__drop_privilege('faq_delete_q_and_a');
	PERFORM acs_privilege__drop_privilege('faq_modify_q_and_a');
	PERFORM acs_privilege__drop_privilege('faq_admin_faq');
	PERFORM acs_privilege__drop_privilege('faq_admin_q_and_a');
  			
	return 0;
END;
$$ LANGUAGE plpgsql;

select inline_0();

drop function inline_0();



--drop table
drop table faq_q_and_as;
drop table faqs;


--drop type
select acs_object_type__drop_type(
	   'faq',
	   't'
	);
select acs_object_type__drop_type(
	   'faq_q_and_a',
	   't'
	);