Index: openacs-4/packages/acs-content-repository/www/doc/guide/revisions.html =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/www/doc/guide/revisions.html,v diff -u -r1.1.1.1 -r1.1.1.1.30.1 --- openacs-4/packages/acs-content-repository/www/doc/guide/revisions.html 13 Mar 2001 22:59:26 -0000 1.1.1.1 +++ openacs-4/packages/acs-content-repository/www/doc/guide/revisions.html 22 Jun 2016 07:40:41 -0000 1.1.1.1.30.1 @@ -4,39 +4,39 @@

Creating Content Revisions

- ACS Documentation : + ACS Documentation : Content Repository : - Developer Guide + Developer Guide

At a basic level, creating a new revision of a content item involves the following steps:

    -
  1. Insert a row in the acs_objects table to create the +
  2. Insert a row in the acs_objects table to create the object. -
  3. Insert a corresponding row in the cr_revisions table +
  4. Insert a corresponding row in the cr_revisions table with the basic attributes for the revision. -
  5. Write the content data into the content BLOB column of - the cr_revisions table. +
  6. Write the content data into the content BLOB column of + the cr_revisions table.
  7. Insert a corresponding row into the attribute table of each ancestor of the content type of the item. This is not - applicable if the content type is Basic Item or an + applicable if the content type is Basic Item or an immediate subtype thereof.
  8. Insert a corresponding row into the attribute table of the content type of the item. This is not applicable if the content - type is Basic Item. + type is Basic Item.

Use the Content Revision API to create a revision

Content revisions are initialized using the -content_revision.new function. The only parameters required +content_revision.new function. The only parameters required to create the revision are a title, a content item ID, and some text:

@@ -47,16 +47,16 @@ Here comes a car...uh oh! The End' ); -

The item_id parameter is ID of the content item with +

The item_id parameter is ID of the content item with which the revision is associated.

-

The content_item.new function accepts a number of other -optional parameters: description, mime_type, and -publish_date. The standard creation_date, -creation_user, and creation_ip should be specified -for auditing purposes. Instead of the text parameter, -this function can be called with a data parameter, in which -data is a blob:

+

The content_item.new function accepts a number of other +optional parameters: description, mime_type, and +publish_date. The standard creation_date, +creation_user, and creation_ip should be specified +for auditing purposes. Instead of the text parameter, +this function can be called with a data parameter, in which +data is a blob:

revision_id := content_revision.new(
     title         => 'A Revision',
@@ -74,12 +74,12 @@
 

Insert additional attributes

Given that there is no way (AFAIK) to pass variable parameters to a -PL/SQL function, there is no way to make content_revision.new +PL/SQL function, there is no way to make content_revision.new generic enough to support submission of the attributes for all different content types. This leaves you with three alternatives:

    -
  1. Call content_revision.new followed by manual +
  2. Call content_revision.new followed by manual DML statements to write data into the content BLOB and insert attributes.
  3. Write a PL/SQL package for each of your content types, @@ -88,16 +88,16 @@ for each content type.
-

The last option is made possible by an instead of insert +

The last option is made possible by an instead of insert trigger on the attribute view for each content type. (An attribute view joins together the storage tables for the -ancestors of each content type, including acs_objects and -cr_revisions). Normally it is not possible to insert into a -view. Oracle allows you to create an instead of trigger for +ancestors of each content type, including acs_objects and +cr_revisions). Normally it is not possible to insert into a +view. Oracle allows you to create an instead of trigger for a view, however, which intercepts the DML statement and allows you to execute an arbitrary block of PL/SQL instead. The code to create or replace the trigger is automatically generated and executed with each -call to content_type.create_attribute. The trigger makes it +call to content_type.create_attribute. The trigger makes it possible to create complete revisions with a single insert statement:

@@ -122,17 +122,17 @@

Selecting a live revision

The live revision of a content item can be obtained with the -content_item.get_live_revision function:

+content_item.get_live_revision function:

live_revision_id := content_item.get_live_revision(
     item_id => :item_id
 );
-

The item_id identifies the content item with which the +

The item_id identifies the content item with which the revision is associated.

Likewise, the most recent revision of a content item can be -obtained with the content_item.get_latest_revision +obtained with the content_item.get_latest_revision function:

latest_revision_id := content_item.get_latest_revision(