Index: openacs-4/packages/edit-this-page/edit-this-page.info =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/edit-this-page/edit-this-page.info,v diff -u -N -r1.17 -r1.18 --- openacs-4/packages/edit-this-page/edit-this-page.info 13 Feb 2016 16:38:05 -0000 1.17 +++ openacs-4/packages/edit-this-page/edit-this-page.info 18 Aug 2016 09:02:11 -0000 1.18 @@ -7,7 +7,7 @@ f f - + postgresql @@ -17,7 +17,7 @@ An easy-to-use content management system. An Easy to use publishing system with versioning and permissions. - + Index: openacs-4/packages/edit-this-page/sql/postgresql/edit-this-page-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/edit-this-page/sql/postgresql/edit-this-page-create.sql,v diff -u -N -r1.16 -r1.17 --- openacs-4/packages/edit-this-page/sql/postgresql/edit-this-page-create.sql 6 Sep 2011 14:37:45 -0000 1.16 +++ openacs-4/packages/edit-this-page/sql/postgresql/edit-this-page-create.sql 18 Aug 2016 09:02:11 -0000 1.17 @@ -7,41 +7,54 @@ create view etp_auto_page_number_seq as select nextval('t_etp_auto_page_number_seq') as nextval; -create function etp__get_attribute_value (integer, integer) -returns varchar as ' -declare - p_object_id alias for $1; - p_attribute_id alias for $2; + + +select define_function_args('etp__get_attribute_value','object_id,attribute_id'); +-- +-- procedure etp__get_attribute_value/2 +-- +CREATE OR REPLACE FUNCTION etp__get_attribute_value( + p_object_id integer, + p_attribute_id integer +) RETURNS varchar AS $$ +DECLARE v_value varchar; -begin +BEGIN select attr_value into v_value from acs_attribute_values where object_id = p_object_id and attribute_id = p_attribute_id; if not found then - v_value := ''''; + v_value := ''; end if; return v_value; -end; -' language 'plpgsql'; +END; +$$ LANGUAGE plpgsql; -create function etp__create_page(integer, varchar, varchar, varchar) -returns integer as ' -declare - p_package_id alias for $1; - p_name alias for $2; - p_title alias for $3; - p_content_type alias for $4; -- default null -> use content_revision + + + +-- +-- procedure etp__create_page/4 +-- +CREATE OR REPLACE FUNCTION etp__create_page( + p_package_id integer, + p_name varchar, + p_title varchar, + p_content_type varchar -- default null -> use content_revision + +) RETURNS integer AS $$ +DECLARE v_item_id integer; v_revision_id integer; v_folder_id integer; -begin - v_item_id := acs_object__new(null, ''content_item'', now(), null, null, p_package_id); +BEGIN + v_item_id := acs_object__new(null, 'content_item', now(), null, null, p_package_id); v_folder_id := etp__get_folder_id(p_package_id); @@ -63,31 +76,40 @@ insert into cr_revisions (revision_id, item_id, title, publish_date, mime_type) - values (v_revision_id, v_item_id, p_title, now(), ''text/enhanced''); + values (v_revision_id, v_item_id, p_title, now(), 'text/enhanced'); update cr_items set live_revision = v_revision_id where item_id = v_item_id; return 1; -end; -' language 'plpgsql'; +END; +$$ LANGUAGE plpgsql; -create or replace function etp__create_page(integer, integer, varchar, varchar, varchar) -returns integer as ' -declare - p_item_id alias for $1; - p_package_id alias for $2; - p_name alias for $3; - p_title alias for $4; - p_content_type alias for $5; -- default null -> use content_revision + + + +select define_function_args('etp__create_page','item_id,package_id,name,title,content_type;null'); + +-- +-- procedure etp__create_page/5 +-- +CREATE OR REPLACE FUNCTION etp__create_page( + p_item_id integer, + p_package_id integer, + p_name varchar, + p_title varchar, + p_content_type varchar -- default null -> use content_revision + +) RETURNS integer AS $$ +DECLARE v_item_id integer; v_revision_id integer; v_folder_id integer; -begin +BEGIN if p_item_id is null then - v_item_id := acs_object__new(null, ''content_item'', now(), null, null, p_package_id); + v_item_id := acs_object__new(null, 'content_item', now(), null, null, p_package_id); else - v_item_id := acs_object__new(p_item_id, ''content_item'', now(), null, null, p_package_id); + v_item_id := acs_object__new(p_item_id, 'content_item', now(), null, null, p_package_id); end if; v_folder_id := etp__get_folder_id(p_package_id); @@ -110,58 +132,88 @@ insert into cr_revisions (revision_id, item_id, title, publish_date, mime_type) - values (v_revision_id, v_item_id, p_title, now(), ''text/enhanced''); + values (v_revision_id, v_item_id, p_title, now(), 'text/enhanced'); update cr_items set live_revision = v_revision_id where item_id = v_item_id; return 1; -end; -' language 'plpgsql'; +END; + +$$ LANGUAGE plpgsql; -create function etp__create_extlink(integer, varchar, varchar, varchar) -returns integer as ' -declare - p_package_id alias for $1; - p_url alias for $2; - p_title alias for $3; - p_description alias for $4; - v_item_id integer; - v_folder_id integer; -begin - v_item_id := acs_object__new(null, ''content_extlink''); - v_folder_id := etp__get_folder_id(p_package_id); - insert into cr_items ( - item_id, parent_id, name, content_type - ) values ( - v_item_id, v_folder_id, ''extlink '' || nextval(''t_etp_auto_page_number_seq''), ''content_extlink'' - ); - insert into cr_extlinks - (extlink_id, url, label, description) - values - (v_item_id, p_url, p_title, p_description); +select define_function_args('etp__create_extlink','item_id;null,package_id,url,title,description'); +-- +-- procedure etp__create_extlink/5 +-- +CREATE OR REPLACE FUNCTION etp__create_extlink( + p_item_id integer, + p_package_id integer, + p_url varchar, + p_title varchar, + p_description varchar +) RETURNS integer AS $$ +DECLARE + v_item_id integer; + v_folder_id integer; +BEGIN + v_item_id := acs_object__new(p_item_id, 'content_extlink'); + v_folder_id := etp__get_folder_id(p_package_id); + + insert into cr_items ( + item_id, parent_id, name, content_type + ) values ( + v_item_id, v_folder_id, 'extlink ' || nextval('t_etp_auto_page_number_seq'), 'content_extlink' + ); + insert into cr_extlinks + (extlink_id, url, label, description) + values + (v_item_id, p_url, p_title, p_description); + return 1; -end; -' language 'plpgsql'; +END; +$$ LANGUAGE plpgsql; -create function etp__create_symlink(integer, integer) -returns integer as ' -declare - p_package_id alias for $1; - p_target_id alias for $2; +-- +-- procedure etp__create_extlink/4 +-- +CREATE OR REPLACE FUNCTION etp__create_extlink( + p_package_id integer, + p_url varchar, + p_title varchar, + p_description varchar +) RETURNS integer AS $$ +DECLARE v_item_id integer; v_folder_id integer; -begin - v_item_id := acs_object__new(null, ''content_symlink''); +BEGIN + return etp__create_extlink(null::integer, p_package_id, p_url, p_title, p_description); +END; +$$ LANGUAGE plpgsql; + + +select define_function_args('etp__create_symlink','package_id,target_id'); +-- +-- procedure etp__create_symlink/2 +-- +CREATE OR REPLACE FUNCTION etp__create_symlink( + p_package_id integer, + p_target_id integer +) RETURNS integer AS $$ +DECLARE + v_item_id integer; + v_folder_id integer; +BEGIN + v_item_id := acs_object__new(null, 'content_symlink'); v_folder_id := etp__get_folder_id(p_package_id); insert into cr_items ( item_id, parent_id, name, content_type ) values ( - v_item_id, v_folder_id, ''symlink '' || nextval(''t_etp_auto_page_number_seq''), ''content_symlink'' + v_item_id, v_folder_id, 'symlink ' || nextval('t_etp_auto_page_number_seq'), 'content_symlink' ); insert into cr_symlinks @@ -170,20 +222,27 @@ (v_item_id, p_target_id); return 1; -end; -' language 'plpgsql'; +END; -create or replace function etp__create_new_revision(integer, varchar, integer) -returns integer as ' -declare - p_package_id alias for $1; - p_name alias for $2; - p_user_id alias for $3; +$$ LANGUAGE plpgsql; + + + + +-- +-- procedure etp__create_new_revision/3 +-- +CREATE OR REPLACE FUNCTION etp__create_new_revision( + p_package_id integer, + p_name varchar, + p_user_id integer +) RETURNS integer AS $$ +DECLARE v_revision_id integer; v_item_id integer; v_new_revision_id integer; v_content_type varchar; -begin +BEGIN select max(r.revision_id) into v_revision_id @@ -205,7 +264,7 @@ -- cannot use acs_object__new because it creates attributes with their -- default values, which is not what we want. - select nextval(''t_acs_object_id_seq'') + select nextval('t_acs_object_id_seq') into v_new_revision_id from dual; insert into acs_objects (object_id, object_type, creation_date, creation_user, context_id) @@ -223,20 +282,27 @@ where object_id = v_revision_id; return 1; -end; -' language 'plpgsql'; +END; -create or replace function etp__create_new_revision(integer, varchar, integer, integer) -returns integer as ' -declare - p_package_id alias for $1; - p_name alias for $2; - p_user_id alias for $3; - p_revision_id alias for $4; +$$ LANGUAGE plpgsql; + + + +select define_function_args('etp__create_new_revision','package_id,name,user_id,revision_id'); +-- +-- procedure etp__create_new_revision/4 +-- +CREATE OR REPLACE FUNCTION etp__create_new_revision( + p_package_id integer, + p_name varchar, + p_user_id integer, + p_revision_id integer +) RETURNS integer AS $$ +DECLARE v_revision_id integer; v_item_id integer; v_content_type varchar; -begin +BEGIN select max(r.revision_id) into v_revision_id @@ -274,17 +340,24 @@ where object_id = v_revision_id; return 1; -end; -' language 'plpgsql'; +END; +$$ LANGUAGE plpgsql; -create function etp__get_folder_id (integer) -returns integer as ' -declare - p_package_id alias for $1; + + + +select define_function_args('etp__get_folder_id','package_id'); +-- +-- procedure etp__get_folder_id/1 +-- +CREATE OR REPLACE FUNCTION etp__get_folder_id( + p_package_id integer +) RETURNS integer AS $$ +DECLARE v_folder_id integer; v_parent_id integer; -begin +BEGIN select folder_id into v_folder_id from cr_folders where package_id = p_package_id; @@ -304,45 +377,52 @@ end if; return v_folder_id; -end; -' language 'plpgsql'; +END; +$$ LANGUAGE plpgsql; -create function etp__get_relative_url(integer, varchar) -returns varchar as ' -declare - p_item_id alias for $1; - p_name alias for $2; + + + +select define_function_args('etp__get_relative_url','item_id,name'); +-- +-- procedure etp__get_relative_url/2 +-- +CREATE OR REPLACE FUNCTION etp__get_relative_url( + p_item_id integer, + p_name varchar +) RETURNS varchar AS $$ +DECLARE v_item_id integer; v_url varchar; v_object_type varchar; v_link_rec record; -begin +BEGIN select object_type into v_object_type from acs_objects where object_id = p_item_id; - if v_object_type = ''content_item'' then + if v_object_type = 'content_item' then return p_name; end if; - if v_object_type = ''content_folder'' then - select s.name || ''/'' into v_url + if v_object_type = 'content_folder' then + select s.name || '/' into v_url from cr_folders f, site_nodes s where f.folder_id = p_item_id and s.object_id = f.package_id; return v_url; end if; - if v_object_type = ''content_extlink'' then + if v_object_type = 'content_extlink' then select url into v_url from cr_extlinks where extlink_id = p_item_id; return v_url; end if; - if v_object_type = ''content_symlink'' then + if v_object_type = 'content_symlink' then select target_id into v_item_id from cr_symlinks where symlink_id = p_item_id; @@ -363,50 +443,58 @@ return null; -end; -' language 'plpgsql'; +END; -create function etp__get_title(integer, varchar) -returns varchar as ' -declare - p_item_id alias for $1; - p_revision_title alias for $2; +$$ LANGUAGE plpgsql; + + + + +select define_function_args('etp__get_title','item_id,revision_title'); +-- +-- procedure etp__get_title/2 +-- +CREATE OR REPLACE FUNCTION etp__get_title( + p_item_id integer, + p_revision_title varchar +) RETURNS varchar AS $$ +DECLARE v_item_id integer; v_title varchar; v_object_type varchar; -begin +BEGIN if p_revision_title is not null then return p_revision_title; end if; select object_type from acs_objects into v_object_type where object_id = p_item_id; - if v_object_type = ''content_folder'' then + if v_object_type = 'content_folder' then select r.title into v_title from cr_items i, cr_revisions r where i.parent_id = p_item_id - and i.name = ''index'' + and i.name = 'index' and i.live_revision = r.revision_id; return v_title; end if; - if v_object_type = ''content_extlink'' then + if v_object_type = 'content_extlink' then select label into v_title from cr_extlinks where extlink_id = p_item_id; return v_title; end if; - if v_object_type = ''content_symlink'' then + if v_object_type = 'content_symlink' then select target_id into v_item_id from cr_symlinks where symlink_id = p_item_id; return etp__get_title(v_item_id, null); end if; - if v_object_type = ''content_item'' then + if v_object_type = 'content_item' then select r.title into v_title from cr_items i, cr_revisions r where i.item_id = v_item_id @@ -416,51 +504,58 @@ return null; -end; -' language 'plpgsql'; +END; -create function etp__get_description(integer, varchar) -returns varchar as ' -declare - p_item_id alias for $1; - p_revision_description alias for $2; +$$ LANGUAGE plpgsql; + + + +select define_function_args('etp__get_description','item_id,revision_description'); +-- +-- procedure etp__get_description/2 +-- +CREATE OR REPLACE FUNCTION etp__get_description( + p_item_id integer, + p_revision_description varchar +) RETURNS varchar AS $$ +DECLARE v_item_id integer; v_description varchar; v_object_type varchar; -begin +BEGIN if p_revision_description is not null then return p_revision_description; end if; select object_type from acs_objects into v_object_type where object_id = p_item_id; - if v_object_type = ''content_folder'' then + if v_object_type = 'content_folder' then select r.description into v_description from cr_items i, cr_revisions r where i.parent_id = p_item_id - and i.name = ''index'' + and i.name = 'index' and i.live_revision = r.revision_id and i.item_id = r.item_id; return v_description; end if; - if v_object_type = ''content_extlink'' then + if v_object_type = 'content_extlink' then select description into v_description from cr_extlinks where extlink_id = p_item_id; return v_description; end if; - if v_object_type = ''content_symlink'' then + if v_object_type = 'content_symlink' then select target_id into v_item_id from cr_symlinks where symlink_id = p_item_id; return etp__get_description(v_item_id, null); end if; - if v_object_type = ''content_item'' then + if v_object_type = 'content_item' then select r.description into v_description from cr_items i, cr_revisions r where i.item_id = v_item_id @@ -470,7 +565,8 @@ return null; -end;' language 'plpgsql'; +END; +$$ LANGUAGE plpgsql; @@ -479,17 +575,18 @@ -- create a folder with magic folder_id of -400 where we -- will put all deleted content items so they'll be recoverable. -create function inline_1 () -returns integer as ' -declare +CREATE OR REPLACE FUNCTION inline_1( + +) RETURNS integer AS $$ +DECLARE v_folder_id integer; -begin +BEGIN select folder_id into v_folder_id from cr_folders where folder_id = -400; if not found then perform content_folder__new ( - ''trash'', - ''Trash'', - ''Deleted content items get put here'', + 'trash', + 'Trash', + 'Deleted content items get put here', 0, null, -400, @@ -499,9 +596,10 @@ ); end if; return 0; -end; -' language 'plpgsql'; +END; +$$ LANGUAGE plpgsql; + select inline_1 (); drop function inline_1 (); Index: openacs-4/packages/edit-this-page/sql/postgresql/upgrade/upgrade-1.9d4-1.9d5.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/edit-this-page/sql/postgresql/upgrade/upgrade-1.9d4-1.9d5.sql,v diff -u -N --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/edit-this-page/sql/postgresql/upgrade/upgrade-1.9d4-1.9d5.sql 18 Aug 2016 09:02:11 -0000 1.1 @@ -0,0 +1,60 @@ +select define_function_args('etp__get_attribute_value','object_id,attribute_id'); +select define_function_args('etp__create_extlink','item_id;null,package_id,url,title,description'); +select define_function_args('etp__create_symlink','package_id,target_id'); +select define_function_args('etp__get_folder_id','package_id'); +select define_function_args('etp__create_new_revision','package_id,name,user_id,revision_id'); +select define_function_args('etp__get_relative_url','item_id,name'); +select define_function_args('etp__get_title','item_id,revision_title'); +select define_function_args('etp__get_description','item_id,revision_description'); +select define_function_args('etp__create_page','item_id,package_id,name,title,content_type;null'); + +select define_function_args('etp__create_extlink','item_id;null,package_id,url,title,description'); + +-- +-- procedure etp__create_extlink/5 +-- +CREATE OR REPLACE FUNCTION etp__create_extlink( + p_item_id integer, + p_package_id integer, + p_url varchar, + p_title varchar, + p_description varchar +) RETURNS integer AS $$ +DECLARE + v_item_id integer; + v_folder_id integer; +BEGIN + v_item_id := acs_object__new(p_item_id, 'content_extlink'); + v_folder_id := etp__get_folder_id(p_package_id); + + insert into cr_items ( + item_id, parent_id, name, content_type + ) values ( + v_item_id, v_folder_id, 'extlink ' || nextval('t_etp_auto_page_number_seq'), 'content_extlink' + ); + insert into cr_extlinks + (extlink_id, url, label, description) + values + (v_item_id, p_url, p_title, p_description); + + return 1; +END; +$$ LANGUAGE plpgsql; + +-- +-- procedure etp__create_extlink/4 +-- +CREATE OR REPLACE FUNCTION etp__create_extlink( + p_package_id integer, + p_url varchar, + p_title varchar, + p_description varchar +) RETURNS integer AS $$ +DECLARE + v_item_id integer; + v_folder_id integer; +BEGIN + return etp__create_extlink(null::integer, p_package_id, p_url, p_title, p_description); +END; +$$ LANGUAGE plpgsql; +