Index: openacs-4/packages/acs-content-repository/sql/postgresql/upgrade/upgrade-5.9.1d6-5.9.1d7.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/sql/postgresql/upgrade/upgrade-5.9.1d6-5.9.1d7.sql,v diff -u -N --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/acs-content-repository/sql/postgresql/upgrade/upgrade-5.9.1d6-5.9.1d7.sql 10 Feb 2016 09:14:21 -0000 1.1.2.1 @@ -0,0 +1,268 @@ +-- +-- reduce number of versions of image__new from 4 to 2by using defaults +-- reduce number of versions of image__new_revision from 2 to 1 by using defaults +-- commented differences +-- + +-- image__new/17 +DROP FUNCTION IF EXISTS image__new(varchar,integer,integer,integer,varchar,integer,varchar,varchar,varchar,varchar,boolean,timestamptz,varchar,integer,integer,integer,integer); +DROP FUNCTION IF EXISTS image__new(varchar,integer,integer,integer,varchar,integer,varchar,varchar,varchar,varchar,boolean,timestamptz,varchar,integer,integer,integer); + +-- DRB's version image__new/16 (differs in arg type 11ff) +DROP FUNCTION IF EXISTS image__new(varchar,integer,integer,integer,varchar,integer,varchar,varchar,varchar,varchar,varchar,varchar,timestamptz,integer,integer,integer); +DROP FUNCTION IF EXISTS image__new(varchar,integer,integer,integer,varchar,integer,varchar,varchar,varchar,varchar,varchar,varchar,timestamptz,integer,integer); + +-- procedure image__new_revision/12 +DROP FUNCTION IF EXISTS image__new_revision(integer,integer,varchar,varchar,timestamptz,varchar,varchar,integer,varchar,integer,integer,integer); +DROP FUNCTION IF EXISTS image__new_revision(integer,integer,varchar,varchar,timestamptz,varchar,varchar,integer,varchar,integer,integer); + + +-- +-- procedure image__new/17 +-- +CREATE OR REPLACE FUNCTION image__new( + new__name varchar, + new__parent_id integer, -- default null + new__item_id integer, -- default null + new__revision_id integer, -- default null + new__mime_type varchar, -- default jpeg + new__creation_user integer, -- default null + new__creation_ip varchar, -- default null + new__relation_tag varchar, -- default null + new__title varchar, -- default null + new__description varchar, -- default null + new__is_live boolean, -- default f + new__publish_date timestamptz, -- default now() + new__path varchar, + new__file_size integer, + new__height integer, + new__width integer, + new__package_id integer default null + +) RETURNS integer AS $$ +DECLARE + + new__locale varchar default null; + new__nls_language varchar default null; + new__creation_date timestamptz default current_timestamp; + new__context_id integer; + + v_item_id cr_items.item_id%TYPE; + v_package_id acs_objects.package_id%TYPE; + v_revision_id cr_revisions.revision_id%TYPE; + BEGIN + new__context_id := new__parent_id; + + if new__package_id is null then + v_package_id := acs_object__package_id(new__parent_id); + else + v_package_id := new__package_id; + end if; + + v_item_id := content_item__new ( + new__name, + new__parent_id, + new__item_id, + new__locale, + new__creation_date, + new__creation_user, + new__context_id, + new__creation_ip, + 'content_item', + 'image', + null, + new__description, + new__mime_type, + new__nls_language, + null, + 'file', -- storage_type + v_package_id + ); + + -- update cr_child_rels to have the correct relation_tag + update cr_child_rels + set relation_tag = new__relation_tag + where parent_id = new__parent_id + and child_id = new__item_id + and relation_tag = content_item__get_content_type(new__parent_id) || '-' || 'image'; + + v_revision_id := content_revision__new ( + new__title, + new__description, + new__publish_date, + new__mime_type, + new__nls_language, + new__path, + v_item_id, + new__revision_id, + new__creation_date, + new__creation_user, + new__creation_ip, + new__file_size, + v_package_id + ); + + insert into images + (image_id, height, width) + values + (v_revision_id, new__height, new__width); + + -- is_live => 't' not used as part of content_item.new + -- because content_item.new does not let developer specify revision_id, + -- revision_id is determined in advance + + if new__is_live = 't' then + PERFORM content_item__set_live_revision (v_revision_id); + end if; + + return v_item_id; +END; +$$ LANGUAGE plpgsql; + + +-- DRB's version +-- +-- procedure image__new/16 +-- +-- compared to image_new/17: +-- * has no relation_tag, is_live, path, file_size +-- * but has storage_type, content_type, nls_language + +-- +CREATE OR REPLACE FUNCTION image__new( + p_name varchar, + p_parent_id integer, -- default null + p_item_id integer, -- default null + p_revision_id integer, -- default null + p_mime_type varchar, -- default jpeg + p_creation_user integer, -- default null + p_creation_ip varchar, -- default null + p_title varchar, -- default null + p_description varchar, -- default null + p_storage_type varchar, + p_content_type varchar, + p_nls_language varchar, + p_publish_date timestamptz, + p_height integer, + p_width integer, + p_package_id integer default null + +) RETURNS integer AS $$ +DECLARE + v_item_id cr_items.item_id%TYPE; + v_revision_id cr_revisions.revision_id%TYPE; + v_package_id acs_objects.package_id%TYPE; + BEGIN + + if content_item__is_subclass(p_content_type, 'image') = 'f' then + raise EXCEPTION '-20000: image__new can only be called for an image type'; + end if; + + if p_package_id is null then + v_package_id := acs_object__package_id(p_parent_id); + else + v_package_id := p_package_id; + end if; + + v_item_id := content_item__new ( + p_name, + p_parent_id, + p_item_id, + null, + current_timestamp, + p_creation_user, + p_parent_id, + p_creation_ip, + 'content_item', + p_content_type, + null, + null, + null, + null, + null, + p_storage_type, + v_package_id + ); + + -- We will let the caller fill in the LOB data or file path. + + v_revision_id := content_revision__new ( + p_title, + p_description, + p_publish_date, + p_mime_type, + p_nls_language, + null, -- text + v_item_id, + p_revision_id, + current_timestamp, + p_creation_user, + p_creation_ip, + null, -- content_length + v_package_id + ); + + insert into images + (image_id, height, width) + values + (v_revision_id, p_height, p_width); + + return v_item_id; +END; +$$ LANGUAGE plpgsql; + + + +-- +-- procedure image__new_revision/12 +-- +CREATE OR REPLACE FUNCTION image__new_revision( + p_item_id integer, + p_revision_id integer, + p_title varchar, + p_description varchar, + p_publish_date timestamptz, + p_mime_type varchar, + p_nls_language varchar, + p_creation_user integer, + p_creation_ip varchar, + p_height integer, + p_width integer, + p_package_id integer default null +) RETURNS integer AS $$ +DECLARE + v_revision_id integer; + v_package_id acs_objects.package_id%TYPE; +BEGIN + -- We will let the caller fill in the LOB data or file path. + + if p_package_id is null then + v_package_id := acs_object__package_id(p_item_id); + else + v_package_id := p_package_id; + end if; + + v_revision_id := content_revision__new ( + p_title, + p_description, + p_publish_date, + p_mime_type, + p_nls_language, + null, -- content_length + p_item_id, + p_revision_id, + current_timestamp, + p_creation_user, + p_creation_ip, + null, -- content_length + v_package_id + ); + + insert into images + (image_id, height, width) + values + (v_revision_id, p_height, p_width); + + return v_revision_id; +END; +$$ LANGUAGE plpgsql;