-- -- 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.4 2004/06/02 23:38:07 donb Exp $ -- create or replace package portal as function new ( p_portal_id in portals.portal_id%TYPE default null, p_owner_id in acs_objects.object_id%TYPE, p_package_id in apm_packages.package_id%TYPE, p_name in portals.name%TYPE default 'Untitled', p_theme_id in portals.theme_id%TYPE default null, p_template_id in portals.template_id%TYPE default null, p_object_type in acs_objects.object_type%TYPE default 'portal', p_creation_date in acs_objects.creation_date%TYPE default sysdate, p_creation_user in acs_objects.creation_user%TYPE default null, p_creation_ip in acs_objects.creation_ip%TYPE default null, p_context_id in acs_objects.context_id%TYPE default null ) return portals.portal_id%TYPE; procedure del ( p_portal_id in portals.portal_id%TYPE ); end portal; / show errors create or replace package body portal as function new ( p_portal_id in portals.portal_id%TYPE default null, p_owner_id in acs_objects.object_id%TYPE, p_package_id in apm_packages.package_id%TYPE, p_name in portals.name%TYPE default 'Untitled', p_theme_id in portals.theme_id%TYPE default null, p_template_id in portals.template_id%TYPE default null, p_object_type in acs_objects.object_type%TYPE default 'portal', p_creation_date in acs_objects.creation_date%TYPE default sysdate, p_creation_user in acs_objects.creation_user%TYPE default null, p_creation_ip in acs_objects.creation_ip%TYPE default null, p_context_id in acs_objects.context_id%TYPE default null ) return portals.portal_id%TYPE is v_portal_id portals.portal_id%TYPE; v_theme_id portals.theme_id%TYPE; v_page_id portal_pages.page_id%TYPE; v_new_element_id portal_elements.element_id%TYPE; v_new_parameter_id portal_element_parameters.parameter_id%TYPE; begin v_portal_id := acs_object.new( object_id => p_portal_id, object_type => p_object_type, creation_date => p_creation_date, creation_user => p_creation_user, creation_ip => p_creation_ip, context_id => p_context_id ); 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 it's 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( p_name => v_page.name, p_portal_id => v_portal_id, p_layout_id => v_page.layout_id, p_creation_date => p_creation_date, p_creation_user => p_creation_user, p_creation_ip => p_creation_ip, p_context_id => v_portal_id ); -- now get the elements on the template's 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 portal_seq.nextval 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 element's params for v_param in (select * from portal_element_parameters where element_id = v_element.element_id) loop select portal_seq.nextval 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 new; procedure del ( p_portal_id in portals.portal_id%TYPE ) is begin for v_page in (select page_id from portal_pages where portal_id = p_portal_id order by sort_key desc) loop portal_page.del(v_page.page_id); end loop; delete from portals where portal_id = p_portal_id; acs_object.del(p_portal_id); end del; end portal; / show errors