-- -- Copyright (C) 2001, 2002 MIT -- -- This file is part of dotLRN. -- -- dotLRN is free software; you can redistribute it and/or modify it under the -- terms of the GNU General Public License as published by the Free Software -- Foundation; either version 2 of the License, or (at your option) any later -- version. -- -- dotLRN is distributed in the hope that it will be useful, but WITHOUT ANY -- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more -- details. -- -- -- create portals package -- -- @author arjun@openforce.net -- @author yon@openforce.net -- @creation-date 2001-10-01 -- @version $Id: portal-package-create.sql,v 1.8 2004/06/06 02:29:10 donb Exp $ -- select define_function_args('portal__new', 'p_portal_id,p_owner_id,p_package_id,p_name,p_theme_id,p_template_id,p_object_type;portal,p_creation_date,p_creation_user,p_creation_ip,p_context_id'); create or replace function portal__new (integer,integer, integer, varchar, integer, integer, varchar, timestamptz, integer, varchar, integer) returns integer as ' declare p_portal_id alias for $1; p_owner_id alias for $2; p_package_id alias for $3; p_name alias for $4; p_theme_id alias for $5; p_template_id alias for $6; p_object_type alias for $7; p_creation_date alias for $8; p_creation_user alias for $9; p_creation_ip alias for $10; p_context_id alias for $11; v_portal_id portals.portal_id%TYPE; v_theme_id portals.theme_id%TYPE; v_layout_id portal_layouts.layout_id%TYPE; v_page_id portal_pages.page_id%TYPE; v_page record; v_element record; v_param record; v_new_element_id integer; v_new_parameter_id integer; begin v_portal_id := acs_object__new( p_portal_id, p_object_type, p_creation_date, p_creation_user, p_creation_ip, p_context_id, ''t'' ); if p_template_id is null then if p_theme_id is null then select max(theme_id) into v_theme_id from portal_themes; else v_theme_id := p_theme_id; end if; insert into portals (portal_id, owner_id, package_id, name, theme_id) values (v_portal_id, p_owner_id, p_package_id, p_name, v_theme_id); else -- we have a portal as our template. copy its theme, pages, layouts, -- elements, and element params. select theme_id into v_theme_id from portals where portal_id = p_template_id; insert into portals (portal_id, owner_id, package_id, name, theme_id, template_id) values (v_portal_id, p_owner_id, p_package_id, p_name, v_theme_id, p_template_id); -- now insert the pages from the portal template for v_page in select * from portal_pages where portal_id = p_template_id loop v_page_id := portal_page__new( null, v_page.name, v_portal_id, v_page.layout_id, ''portal_page'', p_creation_date, p_creation_user, p_creation_ip, v_portal_id ); -- now get the elements on the templates page and put them on the new page for v_element in select * from portal_elements where page_id = v_page.page_id loop select nextval(''portal_seq'') into v_new_element_id from dual; insert into portal_elements (element_id, name, page_id, datasource_id, region, sort_key, state, shadeable_p, hideable_p) select v_new_element_id, name, v_page_id, datasource_id, region, sort_key, state, shadeable_p, hideable_p from portal_elements where element_id = v_element.element_id; -- now for the elements params for v_param in select * from portal_element_parameters where element_id = v_element.element_id loop select nextval(''portal_seq'') into v_new_parameter_id from dual; insert into portal_element_parameters (parameter_id, element_id, config_required_p, configured_p, key, value) select v_new_parameter_id, v_new_element_id, config_required_p, configured_p, key, value from portal_element_parameters where parameter_id = v_param.parameter_id; end loop; end loop; end loop; end if; return v_portal_id; end;' language 'plpgsql'; select define_function_args('portal__del', 'p_portal_id'); create or replace function portal__del(integer) returns integer as ' declare p_portal_id alias for $1; v_page record; begin for v_page in select page_id from portal_pages where portal_id = p_portal_id loop perform portal_page__del(v_page.page_id); end loop; delete from portals where portal_id = p_portal_id; perform acs_object__delete(p_portal_id); return 0; end;' language 'plpgsql';