Index: openacs-4/packages/acs-content-repository/acs-content-repository.info =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/acs-content-repository.info,v diff -u -N -r1.111 -r1.112 --- openacs-4/packages/acs-content-repository/acs-content-repository.info 7 Aug 2017 23:47:46 -0000 1.111 +++ openacs-4/packages/acs-content-repository/acs-content-repository.info 4 Sep 2017 06:23:58 -0000 1.112 @@ -7,7 +7,7 @@ t t - + f t OpenACS @@ -21,7 +21,7 @@ GPL 3 - + Index: openacs-4/packages/acs-content-repository/sql/postgresql/content-item.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/sql/postgresql/content-item.sql,v diff -u -N -r1.73 -r1.74 --- openacs-4/packages/acs-content-repository/sql/postgresql/content-item.sql 7 Aug 2017 23:47:47 -0000 1.73 +++ openacs-4/packages/acs-content-repository/sql/postgresql/content-item.sql 4 Sep 2017 06:23:58 -0000 1.74 @@ -477,7 +477,7 @@ new__description, now(), -- publish_date new__mime_type, - new_nls_language, + new__nls_language, null, -- data/text v_item_id, null, -- revision_id Index: openacs-4/packages/acs-content-repository/sql/postgresql/upgrade/upgrade-5.10.0d1-5.10.0d2.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/sql/postgresql/upgrade/upgrade-5.10.0d1-5.10.0d2.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.10.0d1-5.10.0d2.sql 4 Sep 2017 06:23:58 -0000 1.1 @@ -0,0 +1,201 @@ +-- +-- fix typo in variable name "new_nls_language" (must be "new__nls_language") +-- +-- Same as upgrade-5.9.2d1-5.9.2d2 + +-- +-- procedure content_item__new/17 (accepts 15-17 args) +-- +CREATE OR REPLACE FUNCTION content_item__new( + new__name varchar, + new__parent_id integer, -- default null + new__item_id integer, -- default null + new__locale varchar, -- default null + new__creation_date timestamptz, -- default now() + new__creation_user integer, -- default null + new__context_id integer, -- default null + new__creation_ip varchar, -- default null + new__item_subtype varchar, -- default 'content_item' + new__content_type varchar, -- default 'content_revision' + new__title varchar, -- default null + new__description varchar, -- default null + new__mime_type varchar, -- default 'text/plain' + new__nls_language varchar, -- default null + new__data integer, -- default null + new__package_id integer default null, + new__with_child_rels boolean DEFAULT 't' + +) RETURNS integer AS $$ +-- +-- This version passes "data" as integer (lob version), most other use +-- "text" and "storage_type" +-- +DECLARE + new__relation_tag varchar default null; + new__is_live boolean default 'f'; + + v_parent_id cr_items.parent_id%TYPE; + v_parent_type acs_objects.object_type%TYPE; + v_item_id cr_items.item_id%TYPE; + v_revision_id cr_revisions.revision_id%TYPE; + v_title cr_revisions.title%TYPE; + v_rel_id acs_objects.object_id%TYPE; + v_rel_tag cr_child_rels.relation_tag%TYPE; + v_context_id acs_objects.context_id%TYPE; +BEGIN + + -- place the item in the context of the pages folder if no + -- context specified + + if new__parent_id is null then + select c_root_folder_id from content_item_globals into v_parent_id; + else + v_parent_id := new__parent_id; + end if; + + -- Determine context_id + if new__context_id is null then + v_context_id := v_parent_id; + else + v_context_id := new__context_id; + end if; + + -- use the name of the item if no title is supplied + if new__title is null or new__title = '' then + v_title := new__name; + else + v_title := new__title; + end if; + + if v_parent_id = -4 or + content_folder__is_folder(v_parent_id) = 't' then + + if v_parent_id != -4 and + content_folder__is_registered( + v_parent_id, new__content_type, 'f') = 'f' then + + raise EXCEPTION '-20000: This items content type % is not registered to this folder %', new__content_type, v_parent_id; + end if; + + else if v_parent_id != -4 then + + select object_type into v_parent_type from acs_objects + where object_id = v_parent_id; + + if NOT FOUND then + raise EXCEPTION '-20000: Invalid parent ID % specified in content_item.new', v_parent_id; + end if; + + if content_item__is_subclass(v_parent_type, 'content_item') = 't' and + content_item__is_valid_child(v_parent_id, new__content_type) = 'f' then + + raise EXCEPTION '-20000: This items content type % is not allowed in this container %', new__content_type, v_parent_id; + end if; + + end if; end if; + + -- Create the object + + v_item_id := acs_object__new( + new__item_id, + new__item_subtype, + new__creation_date, + new__creation_user, + new__creation_ip, + v_context_id, + 't', + v_title, + new__package_id + ); + + insert into cr_items ( + item_id, name, content_type, parent_id, storage_type + ) values ( + v_item_id, new__name, new__content_type, v_parent_id, 'lob' + ); + + -- if the parent is not a folder, insert into cr_child_rels + if new__with_child_rels = 't' and + v_parent_id != -4 and + content_folder__is_folder(v_parent_id) = 'f' and + content_item__is_valid_child(v_parent_id, new__content_type) = 't' then + + if new__relation_tag is null or new__relation_tag = '' then + v_rel_tag := content_item__get_content_type(v_parent_id) + || '-' || new__content_type; + else + v_rel_tag := new__relation_tag; + end if; + + v_rel_id := acs_object__new( + null, + 'cr_item_child_rel', + now(), + null, + null, + v_parent_id, + 't', + v_rel_tag || ': ' || v_parent_id || ' - ' || v_item_id, + new__package_id + ); + + insert into cr_child_rels ( + rel_id, parent_id, child_id, relation_tag, order_n + ) values ( + v_rel_id, v_parent_id, v_item_id, v_rel_tag, v_item_id + ); + + end if; + + -- create the revision if data or title is not null + + if new__data is not null then + + -- call content_revision__new/12 (data is integer) + + v_revision_id := content_revision__new( + v_title, + new__description, + now(), -- publish_date + new__mime_type, + new__nls_language, + new__data, + v_item_id, + null, -- revision_id + new__creation_date, + new__creation_user, + new__creation_ip, + new__package_id + ); + + elsif new__title is not null then + + -- call content_revision__new/13 (data is null) + + v_revision_id := content_revision__new( + v_title, + new__description, + now(), -- publish_date + new__mime_type, + new__nls_language, + null, -- data/text + v_item_id, + null, -- revision_id + new__creation_date, + new__creation_user, + new__creation_ip, + null, -- content_length + new__package_id + ); + + end if; + + -- make the revision live if is_live is true + if new__is_live = 't' then + PERFORM content_item__set_live_revision(v_revision_id); + end if; + + return v_item_id; + +END; +$$ LANGUAGE plpgsql;