create or replace function content_item__get_context (integer) returns integer as ' declare get_context__item_id alias for $1; v_context_id acs_objects.context_id%TYPE; begin select context_id into v_context_id from acs_objects where object_id = get_context__item_id; if NOT FOUND then raise EXCEPTION ''-20000: Content item % does not exist in content_item.get_context'', get_context__item_id; end if; return v_context_id; end;' language 'plpgsql' stable; -- 1) make sure we are not moving the item to an invalid location: -- that is, the destination folder exists and is a valid folder -- 2) make sure the content type of the content item is registered -- to the target folder -- 3) update the parent_id for the item create or replace function content_item__move (integer,integer) returns integer as ' declare move__item_id alias for $1; move__target_folder_id alias for $2; begin perform content_item__move( move__item_id, move__target_folder_id, NULL ); return null; end;' language 'plpgsql'; create or replace function content_item__move (integer,integer,varchar) returns integer as ' declare move__item_id alias for $1; move__target_folder_id alias for $2; move__name alias for $3; begin if move__target_folder_id is null then raise exception ''attempt to move item_id % to null folder_id'', move__item_id; end if; if content_folder__is_folder(move__item_id) = ''t'' then PERFORM content_folder__move(move__item_id, move__target_folder_id,move__name); elsif content_folder__is_folder(move__target_folder_id) = ''t'' then if content_folder__is_registered(move__target_folder_id, content_item__get_content_type(move__item_id),''f'') = ''t'' and content_folder__is_registered(move__target_folder_id, content_item__get_content_type(content_symlink__resolve(move__item_id)),''f'') = ''t'' then -- update the parent_id for the item update cr_items set parent_id = move__target_folder_id, name = coalesce(move__name, name) where item_id = move__item_id; end if; end if; return 0; end;' language 'plpgsql';