Index: openacs-4/packages/new-portal/sql/oracle/upgrade/upgrade-2.3.0d3-2.3.0d4.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/new-portal/sql/oracle/upgrade/upgrade-2.3.0d3-2.3.0d4.sql,v diff -u -r1.1.2.2 -r1.1.2.3 --- openacs-4/packages/new-portal/sql/oracle/upgrade/upgrade-2.3.0d3-2.3.0d4.sql 29 Mar 2007 01:14:07 -0000 1.1.2.2 +++ openacs-4/packages/new-portal/sql/oracle/upgrade/upgrade-2.3.0d3-2.3.0d4.sql 29 Mar 2007 19:20:57 -0000 1.1.2.3 @@ -130,3 +130,195 @@ end portal_page; / show errors + +create or replace package portal +as + + function new ( + portal_id in portals.portal_id%TYPE default null, + name in portals.name%TYPE default 'Untitled', + theme_id in portals.theme_id%TYPE default null, + layout_id in portal_layouts.layout_id%TYPE default null, + template_id in portals.template_id%TYPE default null, + default_page_name in portal_pages.pretty_name%TYPE default 'Main Page', + default_accesskey in portal_pages.accesskey%TYPE default null, + object_type in acs_object_types.object_type%TYPE default 'portal', + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE default null, + creation_ip in acs_objects.creation_ip%TYPE default null, + context_id in acs_objects.context_id%TYPE default null + ) return portals.portal_id%TYPE; + + procedure del ( + portal_id in portals.portal_id%TYPE + ); +end portal; +/ +show errors + +create or replace package body portal +as + function new ( + portal_id in portals.portal_id%TYPE default null, + name in portals.name%TYPE default 'Untitled', + theme_id in portals.theme_id%TYPE default null, + layout_id in portal_layouts.layout_id%TYPE default null, + template_id in portals.template_id%TYPE default null, + default_page_name in portal_pages.pretty_name%TYPE default 'Main Page', + default_accesskey in portal_pages.accesskey%TYPE default null, + object_type in acs_object_types.object_type%TYPE default 'portal', + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE default null, + creation_ip in acs_objects.creation_ip%TYPE default null, + 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_layout_id portal_layouts.layout_id%TYPE; + v_page_id portal_pages.page_id%TYPE; + v_new_element_id portal_element_map.element_id%TYPE; + v_new_parameter_id portal_element_parameters.parameter_id%TYPE; + begin + + v_portal_id := acs_object.new( + object_id => portal_id, + object_type => object_type, + creation_date => creation_date, + creation_user => creation_user, + creation_ip => creation_ip, + context_id => context_id + ); + + if template_id is null then + + if portal.new.theme_id is null then + select max(theme_id) + into v_theme_id + from portal_element_themes; + else + v_theme_id := portal.new.theme_id; + end if; + + if layout_id is null then + select min(layout_id) + into v_layout_id + from portal_layouts; + else + v_layout_id := portal.new.layout_id; + end if; + + insert + into portals + (portal_id, name, theme_id) + values + (v_portal_id, name, v_theme_id); + + -- now insert the default page + v_page_id := portal_page.new ( + portal_id => v_portal_id, + pretty_name => default_page_name, + accesskey => default_accesskey, + layout_id => v_layout_id, + creation_date => creation_date, + creation_user => creation_user, + creation_ip => creation_ip, + context_id => context_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 = portal.new.template_id; + + insert + into portals + (portal_id, name, theme_id, template_id) + values + (v_portal_id, name, v_theme_id, portal.new.template_id); + + -- now insert the pages from the portal template + for page in (select * + from portal_pages + where portal_id = portal.new.template_id) + loop + + v_page_id := portal_page.new( + portal_id => v_portal_id, + pretty_name => page.pretty_name, + accesskey => page.accesskey, + layout_id => page.layout_id + ); + + -- now get the elements on the template's page and put them on the new page + for element in (select * + from portal_element_map + where page_id = page.page_id) + loop + + select acs_object_id_seq.nextval + into v_new_element_id + from dual; + + insert + into portal_element_map + (element_id, name, pretty_name, page_id, datasource_id, region, state, sort_key) + select v_new_element_id, name, pretty_name, v_page_id, datasource_id, region, state, sort_key + from portal_element_map pem + where pem.element_id = element.element_id; + + -- now for the element's params + for param in (select * + from portal_element_parameters + where element_id = element.element_id) + loop + + select acs_object_id_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 = param.parameter_id; + + end loop; + + end loop; + + end loop; + + end if; + + return v_portal_id; + + end new; + + procedure del ( + portal_id in portals.portal_id%TYPE + ) + is + begin + + for page in (select page_id + from portal_pages + where portal_id = portal.del.portal_id + order by sort_key desc) + loop + portal_page.del(page_id => page.page_id); + end loop; + + acs_object.del(portal_id); + + end del; + +end portal; +/ +show errors +