-- Wimpy Point Data Model for ACS 4.0
-- 
-- Paul Konigsberg paulk@arsdigita.com 10/22/00
--    original module author Jon Salz jsalz@mit.edu
-- Ported to PostgreSQL: Jack Purswani and Sidharth Widge

-- Notes: 

-- Nothing is going into the content repository. 
-- Reasons for putting stuff in the repository:
-- You get versioning. You get indexed for intermedia searching.
-- Things that should go into the repository are:
-- 1. Presentation: You should be able to version a presentation. When you 
-- do, you should remember the current versions of all the slides in it.
-- 2. Slides.
-- 3. Attachments - since the repository is supposed to be good 
--    at handling weird lob data. (i.e. handling the mime type and
--    serving it back.
-- More on content repository: After Jesse Koontz's review, he said:
-- presentation -- subclass from content_items
-- slides -- subclass from content_items
-- Versions: are copied presentation
-- Clobs are mostly not used. Instead varchar(4000) is still being used
-- because working with clobs is tough in plsql. This needs to change.
-- Presentation have no context_id....should they? Answer: Yes their context id should
-- point to the package_id of the instance of this wimpy point. 
-- (There could be multiple instances.)



-- Only the basic -1 is implemented right now.
-- Style for presentation. We'll think more about this later if there's time 
-- maybe allow ADPs for more flexibility.

insert into cr_mime_types (label, mime_type) 
select 'Binary data', 'application/octet-stream'
from dual
where not exists (select 1 from cr_mime_types where mime_type ='application/octet-stream');


create sequence wp_style_seq;

create table wp_styles (
	style_id		integer 
                                constraint wp_styles_style_id_pk
                                primary key,
	name			varchar(400) 
                                constraint wp_styles_name_nn
                                not null,
	css			text,
	text_color		varchar(20) check(text_color like '%,%,%'),
	background_color	varchar(20) check(background_color like '%,%,%'),
	background_image	integer default 0,
	link_color		varchar(20) check(link_color like '%,%,%'),
	alink_color		varchar(20) check(alink_color like '%,%,%'),
	vlink_color		varchar(20) check(vlink_color like '%,%,%'),
	public_p		char(1) default 'f' check(public_p in ('t','f')),
	owner			integer 
				constraint wp_styles_to_users
				references users (user_id)
);


insert into wp_styles(style_id, name, css)
values(-1, 'Default (Plain)',
       'BODY { back-color: white; color: black } P { line-height: 120% } UL { line-height: 140% }');

-- this is also a new index!  roc@
create index wp_styles_by_owner on wp_styles(owner);

-- new table for supporting background images!
-- Images used for styles.

create table wp_style_images (
-- this one references to a cr!
	wp_style_images_id integer  primary key,
	style_id	integer references wp_styles(style_id) on delete cascade not null,
	file_size	integer not null,
	file_name	varchar(200) not null
);

create index wp_style_images_style_id on wp_style_images(style_id);


--jackp: p_create the presentation table
create table cr_wp_presentations (
	presentation_id		integer
				constraint cr_wp_presentations_id_fk
                                references cr_revisions
                                constraint cr_wp_presentations_pk
                                primary key,
	-- The title of the presentations, as displayed to the user.
	pres_title		varchar(400) 
                                constraint cr_wp_presentations_title_nn
                                not null,
	-- A signature on the bottom.
	page_signature		varchar(200),
	-- The copyright notice displayed on all pages.
	copyright_notice	varchar(400),
        -- Style information.
	style			integer
                                constraint cr_wp_style_fk
				references wp_styles on delete set null,
	public_p	        boolean
				constraint cr_wp_public_p_ck
				check(public_p in ('t','f')),
	-- Show last-modified date for slide?
	show_modified_p         boolean
				constraint cr_wp_show_p_ck
				check(show_modified_p in ('t','f')),
	show_comments_p		char(1) default 'f' 
				constraint cr_wp_comments_p 
				check(show_comments_p in ('t','f'))
);


-- Slide belonging to presentations. 
create table cr_wp_slides (
	slide_id		integer
				constraint cr_wp_slides_slide_id_fk
                                references cr_revisions
                                constraint cr_wp_slides_slide_id_pk
                                primary key,

	original_slide_id	integer,
	sort_key		integer  
                                constraint cr_wp_slides_sort_key_nn
                                not null,
	slide_title		varchar(400)
				constraint cr_wp_slides_title_nn
				not null,
	include_in_outline_p	boolean
				constraint cr_wp_slides_incld_ck
				check(include_in_outline_p in ('t','f')),
	context_break_after_p	boolean
				constraint cr_wp_slides_context_ck
				check(context_break_after_p in ('t','f')),
	style			integer
				constraint cr_wp_slides_style_fk
                                references wp_styles
);

create table cr_wp_presentations_aud (
	id 		integer  
                        references cr_revisions,
	presentation_id	integer
			constraint cr_wp_paudience_pid_nn
			not null
			constraint cr_wp_paudience_pid_fk
                       	references cr_wp_presentations
);

create table cr_wp_presentations_back (
	id 		integer 
                        references cr_revisions,
	presentation_id	integer
			constraint cr_wp_pbackground_pid_nn
			not null
			constraint cr_wp_pbackground_pid_fk
                       	references cr_wp_presentations
);

--jackp: table to store the preamble
create table cr_wp_slides_preamble (
	id 		integer 
                        references cr_revisions,
	slide_id	integer
			constraint cr_wp_spreamble_sid_nn
			not null
			constraint cr_wp_spreamble_sid_fk
                       	references cr_wp_slides
);

--jackp: table to store the postamble
create table cr_wp_slides_postamble (
	id 		integer
                        references cr_revisions,
	slide_id	integer
			constraint cr_wp_spostamble_sid_nn
			not null
			constraint cr_wp_spostamble_sid_fk
                       	references cr_wp_slides
);

--jackp: table to store the bullet items
create table cr_wp_slides_bullet_items (
	id 		integer 
                        references cr_revisions,
	slide_id	integer
			constraint cr_wp_sbullet_sid_nn
			not null
			constraint cr_wp_sbullet_sid_fk
                       	references cr_wp_slides
);

--jackp: Need to use inline functions in PostgreSQL.
--jackp: We p_create the main content type here.
--jackp: Need to use PERFORM command line to indicate that the line needs
--jackp: to be run.
create function inline_0 ()
returns integer as'
begin

--jackp: from acs-content-repository/sql/postgresql/content-type.sql
--jackp: The structure for content_type__create_type is as follows: 
--jackp:   PERFORM content_type__create_type (
--jackp:  	content_type        
--jackp:  	supertype             
--jackp:   	pretty_name            
--jackp: 	pretty_plural         
--jackp:	table_name            
--jackp:	id_column              
--jackp:	name_method          
--jackp:  );

	PERFORM content_type__create_type (
    		''cr_wp_presentation_aud'',
		''content_revision'',
  		''Wimpy Point  Presentation  Audience'',
		''Wimpy Point Presentation Audiences'',
		''cr_wp_presentations_aud'',
		''id'',
	        null
  	);

   	PERFORM content_type__create_type (
		''cr_wp_presentation_back'',
		''content_revision'',
		''Wimpy Point Presentation Background'',
		''WimpyPoint Presentation Backgrounds'',
		''cr_wp_presentations_back'', 
		''id'',
		null
	);

	PERFORM content_type__create_type (
		''cr_wp_presentation'',
		''content_revision'',
		''Wimpy Point Presentation'', 
		''WimpyPoint Presentations'',
		''cr_wp_presentations'',
		''presentation_id'',
		null
	);            
	return 0;
end;' language 'plpgsql';
select inline_0 ();
drop function inline_0 ();

create function inline_1 ()
returns integer as'
begin
	PERFORM content_type__create_type (
    		''cr_wp_slide_preamble'', 
		''content_revision'',
    		''wimpy Point Slide Preamble'', 
    		''Wimpy Point Slide Preambles'', 
   		''cr_wp_slides_preamble'', 
		''id'', 
		null
	);            

	PERFORM content_type__create_type (
		 ''cr_wp_slide_postamble'',
		 ''content_revision'',
		 ''wimpy Point Slide Postamble'',
		 ''WimpyPoint Slide Postamble'',
		 ''cr_wp_slides_postamble'',
		 ''id'',
		 null 
  	);
  
	PERFORM content_type__create_type (
		''cr_wp_slide_bullet_items'',
		''content_revision'',
		''wimpy Point Slide Bullet Items'',
		''WimpyPoint Slide Bullet Items'',
		''cr_wp_slides_bullet_items'',
		''id'',
		null
  	);

	PERFORM content_type__create_type (
		''cr_wp_slide'',
		''content_revision'',
		''WimpyPoint Slide'',
		''wimpy point slide'',
		''cr_wp_slides'',
		''slide_id'',
		null
  	);
	return 0;
end;' language 'plpgsql';
select inline_1 ();
drop function inline_1 ();

--jackp: This section p_creates the attributes that are linked to the
--jackp: different types
create function inline_2 ()
returns integer as'
declare
  	attr_id        acs_attributes.attribute_id%TYPE; 
begin

--jackp: from acs-content-repository/sql/postgresql/content-type.sql
--jackp: attr_id := content_type__create_attribute (
--jackp:  	content_type           
--jackp:  	attribute_name         
--jackp:  	datatype               
--jackp:  	pretty_name            
--jackp:  	pretty_plural          
--jackp:  	sort_order
--jackp: 	default_value
--jackp:  	column_spec
--jackp: );

 	attr_id := content_type__create_attribute (
    		''cr_wp_presentation'',
    		''pres_title'',		
    		''text'',			
    		''Presentation Title'',	
    		''Presentation Titles'',	
    		null,		  
    		null,		  
    		''text''
  	);

  	attr_id := content_type__create_attribute (
    		''cr_wp_presentation'',
    		''page_signature'',
    		''text'',
		''Page Signature'',
		''Page Signatures'',
		null,
		null,		
		''text''
	);

	attr_id := content_type__create_attribute (
		''cr_wp_presentation'',
		''copyright_notice'',
		''text'',
		''Copyright Notice'',
		''Copyright Notices'',	
		null,
		null,
		''text''
	);

	attr_id := content_type__create_attribute (
		''cr_wp_presentation'',
		''style'',
		''integer'',
		''Style'',
		''Styles'',
		null,
		null,
		''text''
	);

	attr_id := content_type__create_attribute (
		''cr_wp_presentation'',
		''public_p'',
		''boolean'',
		''Public Flag'',
		''Public Flags'',
		null,
		null,		
		''text''
	);

	attr_id := content_type__create_attribute (
		''cr_wp_presentation'',
		''show_modified_p'',
		''boolean'',	
		''Show Modified Flag'',
		''Show Modified Flags'',
		null,
		null,
		''text''
	);
	return 0;
end;' language 'plpgsql';
select inline_2 ();
drop function inline_2 ();


create function inline_3 ()
returns integer as'
declare
  	attr_id         acs_attributes.attribute_id%TYPE;
begin
  	attr_id := content_type__create_attribute (
    		''cr_wp_slide'',
    		''sort_key'',
    		''integer'',
    		''Sort Key'',
    		''Sort Keys'',
    		null,		
    		null,		
    		''text''
  	);

  	attr_id := content_type__create_attribute (
    		''cr_wp_slide'',
    		''slide_title'',
   	 	''text'',
    		''Slide Title'',
    		''Slide Titles'',
    		null,
    		null,
    		''text''
 	);

  	attr_id := content_type__create_attribute (
    		''cr_wp_slide'',
    		''include_in_outline_p'',
    		''boolean'',
    		''Include in Outline Flag'',
    		''Include in Outline Flags'',
    		null,
    		null,
    		''text''
  	);

  	attr_id := content_type__create_attribute (
    		''cr_wp_slide'',
    		''context_break_after_p'',
    		''boolean'',
    		''Context Break After Flag'',
    		''Context Break After Flags'',
    		null,
    		null,
    		''text''
  	);

  	attr_id := content_type__create_attribute (
    		''cr_wp_slide'',
    		''style'',
    		''integer'',
    		''Style'',
    		''Styles'',
    		null,
    		null,
    		''text''
  	);
	return 0;
end;' language 'plpgsql';
select inline_3 ();
drop function inline_3 ();

create function inline_4 ()
returns integer as'
declare
  	attr_id acs_attributes.attribute_id%TYPE;
begin

 	attr_id := content_type__create_attribute (
    		''cr_wp_presentation_aud'',
    		''presentation_id'',
    		''integer'',
    		''Prsentation ID'',
    		''Presentation IDs'',
    		null,
    		null,
    		''integer''
 	);

  	attr_id := content_type__create_attribute (
    		''cr_wp_presentation_back'',
    		''presentation_id'',
    		''integer'',
    		''Prsentation ID'',
    		''Presentation IDs'',
    		null,
    		null,
    		''integer''
  	);

  	attr_id := content_type__create_attribute (
    		''cr_wp_slide_preamble'',
    		''slide_id'',
    		''integer'',
    		''Slide ID'',
    		''Slide IDs'',
    		null,
    		null,
    		''integer''
  	);

  	attr_id := content_type__create_attribute (
    		''cr_wp_slide_postamble'',
    		''slide_id'',
    		''integer'',
    		''Slide ID'',
    		''Slide IDs'',
    		null,
    		null,
    		''integer''
  	);

  	attr_id := content_type__create_attribute (
    		''cr_wp_slide_bullet_items'',
    		''slide_id'',
    		''integer'',
    		''Slide ID'',
    		''Slide IDs'',
    		null,
    		null,
    		''integer''
  	);
	return 0;
end;' language 'plpgsql';
select inline_4 ();
drop function inline_4 ();

--jackp: We set the llinks with child types here.
--found in acs-content-repository/sql/postgresql/content-type.sql
create function inline_5 ()
returns integer as'
begin
	PERFORM content_type__register_child_type(''cr_wp_presentation'',''cr_wp_presentation_aud'', ''generic'', 0, null);
 	PERFORM content_type__register_child_type(''cr_wp_presentation'', ''cr_wp_presentation_back'', ''generic'', 0, null);
	PERFORM content_type__register_child_type(''cr_wp_presentation'', ''cr_wp_slide'', ''generic'', 0, null);
	PERFORM content_type__register_child_type(''cr_wp_slide'', ''cr_wp_slide_preamble'', ''generic'', 0, null);
 	PERFORM content_type__register_child_type(''cr_wp_slide'', ''cr_wp_slide_postamble'', ''generic'', 0, null);
 	PERFORM content_type__register_child_type(''cr_wp_slide'', ''cr_wp_slide_bullet_items'', ''generic'', 0, null);
	return 0;
end;' language 'plpgsql';
select inline_5 ();
drop function inline_5 ();

--jackp: Register the content types with the acs-objects
--jackp: found in acs-content-repository/sql/postgresql/content-folder.sql
create function inline_6 ()
returns integer as'
begin
 	PERFORM content_folder__register_content_type(content_item_globals.c_root_folder_id, ''cr_wp_presentation'', ''f'');
 	PERFORM content_folder__register_content_type(content_item_globals.c_root_folder_id, ''cr_wp_presentation_aud'', ''f'');
	PERFORM content_folder__register_content_type(content_item_globals.c_root_folder_id, ''cr_wp_presentation_back'', ''f'');
	PERFORM content_folder__register_content_type(content_item_globals.c_root_folder_id, ''cr_wp_slide'', ''f'');
	PERFORM content_folder__register_content_type(content_item_globals.c_root_folder_id, ''cr_wp_slide_preamble'', ''f'');
	PERFORM content_folder__register_content_type(content_item_globals.c_root_folder_id, ''cr_wp_slide_postamble'', ''f'');
	PERFORM content_folder__register_content_type(content_item_globals.c_root_folder_id, ''cr_wp_slide_bullet_items'', ''f'');
	return 0;
end;' language 'plpgsql';
select inline_6 ();
drop function inline_6 ();

-- DRB: table for file attachments.  Empty but necessary because the object
-- system doesn't allow for simple renaming of types.  Nor can two types
-- share an attribute table.

create table cr_wp_file_attachments (
	attach_id	integer
		        constraint cr_fattach_attach_id_fk
			references cr_revisions
			constraint cr_fattach_attach_id_pk
			primary key
);

create table cr_wp_image_attachments (
	attach_id	integer
		        constraint cr_iattach_attach_id_fk
			references cr_revisions
			constraint cr_iattach_attach_id_pk
			primary key,
        display         varchar(20)
	                constraint cr_iattach_display_ck
			check(display in (
				      'preamble',
				      'bullets', 
				      'postamble', 
				      'top', 
				      'after_preamble', 
				      'after_bullets', 
				      'bottom'))
);

--jackp: p_create the content-type and content-attribute associated with
--jackp: attachments
create function inline_7 ()
returns integer as'
declare
  	attr_id            acs_attributes.attribute_id%TYPE;
begin
 	PERFORM content_type__create_type (
		''cr_wp_image_attachment'',
		''image'',
		''Wimpy Image Attachment'',
		''Wimpy Image Attachments'',
		''cr_wp_image_attachments'',
		''attach_id'',
		null 
  	);

 	attr_id := content_type__create_attribute (
	       ''cr_wp_image_attachment'',
	       ''display'',
	       ''text'',
	       ''Where to display'',
	       ''Where display this'',
	       null,		   
	       null,		   
	       ''varchar(20)''
 	);

 	PERFORM content_type__create_type (
		''cr_wp_file_attachment'',
		''content_revision'',
		''Wimpy File Attachment'',
		''Wimpy File Attachments'',
		''cr_wp_file_attachments'',
		''attach_id'',
		null 
  	);

 	attr_id := content_type__create_attribute (
	       ''cr_wp_file_attachment'',
	       ''display'',
	       ''text'',
	       ''Where to display'',
	       ''Where display this'',
	       null,		   
	       null,		   
	       ''varchar(20)''
 	);

	return 0;
end;' language 'plpgsql';
select inline_7 ();
drop function inline_7 ();

--jackp: register the child types for attachments
create function inline_8 ()
returns integer as'
begin
 	PERFORM content_type__register_child_type(
		''cr_wp_slide'',
		''cr_wp_image_attachment'', 
		''generic'', 
		0, 
		null
	);
 	PERFORM content_type__register_child_type(
		''cr_wp_slide'',
		''cr_wp_file_attachment'', 
		''generic'', 
		0, 
		null
	);
	return 0;
end;' language 'plpgsql';
select inline_8 ();
drop function inline_8 ();

--jackp: register the different content types for attachments
--create function inline_9 ()
--returns integer as'
--begin
--  	PERFORM content_folder__register_content_type(
--		content_item_globals.c_root_folder_id, 
--		''cr_wp_attachment'', 
--		''f''
--	);
--	return 0;
--end;' language 'plpgsql';
--select inline_9 ();
--drop function inline_9 ();

commit;

--Define some privileges on the wp_presentation object.
--jackp: found in acs-kernel/sql/postgresql/acs-permissions-create.sql
create function inline_10 ()
returns integer as'
begin
	PERFORM acs_privilege__create_privilege(
		''wp_admin_presentation'', 
		null, 
		null
	);
        
	PERFORM acs_privilege__create_privilege(
		''wp_create_presentation'', 
		null, 
		null
	);
        
	PERFORM acs_privilege__create_privilege(
		''wp_edit_presentation'', 
		null, 
		null
	); 	

        PERFORM acs_privilege__create_privilege(
		''wp_delete_presentation'', 
		null, 
		null
	);
        
	PERFORM acs_privilege__create_privilege(
		''wp_view_presentation'', 
		null, 
		null
	);

	return 0;
end;' language 'plpgsql';
select inline_10 ();
drop function inline_10 ();


--jackp: set the permissions applicable to the package
create function inline_11 ()
returns integer as'
declare
    	default_context acs_objects.object_id%TYPE;
    	registered_users acs_objects.object_id%TYPE;
    	the_public acs_objects.object_id%TYPE;
begin
    	default_context := acs__magic_object_id(''default_context'');
    	registered_users := acs__magic_object_id(''registered_users'');
--    	the_public := acs__magic_object_id(''the_public'');

    	PERFORM acs_permission__grant_permission(
		default_context, 
		registered_users, 
		''wp_create_presentation''
	);

--	this commented out because permission, with this any user could see an slide that has not become public!
--    	PERFORM acs_permission__grant_permission(
--		default_context, 
--		the_public, 
--		''wp_view_presentation''
--	);
	return 0;
end;' language 'plpgsql';
select inline_11 ();
drop function inline_11 ();

--jackp: From here on the functions are defined

--jackp: To p_create each presentation
create function wp_presentation__new (
	timestamp with time zone,
	integer,
	varchar(400),
	varchar(400),	
	varchar(400),	
	varchar,	
	integer,	
	boolean,
	boolean,
	varchar,
	varchar,
	integer
) 
returns integer as'     
declare
	p_creation_date	      	alias for $1;
	p_creation_user	      	alias for $2;
	p_creation_ip	      	alias for $3;
	p_pres_title	      	alias for $4;
	p_page_signature	alias for $5;
	p_copyright_notice      alias for $6;
	p_style		      	alias for $7;
	p_public_p	      	alias for $8;
	p_show_modified_p      	alias for $9;
	aud	      	alias for $10;
	back	      	alias for $11;
	p_parent_id		alias for $12;
	v_item_id               cr_items.item_id%TYPE;
    	v_audience_item_id	cr_items.item_id%TYPE;
    	v_background_item_id	cr_items.item_id%TYPE;
    	v_revision_id		cr_revisions.revision_id%TYPE;
    	v_audience_revision_id	cr_revisions.revision_id%TYPE;
    	v_background_revision_id cr_revisions.revision_id%TYPE;
    	v_max_id                integer;
    	v_name                  cr_wp_presentations.pres_title%TYPE;
begin 
    select coalesce(max(item_id),0) into v_max_id
    from cr_items
    where content_type = ''cr_wp_presentation''
    and   name like p_pres_title || ''%'';
    
    v_name := p_pres_title || ''_'' || v_max_id;

    v_item_id := content_item__new( 
      v_name,
      p_parent_id,
      null,
      null,
      p_creation_date,
      p_creation_user,
      null,
      p_creation_ip,
      ''content_item'',
      ''cr_wp_presentation'',
       null,
       null,
       ''text/plain'',
       null,
       null,
       ''text''
    );

    v_revision_id := content_revision__new(
      null,
      null,
      current_timestamp,
      ''text/plain'',
      null,
      null,
      v_item_id,
      null,
      p_creation_date,
      p_creation_user,
      p_creation_ip
    );
    
    PERFORM content_item__set_live_revision(v_revision_id);

--jackp: Actually place the information entered by the user into the table
    insert into cr_wp_presentations
    (
	presentation_id,
	pres_title,
    	page_signature,
    	copyright_notice,
    	style,
    	public_p,
    	show_modified_p
    ) values (
    	v_revision_id,
    	p_pres_title,
    	p_page_signature,
    	p_copyright_notice,
    	p_style,
    	p_public_p,
    	p_show_modified_p
    );
   
    v_audience_item_id := content_item__new(    
      aud,
      v_item_id,
      null,
      null,
      p_creation_date,
      p_creation_user,
      null,
      p_creation_ip,
      ''content_item'',
      ''cr_wp_presentation_aud'',
       null,
       null,
       ''text/plain'',
       null,
       null,
       ''text''
    );

    v_audience_revision_id := content_revision__new(
      null,
      null,
      current_timestamp,
      ''text/plain'',
      null,
      aud,
      v_audience_item_id,
      null,
      p_creation_date,
      p_creation_user,
      p_creation_ip
     );
    
    PERFORM content_item__set_live_revision(v_audience_revision_id);
      
    insert into cr_wp_presentations_aud
    (
    	id,
    	presentation_id
    ) values (
    	v_audience_revision_id,
   	v_revision_id
    );
    
    v_background_item_id := content_item__new(
      back,
      v_item_id,
      null,
      null,
      p_creation_date,
      p_creation_user,
      null,
      p_creation_ip,
      ''content_item'',
      ''cr_wp_presentation_back'',
       null,
       null,
       ''text/plain'',
       null,
       null,
       ''text''
    );
    
    v_background_revision_id := content_revision__new(
      null,
      null,
      current_timestamp,
      ''text/plain'',
      null,
      back,
      v_background_item_id,
      null,
      p_creation_date,
      p_creation_user,
      p_creation_ip
    );
    
    PERFORM content_item__set_live_revision(v_background_revision_id);
     
    insert into cr_wp_presentations_back
    (
    	id,
    	presentation_id
    ) values (
    	v_background_revision_id,
    	v_revision_id
    );
    
    return v_item_id;
end;' language 'plpgsql';
        
create function wp_presentation__delete_audience (
	integer		 
)
returns integer as'
declare
	audience_item_id	alias for $1;
begin
    delete from cr_wp_presentations_aud
    where exists (select 1 from cr_revisions where revision_id = cr_wp_presentations_aud.id and item_id = audience_item_id);     
    delete from cr_item_publish_audit
    where item_id = audience_item_id;
     
    PERFORM content_item__delete(audience_item_id);
return 0;
end;' language 'plpgsql';

create function wp_presentation__delete_background (
	integer		 
)
returns integer as'
declare
	background_item_id	alias for $1;
begin
    delete from cr_wp_presentations_back
    where exists (select 1 from cr_revisions where revision_id = cr_wp_presentations_back.id and item_id = background_item_id);  
    delete from cr_item_publish_audit
    where item_id = background_item_id;
    
    PERFORM content_item__delete(background_item_id);
    return 0;
end;' language 'plpgsql';

create function wp_presentation__delete (
	integer		
)
returns integer as'
declare
    pres_item_id					alias for $1;
    v_audience_item_id		cr_items.item_id%TYPE;
    v_background_item_id	cr_items.item_id%TYPE;
    del_rec record;
begin
    for del_rec in select item_id as slide_item_id
    from cr_items
    where content_type = ''cr_wp_slide''
    and   parent_id = pres_item_id 
    loop 
       PERFORM wp_slide__delete(del_rec.slide_item_id);
    end loop;
    
    select item_id into v_audience_item_id
    from cr_items
    where content_type = ''cr_wp_presentation_aud''
    and   parent_id = pres_item_id;
    
    PERFORM wp_presentation__delete_audience(v_audience_item_id);
    
    select item_id into v_background_item_id
    from cr_items
    where content_type = ''cr_wp_presentation_back''
    and   parent_id = pres_item_id;
    
    PERFORM wp_presentation__delete_background(v_background_item_id);
    
    delete from acs_permissions where object_id = pres_item_id;
   -- update acs_objects set context_id=null where context_id = pres_item_id;
    delete from cr_wp_presentations where exists (select 1 from cr_revisions where cr_revisions.revision_id = cr_wp_presentations.presentation_id and cr_revisions.item_id = pres_item_id);
    PERFORM content_item__delete(pres_item_id);
return 0;
end;' language 'plpgsql';

-- DRB: All these could've been implemented as a single function with a type argument
-- but I'm not going to rewrite all of wp-slim's queries just to clean this up...

create function wp_presentation__get_ad_revision (integer) returns text as '
declare
    p_pres_revision_id	alias for $1;
begin
  return r.content
  from cr_revisions r,
    cr_wp_presentations_aud pa
  where pa.presentation_id = p_pres_revision_id
    and r.revision_id = pa.id;
end;' language 'plpgsql';

create function wp_presentation__get_audience (
	integer		
) returns text as'
declare
    p_pres_item_id	alias for $1;
begin
    return content
    from cr_revisions, cr_items
    where cr_items.content_type = ''cr_wp_presentation_aud''
    and cr_items.parent_id = p_pres_item_id
    and cr_revisions.revision_id = cr_items__live_revision;
end;' language 'plpgsql';

create function wp_presentation__get_bg_revision (integer) returns text as '
declare
    p_pres_revision_id	alias for $1;
begin
  return r.content
  from cr_revisions r,
    cr_wp_presentations_aud pa
  where pa.presentation_id = p_pres_revision_id
    and r.revision_id = pa.id;
end;' language 'plpgsql';

create function wp_presentation__get_background (
    integer	
) returns text as'
declare 
    pres_item_id	alias for $1;
begin
    return content
    from cr_revisions, cr_items
    where cr_items.content_type = ''cr_wp_presentation_bak''
    and cr_items.parent_id = p_pres_item_id
    and cr_revisions.revision_id = cr_items__live_revision;
end;' language 'plpgsql';
   

create function wp_presentation__new_revision (
    timestamp with time zone,
    integer,	 
    varchar,	 
    integer,	 
    varchar(400),    
    varchar(200),	 
    varchar(400),	 
    integer,		
    boolean,	
    boolean,	
    varchar,	
    varchar
) returns integer as' 
declare
    p_creation_date	alias for $1;
    p_creation_user	alias for $2;
    p_creation_ip	alias for $3;
    p_pres_item_id	alias for $4;
    p_pres_title	alias for $5;
    p_page_signature	alias for $6;
    p_copyright_notice	alias for $7;
    p_style		alias for $8;
    p_public_p		alias for $9;
    p_show_modified_p	alias for $10;
    p_audience		alias for $11;
    p_background	alias for $12;
    v_audience_item_id          cr_items.item_id%TYPE;
    v_background_item_id        cr_items.item_id%TYPE;
    v_revision_id               cr_revisions.revision_id%TYPE;
    v_audience_revision_id      cr_revisions.revision_id%TYPE;
    v_background_revision_id    cr_revisions.revision_id%TYPE;
begin
    v_revision_id := content_revision__new(
      null,
      null,
      current_timestamp,
      ''text/plain'',
      null,
      null,
      p_pres_item_id,
      null,
      p_creation_date,
      p_creation_user,
      p_creation_ip
    );

    PERFORM content_item__set_live_revision(v_revision_id);
       
    insert into cr_wp_presentations
    (
     	presentation_id,
    	pres_title,
    	page_signature,
    	copyright_notice,
    	style,
    	public_p,
    	show_modified_p
    ) values ( 
     	v_revision_id,
    	p_pres_title,
    	p_page_signature,
   	p_copyright_notice,
    	p_style,
    	p_public_p,
    	p_show_modified_p
    );
   
    select item_id into v_audience_item_id
    from cr_items
    where parent_id = p_pres_item_id
    and   content_type = ''cr_wp_presentation_aud'';
    
    v_audience_revision_id := content_revision__new(
      null,
      null,
      current_timestamp,
      ''text/plain'',
      null,
      p_audience,
      v_audience_item_id,
      null,
      p_creation_date,
      p_creation_user,
      p_creation_ip
    );
    
    PERFORM content_item__set_live_revision(v_audience_revision_id);
        
    insert into cr_wp_presentations_aud
    (
    	id,
    	presentation_id
    ) values (
    	v_audience_revision_id,
    	v_revision_id
    );
    
    select item_id into v_background_item_id
    from cr_items
    where parent_id = p_pres_item_id   
    and   content_type = ''cr_wp_presentation_back'';
        
    v_background_revision_id := content_revision__new(
      null,
      null,
      current_timestamp,
      ''text/plain'',
      null,
      p_background,
      v_background_item_id,
      null,
      p_creation_date,
      p_creation_user,
      p_creation_ip
    );
    
    PERFORM content_item__set_live_revision(v_background_revision_id);
    
    insert into cr_wp_presentations_back 
    (
    	id,
    	presentation_id
    ) values (
    	v_background_revision_id,
    	v_revision_id
    );
    return 0;
end;' language 'plpgsql';

create function wp_slide__new (
    integer,
    timestamp with time zone,
    integer,
    varchar,
    varchar,
    integer,
    integer,
    integer,
    varchar,
    varchar,
    varchar,
    boolean,
    boolean,
    integer
) returns integer as'
declare
    p_pres_item_id           alias for $1; 
    p_creation_date          alias for $2; 
    p_creation_user          alias for $3; 
    p_creation_ip            alias for $4; 
    p_slide_title            alias for $5;
    p_style                  alias for $6;
    p_original_slide_id      alias for $7;
    p_sort_key               alias for $8;
    p_preamble               alias for $9;
    p_bullet_items           alias for $10;
    p_postamble              alias for $11;
    p_include_in_outline_p   alias for $12;
    p_context_break_after_p  alias for $13;
    p_context_id             alias for $14;
    v_item_id                   cr_items.item_id%TYPE;
    v_preamble_item_id          cr_items.item_id%TYPE;
    v_postamble_item_id         cr_items.item_id%TYPE;
    v_bullet_items_item_id      cr_items.item_id%TYPE;
    v_revision_id               cr_revisions.revision_id%TYPE;
    v_preamble_revision_id      cr_revisions.revision_id%TYPE;
    v_postamble_revision_id     cr_revisions.revision_id%TYPE;
    v_bullet_items_revision_id  cr_revisions.revision_id%TYPE;
    v_max_id                    integer;
    v_name                      varchar;
begin
    select coalesce(max(item_id),0) into v_max_id
    from cr_items
    where content_type = ''cr_wp_slide''
    and   name like p_slide_title || ''%'';
    
    v_name := p_slide_title || ''_'' || v_max_id;
  
    v_item_id := content_item__new(
      v_name,
      p_pres_item_id,
      null,
      null,
      p_creation_date,
      p_creation_user,
      null,
      p_creation_ip,
      ''content_item'',
      ''cr_wp_slide'',      
      null,
      null,
      ''text/plain'',
      null,
      null,
      ''text''
    );

    v_revision_id := content_revision__new(
      null,
      null, 
      current_timestamp,
      ''text/plain'', 
      null, 
      null,
      v_item_id,
      null,
      p_creation_date,
      p_creation_user,
      p_creation_ip          
    );
      
    PERFORM content_item__set_live_revision(v_revision_id);

    update cr_wp_slides
    set sort_key = sort_key + 1
    where sort_key >= p_sort_key
    and  exists (select 1 from cr_items, cr_revisions where parent_id =
      p_pres_item_id and cr_items.item_id = cr_revisions.item_id 
    and cr_revisions.revision_id=cr_wp_slides.slide_id);
        
    insert into cr_wp_slides
    ( 
    	slide_id,
    	original_slide_id,
    	sort_key,
    	slide_title,
   	 include_in_outline_p,
    	context_break_after_p,
    	style  
    ) values ( 
    	v_revision_id,
    	p_original_slide_id,
    	p_sort_key,
    	p_slide_title,
    	p_include_in_outline_p,
    	p_context_break_after_p,
    	p_style
    );  
    
    v_preamble_item_id := content_item__new(
      ''preamble'',
      v_item_id,
      null,
      null,
      p_creation_date,
      p_creation_user,
      null,
      p_creation_ip,
      ''content_item'',
      ''cr_wp_slide_preamble'',
      null,
      null,
      ''text/plain'',
      null,
      null,
      ''text''
    );  

    v_preamble_revision_id := content_revision__new(
      null,
      null, 
      current_timestamp,
      ''text/plain'', 
      null, 
      p_preamble,
      v_preamble_item_id,
      null,
      p_creation_date,
      p_creation_user,
      p_creation_ip          
    );
    
    PERFORM content_item__set_live_revision(v_preamble_revision_id);

    insert into cr_wp_slides_preamble
    (
    	id,
    	slide_id
    ) values (
    	v_preamble_revision_id,
    	v_revision_id
    );

    v_postamble_item_id := content_item__new(
      ''postamble'',
      v_item_id,
      null,
      null,
      p_creation_date,
      p_creation_user,
      null,
      p_creation_ip,
      ''content_item'',
      ''cr_wp_slide_postamble'',
      null,
      null,
      ''text/plain'',
      null,
      null,
      ''text''      
    );


    v_postamble_revision_id := content_revision__new(
      null,
      null, 
      current_timestamp,
      ''text/plain'', 
      null, 
      p_postamble,
      v_postamble_item_id,
      null,
      p_creation_date,
      p_creation_user,
      p_creation_ip          
    );

    PERFORM content_item__set_live_revision(v_postamble_revision_id);
    
    insert into cr_wp_slides_postamble
    (
    	id,
    	slide_id
    ) values ( 
    	v_postamble_revision_id,
    	v_revision_id
    );

    v_bullet_items_item_id := content_item__new(
      ''bullet_items'',
      v_item_id,
      null,
      null,
      p_creation_date,
      p_creation_user,
      null,
      p_creation_ip,
      ''content_item'',
      ''cr_wp_slide_bullet_items'',
      null,
      null,
      null,
      ''text/plain'',
      null,  
      ''text''      
    );


    v_bullet_items_revision_id := content_revision__new(
      null,
      null, 
      current_timestamp,
      ''text/plain'', 
      null, 
      p_bullet_items,
      v_bullet_items_item_id,
      null,
      p_creation_date,
      p_creation_user,
      p_creation_ip          
    );

    PERFORM content_item__set_live_revision(v_bullet_items_revision_id);

    insert into cr_wp_slides_bullet_items
    (
    	id,
    	slide_id
    ) values (
 	v_bullet_items_revision_id,
    	v_revision_id
    );
    return v_item_id;
end;' language 'plpgsql';

create function wp_slide__delete_preamble (
    integer
) returns integer as'
declare
    delete_preamble__preamble_item_id         alias for $1;
begin 
    delete from cr_wp_slides_preamble
    where exists (select 1 from cr_revisions where revision_id =
    cr_wp_slides_preamble.id
    and item_id = delete_preamble__preamble_item_id);    
    
    delete from cr_item_publish_audit
    where item_id = delete_preamble__preamble_item_id;

    PERFORM content_item__delete(delete_preamble__preamble_item_id);
    return 0;
end;' language 'plpgsql'; 

create function wp_slide__delete_postamble(
    integer
) returns integer as'
declare
    delete_postamble__postamble_item_id          alias for $1;
begin
    delete from cr_wp_slides_postamble
    where exists (select 1 from cr_revisions where revision_id =
    cr_wp_slides_postamble.id
    and item_id = delete_postamble__postamble_item_id);
    
    delete from cr_item_publish_audit
    where item_id = delete_postamble__postamble_item_id;
  
    PERFORM content_item__delete(delete_postamble__postamble_item_id);
    return 0;
end;' language 'plpgsql';

create function wp_slide__delete_bullet_items(
    integer
) returns integer as'
declare
    delete_bullet_items__bullet_items_item_id            alias for $1;
begin 
    delete from cr_wp_slides_bullet_items
    where exists (select 1 from cr_revisions where revision_id =
    cr_wp_slides_bullet_items.id
    and item_id = delete_bullet_items__bullet_items_item_id);
    
    delete from cr_item_publish_audit
    where item_id = delete_bullet_items__bullet_items_item_id;

    PERFORM content_item__delete(delete_bullet_items__bullet_items_item_id);
    return 0;
end;' language 'plpgsql';

create function wp_slide__delete(
    integer
) returns integer as'
declare
    del_rec record;
    slide_item_id  					         alias for $1;
    v_sort_key                       cr_wp_slides.sort_key%TYPE;
    v_pres_item_id                   cr_items.item_id%TYPE;
    v_preamble_item_id               cr_items.item_id%TYPE;
    v_postamble_item_id              cr_items.item_id%TYPE;
    v_bullet_items_item_id           cr_items.item_id%TYPE;
begin
    for del_rec in select item_id as attach_item_id
    from cr_items
    where content_type in (''cr_wp_image_attachment'', ''cr_wp_file_attachment'')
    and   parent_id = slide_item_id
    loop
     PERFORM wp_attachment__delete(del_rec.attach_item_id);
    end loop;

    select item_id into v_preamble_item_id
    from cr_items
    where content_type = ''cr_wp_slide_preamble''
    and   parent_id = slide_item_id;
    
    PERFORM wp_slide__delete_preamble(v_preamble_item_id);
    
    select item_id into v_postamble_item_id
    from cr_items
    where content_type = ''cr_wp_slide_postamble''
    and   parent_id = slide_item_id;

    PERFORM wp_slide__delete_postamble(v_postamble_item_id);
    
    select item_id into v_bullet_items_item_id
    from cr_items
    where content_type = ''cr_wp_slide_bullet_items''
    and   parent_id = slide_item_id;
    
    PERFORM wp_slide__delete_bullet_items(v_bullet_items_item_id);

-- sort_key of all revisions should be the same
    select max(s.sort_key), max(i.parent_id) into v_sort_key,
      v_pres_item_id
    from cr_wp_slides s, cr_revisions r, cr_items i
    where r.item_id = slide_item_id
    and   r.revision_id = s.slide_id
    and   i.item_id = r.item_id;
    
    delete from cr_wp_slides where exists (select 1 from cr_revisions
    where cr_revisions.revision_id = cr_wp_slides.slide_id
    and cr_revisions.item_id = slide_item_id);

    update cr_wp_slides set sort_key = sort_key - 1 
    where sort_key > v_sort_key and exists 
      (select 1 from cr_revisions r, cr_items i 
      where i.parent_id = v_pres_item_id and i.item_id = r.item_id
      and r.revision_id = cr_wp_slides.slide_id);    

--    update acs_objects set context_id=null
--    where context_id = slide_item_id;

    delete from cr_item_publish_audit where item_id = slide_item_id;

    PERFORM content_item__delete(slide_item_id);
    return 0;
end;' language 'plpgsql';

create function wp_slide__get_preamble_revision (
    integer
) returns text as '
declare
  p_slide_revision_id alias for $1;
begin
  return content
  from cr_revisions r, cr_wp_slides_preamble sp
  where sp.slide_id = p_slide_revision_id
  and r.revision_id = sp.id;
end;' language 'plpgsql';

create function wp_slide__get_postamble_revision (
    integer
) returns text as '
declare
  p_slide_revision_id alias for $1;
begin
  return content
  from cr_revisions r, cr_wp_slides_postamble sp
  where sp.slide_id = p_slide_revision_id
  and r.revision_id = sp.id;
end;' language 'plpgsql';

create function wp_slide__get_bullet_items_revision (
    integer
) returns text as '
declare
  p_slide_revision_id alias for $1;
begin
  return content
  from cr_revisions r, cr_wp_slides_bullet_items sp
  where sp.slide_id = p_slide_revision_id
  and r.revision_id = sp.id;
end;' language 'plpgsql';

create function wp_slide__get_postamble(
    integer
) returns text as '
declare
    p_slide_item_id	alias for $1;
begin
    return content
    from cr_revisions, cr_items
    where cr_items.content_type = ''cr_wp_slide_postamble''
    and cr_items.parent_id = p_slide_item_id
    and cr_revisions.revision_id = cr_items.live_revision;
end;' language 'plpgsql';

create function wp_slide__get_preamble(
    integer
) returns text as'
declare
    p_slide_item_id                alias for $1;
begin
    return content
    from cr_revisions, cr_items
    where cr_items.content_type = ''cr_wp_slide_preamble''
    and cr_items.parent_id = p_slide_item_id
    and cr_revisions.revision_id = cr_items.live_revision;
end;' language 'plpgsql';

create function wp_slide__get_bullet_items(
    integer
) returns text as'
declare
    p_slide_item_id	alias for $1;
begin
    return content
    from cr_revisions, cr_items
    where cr_items.content_type = ''cr_wp_slide_bullet_items''
    and cr_items.parent_id = p_slide_item_id
    and cr_revisions.revision_id = cr_items.live_revision;
end;' language 'plpgsql';

create function wp_slide__new_revision(
    timestamp with time zone,
    integer,
    varchar,
    integer,
    varchar, 
    text, 
    varchar, 
    varchar, 
    integer, 
    integer, 
    integer, 
    boolean,
    boolean
) returns integer as'
declare
    p_creation_date                  alias for $1;  
    p_creation_user                  alias for $2;
    p_creation_ip                    alias for $3;
    p_slide_item_id                  alias for $4;
    p_slide_title                    alias for $5;
    p_preamble                       alias for $6;
    p_bullet_items                   alias for $7;
    p_postamble                      alias for $8;
    p_style                          alias for $9;
    p_original_slide_id              alias for $10;
    p_sort_key                       alias for $11;    
    p_include_in_outline_p           alias for $12;
    p_context_break_after_p          alias for $13;
    v_preamble_item_id          cr_items.item_id%TYPE;
    v_postamble_item_id         cr_items.item_id%TYPE;
    v_bullet_items_item_id      cr_items.item_id%TYPE;
    v_revision_id               cr_revisions.revision_id%TYPE;
    v_preamble_revision_id      cr_revisions.revision_id%TYPE;
    v_postamble_revision_id     cr_revisions.revision_id%TYPE;
    v_bullet_items_revision_id  cr_revisions.revision_id%TYPE;
begin
    v_revision_id := content_revision__new(
      null,
      null,
      current_timestamp,
      ''text/plain'',
      null,
      null,
      p_slide_item_id,
      null,
      p_creation_date,
      p_creation_user,
      p_creation_ip
    );

    PERFORM content_item__set_live_revision(v_revision_id);
    
    insert into cr_wp_slides
    (
     	slide_id,
    	slide_title,
    	style,
    	original_slide_id,
	sort_key,
    	include_in_outline_p,
    	context_break_after_p
    ) values (
	v_revision_id,
    	p_slide_title,
    	p_style,
    	p_original_slide_id,
    	p_sort_key,
    	p_include_in_outline_p,
    	p_context_break_after_p 
    );

    select item_id into v_preamble_item_id
    from cr_items
    where parent_id = p_slide_item_id
    and   content_type = ''cr_wp_slide_preamble'';
    
    v_preamble_revision_id := content_revision__new(
      null,
      null,
      current_timestamp,
      ''text/plain'',
      null,
      p_preamble,
      v_preamble_item_id,
      null,
      p_creation_date,
      p_creation_user,
      p_creation_ip
    );
          
    PERFORM content_item__set_live_revision(v_preamble_revision_id);

    insert into cr_wp_slides_preamble
    (
    	id,
    	slide_id
    ) values (
    	v_preamble_revision_id,
    	v_revision_id
    );

    select item_id into v_postamble_item_id
    from cr_items
    where parent_id = p_slide_item_id
    and   content_type = ''cr_wp_slide_postamble'';

    v_postamble_revision_id := content_revision__new(
      null,
      null,
      current_timestamp,
      ''text/plain'',
      null,
      p_postamble,
      v_postamble_item_id,
      null,
      p_creation_date,
      p_creation_user,
      p_creation_ip
    );

    PERFORM content_item__set_live_revision(v_postamble_revision_id);
      
    insert into cr_wp_slides_postamble
    (
    	id,
    	slide_id
    ) values (
    	v_postamble_revision_id,
    	v_revision_id
    );

    select item_id into v_bullet_items_item_id
    from cr_items
    where parent_id = p_slide_item_id
    and   content_type = ''cr_wp_slide_bullet_items'';
 
    v_bullet_items_revision_id := content_revision__new(
      null,
      null,
      current_timestamp,
      ''text/plain'',
      null,
      p_bullet_items,
      v_bullet_items_item_id,
      null,
      p_creation_date,
      p_creation_user,
      p_creation_ip
    );

    PERFORM content_item__set_live_revision(v_bullet_items_revision_id); 

    insert into cr_wp_slides_bullet_items
    (
    	id,
    	slide_id
    ) values ( 
   	v_bullet_items_revision_id,
    	v_revision_id
    );
    return 0;
end;' language 'plpgsql';

-- bug fixed, delete first an image then a file, roc@
create function wp_attachment__delete(
    integer
) returns integer as'
declare 
    p_attach_item_id		alias for $1;
begin
   
    delete from cr_wp_image_attachments
    where exists (select 1 from cr_revisions where revision_id 
      = cr_wp_image_attachments.attach_id 
      and item_id = p_attach_item_id);
    
    delete from cr_wp_file_attachments
    where exists (select 1 from cr_revisions where revision_id 
      = cr_wp_file_attachments.attach_id 
      and item_id = p_attach_item_id);

    delete from cr_item_publish_audit
    where item_id = p_attach_item_id;

    PERFORM content_item__delete(p_attach_item_id);
    return 0;
end;' language 'plpgsql';

create function wp_attachment__new_revision (
    integer
) returns integer as'
declare
    p_attach_item_id		alias for $1;
begin
    return 0;
end; 'language 'plpgsql';




create function wp_presentation__set_live_revision(integer) returns integer as '
declare
  p_revision_id    alias for $1;
  v_revision_id    integer;
begin
  perform content_item__set_live_revision(p_revision_id);

  select id into v_revision_id
  from cr_wp_presentations_aud
  where presentation_id = p_revision_id;
      
  perform content_item__set_live_revision(v_revision_id);

  select id into v_revision_id
  from cr_wp_presentations_back
  where presentation_id = p_revision_id;

  perform content_item__set_live_revision(v_revision_id);
  return 0;
end;' language 'plpgsql';


-- style functions roc@

create function wp_style__delete(
    integer
) returns integer as'
declare 
    p_style_id		alias for $1;
    p_item_id			integer;
    one_image			record;
begin

	for one_image in 
	    select * from wp_style_images 
	    where wp_style_images_id = (select background_image from wp_styles where style_id = p_style_id)
	loop
		delete from wp_style_images where wp_style_images_id = one_image.wp_style_images_id;
		select item_id into p_item_id from cr_revisions where revision_id = one_image.wp_style_images_id;
		PERFORM content_item__delete(p_item_id);
	end loop;
	
	update cr_wp_slides set style = -1 where style = p_style_id;
	update cr_wp_presentations set style = -1 where style = p_style_id;
	delete from wp_styles where style_id = p_style_id;

    return 0;
end;' language 'plpgsql';

create function wp_style__image_delete(
    integer
) returns integer as'
declare 
    p_revision_id		alias for $1;
    p_item_id			integer;
begin

    update wp_styles set background_image = 0 where background_image = p_revision_id;

    delete from wp_style_images 
    where wp_style_images_id = p_revision_id;
    
    select item_id into p_item_id from cr_revisions where revision_id = p_revision_id;

    PERFORM content_item__delete(p_item_id);

    return 0;
end;' language 'plpgsql';


-- new permissions roc@
select acs_privilege__add_child('wp_edit_presentation', 'wp_view_presentation');
select acs_privilege__add_child('wp_admin_presentation', 'wp_create_presentation');
select acs_privilege__add_child('wp_admin_presentation', 'wp_edit_presentation');
select acs_privilege__add_child('wp_admin_presentation', 'wp_delete_presentation');

-- lets give site-wide permissions, wp-permissions! 
select acs_privilege__add_child('admin', 'wp_admin_presentation');

\i wp-packages-create.sql