Index: openacs-4/packages/new-portal/new-portal.info =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/new-portal/new-portal.info,v diff -u -N -r1.45 -r1.46 --- openacs-4/packages/new-portal/new-portal.info 5 Aug 2018 22:05:49 -0000 1.45 +++ openacs-4/packages/new-portal/new-portal.info 14 Sep 2018 14:11:06 -0000 1.46 @@ -8,15 +8,15 @@ t portal - + OpenACS Portals. 2017-08-06 DotLRN Consortium 2 New Portal Package a.k.a. NPP. Portals are used to aggregate content from different sources within a single page. Props to Ian Baker for "Portal". - + Index: openacs-4/packages/new-portal/sql/postgresql/api-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/new-portal/sql/postgresql/api-create.sql,v diff -u -N -r1.19 -r1.20 --- openacs-4/packages/new-portal/sql/postgresql/api-create.sql 7 Aug 2017 23:48:12 -0000 1.19 +++ openacs-4/packages/new-portal/sql/postgresql/api-create.sql 14 Sep 2018 14:11:06 -0000 1.20 @@ -24,69 +24,67 @@ -- select define_function_args('portal_page__new','page_id,pretty_name,accesskey,portal_id,layout_id,hidden_p,object_type;portal_page,creation_date,creation_user,creation_ip,context_id'); - - - -- -- procedure portal_page__new/11 -- -CREATE OR REPLACE FUNCTION portal_page__new( - p_page_id integer, - p_pretty_name varchar, - p_accesskey varchar, - p_portal_id integer, - p_layout_id integer, - p_hidden_p boolean, - p_object_type varchar, -- default 'portal_page' - p_creation_date timestamptz, - p_creation_user integer, - p_creation_ip varchar, - p_context_id integer + CREATE OR REPLACE FUNCTION portal_page__new( + p_page_id integer, + p_pretty_name varchar, + p_accesskey varchar, + p_portal_id integer, + p_layout_id integer, + p_hidden_p boolean, + p_object_type varchar, -- default 'portal_page' + p_creation_date timestamptz, + p_creation_user integer, + p_creation_ip varchar, + p_context_id integer + + ) RETURNS integer AS $$ + DECLARE + v_page_id portal_pages.page_id%TYPE; + v_layout_id portal_pages.layout_id%TYPE; + v_sort_key portal_pages.sort_key%TYPE; + BEGIN + + v_page_id := acs_object__new( + null, -- object_id + p_object_type, -- object_type + p_creation_date, -- creation_date + p_creation_user, -- creation_user + p_creation_ip, -- creation_ip + p_context_id, -- context_id + true, -- security_inherit_p + p_pretty_name, -- title + null -- package_id + ); + + if p_layout_id is null then + select min(layout_id) + into v_layout_id + from portal_layouts; + else + v_layout_id := p_layout_id; + end if; + + select coalesce(max(sort_key) + 1, 0) + into v_sort_key + from portal_pages + where portal_id = p_portal_id; + + insert into portal_pages + (page_id, pretty_name, accesskey, portal_id, layout_id, sort_key, hidden_p) + values + (v_page_id, p_pretty_name, p_accesskey, p_portal_id, v_layout_id, v_sort_key, p_hidden_p); + + return v_page_id; + + END; + $$ LANGUAGE plpgsql; -) RETURNS integer AS $$ -DECLARE - v_page_id portal_pages.page_id%TYPE; - v_layout_id portal_pages.layout_id%TYPE; - v_sort_key portal_pages.sort_key%TYPE; -BEGIN - v_page_id := acs_object__new( - null, - p_object_type, - p_creation_date, - p_creation_user, - p_creation_ip, - p_context_id, - 't' - ); - if p_layout_id is null then - select min(layout_id) - into v_layout_id - from portal_layouts; - else - v_layout_id := p_layout_id; - end if; - - select coalesce(max(sort_key) + 1, 0) - into v_sort_key - from portal_pages - where portal_id = p_portal_id; - - insert into portal_pages - (page_id, pretty_name, accesskey, portal_id, layout_id, sort_key, hidden_p) - values - (v_page_id, p_pretty_name, p_accesskey, p_portal_id, v_layout_id, v_sort_key, p_hidden_p); - - return v_page_id; - -END; -$$ LANGUAGE plpgsql; - select define_function_args('portal_page__delete','page_id'); - - - -- -- procedure portal_page__delete/1 -- @@ -125,12 +123,12 @@ update portal_pages set sort_key = -1 where sort_key = i - and page_id = p_page_id; + and page_id = p_page_id; update portal_pages set sort_key = i - 1 where sort_key = -1 - and page_id = p_page_id; + and page_id = p_page_id; end if; @@ -143,10 +141,9 @@ END; $$ LANGUAGE plpgsql; -select define_function_args('portal__new','portal_id,name,theme_id,layout_id,template_id,default_page_name,default_accesskey,object_type;portal,creation_date,creation_user,creation_ip,context_id'); - +select define_function_args('portal__new','portal_id,name,theme_id,layout_id,template_id,default_page_name,default_accesskey,object_type;portal,creation_date,creation_user,creation_ip,context_id'); -- -- procedure portal__new/12 -- @@ -178,15 +175,18 @@ 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' - ); - + p_portal_id, -- object_id + p_object_type, -- object_type + p_creation_date, -- creation_date + p_creation_user, -- creation_user + p_creation_ip, -- creation_ip + p_context_id, -- context_id + true, -- security_inherit_p + p_name, -- title + null -- package_id + ); + + if p_template_id is null then if p_theme_id is null then @@ -245,7 +245,7 @@ for v_page in select * from portal_pages where portal_id = p_template_id - order by sort_key + order by sort_key loop v_page_id := portal_page__new( @@ -309,10 +309,9 @@ END; $$ LANGUAGE plpgsql; -select define_function_args('portal__delete','portal_id'); - +select define_function_args('portal__delete','portal_id'); -- -- procedure portal__delete/1 -- @@ -337,10 +336,9 @@ END; $$ LANGUAGE plpgsql; -select define_function_args('portal_element_theme__new','theme_id,name,description,filename,resource_dir,object_type;portal_element_theme,creation_date,creation_user,creation_ip,context_id'); - +select define_function_args('portal_element_theme__new','theme_id,name,description,filename,resource_dir,object_type;portal_element_theme,creation_date,creation_user,creation_ip,context_id'); -- -- procedure portal_element_theme__new/10 -- @@ -362,15 +360,18 @@ BEGIN v_theme_id := acs_object__new( - p_theme_id, - p_object_type, - p_creation_date, - p_creation_user, - p_creation_ip, - p_context_id, - 't' - ); - + p_theme_id, -- object_id + p_object_type, -- object_type + p_creation_date, -- creation_date + p_creation_user, -- creation_user + p_creation_ip, -- creation_ip + p_context_id, -- context_id + true, -- security_inherit_p + p_name, -- title + null -- package_id + ); + + insert into portal_element_themes (theme_id, name, description, filename, resource_dir) @@ -418,10 +419,9 @@ END; $$ LANGUAGE plpgsql; -select define_function_args('portal_element_theme__delete','theme_id'); - +select define_function_args('portal_element_theme__delete','theme_id'); -- -- procedure portal_element_theme__delete/1 -- @@ -436,10 +436,9 @@ END; $$ LANGUAGE plpgsql; -select define_function_args('portal_layout__new','layout_id,name,description,filename,resource_dir,object_type;portal_layout,creation_date,creation_user,creation_ip,context_id'); - +select define_function_args('portal_layout__new','layout_id,name,description,filename,resource_dir,object_type;portal_layout,creation_date,creation_user,creation_ip,context_id'); -- -- procedure portal_layout__new/10 -- @@ -461,15 +460,17 @@ BEGIN v_layout_id := acs_object__new( - p_layout_id, - p_object_type, - p_creation_date, - p_creation_user, - p_creation_ip, - p_context_id, - 't' - ); - + p_layout_id, -- object_id + p_object_type, -- object_type + p_creation_date, -- creation_date + p_creation_user, -- creation_user + p_creation_ip, -- creation_ip + p_context_id, -- context_id + true, -- security_inherit_p + p_name, -- title + null -- package_id + ); + insert into portal_layouts (layout_id, name, description, filename, resource_dir) values @@ -516,10 +517,9 @@ END; $$ LANGUAGE plpgsql; -select define_function_args('portal_layout__delete','layout_id'); - +select define_function_args('portal_layout__delete','layout_id'); -- -- procedure portal_layout__delete/1 -- @@ -533,10 +533,9 @@ END; $$ LANGUAGE plpgsql; -select define_function_args('portal_layout__add_region','layout_id,region,immutable_p;f'); - +select define_function_args('portal_layout__add_region','layout_id,region,immutable_p;f'); -- -- procedure portal_layout__add_region/3 -- @@ -561,7 +560,6 @@ select define_function_args('portal_datasource__new','datasource_id;null,name;null,description;null,css_dir,object_type;portal_datasource,creation_date;now(),creation_user;null,creation_ip;null,context_id;null'); - -- -- procedure portal_datasource__new/9 -- @@ -582,15 +580,17 @@ BEGIN v_datasource_id := acs_object__new( - p_datasource_id, - p_object_type, - p_creation_date, - p_creation_user, - p_creation_ip, - p_context_id, - 't' - ); - + p_datasource_id, -- object_id + p_object_type, -- object_type + p_creation_date, -- creation_date + p_creation_user, -- creation_user + p_creation_ip, -- creation_ip + p_context_id, -- context_id + true, -- security_inherit_p + p_name, -- title + null -- package_id + ); + insert into portal_datasources (datasource_id, name, description, css_dir) values @@ -625,14 +625,14 @@ BEGIN v_datasource_id := portal_datasource__new(null, - p_name, - p_description, + p_name, + p_description, null, - p_object_type, - p_creation_date, - p_creation_user, - p_creation_ip, - p_context_id); + p_object_type, + p_creation_date, + p_creation_user, + p_creation_ip, + p_context_id); return v_datasource_id; @@ -658,14 +658,14 @@ BEGIN v_datasource_id := portal_datasource__new(null, - p_name, - p_description, + p_name, + p_description, null, - 'portal_datasource', - now(), - null, - null, - null); + 'portal_datasource', + now(), + null, + null, + null); return v_datasource_id; @@ -691,24 +691,23 @@ BEGIN v_datasource_id := portal_datasource__new(null, - p_name, - p_description, + p_name, + p_description, p_css_dir, - 'portal_datasource', - now(), - null, - null, - null); + 'portal_datasource', + now(), + null, + null, + null); return v_datasource_id; END; $$ LANGUAGE plpgsql; -select define_function_args('portal_datasource__delete','datasource_id'); - +select define_function_args('portal_datasource__delete','datasource_id'); -- -- procedure portal_datasource__delete/1 -- @@ -722,10 +721,9 @@ END; $$ LANGUAGE plpgsql; -select define_function_args('portal_datasource__set_def_param','datasource_id,config_required_p,configured_p,key,value'); - +select define_function_args('portal_datasource__set_def_param','datasource_id,config_required_p,configured_p,key,value'); -- -- procedure portal_datasource__set_def_param/5 -- Index: openacs-4/packages/new-portal/sql/postgresql/upgrade/upgrade-2.10.0d2-2.10.0d3.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/new-portal/sql/postgresql/upgrade/upgrade-2.10.0d2-2.10.0d3.sql,v diff -u -N --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/new-portal/sql/postgresql/upgrade/upgrade-2.10.0d2-2.10.0d3.sql 14 Sep 2018 14:11:06 -0000 1.1 @@ -0,0 +1,359 @@ +-- upgrade 2.10.0d2 to 2.10.0d3 +-- +-- prefer acs_object__new/9 over acs_object__new/7 + +BEGIN; + + -- + -- procedure portal_page__new/11 + -- + CREATE OR REPLACE FUNCTION portal_page__new( + p_page_id integer, + p_pretty_name varchar, + p_accesskey varchar, + p_portal_id integer, + p_layout_id integer, + p_hidden_p boolean, + p_object_type varchar, -- default 'portal_page' + p_creation_date timestamptz, + p_creation_user integer, + p_creation_ip varchar, + p_context_id integer + + ) RETURNS integer AS $$ + DECLARE + v_page_id portal_pages.page_id%TYPE; + v_layout_id portal_pages.layout_id%TYPE; + v_sort_key portal_pages.sort_key%TYPE; + BEGIN + + v_page_id := acs_object__new( + null, -- object_id + p_object_type, -- object_type + p_creation_date, -- creation_date + p_creation_user, -- creation_user + p_creation_ip, -- creation_ip + p_context_id, -- context_id + true, -- security_inherit_p + p_pretty_name, -- title + null -- package_id + ); + + if p_layout_id is null then + select min(layout_id) + into v_layout_id + from portal_layouts; + else + v_layout_id := p_layout_id; + end if; + + select coalesce(max(sort_key) + 1, 0) + into v_sort_key + from portal_pages + where portal_id = p_portal_id; + + insert into portal_pages + (page_id, pretty_name, accesskey, portal_id, layout_id, sort_key, hidden_p) + values + (v_page_id, p_pretty_name, p_accesskey, p_portal_id, v_layout_id, v_sort_key, p_hidden_p); + + return v_page_id; + + END; + $$ LANGUAGE plpgsql; + + + -- + -- procedure portal__new/12 + -- + CREATE OR REPLACE FUNCTION portal__new( + p_portal_id integer, + p_name varchar, + p_theme_id integer, + p_layout_id integer, + p_template_id integer, + p_default_page_name varchar, + p_default_accesskey varchar, + p_object_type varchar, -- default 'portal' + p_creation_date timestamptz, + p_creation_user integer, + p_creation_ip varchar, + p_context_id integer + + ) RETURNS integer AS $$ + DECLARE + 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, -- object_id + p_object_type, -- object_type + p_creation_date, -- creation_date + p_creation_user, -- creation_user + p_creation_ip, -- creation_ip + p_context_id, -- context_id + true, -- security_inherit_p + p_name, -- title + null -- package_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_element_themes; + else + v_theme_id := p_theme_id; + end if; + + if p_layout_id is null then + select min(layout_id) + into v_layout_id + from portal_layouts; + else + v_layout_id := p_layout_id; + end if; + + insert + into portals + (portal_id, name, theme_id) + values + (v_portal_id, p_name, v_theme_id); + + -- now insert the default page + v_page_id := portal_page__new( + null, + p_default_page_name, + p_default_accesskey, + v_portal_id, + v_layout_id, + 'f', + 'portal_page', + p_creation_date, + p_creation_user, + p_creation_ip, + p_context_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, name, theme_id, template_id) + values + (v_portal_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 + order by sort_key + loop + + v_page_id := portal_page__new( + null, + v_page.pretty_name, + v_page.accesskey, + v_portal_id, + v_page.layout_id, + 'f', + 'portal_page', + p_creation_date, + p_creation_user, + p_creation_ip, + p_context_id + ); + + -- now get the elements on the templates page and put them on the new page + for v_element in select * + from portal_element_map + where page_id = v_page.page_id + loop + + select nextval('t_acs_object_id_seq') + 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 = 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('t_acs_object_id_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; + + -- + -- procedure portal_element_theme__new/10 + -- + CREATE OR REPLACE FUNCTION portal_element_theme__new( + p_theme_id integer, + p_name varchar, + p_description varchar, + p_filename varchar, + p_resource_dir varchar, + p_object_type varchar, -- default 'portal_element_theme' + p_creation_date timestamptz, + p_creation_user integer, + p_creation_ip varchar, + p_context_id integer + + ) RETURNS integer AS $$ + DECLARE + v_theme_id portal_element_themes.theme_id%TYPE; + BEGIN + + v_theme_id := acs_object__new( + p_theme_id, -- object_id + p_object_type, -- object_type + p_creation_date, -- creation_date + p_creation_user, -- creation_user + p_creation_ip, -- creation_ip + p_context_id, -- context_id + true, -- security_inherit_p + p_name, -- title + null -- package_id + ); + + + insert + into portal_element_themes + (theme_id, name, description, filename, resource_dir) + values + (v_theme_id, p_name, p_description, p_filename, p_resource_dir); + + return v_theme_id; + + END; + $$ LANGUAGE plpgsql; + + -- + -- procedure portal_layout__new/10 + -- + CREATE OR REPLACE FUNCTION portal_layout__new( + p_layout_id integer, + p_name varchar, + p_description varchar, + p_filename varchar, + p_resource_dir varchar, + p_object_type varchar, -- default 'portal_layout' + p_creation_date timestamptz, + p_creation_user integer, + p_creation_ip varchar, + p_context_id integer + + ) RETURNS integer AS $$ + DECLARE + v_layout_id portal_layouts.layout_id%TYPE; + BEGIN + + v_layout_id := acs_object__new( + p_layout_id, -- object_id + p_object_type, -- object_type + p_creation_date, -- creation_date + p_creation_user, -- creation_user + p_creation_ip, -- creation_ip + p_context_id, -- context_id + true, -- security_inherit_p + p_name, -- title + null -- package_id + ); + + insert into portal_layouts + (layout_id, name, description, filename, resource_dir) + values + (v_layout_id, p_name, p_description, p_filename, p_resource_dir); + + return v_layout_id; + + END; + $$ LANGUAGE plpgsql; + + -- + -- procedure portal_datasource__new/9 + -- + CREATE OR REPLACE FUNCTION portal_datasource__new( + p_datasource_id integer, -- default null + p_name varchar, -- default null + p_description varchar, -- default null + p_css_dir varchar, + p_object_type varchar, -- default 'portal_datasource' + p_creation_date timestamptz, -- default now() + p_creation_user integer, -- default null + p_creation_ip varchar, -- default null + p_context_id integer -- default null + + ) RETURNS integer AS $$ + DECLARE + v_datasource_id portal_datasources.datasource_id%TYPE; + BEGIN + + v_datasource_id := acs_object__new( + p_datasource_id, -- object_id + p_object_type, -- object_type + p_creation_date, -- creation_date + p_creation_user, -- creation_user + p_creation_ip, -- creation_ip + p_context_id, -- context_id + true, -- security_inherit_p + p_name, -- title + null -- package_id + ); + + insert into portal_datasources + (datasource_id, name, description, css_dir) + values + (v_datasource_id, p_name, p_description, p_css_dir); + + return v_datasource_id; + + END; + $$ LANGUAGE plpgsql; + +END; + \ No newline at end of file