--
-- content_revision__new/7
--
create or replace function content_revision__new(
  new__title character varying,
  new__description character varying,
  new__publish_date timestamp with time zone,
  new__mime_type character varying,
  new__text text,
  new__item_id integer,
  new__package_id integer DEFAULT NULL::integer
) returns int4 as $$

DECLARE
BEGIN
	raise NOTICE 'content_revision__new/7 is deprecated, call content_revision__new/13 instead';

        return content_revision__new(new__title,
                                     new__description,
                                     new__publish_date,
                                     new__mime_type,
                                     null,
                                     new__text,
                                     new__item_id,
                                     null,
                                     now(),
                                     null,
                                     null,
                                     null,
                                     new__package_id
               );

END;
$$ language plpgsql;


--
-- content_revision__new/12
--
create or replace function content_revision__new(
  new__title character varying,
  new__description character varying,
  new__publish_date timestamp with time zone,
  new__mime_type character varying,
  new__nls_language character varying,
  new__data integer,
  new__item_id integer,
  new__revision_id integer,
  new__creation_date timestamp with time zone,
  new__creation_user integer,
  new__creation_ip character varying,
  new__package_id integer DEFAULT NULL::integer
) returns int4 as $$

DECLARE
  v_revision_id               integer;       
  v_package_id                acs_objects.package_id%TYPE;
  v_content_type              acs_object_types.object_type%TYPE;
BEGIN

  v_content_type := content_item__get_content_type(new__item_id);

  if new__package_id is null then
    v_package_id := acs_object__package_id(new__item_id);
  else
    v_package_id := new__package_id;
  end if;

  v_revision_id := acs_object__new(
      new__revision_id,
      v_content_type, 
      new__creation_date, 
      new__creation_user, 
      new__creation_ip, 
      new__item_id,
      't',
      new__title,
      v_package_id
  );

  -- binary data is stored in cr_revisions using Dons lob hack.
  -- This routine only inserts the lob id.  It would need to be followed by 
  -- ns_pg blob_dml from within a tcl script to actually insert the lob data.

  -- After the lob data is inserted, the content_length needs to be updated 
  -- as well.
  -- DanW, 2001-05-10.

  insert into cr_revisions (
    revision_id, title, description, mime_type, publish_date,
    nls_language, lob, item_id, content_length
  ) values (
    v_revision_id, new__title, new__description,
    new__mime_type, 
    new__publish_date, new__nls_language, new__data, 
    new__item_id, 0
  );

  return v_revision_id;

END;
$$ language plpgsql;


--
-- content_revision__new/12
--
create or replace function content_revision__new(
  new__title character varying,
  new__description character varying,
  new__publish_date timestamp with time zone,
  new__mime_type character varying,
  new__nls_language character varying,
  new__text text,
  new__item_id integer,
  new__revision_id integer,
  new__creation_date timestamp with time zone,
  new__creation_user integer,
  new__creation_ip character varying,
  new__package_id integer DEFAULT NULL::integer
) returns int4 as $$
   
DECLARE
BEGIN
	raise NOTICE 'content_revision__new/12 is deprecated, call content_revision__new/13 instead';

        return content_revision__new(new__title,
                                     new__description,
                                     new__publish_date,
                                     new__mime_type,
                                     new__nls_language,
                                     new__text,
                                     new__item_id,
                                     new__revision_id,
                                     new__creation_date,
                                     new__creation_user,
                                     new__creation_ip,
                                     null,               -- content_length
                                     new__package_id
		);
END
$$ language plpgsql;


--
-- content_revision__new/13
--
create or replace function content_revision__new(
  new__title character varying,
  new__description character varying,
  new__publish_date timestamp with time zone,
  new__mime_type character varying,
  new__nls_language character varying,
  new__text text,
  new__item_id integer,
  new__revision_id integer,
  new__creation_date timestamp with time zone,
  new__creation_user integer,
  new__creation_ip character varying,
  new__content_length integer,
  new__package_id integer
) returns int4 as $$

DECLARE
  v_revision_id               integer;       
  v_package_id                acs_objects.package_id%TYPE;
  v_content_type              acs_object_types.object_type%TYPE;
  v_storage_type              cr_items.storage_type%TYPE;
  v_length                    cr_revisions.content_length%TYPE;
BEGIN

  v_content_type := content_item__get_content_type(new__item_id);

  if new__package_id is null then
    v_package_id := acs_object__package_id(new__item_id);
  else
    v_package_id := new__package_id;
  end if;

  v_revision_id := acs_object__new(
      new__revision_id,
      v_content_type, 
      new__creation_date, 
      new__creation_user, 
      new__creation_ip, 
      new__item_id,
      't',
      new__title,
      v_package_id
  );

  select storage_type into v_storage_type
    from cr_items
   where item_id = new__item_id;

  if v_storage_type = 'text' then 
     v_length := length(new__text);
  else
     v_length := coalesce(new__content_length,0);
  end if;

  -- text data is stored directly in cr_revisions using text datatype.

  insert into cr_revisions (
    revision_id, title, description, mime_type, publish_date,
    nls_language, content, item_id, content_length
  ) values (
    v_revision_id, new__title, new__description,
     new__mime_type, 
    new__publish_date, new__nls_language, 
    new__text, new__item_id, v_length
  );

  return v_revision_id;
 
END;
$$ language plpgsql;