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.47 -r1.48 --- openacs-4/packages/acs-content-repository/acs-content-repository.info 29 Dec 2004 15:29:33 -0000 1.47 +++ openacs-4/packages/acs-content-repository/acs-content-repository.info 6 Jan 2005 16:52:25 -0000 1.48 @@ -7,7 +7,7 @@ t t - + OpenACS The canonical repository for OpenACS content. @@ -20,7 +20,7 @@ other CMS backing functionality. Utilized by Bug Tracker, File Storage, and other packages. - + 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.60 -r1.61 --- openacs-4/packages/acs-content-repository/sql/postgresql/content-item.sql 5 Jan 2005 15:39:46 -0000 1.60 +++ openacs-4/packages/acs-content-repository/sql/postgresql/content-item.sql 6 Jan 2005 16:52:25 -0000 1.61 @@ -42,7 +42,7 @@ end;' language 'plpgsql' stable; --- new 19 param version of content_item__new +-- new 19 param version of content_item__new (now its 20 with package_id) select define_function_args('content_item__new','name,parent_id,item_id,locale,creation_date;now,creation_user,context_id,creation_ip,item_subtype;content_item,content_type;content_revision,title,description,mime_type;text/plain,nls_language,text,data,relation_tag,is_live;f,storage_type;lob,package_id'); @@ -1265,9 +1265,8 @@ 7) delete all associated comments */ -select define_function_args('content_item__delete','item_id'); - -create or replace function content_item__delete (integer) +select define_function_args('content_item__del','item_id'); +create or replace function content_item__del (integer) returns integer as ' declare delete__item_id alias for $1; @@ -1391,6 +1390,15 @@ return 0; end;' language 'plpgsql'; +select define_function_args('content_item__delete','item_id'); +create or replace function content_item__delete (integer) +returns integer as ' +declare + delete__item_id alias for $1; +begin + PERFORM content_item__del (delete__item_id); + return 0; +end;' language 'plpgsql'; select define_function_args('content_item__edit_name','item_id,name'); Index: openacs-4/packages/acs-content-repository/sql/postgresql/content-revision.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/sql/postgresql/content-revision.sql,v diff -u -N -r1.39 -r1.40 --- openacs-4/packages/acs-content-repository/sql/postgresql/content-revision.sql 12 Aug 2004 18:51:56 -0000 1.39 +++ openacs-4/packages/acs-content-repository/sql/postgresql/content-revision.sql 6 Jan 2005 16:52:25 -0000 1.40 @@ -446,7 +446,7 @@ -- procedure delete -select define_function_args('content_revision__delete','revision_id'); +select define_function_args('content_revision__del','revision_id'); create or replace function content_revision__delete (integer) returns integer as ' declare @@ -509,7 +509,17 @@ return 0; end;' language 'plpgsql'; +select define_function_args('content_revision__delete','revision_id'); +create or replace function content_revision__delete (integer) +returns integer as ' +declare + delete__revision_id alias for $1; +begin + PERFORM content_revision__del(delete__revision_id); + return 0; +end;' language 'plpgsql'; + -- function get_number select define_function_args('content_revision__get_number','revision_id'); create or replace function content_revision__get_number (integer) Index: openacs-4/packages/acs-content-repository/sql/postgresql/content-template.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/sql/postgresql/content-template.sql,v diff -u -N -r1.18 -r1.19 --- openacs-4/packages/acs-content-repository/sql/postgresql/content-template.sql 6 Jan 2005 14:58:27 -0000 1.18 +++ openacs-4/packages/acs-content-repository/sql/postgresql/content-template.sql 6 Jan 2005 16:52:25 -0000 1.19 @@ -176,7 +176,8 @@ -- procedure delete -create or replace function content_template__delete (integer) +select define_function_args('content_template__del','template_id'); +create or replace function content_template__del (integer) returns integer as ' declare delete__template_id alias for $1; @@ -196,7 +197,18 @@ return 0; end;' language 'plpgsql'; +create or replace function content_template__delete (integer) +returns integer as ' +declare + delete__template_id alias for $1; +begin + PERFORM content_template__delete(delete__template_id); + + return 0; +end;' language 'plpgsql'; + + -- function is_template create or replace function content_template__is_template (integer) returns boolean as ' Index: openacs-4/packages/acs-content-repository/sql/postgresql/upgrade/upgrade-5.2.0d9-5.2.0d10.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/sql/postgresql/upgrade/upgrade-5.2.0d9-5.2.0d10.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.2.0d9-5.2.0d10.sql 6 Jan 2005 16:52:25 -0000 1.1 @@ -0,0 +1,347 @@ +-- +-- +-- +-- @author Dave Bauer (dave@thedesignexperience.org) +-- @creation-date 2005-01-05 +-- @arch-tag: 5be8fd4b-0259-4ded-905a-37cb95b7fa9f +-- @cvs-id $Id: upgrade-5.2.0d9-5.2.0d10.sql,v 1.1 2005/01/06 16:52:25 daveb Exp $ +-- + +-- procedure delete +select define_function_args('content_folder__del','folder_id,cascade_p;f'); +create or replace function content_folder__del (integer, boolean) +returns integer as ' +declare + delete__folder_id alias for $1; + p_cascade_p alias for $2; + v_count integer; + v_child_row record; + v_parent_id integer; + v_path varchar; + v_folder_sortkey varbit; +begin + + if p_cascade_p = ''f'' then + select count(*) into v_count from cr_items + where parent_id = delete__folder_id; + -- check if the folder contains any items + if v_count > 0 then + v_path := content_item__get_path(delete__folder_id, null); + raise EXCEPTION ''-20000: Folder ID % (%) cannot be deleted because it is not empty.'', delete__folder_id, v_path; + end if; + else + -- delete children + select into v_folder_sortkey tree_sortkey + from cr_items where item_id=delete__folder_id; + + for v_child_row in select + item_id, tree_sortkey, name + from cr_items + where tree_sortkey between v_folder_sortkey and tree_right(v_folder_sortkey) + and tree_sortkey != v_folder_sortkey + order by tree_sortkey desc + loop + if content_folder__is_folder(v_child_row.item_id) then + perform content_folder__delete(v_child_row.item_id); + else + perform content_item__delete(v_child_row.item_id); + end if; + end loop; + end if; + + PERFORM content_folder__unregister_content_type( + delete__folder_id, + ''content_revision'', + ''t'' + ); + + delete from cr_folder_type_map + where folder_id = delete__folder_id; + + select parent_id into v_parent_id from cr_items + where item_id = delete__folder_id; + raise notice ''deleteing folder %'',delete__folder_id; + PERFORM content_item__delete(delete__folder_id); + + -- check if any folders are left in the parent + update cr_folders set has_child_folders = ''f'' + where folder_id = v_parent_id and not exists ( + select 1 from cr_items + where parent_id = v_parent_id and content_type = ''content_folder''); + + return 0; +end;' language 'plpgsql'; + +select define_function_args('content_folder__delete','folder_id,cascade_p;f'); + +create or replace function content_folder__delete (integer, boolean) +returns integer as ' +declare + delete__folder_id alias for $1; + p_cascade_p alias for $2; +begin + PERFORM content_folder__del(delete__folder_id,p_cascade_p); + return 0; +end;' language 'plpgsql'; + + +create or replace function content_folder__delete (integer) +returns integer as ' +declare + delete__folder_id alias for $1; + v_count integer; + v_parent_id integer; + v_path varchar; +begin + return content_folder__del( + delete__folder_id, + ''f'' + ); +end;' language 'plpgsql'; + +-- procedure delete +select define_function_args('content_revision__del','revision_id'); +create or replace function content_revision__delete (integer) +returns integer as ' +declare + delete__revision_id alias for $1; + v_item_id cr_items.item_id%TYPE; + v_latest_revision cr_revisions.revision_id%TYPE; + v_live_revision cr_revisions.revision_id%TYPE; + v_rec record; +begin + + -- Get item id and latest/live revisions + select item_id into v_item_id from cr_revisions + where revision_id = delete__revision_id; + + select + latest_revision, live_revision + into + v_latest_revision, v_live_revision + from + cr_items + where + item_id = v_item_id; + + -- Recalculate latest revision + if v_latest_revision = delete__revision_id then + for v_rec in + select r.revision_id + from cr_revisions r, acs_objects o + where o.object_id = r.revision_id + and r.item_id = v_item_id + and r.revision_id <> delete__revision_id + order by o.creation_date desc + LOOP + + v_latest_revision := v_rec.revision_id; + exit; + end LOOP; + if NOT FOUND then + v_latest_revision := null; + end if; + + update cr_items set latest_revision = v_latest_revision + where item_id = v_item_id; + end if; + + -- Clear live revision + if v_live_revision = delete__revision_id then + update cr_items set live_revision = null + where item_id = v_item_id; + end if; + + -- Clear the audit + delete from cr_item_publish_audit + where old_revision = delete__revision_id + or new_revision = delete__revision_id; + + -- Delete the revision + PERFORM acs_object__delete(delete__revision_id); + + return 0; +end;' language 'plpgsql'; + +select define_function_args('content_revision__delete','revision_id'); + +create or replace function content_revision__delete (integer) +returns integer as ' +declare + delete__revision_id alias for $1; +begin + PERFORM content_revision__del(delete__revision_id); + return 0; +end;' language 'plpgsql'; + +-- item +select define_function_args('content_item__del','item_id'); +create or replace function content_item__del (integer) +returns integer as ' +declare + delete__item_id alias for $1; + -- v_wf_cases_val record; + v_symlink_val record; + v_revision_val record; + v_rel_val record; +begin + + -- Removed this as having workflow stuff in the CR is just plain wrong. + -- DanW, Aug 25th, 2001. + + -- raise NOTICE ''Deleting associated workflows...''; + -- 1) delete all workflow cases associated with this item + -- for v_wf_cases_val in select + -- case_id + -- from + -- wf_cases + -- where + -- object_id = delete__item_id + -- LOOP + -- PERFORM workflow_case__delete(v_wf_cases_val.case_id); + -- end loop; + + raise NOTICE ''Deleting symlinks...''; + -- 2) delete all symlinks to this item + for v_symlink_val in select + symlink_id + from + cr_symlinks + where + target_id = delete__item_id + LOOP + PERFORM content_symlink__delete(v_symlink_val.symlink_id); + end loop; + + raise NOTICE ''Unscheduling item...''; + delete from cr_release_periods + where item_id = delete__item_id; + + raise NOTICE ''Deleting associated revisions...''; + -- 3) delete all revisions of this item + delete from cr_item_publish_audit + where item_id = delete__item_id; + + for v_revision_val in select + revision_id + from + cr_revisions + where + item_id = delete__item_id + LOOP + PERFORM acs_object__delete(v_revision_val.revision_id); + end loop; + + raise NOTICE ''Deleting associated item templates...''; + -- 4) unregister all templates to this item + delete from cr_item_template_map + where item_id = delete__item_id; + + raise NOTICE ''Deleting item relationships...''; + -- Delete all relations on this item + for v_rel_val in select + rel_id + from + cr_item_rels + where + item_id = delete__item_id + or + related_object_id = delete__item_id + LOOP + PERFORM acs_rel__delete(v_rel_val.rel_id); + end loop; + + raise NOTICE ''Deleting child relationships...''; + for v_rel_val in select + rel_id + from + cr_child_rels + where + child_id = delete__item_id + LOOP + PERFORM acs_rel__delete(v_rel_val.rel_id); + end loop; + + raise NOTICE ''Deleting parent relationships...''; + for v_rel_val in select + rel_id, child_id + from + cr_child_rels + where + parent_id = delete__item_id + LOOP + PERFORM acs_rel__delete(v_rel_val.rel_id); + PERFORM content_item__delete(v_rel_val.child_id); + end loop; + + raise NOTICE ''Deleting associated permissions...''; + -- 5) delete associated permissions + delete from acs_permissions + where object_id = delete__item_id; + + raise NOTICE ''Deleting keyword associations...''; + -- 6) delete keyword associations + delete from cr_item_keyword_map + where item_id = delete__item_id; + + raise NOTICE ''Deleting associated comments...''; + -- 7) delete associated comments + PERFORM journal_entry__delete_for_object(delete__item_id); + + -- context_id debugging loop + --for v_error_val in c_error_cur loop + -- raise NOTICE ''ID='' || v_error_val.object_id || '' TYPE='' + -- || v_error_val.object_type); + --end loop; + + raise NOTICE ''Deleting content item...''; + PERFORM acs_object__delete(delete__item_id); + + return 0; +end;' language 'plpgsql'; + + +select define_function_args('content_item__delete','item_id'); +create or replace function content_item__delete (integer) +returns integer as ' +declare + delete__item_id alias for $1; +begin + PERFORM content_item__del (delete__item_id); + return 0; +end;' language 'plpgsql'; + + +-- template +select define_function_args('content_template__del','template_id'); +create or replace function content_template__del (integer) +returns integer as ' +declare + delete__template_id alias for $1; +begin + + delete from cr_type_template_map + where template_id = delete__template_id; + + delete from cr_item_template_map + where template_id = delete__template_id; + + delete from cr_templates + where template_id = delete__template_id; + + PERFORM content_item__delete(delete__template_id); + + return 0; +end;' language 'plpgsql'; + +select define_function_args('content_template__delete','template_id'); + +create or replace function content_template__delete (integer) +returns integer as ' +declare + delete__template_id alias for $1; +begin + PERFORM content_template__delete(delete__template_id); + + return 0; +end;' language 'plpgsql'; Index: openacs-4/packages/acs-content-repository/tcl/content-template-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/tcl/content-template-procs.tcl,v diff -u -N -r1.6 -r1.7 --- openacs-4/packages/acs-content-repository/tcl/content-template-procs.tcl 6 Jan 2005 15:01:31 -0000 1.6 +++ openacs-4/packages/acs-content-repository/tcl/content-template-procs.tcl 6 Jan 2005 16:52:25 -0000 1.7 @@ -59,7 +59,7 @@ } { return [package_exec_plsql -var_list [list \ [list template_id $template_id ] \ - ] content_template delete] + ] content_template del] }