Fisheye: Tag 1.1 refers to a dead (removed) revision in file `openacs-4/packages/acs-content-repository/sql/postgresql/upgrade/upgrade-5.9.1d17-5.9.1d18.sql'. Fisheye: No comparison available. Pass `N' to diff? Index: openacs-4/packages/acs-content-repository/www/doc/design.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/www/doc/design.adp,v diff -u -r1.2.2.3 -r1.2.2.4 --- openacs-4/packages/acs-content-repository/www/doc/design.adp 1 Dec 2015 11:17:39 -0000 1.2.2.3 +++ openacs-4/packages/acs-content-repository/www/doc/design.adp 1 Jul 2016 09:17:32 -0000 1.2.2.4 @@ -3,6 +3,9 @@ Content Repository Design

Content Repository Design

+ +ACS Documentation : Content Repository +

I. Essentials

@@ -56,20 +59,21 @@ Object Model. As such the same design tradeoffs apply.

The content repository stores all revisions of all content items in a single table, rather than maintaining separate tables for -"live" and other revisions. The single-table approach dramatically -simplifies most operations on the repository, including adding -revisions, marking a "live" revision, and maintaining a full -version history. The drawback of this approach is that accessing -live content is less efficient. Given the ID of a content item, it -is not possible to directly access the live content associated with -that item. Instead, an extra join to the revisions table is -required. Depending on the production habits of the publisher, the -amount of live content in the repository may be eclipsed by large -numbers of infrequently accessed working drafts. The impact of this -arrangement is minimized by storing the actual content data in a -separate tablespace (preferably on a separate disk) from the actual -revisions table, reducing its size and allows the database server -to scan and read it more efficiently.

+"live" and other revisions. The single-table approach +dramatically simplifies most operations on the repository, +including adding revisions, marking a "live" revision, +and maintaining a full version history. The drawback of this +approach is that accessing live content is less efficient. Given +the ID of a content item, it is not possible to directly access the +live content associated with that item. Instead, an extra join to +the revisions table is required. Depending on the production habits +of the publisher, the amount of live content in the repository may +be eclipsed by large numbers of infrequently accessed working +drafts. The impact of this arrangement is minimized by storing the +actual content data in a separate tablespace (preferably on a +separate disk) from the actual revisions table, reducing its size +and allows the database server to scan and read it more +efficiently.

VI. Further Reading

The Object Model provides a graphic overview of the the how the content repository is designed. @@ -80,5 +84,5 @@ karlg\@arsdigita.com
-Last Modified: $‌Id: design.html,v 1.1.1.1 2001/03/13 22:59:26 ben -Exp $ +Last Modified: $‌Id: design.html,v 1.1.1.1.30.1 2016/06/22 07:40:41 +gustafn Exp $ Index: openacs-4/packages/acs-content-repository/www/doc/index.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/www/doc/index.adp,v diff -u -r1.2.2.8 -r1.2.2.9 --- openacs-4/packages/acs-content-repository/www/doc/index.adp 1 Dec 2015 11:17:39 -0000 1.2.2.8 +++ openacs-4/packages/acs-content-repository/www/doc/index.adp 1 Jul 2016 09:17:32 -0000 1.2.2.9 @@ -3,6 +3,7 @@ ACS Content Repository

ACS Content Repository

+ACS Documentation

 

-Last Modified: $‌Id: folder.html,v 1.2.18.1 2016/06/09 08:21:01 +Last Modified: $‌Id: folder.html,v 1.2.18.2 2016/06/22 07:40:41 gustafn Exp $ Index: openacs-4/packages/acs-content-repository/www/doc/api/item.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/www/doc/api/item.adp,v diff -u -r1.2.2.10 -r1.2.2.11 --- openacs-4/packages/acs-content-repository/www/doc/api/item.adp 9 Jun 2016 13:03:11 -0000 1.2.2.10 +++ openacs-4/packages/acs-content-repository/www/doc/api/item.adp 1 Jul 2016 09:17:33 -0000 1.2.2.11 @@ -16,11 +16,11 @@ website. The actual content is stored in content revisions. It is implemented this way so that there can be mulitple versions of the actual content while the main idea remains constant. For example: -If there is a review for the movie "Terminator," there will exist a -content item by the name "terminator" with all the right parameters -(supertype, parent, etc), there will also exist at least one -content revision pointing to this item with the actual review -content.

+If there is a review for the movie "Terminator," there +will exist a content item by the name "terminator" with +all the right parameters (supertype, parent, etc), there will also +exist at least one content revision pointing to this item with the +actual review content.

 

Related Objects

@@ -38,12 +38,12 @@ Returns:The content type of the item Parameters:
-
item_id:  The item for which the content type is to be retrieved
Declaration:

+Declaration:

 function get_content_type (
   item_id     in cr_items.item_id%TYPE
 ) return cr_items.content_type%TYPE;
 
-
+

 

  • Function: content_item.get_context @@ -54,19 +54,20 @@ Returns:The id of the parent for this item Parameters:
    -
    item_id:  The item for which the parent is to be retrieved
    Declaration:
    
    +Declaration:
    
     function get_context (
       item_id       in cr_items.item_id%TYPE
     ) return acs_objects.context_id%TYPE;
     
    -
    +

     

  • Function: content_item.get_id -

    Takes in a path, such as "/tv/programs/star_trek/episode_203" -and returns the id of the item with this path. Note: URLs are -abstract (no extensions are allowed in content item names and -extensions are stripped when looking up content items)

    +

    Takes in a path, such as +"/tv/programs/star_trek/episode_203" and returns the id +of the item with this path. Note: URLs are abstract (no extensions +are allowed in content item names and extensions are stripped when +looking up content items)

    @@ -79,13 +80,13 @@ -
    Author:Karl Goldstein
    root_folder_id:  Starts path resolution from this folder. Defaults to the root of the sitemap
    Declaration:
    
    +Declaration:
    
     function get_id (
       item_path   in varchar2,
       root_folder_id in cr_items.item_id%TYPE default c_root_folder_id
     ) return cr_items.item_id%TYPE;
     
    -
    +
    See Also:content_item.get_path

     

    @@ -101,12 +102,12 @@ null if no revisions exist Parameters:
    -
    item_id:  The item for which the latest revision is to be retrieved
    Declaration:
    
    +Declaration:
    
     function get_latest_revision (
       item_id    in cr_items.item_id%TYPE
     ) return cr_revisions.revision_id%TYPE;
     
    -
    +
    See Also:content_item.get_live_revision

     

    @@ -121,12 +122,12 @@ if no live revision exists Parameters:
    -
    item_id:  The item for which the live revision is to be retrieved
    Declaration:
    
    +Declaration:
    
     function get_live_revision (
       item_id   in cr_items.item_id%TYPE
     ) return cr_revisions.revision_id%TYPE;
     
    -
    +
    See Also:content_item.set_live_revision, content_item.get_latest_revision @@ -141,12 +142,12 @@ otherwise Parameters:
    -
    item_id:  The item id
    Declaration:
    
    +Declaration:
    
     function get_parent_folder (
       item_id       in cr_items.item_id%TYPE
     ) return cr_folders.folder_id%TYPE;
     
    -
    +

     

  • Function: content_item.get_path @@ -163,13 +164,13 @@ root_folder_id:  Starts path resolution from this folder. Defaults to the root of the sitemap -Declaration:
    
    +Declaration:
    
     function get_path (
       item_id        in cr_items.item_id%TYPE,
       root_folder_id in cr_items.item_id%TYPE default c_root_folder_id
     ) return varchar2;
     
    -
    +
    See Also:content_item.get_id, content_item.write_to_file

     

    @@ -185,16 +186,16 @@ item_id:  The item for which the publish date is to be retrieved -is_live:  If 't', use the live revision for the item. Otherwise, use the -latest revision. The default is 'f' +is_live:  If 't', use the live revision for the item. Otherwise, +use the latest revision. The default is 'f' -Declaration:
    
    +Declaration:
    
     function get_publish_date (
       item_id    in cr_items.item_id%TYPE,
       is_live    in char default 'f'
     ) return cr_revisions.publish_date%TYPE;
     
    -
    +
    See Also:content_item.get_live_revision, content_item.get_latest_revision, @@ -209,28 +210,28 @@ Returns:The number of revisions for this item Parameters:
    -
    item_id:  The id the item
    Declaration:
    
    +Declaration:
    
     function get_revision_count (
       item_id   in cr_items.item_id%TYPE
     ) return number;
     
    -
    +
    See Also:content_revision.new

     

  • Function: content_item.get_root_folder - +
    Parameters:
    Not yet documented
    Declaration:
    
    +
    Parameters:
    Not yet documented
    Declaration:
    
     function get_root_folder return cr_folders.folder_id%TYPE;
     
    -

     

  • Function: content_item.get_template

    Retrieves the template which should be used to render this item. If no template is registered to specifically render the item in the -given context, the default template for the item's type is +given context, the default template for the item's type is returned.

    @@ -241,16 +242,16 @@ - + -
    Author:Karl Goldstein
    item_id:  The item for which the template will be unregistered
    use_context:  The context in the item is to be rendered, such as 'admin' or -'public'use_context:  The context in the item is to be rendered, such as +'admin' or 'public'
    Declaration:
    
    +Declaration:
    
     function get_template (
       item_id     in cr_items.item_id%TYPE,
       use_context in cr_item_template_map.use_context%TYPE
     ) return cr_templates.template_id%TYPE;
     
    -
    +
    See Also:content_type.register_template, content_item.register_template, @@ -259,8 +260,8 @@ Function: content_item.get_title

    Retrieves the title for the item, using either the latest or the live revision. If the specified item is in fact a folder, return -the folder's label. In addition, this function will automatically -resolve symlinks.

    +the folder's label. In addition, this function will +automatically resolve symlinks.

    @@ -269,16 +270,16 @@ - + -
    Author:Karl Goldstein
    item_id:  The item for which the title is to be retrieved
    is_live:  If 't', use the live revision to get the title. Otherwise, use -the latest revision. The default is 'f'is_live:  If 't', use the live revision to get the title. +Otherwise, use the latest revision. The default is 'f'
    Declaration:
    
    +Declaration:
    
     function get_title (
       item_id    in cr_items.item_id%TYPE,
       is_live    in char default 'f'
     ) return cr_revisions.title%TYPE;
     
    -
    +
    See Also:content_item.get_live_revision, content_item.get_latest_revision, content_symlink.resolve @@ -298,13 +299,13 @@ root_folder_id:  Starts path resolution from this folder. Defaults to the root of the sitemap -Declaration:
    
    +Declaration:
    
     function get_virtual_path (
       item_id        in cr_items.item_id%TYPE,
       root_folder_id in cr_items.item_id%TYPE default c_root_folder_id
     ) return varchar2;
     
    -
    +
    See Also:content_item.get_id, content_item.write_to_file, content_item.get_path @@ -317,21 +318,21 @@ Author:Karl Goldstein -Returns:'t' if the item is an index page for the specified -folder, 'f' otherwise +Returns:'t' if the item is an index page for the +specified folder, 'f' otherwise Parameters:
    -
    item_id:  The item id
    folder_id:  The folder id
    Declaration:
    
    +Declaration:
    
     function is_index_page (
       item_id   in cr_items.item_id%TYPE,
       folder_id in cr_folders.folder_id%TYPE
     ) return varchar2;
     
    -
    +
    See Also:content_folder.get_index_page

     

    @@ -345,16 +346,16 @@ Author:Michael Pih -Returns:'t' if the item is publishable in it's present -state, Otherwise, returns 'f' +Returns:'t' if the item is publishable in it's +present state, Otherwise, returns 'f' Parameters:
    -
    item_id The:  item ID of the potential parent
    Declaration:
    
    +Declaration:
    
     function is_publishable (
       item_id               in cr_items.item_id%TYPE
     ) return char;
     
    -
    +

     

  • Function: content_item.is_subclass @@ -363,54 +364,54 @@ Author:Karl Goldstein -Returns:'t' if the child class is a subclass of the -superclass, 'f' otherwise +Returns:'t' if the child class is a subclass of +the superclass, 'f' otherwise Parameters:
    -
    object_type:  The child class
    supertype:  The superclass
    Declaration:
    
    +Declaration:
    
     function is_subclass (
       object_type in acs_object_types.object_type%TYPE,
       supertype     in acs_object_types.supertype%TYPE
     ) return char;
     
    -
    +
    See Also:acs_object_type.create_type

     

  • Function: content_item.is_valid_child

    Determines if an item would be a valid child of another item by -checking if the parent allows children of the would-be child's +checking if the parent allows children of the would-be child's content type and if the parent already has n_max children of that content type.

    - +
    Author:Michael Pih
    Returns:'t' if the item would be a valid child, 'f' -otherwiseReturns:'t' if the item would be a valid child, +'f' otherwise
    Parameters:
    -
    item_id The:  item ID of the potential parent
    content_type The:  content type of the potential child item
    Declaration:
    
    +
    Declaration:
    
     function is_valid_child (
       item_id       in cr_items.item_id%TYPE,
       content_type  in acs_object_types.object_type%TYPE
     ) return char;
     
    -
    +

     

  • Function: content_item.new -

    Creates a new content item. If the data, title -or text parameters are specified, also creates a revision -for the item.

    +

    Creates a new content item. If the data, +title or text parameters are specified, also +creates a revision for the item.

    @@ -428,47 +429,49 @@ - - + - + - + +simultaneously with the text parameter +Defaults to 'parent content type'-'child content +type' - - - -
    Author:Karl Goldstein
    locale:  The locale for this item, for use with Intermedia search
    item_subtype:  The type of the new item, defaults to 'content_item' This -parameter is used to support inheritance, so that subclasses of -content_item can call this function to initialize the +item_subtype:  The type of the new item, defaults to 'content_item' +This parameter is used to support inheritance, so that subclasses +of content_item can call this function to initialize the parent class
    content_type:  The content type for the item, defaults to 'content_revision'. -Only objects of this type may be used as revisions for the -itemcontent_type:  The content type for the item, defaults to +'content_revision'. Only objects of this type may be used +as revisions for the item
    title:  The user-readable title for the item, defaults to the item's -nametitle:  The user-readable title for the item, defaults to the +item's name
    description:  A short description for the item (4000 characters maximum)
    mime_type:  The file type of the item, defaults to 'text/plain'mime_type:  The file type of the item, defaults to +'text/plain'
    nls_language:  The language for the item, used for Intermedia search
    text:  The text content of the new revision, 4000 charcters maximum. -Cannot be specified simultaneously with the data +Cannot be specified simultaneously with the data parameter
    data:  The blob content of the new revison. Cannot be specified -simultaneously with the text parameter
    relation_tag:  If a parent-child relationship is registered for these content types, use this tag to describe the parent-child relationship. -Defaults to 'parent content type'-'child content type'
    is_live:  If 't', the new revision will become live
    creation_date:  As in acs_object.new +creation_date:  As in acs_object.new
    creation_ip:  As in acs_object.new +creation_ip:  As in acs_object.new
    creation_user:  As in acs_object.new +creation_user:  As in acs_object.new
    Declaration:
    
    +Declaration:
    
     function new (
       name          in cr_items.name%TYPE,
       parent_id     in acs_objects.context_id%TYPE default null,
    @@ -493,14 +496,14 @@
       is_live       in char default 'f'
     ) return cr_items.item_id%TYPE;
     
    -
    +
    See Also:acs_object.new

     

  • Function: content_item.relate - +
    Parameters:
    Not yet documented
    Declaration:
    
    +
    Parameters:
    Not yet documented
    Declaration:
    
     function relate (
       item_id       in cr_items.item_id%TYPE,
       object_id     in acs_objects.object_id%TYPE,
    @@ -509,7 +512,7 @@
       relation_type in acs_object_types.object_type%TYPE default 'cr_item_rel'
     ) return cr_item_rels.rel_id%TYPE;
     
    -

     

  • Procedure: content_item.copy @@ -525,13 +528,13 @@ target_folder_id:  The folder where the item is to be copied -Declaration:
    
    +Declaration:
    
     procedure copy (
       item_id               in cr_items.item_id%TYPE,
       target_folder_id      in cr_folders.folder_id%TYPE
     );
     
    -
    +
    See Also:content_item.new, content_folder.new, content_item.move

     

    @@ -544,12 +547,12 @@ Author:Karl Goldstein Parameters:
    -
    item_id:  The id of the item to delete
    Declaration:
    
    +Declaration:
    
     procedure delete (
       item_id       in cr_items.item_id%TYPE
     );
     
    -
    +
    See Also:acs_object.delete

     

    @@ -566,13 +569,13 @@ target_folder_id:  The new folder for the item -Declaration:
    
    +Declaration:
    
     procedure move (
       item_id               in cr_items.item_id%TYPE,
       target_folder_id      in cr_folders.folder_id%TYPE
     );
     
    -
    +
    See Also:content_item.new, content_folder.new, content_item.copy

     

    @@ -591,22 +594,22 @@ use_context:  The context in which the template is appropriate, such as 'admin' or 'public' -Declaration:
    
    +Declaration:
    
     procedure register_template (
       item_id      in cr_items.item_id%TYPE,
       template_id  in cr_templates.template_id%TYPE,
       use_context  in cr_item_template_map.use_context%TYPE
     );
     
    -
    +
    See Also:content_type.register_template, content_item.unregister_template, content_item.get_template

     

  • Procedure: content_item.edit_name

    Renames the item. If an item with the specified name already -exists under this item's parent, an error is thrown

    +exists under this item's parent, an error is thrown

    Author:Karl Goldstein
    Parameters:
    @@ -615,13 +618,13 @@ -
    name:  The new name for the item, must be URL-encoded
    Declaration:
    
    +
    Declaration:
    
     procedure rename (
       item_id        in cr_items.item_id%TYPE,
       name           in cr_items.name%TYPE
     );
     
    -
    + See Also:content_item.new

     

    @@ -634,13 +637,13 @@ Parameters:
    -
    revision_id:  The id of the revision which is to become live for its corresponding item
    Declaration:
    
    +Declaration:
    
     procedure set_live_revision (
       revision_id   in cr_revisions.revision_id%TYPE,
       publish_status in cr_items.publish_status%TYPE default 'ready'
     );
     
    -
    +
    See Also:content_item.get_live_revision

     

    @@ -660,14 +663,14 @@ end_when:  The time and date when the item should be expired. -Declaration:
    
    +Declaration:
    
     procedure set_release_period (
       item_id    in cr_items.item_id%TYPE,
       start_when date default null,
       end_when   date default null
     );
     
    -
    +

     

  • Procedure: @@ -685,14 +688,14 @@ use_context:  The context in which the template is appropriate, such as 'admin' or 'public' -Declaration:
    
    +Declaration:
    
     procedure unregister_template (
       item_id      in cr_items.item_id%TYPE,
       template_id  in cr_templates.template_id%TYPE default null,
       use_context  in cr_item_template_map.use_context%TYPE default null
     );
     
    -
    +
    See Also:content_type.register_template, content_item.register_template, content_item.get_template @@ -701,7 +704,7 @@ Procedure: content_item.unset_live_revision - +
    Parameters:
    Not yet documented
    Declaration:
    
    +
    Parameters:
    Not yet documented
    Declaration:
    
     procedure unset_live_revision (
       --/** Set the live revision to null for the item
       --    \@author Michael Pih
    @@ -710,7 +713,7 @@
       item_id      in cr_items.item_id%TYPE
     );
     
    -

     

  • Procedure: content_item.write_to_file @@ -725,19 +728,19 @@ root_path:  The path in the filesystem to which the root of the sitemap corresponds -Declaration:
    
    +Declaration:
    
     procedure write_to_file (
       item_id     in cr_items.item_id%TYPE,
       root_path   in varchar2
     );
     
    -
    +
    See Also:content_item.get_path
  •  

    -Last Modified: $‌Id: item.html,v 1.3.18.1 2016/06/09 08:21:01 +Last Modified: $‌Id: item.html,v 1.3.18.2 2016/06/22 07:40:41 gustafn Exp $ Index: openacs-4/packages/acs-content-repository/www/doc/api/keyword.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/www/doc/api/keyword.adp,v diff -u -r1.2.2.4 -r1.2.2.5 --- openacs-4/packages/acs-content-repository/www/doc/api/keyword.adp 9 Jun 2016 13:03:11 -0000 1.2.2.4 +++ openacs-4/packages/acs-content-repository/www/doc/api/keyword.adp 1 Jul 2016 09:17:33 -0000 1.2.2.5 @@ -32,12 +32,12 @@ Returns:The description for the specified keyword Parameters:
    -
    keyword_id:  The keyword id
    Declaration:
    
    +Declaration:
    
     function get_description (
       keyword_id  in cr_keywords.keyword_id%TYPE
     ) return varchar2;
     
    -
    +
    See Also:content_keyword.get_heading, content_keyword.set_description @@ -51,12 +51,12 @@ Returns:The heading for the specified keyword Parameters:
    -
    keyword_id:  The keyword id
    Declaration:
    
    +Declaration:
    
     function get_heading (
       keyword_id  in cr_keywords.keyword_id%TYPE
     ) return varchar2;
     
    -
    +
    See Also:content_keyword.set_heading, content_keyword.get_description @@ -72,12 +72,12 @@ keyword exists Parameters:
    -
    keyword_id:  The keyword id
    Declaration:
    
    +Declaration:
    
     function get_path (
       keyword_id in cr_keywords.keyword_id%TYPE
     ) return varchar2;
     
    -
    +
    See Also:content_keyword.new

     

    @@ -87,8 +87,8 @@ Author:Karl Goldstein -Returns:'t' if the keyword may be matched to an item, 'f' -otherwise +Returns:'t' if the keyword may be matched to an +item, 'f' otherwise Parameters:
    @@ -99,24 +99,27 @@ of the following values: -
    item_id:  The item id
    Declaration:
    
    +Declaration:
    
     function is_assigned (
       item_id      in cr_items.item_id%TYPE,
       keyword_id   in cr_keywords.keyword_id%TYPE,
       recurse      in varchar2 default 'none'
     ) return varchar2;
     
    -
    +
    See Also:content_keyword.item_assign

     

    @@ -127,22 +130,23 @@ Author:Karl Goldstein -Returns:'t' if the keyword has no descendants, 'f' -otherwise +Returns:'t' if the keyword has no descendants, +'f' otherwise Parameters:
    -
    keyword_id:  The keyword id
    Declaration:
    
    +Declaration:
    
     function is_leaf (
       keyword_id  in cr_keywords.keyword_id%TYPE
     ) return varchar2;
     
    -
    +
    See Also:content_keyword.new

     

  • Function: content_keyword.new -

    Creates a new keyword (also known as "subject category").

    +

    Creates a new keyword (also known as "subject +category").

    @@ -158,20 +162,20 @@ - + - - - -
    Author:Karl Goldstein
    keyword_id:  The id of the new keyword. A new id will be allocated if this parameter is null
    object_type:  The type for the new keyword, defaults to 'content_keyword'. -This parameter may be used by subclasses of -content_keyword to initialize the superclass.object_type:  The type for the new keyword, defaults to +'content_keyword'. This parameter may be used by subclasses +of content_keyword to initialize the superclass.
    creation_date:  As in acs_object.new +creation_date:  As in acs_object.new
    creation_ip:  As in acs_object.new +creation_ip:  As in acs_object.new
    creation_user:  As in acs_object.new +creation_user:  As in acs_object.new
    Declaration:
    
    +Declaration:
    
     function new (
       heading       in cr_keywords.heading%TYPE,
       description   in cr_keywords.description%TYPE default null,
    @@ -185,7 +189,7 @@
       object_type   in acs_object_types.object_type%TYPE default 'content_keyword'
     ) return cr_keywords.keyword_id%TYPE;
     
    -
    +
    See Also:acs_object.new, content_item.new, content_keyword.item_assign, content_keyword.delete @@ -199,12 +203,12 @@ Author:Karl Goldstein Parameters:
    -
    keyword_id:  The id of the keyword to be deleted
    Declaration:
    
    +Declaration:
    
     procedure delete (
       keyword_id  in cr_keywords.keyword_id%TYPE
     );
     
    -
    +
    See Also:acs_object.delete, content_keyword.item_unassign

     

    @@ -220,13 +224,13 @@ keyword_id:  The keyword to be assigned -context_id:  As in acs_rel.new, deprecated +context_id:  As in acs_rel.new, deprecated -creation_ip:  As in acs_rel.new, deprecated +creation_ip:  As in acs_rel.new, deprecated -creation_user:  As in acs_rel.new, deprecated +creation_user:  As in acs_rel.new, deprecated -Declaration:
    
    +Declaration:
    
     procedure item_assign (
       item_id       in cr_items.item_id%TYPE,
       keyword_id    in cr_keywords.keyword_id%TYPE,
    @@ -235,7 +239,7 @@
       creation_ip   in acs_objects.creation_ip%TYPE default null
     );
     
    -
    +
    See Also:acs_rel.new, content_keyword.item_unassign

     

    @@ -251,13 +255,13 @@ keyword_id:  The keyword to be unassigned -Declaration:
    
    +Declaration:
    
     procedure item_unassign (
       item_id     in cr_items.item_id%TYPE,
       keyword_id  in cr_keywords.keyword_id%TYPE
     );
     
    -
    +
    See Also:acs_rel.delete, content_keyword.item_assign

     

    @@ -273,13 +277,13 @@ description:  The new description -Declaration:
    
    +Declaration:
    
     procedure set_description (
       keyword_id  in cr_keywords.keyword_id%TYPE,
       description in cr_keywords.description%TYPE
     );
     
    -
    +
    See Also:content_keyword.set_heading, content_keyword.get_description @@ -295,13 +299,13 @@ heading:  The new heading -Declaration:
    
    +Declaration:
    
     procedure set_heading (
       keyword_id  in cr_keywords.keyword_id%TYPE,
       heading     in cr_keywords.heading%TYPE
     );
     
    -
    +
    See Also:content_keyword.get_heading, content_keyword.set_description @@ -310,5 +314,5 @@

     

    -Last Modified: $‌Id: keyword.html,v 1.1.1.1.30.1 2016/06/09 08:21:01 +Last Modified: $‌Id: keyword.html,v 1.1.1.1.30.2 2016/06/22 07:40:41 gustafn Exp $ Index: openacs-4/packages/acs-content-repository/www/doc/api/permission.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/www/doc/api/permission.adp,v diff -u -r1.2.2.3 -r1.2.2.4 --- openacs-4/packages/acs-content-repository/www/doc/api/permission.adp 9 Jun 2016 08:44:49 -0000 1.2.2.3 +++ openacs-4/packages/acs-content-repository/www/doc/api/permission.adp 1 Jul 2016 09:17:33 -0000 1.2.2.4 @@ -32,8 +32,8 @@ Author:Karl Goldstein -Returns:'t' if the donation is possible, 'f' -otherwise +Returns:'t' if the donation is possible, +'f' otherwise Parameters:
    @@ -42,14 +42,14 @@ -
    object_id:  The object whose permissions are to be changed
    privilege:  The privilege to be granted
    Declaration:
    
    +Declaration:
    
       function has_grant_authority (
         object_id         in acs_objects.object_id%TYPE,
         holder_id         in parties.party_id%TYPE,
         privilege         in acs_privileges.privilege%TYPE
       ) return varchar2;
     
    -
    +
    See Also:content_permission.grant_permission, content_permission.is_has_revoke_authority, acs_permission.grant_permission @@ -66,8 +66,8 @@ Author:Karl Goldstein -Returns:'t' if it is possible to revoke the privilege, 'f' -otherwise +Returns:'t' if it is possible to revoke the +privilege, 'f' otherwise Parameters:
    @@ -78,15 +78,15 @@ -
    object_id:  The object whose permissions are to be changed
    revokee_id:  The user from whom the privilege is to be taken away
    Declaration:
    
    +Declaration:
    
       function has_revoke_authority (
         object_id         in acs_objects.object_id%TYPE,
         holder_id         in parties.party_id%TYPE,
         privilege         in acs_privileges.privilege%TYPE,
         revokee_id        in parties.party_id%TYPE
       ) return varchar2;
     
    -
    +
    See Also:content_permission.has_grant_authority, content_permission.revoke_permission, acs_permission.revoke_permission @@ -102,8 +102,8 @@ Author:Karl Goldstein -Returns:'t' if the user has the specified permission on -the object, 'f' otherwise +Returns:'t' if the user has the specified +permission on the object, 'f' otherwise Parameters:
    @@ -112,14 +112,14 @@ -
    object_id:  The object whose permissions are to be checked
    privilege:  The privilege to be checked
    Declaration:
    
    +Declaration:
    
       function permission_p (
         object_id         in acs_objects.object_id%TYPE,
         holder_id         in parties.party_id%TYPE,
         privilege         in acs_privileges.privilege%TYPE
       ) return varchar2;
     
    -
    +
    See Also:content_permission.grant_permission, content_permission.revoke_permission, acs_permission.permission_p @@ -142,14 +142,14 @@ privilege:  The parent privilege to be granted -Declaration:
    
    +Declaration:
    
       procedure grant_permission_h (
         object_id         in acs_objects.object_id%TYPE,
         grantee_id        in parties.party_id%TYPE,
         privilege         in acs_privileges.privilege%TYPE
       );
     
    -
    +
    See Also:content_permission.grant_permission

     

    @@ -170,14 +170,14 @@ privilege:  The parent privilege to be granted -Declaration:
    
    +Declaration:
    
       procedure grant_permission_h (
         object_id         in acs_objects.object_id%TYPE,
         grantee_id        in parties.party_id%TYPE,
         privilege         in acs_privileges.privilege%TYPE
       );
     
    -
    +
    See Also:content_permission.grant_permission

     

    @@ -195,14 +195,14 @@ child_object_id:  The child object id -Declaration:
    
    +Declaration:
    
       procedure inherit_permissions (
         parent_object_id  in acs_objects.object_id%TYPE,
         child_object_id   in acs_objects.object_id%TYPE,
         child_creator_id  in parties.party_id%TYPE default null
       );
     
    -
    +
    See Also:content_permission.grant, acs_permission.grant_permission

     

    @@ -223,14 +223,14 @@ privilege:  The parent privilege to be revoked -Declaration:
    
    +Declaration:
    
       procedure revoke_permission_h (
         object_id         in acs_objects.object_id%TYPE,
         revokee_id        in parties.party_id%TYPE,
         privilege         in acs_privileges.privilege%TYPE
       );
     
    -
    +
    See Also:content_permission.revoke_permission

     

    @@ -251,20 +251,20 @@ privilege:  The parent privilege to be revoked -Declaration:
    
    +Declaration:
    
       procedure revoke_permission_h (
         object_id         in acs_objects.object_id%TYPE,
         revokee_id        in parties.party_id%TYPE,
         privilege         in acs_privileges.privilege%TYPE
       );
     
    -
    +
    See Also:content_permission.revoke_permission
  •  

    -Last Modified: $‌Id: permission.html,v 1.1.1.1.30.1 2016/06/09 -08:21:01 gustafn Exp $ +Last Modified: $‌Id: permission.html,v 1.1.1.1.30.2 2016/06/22 +07:40:41 gustafn Exp $ Index: openacs-4/packages/acs-content-repository/www/doc/api/revision.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/www/doc/api/revision.adp,v diff -u -r1.2.2.4 -r1.2.2.5 --- openacs-4/packages/acs-content-repository/www/doc/api/revision.adp 9 Jun 2016 13:03:11 -0000 1.2.2.4 +++ openacs-4/packages/acs-content-repository/www/doc/api/revision.adp 1 Jul 2016 09:17:33 -0000 1.2.2.5 @@ -14,10 +14,10 @@

    Overview

    Content revisions contain the data for content items. There is a many to one relationship between content revisions and content -items. There is at most one "live" revision for every content item -though. For example, there may be 5 revisions of the review for the -movie "Terminator," yet only one of these may be live on the -website at a given time.

    +items. There is at most one "live" revision for every +content item though. For example, there may be 5 revisions of the +review for the movie "Terminator," yet only one of these +may be live on the website at a given time.

     

    Related Objects

    @@ -32,25 +32,25 @@ Author:Karl Goldstein Parameters:
    -
    revision_id:  The id of the revision to copy
    Declaration:
    
    +Declaration:
    
     function copy (
       revision_id   in cr_revisions.revision_id%TYPE,
       copy_id       in cr_revisions.revision_id%TYPE default null
     ) return cr_revisions.revision_id%TYPE;
     
    -
    +
    See Also:content_revision.new

     

  • Function: content_revision.export_xml - +
    Parameters:
    Not yet documented
    Declaration:
    
    +
    Parameters:
    Not yet documented
    Declaration:
    
     function export_xml (
       revision_id IN cr_revisions.revision_id%TYPE
     ) return cr_xml_docs.doc_id%TYPE;
     
    -

     

  • Function: content_revision.get_number @@ -63,26 +63,26 @@ Returns:The number of the revision Parameters:
    -
    revision_id:  The id the revision
    Declaration:
    
    +Declaration:
    
     function get_number (
       revision_id   in cr_revisions.revision_id%TYPE
     ) return number;
     
    -
    +
    See Also:content_revision.new

     

  • Function: content_revision.import_xml - +
    Parameters:
    Not yet documented
    Declaration:
    
    +
    Parameters:
    Not yet documented
    Declaration:
    
     function import_xml (
       item_id IN cr_items.item_id%TYPE,
       revision_id IN cr_revisions.revision_id%TYPE,
       doc_id IN number
     ) return cr_revisions.revision_id%TYPE;
     
    -

     

  • Function: content_revision.new @@ -113,16 +113,16 @@ revision_id:  The id of the new revision. A new id will be allocated by default -creation_date:  As in acs_object.new +creation_date:  As in acs_object.new -creation_ip:  As in acs_object.new +creation_ip:  As in acs_object.new -creation_user:  As in acs_object.new +creation_user:  As in acs_object.new -Declaration:
    
    +Declaration:
    
     function new (
       title         in cr_revisions.title%TYPE,
       description   in cr_revisions.description%TYPE default null,
    @@ -139,14 +139,14 @@
       creation_ip   in acs_objects.creation_ip%TYPE default null
     ) return cr_revisions.revision_id%TYPE;
     
    -
    +
    See Also:acs_object.new, content_item.new

     

  • Function: content_revision.read_xml - +
    Parameters:
    Not yet documented
    Declaration:
    
    +
    Parameters:
    Not yet documented
    Declaration:
    
     function read_xml (
       item_id IN number,
       revision_id IN number,
    @@ -158,12 +158,12 @@
          java.lang.Integer, java.lang.Integer, oracle.sql.CLOB
       ) return int';
     
    -

     

  • Function: content_revision.write_xml - +
    Parameters:
    Not yet documented
    Declaration:
    
    +
    Parameters:
    Not yet documented
    Declaration:
    
     function write_xml (
       revision_id IN number,
       clob_loc IN clob
    @@ -174,7 +174,7 @@
          java.lang.Integer, oracle.sql.CLOB
       ) return int';
     
    -

     

  • Procedure: content_revision.delete @@ -183,12 +183,12 @@ Author:Karl Goldstein Parameters:
    -
    revision_id:  The id of the revision to delete
    Declaration:
    
    +Declaration:
    
     procedure delete (
       revision_id   in cr_revisions.revision_id%TYPE
     );
     
    -
    +
    See Also:content_revision.new, acs_object.delete

     

    @@ -202,19 +202,19 @@ Author:Karl Goldstein Parameters:
    -
    revision_id:  The id of the revision to index
    Declaration:
    
    +Declaration:
    
     procedure index_attributes(
       revision_id IN cr_revisions.revision_id%TYPE
     );
     
    -
    +
    See Also:content_revision.new

     

  • Procedure: content_revision.replace - +
    Parameters:
    Not yet documented
    Declaration:
    
    +
    Parameters:
    Not yet documented
    Declaration:
    
     procedure replace(
       revision_id number, search varchar2, replace varchar2)
     as language
    @@ -224,7 +224,7 @@
         int, java.lang.String, java.lang.String
        )';
     
    -

     

  • Procedure: content_revision.to_html @@ -233,16 +233,16 @@ Author:Karl Goldstein Parameters:
    -
    revision_id:  The id of the revision to index
    Declaration:
    
    +Declaration:
    
     procedure to_html (
       revision_id IN cr_revisions.revision_id%TYPE
     );
     
    -
    +
  •  

    -Last Modified: $‌Id: revision.html,v 1.1.1.1.30.1 2016/06/09 -08:21:01 gustafn Exp $ +Last Modified: $‌Id: revision.html,v 1.1.1.1.30.2 2016/06/22 +07:40:41 gustafn Exp $ Index: openacs-4/packages/acs-content-repository/www/doc/api/symlink.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/www/doc/api/symlink.adp,v diff -u -r1.2.2.4 -r1.2.2.5 --- openacs-4/packages/acs-content-repository/www/doc/api/symlink.adp 9 Jun 2016 08:44:49 -0000 1.2.2.4 +++ openacs-4/packages/acs-content-repository/www/doc/api/symlink.adp 1 Jul 2016 09:17:33 -0000 1.2.2.5 @@ -27,15 +27,16 @@ Author:Karl Goldstein -Returns:'t' if the item is a symlink, 'f' otherwise +Returns:'t' if the item is a symlink, 'f' +otherwise Parameters:
    -
    item_id:  The item id
    Declaration:
    
    +Declaration:
    
     function is_symlink (
       item_id          in cr_items.item_id%TYPE
     ) return char;
     
    -
    +
    See Also:content_symlink.new, content_symlink.resolve

     

    @@ -62,16 +63,16 @@ symlink_id:  The id of the new symlink. A new id will be allocated by default -creation_date:  As in acs_object.new +creation_date:  As in acs_object.new -creation_ip:  As in acs_object.new +creation_ip:  As in acs_object.new -creation_user:  As in acs_object.new +creation_user:  As in acs_object.new -Declaration:
    
    +Declaration:
    
     function new (
       name          in cr_items.name%TYPE default null,
       label         in cr_symlinks.label%TYPE default null,
    @@ -85,7 +86,7 @@
       creation_ip   in acs_objects.creation_ip%TYPE default null
     ) return cr_symlinks.symlink_id%TYPE;
     
    -
    +
    See Also:acs_object.new, content_item.new, content_symlink.resolve

     

    @@ -99,12 +100,12 @@ item id if the item is not in fact a symlink Parameters:
    -
    item_id:  The item id to be resolved
    Declaration:
    
    +Declaration:
    
     function resolve (
       item_id       in cr_items.item_id%TYPE
     ) return cr_items.item_id%TYPE;
     
    -
    +
    See Also:content_symlink.new, content_symlink.is_symlink

     

    @@ -119,12 +120,12 @@ null. the item is not in fact a symlink Parameters:
    -
    item_id:  The item id to be resolved
    Declaration:
    
    +Declaration:
    
     function resolve_content_type (
       item_id       in cr_items.item_id%TYPE
     ) return cr_items.content_type%TYPE;
     
    -
    +
    See Also:content_symlink.resolve

     

    @@ -140,13 +141,13 @@ target_folder_id:  The id of the folder where the symlink is to be copied -Declaration:
    
    +Declaration:
    
     procedure copy (
       symlink_id            in cr_symlinks.symlink_id%TYPE,
       target_folder_id      in cr_folders.folder_id%TYPE
     );
     
    -
    +
    See Also:content_symlink.new, content_item.copy

     

    @@ -157,18 +158,18 @@ Author:Karl Goldstein Parameters:
    -
    symlink_id:  The id of the symlink to delete
    Declaration:
    
    +Declaration:
    
     procedure delete (
       symlink_id    in cr_symlinks.symlink_id%TYPE
     );
     
    -
    +
    See Also:content_symlink.new, acs_object.delete

     

    -Last Modified: $‌Id: symlink.html,v 1.2.2.1 2016/06/09 08:21:01 +Last Modified: $‌Id: symlink.html,v 1.2.2.2 2016/06/22 07:40:41 gustafn Exp $ Index: openacs-4/packages/acs-content-repository/www/doc/api/template.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/www/doc/api/template.adp,v diff -u -r1.2.2.4 -r1.2.2.5 --- openacs-4/packages/acs-content-repository/www/doc/api/template.adp 9 Jun 2016 13:03:11 -0000 1.2.2.4 +++ openacs-4/packages/acs-content-repository/www/doc/api/template.adp 1 Jul 2016 09:17:33 -0000 1.2.2.5 @@ -40,40 +40,41 @@ root_folder_id:  Starts path resolution at this folder -Declaration:
    
    +Declaration:
    
     function get_path (
       template_id    in cr_templates.template_id%TYPE,
       root_folder_id in cr_folders.folder_id%TYPE default c_root_folder_id
     ) return varchar2;
     
    -
    +
    See Also:content_item.get_path

     

  • Function: content_template.get_root_folder - +
    Parameters:
    Not yet documented
    Declaration:
    
    +
    Parameters:
    Not yet documented
    Declaration:
    
     function get_root_folder return cr_folders.folder_id%TYPE;
     
    -

     

  • Function: content_template.is_template

    Determine if an item is a template.

    - +
    Author:Karl Goldstein
    Returns:'t' if the item is a template, 'f' otherwiseReturns:'t' if the item is a template, 'f' +otherwise
    Parameters:
    -
    item_id:  The item id
    Declaration:
    
    +
    Declaration:
    
     function is_template (
       template_id   in cr_templates.template_id%TYPE
     ) return varchar2;
     
    -
    + See Also:content_template.new

     

    @@ -96,16 +97,16 @@ template_id:  The id of the new template. A new id will be allocated if this parameter is null -creation_date:  As in acs_object.new +creation_date:  As in acs_object.new -creation_ip:  As in acs_object.new +creation_ip:  As in acs_object.new -creation_user:  As in acs_object.new +creation_user:  As in acs_object.new -Declaration:
    
    +Declaration:
    
     function new (
       name          in cr_items.name%TYPE,
       parent_id     in acs_objects.context_id%TYPE default null,
    @@ -117,7 +118,7 @@
       creation_ip   in acs_objects.creation_ip%TYPE default null
     ) return cr_templates.template_id%TYPE;
     
    -
    +
    See Also:acs_object.new, content_item.new, content_item.register_template, content_type.register_template @@ -131,18 +132,18 @@ Author:Karl Goldstein Parameters:
    -
    template_id:  The id of the template to delete
    Declaration:
    
    +Declaration:
    
     procedure delete (
       template_id   in cr_templates.template_id%TYPE
     );
     
    -
    +
    See Also:acs_object.delete, content_item.unregister_template, content_type.unregister_template,

     

  • -Last Modified: $‌Id: template.html,v 1.1.1.1.30.1 2016/06/09 -08:21:01 gustafn Exp $ +Last Modified: $‌Id: template.html,v 1.1.1.1.30.2 2016/06/22 +07:40:41 gustafn Exp $ Index: openacs-4/packages/acs-content-repository/www/doc/api/type.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/www/doc/api/type.adp,v diff -u -r1.2.2.4 -r1.2.2.5 --- openacs-4/packages/acs-content-repository/www/doc/api/type.adp 9 Jun 2016 13:03:11 -0000 1.2.2.4 +++ openacs-4/packages/acs-content-repository/www/doc/api/type.adp 1 Jul 2016 09:17:33 -0000 1.2.2.5 @@ -43,7 +43,7 @@ default_value:  The default value for the attribute, defaults to null -Declaration:
    
    +Declaration:
    
     function create_attribute (
       content_type          in acs_attributes.object_type%TYPE,
       attribute_name        in acs_attributes.attribute_name%TYPE,
    @@ -54,7 +54,7 @@
       column_spec           in varchar2  default 'varchar2(4000)'
     ) return acs_attributes.attribute_id%TYPE;
     
    -
    +
    See Also:acs_object_type.create_attribute, content_type.create_type

     

    @@ -73,13 +73,13 @@ use_context:  The context in which the template is appropriate, such as 'admin' or 'public' -Declaration:
    
    +Declaration:
    
     function get_template (
       content_type  in cr_type_template_map.content_type%TYPE,
       use_context   in cr_type_template_map.use_context%TYPE
     ) return cr_templates.template_id%TYPE;
     
    -
    +
    See Also:content_item.register_template, content_item.unregister_template, content_item.get_template, content_type.unregister_template, content_type.register_template, @@ -89,12 +89,12 @@
  • Function: content_type.is_content_type - +
    Parameters:
    Not yet documented
    Declaration:
    
    +
    Parameters:
    Not yet documented
    Declaration:
    
     function is_content_type (
       object_type   in acs_object_types.object_type%TYPE
     ) return char;
     
    -

     

  • Procedure: content_type.create_type @@ -117,10 +117,10 @@ id_column:  The primary key for the table, defaults to 'XXX' -name_method:  As in acs_object_type.create_type +name_method:  As in acs_object_type.create_type -Declaration:
    
    +Declaration:
    
     procedure create_type (
       content_type          in acs_object_types.object_type%TYPE,
       supertype             in acs_object_types.object_type%TYPE
    @@ -132,14 +132,14 @@
       name_method           in acs_object_types.name_method%TYPE default null
     );
     
    -
    +
    See Also:acs_object_type.create_type

     

  • Procedure: content_type.drop_attribute

    Drop an existing attribute. If you are using CMS, make sure to -call cm_form_widget.unregister_attribute_widget before +call cm_form_widget.unregister_attribute_widget before calling this function.

    @@ -149,38 +149,39 @@ - + -
    Author:Karl Goldstein
    attribute_name:  The name of the attribute to drop
    drop_column:  If 't', will also alter the table and remove the column where -the attribute is stored. The default is 'f' (leaves the table -untouched).drop_column:  If 't', will also alter the table and remove the column +where the attribute is stored. The default is 'f' (leaves +the table untouched).
    Declaration:
    
    +Declaration:
    
     procedure drop_attribute (
       content_type          in acs_attributes.object_type%TYPE,
       attribute_name        in acs_attributes.attribute_name%TYPE,
       drop_column           in varchar2 default 'f'
     );
     
    -
    +
    See Also:acs_object.drop_attribute, content_type.create_attribute, cm_form_widget.unregister_attribute_widget

     

  • Procedure: content_type.refresh_view

    Create a view for the type which joins all attributes of the -type, including the inherited attributes. The view is named "

    +type, including the inherited attributes. The view is named +"

    X" Called by create_attribute and create_type.
    Author:Karl Goldstein
    Parameters:
    -
    content_type:  The type for which the view is to be created.
    Declaration:
    
    +
    Declaration:
    
     procedure refresh_view (
       content_type  in cr_type_template_map.content_type%TYPE
     );
     
    -
    + See Also:content_type.create_type

     

    @@ -208,7 +209,7 @@ max_n:  The minimun number of relationships of this type which an item must have to go live. -Declaration:
    
    +Declaration:
    
     procedure register_child_type (
       parent_type  in cr_type_children.parent_type%TYPE,
       child_type    in cr_type_children.child_type%TYPE,
    @@ -217,7 +218,7 @@
       max_n         in integer default null
     );
     
    -
    +
    See Also:content_type.register_relation_type, content_type.register_child_type @@ -226,13 +227,13 @@ Procedure: content_type.register_mime_type - +
    Parameters:
    Not yet documented
    Declaration:
    
    +
    Parameters:
    Not yet documented
    Declaration:
    
     procedure register_mime_type (
       content_type  in cr_content_mime_type_map.content_type%TYPE,
       mime_type     in cr_content_mime_type_map.mime_type%TYPE
     );
     
    -

     

  • Procedure: @@ -259,7 +260,7 @@ max_n:  The minimun number of relationships of this type which an item must have to go live. -Declaration:
    
    +Declaration:
    
     procedure register_relation_type (
       content_type  in cr_type_relations.content_type%TYPE,
       target_type   in cr_type_relations.target_type%TYPE,
    @@ -268,7 +269,7 @@
       max_n         in integer default null
     );
     
    -
    +
    See Also:content_type.unregister_relation_type

     

    @@ -288,18 +289,18 @@ use_context:  The context in which the template is appropriate, such as 'admin' or 'public' -is_default:  If 't', this template becomes the default template for the -type, default is 'f'. +is_default:  If 't', this template becomes the default template for +the type, default is 'f'. -Declaration:
    
    +Declaration:
    
     procedure register_template (
       content_type  in cr_type_template_map.content_type%TYPE,
       template_id   in cr_templates.template_id%TYPE,
       use_context   in cr_type_template_map.use_context%TYPE,
       is_default    in cr_type_template_map.is_default%TYPE default 'f'
     );
     
    -
    +
    See Also:content_item.register_template, content_item.unregister_template, content_item.get_template, content_type.unregister_template, @@ -323,14 +324,14 @@ use_context:  The context in which the template is appropriate, such as 'admin' or 'public' -Declaration:
    
    +Declaration:
    
     procedure set_default_template (
       content_type  in cr_type_template_map.content_type%TYPE,
       template_id   in cr_templates.template_id%TYPE,
       use_context   in cr_type_template_map.use_context%TYPE
     );
     
    -
    +
    See Also:content_item.register_template, content_item.unregister_template, content_item.get_template, content_type.unregister_template, content_type.register_template, @@ -354,14 +355,14 @@ relation_tag:  A simple token used to identify a set of relations. -Declaration:
    
    +Declaration:
    
     procedure unregister_child_type (
       parent_type  in cr_type_children.parent_type%TYPE,
       child_type   in cr_type_children.child_type%TYPE,
       relation_tag in cr_type_children.relation_tag%TYPE default null
     );
     
    -
    +
    See Also:content_type.register_relation_type, content_type.register_child_type @@ -370,13 +371,13 @@ Procedure: content_type.unregister_mime_type - +
    Parameters:
    Not yet documented
    Declaration:
    
    +
    Parameters:
    Not yet documented
    Declaration:
    
     procedure unregister_mime_type (
       content_type  in cr_content_mime_type_map.content_type%TYPE,
       mime_type     in cr_content_mime_type_map.mime_type%TYPE
     );
     
    -

     

  • Procedure: @@ -395,14 +396,14 @@ relation_tag:  A simple token used to identify a set of relations. -Declaration:
    
    +Declaration:
    
     procedure unregister_relation_type (
       content_type in cr_type_relations.content_type%TYPE,
       target_type  in cr_type_relations.target_type%TYPE,
       relation_tag in cr_type_relations.relation_tag%TYPE default null
     );
     
    -
    +
    See Also:content_type.register_relation_type

     

    @@ -422,14 +423,14 @@ use_context:  The context in which the template is to be unregistered -Declaration:
    
    +Declaration:
    
     procedure unregister_template (
       content_type  in cr_type_template_map.content_type%TYPE default null,
       template_id   in cr_templates.template_id%TYPE,
       use_context   in cr_type_template_map.use_context%TYPE default null
     );
     
    -
    +
    See Also:content_item.register_template, content_item.unregister_template, content_item.get_template, content_type.set_default_template, content_type.register_template, @@ -439,5 +440,5 @@
  • -Last Modified: $‌Id: type.html,v 1.1.1.1.30.1 2016/06/09 08:21:01 +Last Modified: $‌Id: type.html,v 1.1.1.1.30.2 2016/06/22 07:40:41 gustafn Exp $ Index: openacs-4/packages/acs-content-repository/www/doc/guide/convert.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/www/doc/guide/convert.adp,v diff -u -r1.2.2.4 -r1.2.2.5 --- openacs-4/packages/acs-content-repository/www/doc/guide/convert.adp 9 Jun 2016 13:03:11 -0000 1.2.2.4 +++ openacs-4/packages/acs-content-repository/www/doc/guide/convert.adp 1 Jul 2016 09:17:33 -0000 1.2.2.5 @@ -3,19 +3,23 @@ Content Repository Developer Guide: HTML Conversion

    Converting Binary Documents to HTML

    + +Content Repository : Developer +Guide

    The content repository uses the INSO libraries included with Intermedia to support conversion of binary files such as Microsoft Word documents to HTML. This document describes how to make this conversion be part of the item creation or editing process, such that the content is always stored in the repository as HTML.

    -Note: Because temporary tables and LOB storage are used -during the conversion process, the entire process described here -must be performed within the context of a single transaction.

    +Note: Because temporary tables and LOB storage +are used during the conversion process, the entire process +described here must be performed within the context of a single +transaction.

    Create the Revision

    The first step is to create the revision that will be associated with the converted document, and obtain the corresponding ID. The -content column for the revision must be initialized with +content column for the revision must be initialized with an empty blob object:

     revision_id := content_revision.new(item_id => :item_id,
    @@ -26,15 +30,15 @@
     

    Uploading Binary Files

    The next step in the process is to upload the binary file into -the temporary table cr_doc_filter. This may be done using -any standard technique for uploading a binary file, such as an -image. The temporary table has only two columns; one is a BLOB to -store the document itself, and one is the revision ID.

    +the temporary table cr_doc_filter. This may be done +using any standard technique for uploading a binary file, such as +an image. The temporary table has only two columns; one is a BLOB +to store the document itself, and one is the revision ID.

    Converting the Document

    Once the revision has been created and the file has been uploaded, the file may be converted to HTML and written into the empty blob associated with the revision. This is done with the -to_html procedure in the content_revision +to_html procedure in the content_revision package:

     begin
    @@ -43,10 +47,10 @@
     /
     

    Once the transaction is committed, the uploaded document is -automatically deleted from the cr_doc_filter table.

    +automatically deleted from the cr_doc_filter table.


    karlg\@arsdigita.com
    -Last Modified: $‌Id: convert.html,v 1.1.1.1 2001/03/13 22:59:26 ben -Exp $ +Last Modified: $‌Id: convert.html,v 1.1.1.1.30.1 2016/06/22 07:40:41 +gustafn Exp $ Index: openacs-4/packages/acs-content-repository/www/doc/guide/file-system.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/www/doc/guide/file-system.adp,v diff -u -r1.2.2.3 -r1.2.2.4 --- openacs-4/packages/acs-content-repository/www/doc/guide/file-system.adp 1 Dec 2015 11:17:41 -0000 1.2.2.3 +++ openacs-4/packages/acs-content-repository/www/doc/guide/file-system.adp 1 Jul 2016 09:17:33 -0000 1.2.2.4 @@ -5,17 +5,21 @@ Items

    Organizing Content Items

    + +ACS Documentation : Content Repository : Developer Guide

    The content repository organizes content items in a hierarchical structure similar to a file system. You manage content items in the repository using the same basic operations as in a file system:

    • A freshly installed content repository consists of a single -"root" folder (analogous to the root directory / in UNIX -or an empty partition in Windows or MacOS).
    • You organize items by creating subfolders under the root.
    • You can move or copy items from one folder to another.
    • You can create "links" or "shortcuts" for items to make them -accessible from within other directories.
    • Each item has a "file name" and an absolute "path" that is -determined by its location on a particular branch of the repository -tree. For example, the path to an item named widget in the -folder products would be /products/widget.
    • +"root" folder (analogous to the root directory +/ in UNIX or an empty partition in Windows or +MacOS).
    • You organize items by creating subfolders under the root.
    • You can move or copy items from one folder to another.
    • You can create "links" or "shortcuts" for +items to make them accessible from within other directories.
    • Each item has a "file name" and an absolute +"path" that is determined by its location on a particular +branch of the repository tree. For example, the path to an item +named widget in the folder products would be +/products/widget.

    The content repository adds an additional twist to a traditional filesystem: any content item, not just a folder, may serve @@ -27,12 +31,12 @@ associated with it. It also is the logical container for all its components.

    It is important to note that folders are simply a special -subtype of content item. The content repository's representation of -a parent-child relationship between a folder and the items it -contains is no different from the relationship between a book and -its chapters. Folders may be thought of simply as generic -containers for grouping items that are not necessarily part of a -greater whole.

    +subtype of content item. The content repository's +representation of a parent-child relationship between a folder and +the items it contains is no different from the relationship between +a book and its chapters. Folders may be thought of simply as +generic containers for grouping items that are not necessarily part +of a greater whole.

    An Example

    Consider a simple repository structure with the following contents:

    @@ -41,25 +45,29 @@
    • The root folder of the content repository has a special ID which is returned by the function -content_item.get_root_folder.
    • Regular content items such as index and about -may be stored directly under the root folder.
    • The "About Us" page has a photo as a child item. Note that the -path to the photo is /about/photo. Internally, the photo's -parent_id (in the cr_items table) is set to the -item_id of the "About Us" page.
    • The "Press" folder contains two items. Internally, the -parent_id of the "Press Index" and "Release One" items are -set to the item_id of the "Press" folder.
    • +content_item.get_root_folder.
    • Regular content items such as index and +about may be stored directly under the root folder.
    • The "About Us" page has a photo as a child item. Note +that the path to the photo is /about/photo. Internally, +the photo's parent_id (in the cr_items +table) is set to the item_id of the "About Us" +page.
    • The "Press" folder contains two items. Internally, +the parent_id of the "Press Index" and +"Release One" items are set to the item_id of +the "Press" folder.

    Note that the same effective organization could have been -achieved by creating the "Press Index" item under the root, and -having press releases as its children. Using the folder approach -may have the following advantages:

    +achieved by creating the "Press Index" item under the +root, and having press releases as its children. Using the folder +approach may have the following advantages:

    • Content management systems can take advantage of the folder structure to implement an intuitive user interface analagous to familiar desktop tools (Windows Explorer, MacOS Finder, etc.).
    • You can use the content repository API to constraint the type of content that a folder may contain (except for the index page). -For example, it is possible to limit the contents of the "Press" -folder to items of type "Press Release." See the Content Folder API for more details.
    • +For example, it is possible to limit the contents of the +"Press" folder to items of type "Press +Release." See the Content +Folder API for more details.

    Using your own root

    By default, the content repository has one root folder for @@ -68,12 +76,12 @@ times might wish to store the content for each instance in its own content root. Creating your own content (and template) root also has the advantage that you will not accidentally access another -package's content nor will another package access your content. Not -that that could do any harm, because you have secured all your +package's content nor will another package access your content. +Not that that could do any harm, because you have secured all your content through appropriate permissions.

    We only talk about creating content roots from here on — creating template roots is completely analogous. You create your -own content root by calling content_folder.new in +own content root by calling content_folder.new in PL/SQL:

     declare
    @@ -88,25 +96,26 @@
     end;
     / 
     
    -

    The important point is that you have to pass in 0 for -the parent_id. This parent_id is special in that -it indicates folders with no parent.

    +

    The important point is that you have to pass in 0 for +the parent_id. This parent_id is special in +that it indicates folders with no parent.

    The content repository does not keep track of who created what root folders. You have to do that yourself. In the above example, -you need to store the value v_my_content_root somewhere, +you need to store the value v_my_content_root somewhere, for example a table that is specific for your package, otherwise -you won't have a reliable way of accessing your new content +you won't have a reliable way of accessing your new content root.

    With multiple content roots, there can be many items with -item_path'/news/article' and you need to tell -the content repository which root you are talking about. For -example, to retrieve content through content_item.get_id, -you pass the id of your content root as the root_folder_id -parameter to specify the content root under which the -item_path should be resolved.

    +item_path'/news/article' and you +need to tell the content repository which root you are talking +about. For example, to retrieve content through +content_item.get_id, you pass the id of your content +root as the root_folder_id parameter to specify the +content root under which the item_path should be +resolved.


    karlg\@arsdigita.com
    -Last Modified: $‌Id: file-system.html,v 1.1.1.1 2001/03/13 22:59:26 -ben Exp $ +Last Modified: $‌Id: file-system.html,v 1.1.1.1.30.1 2016/06/22 +07:40:41 gustafn Exp $ Index: openacs-4/packages/acs-content-repository/www/doc/guide/items.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/www/doc/guide/items.adp,v diff -u -r1.2.2.3 -r1.2.2.4 --- openacs-4/packages/acs-content-repository/www/doc/guide/items.adp 1 Dec 2015 11:17:41 -0000 1.2.2.3 +++ openacs-4/packages/acs-content-repository/www/doc/guide/items.adp 1 Jul 2016 09:17:33 -0000 1.2.2.4 @@ -5,9 +5,12 @@ Items

    Creating Content Items

    + +Content Repository : Developer +Guide

    Use the Content Item API to create the item

    Content items are initialized using the -content_item.new function. A name is the only parameter +content_item.new function. A name is the only parameter required to create an item:

     item_id := content_item.new( name => 'my_item' );
    @@ -23,11 +26,11 @@
     

    The parent ID must be another content item, or a subclass of content item such as a folder.

    -

    The content_item.new function accepts a number of other -optional parameters. The standard creation_date, -creation_user and creation_ip should be specified -for auditing purposes. You can also create the initial revision and -publish text items in a single step:

    +

    The content_item.new function accepts a number of +other optional parameters. The standard creation_date, +creation_user and creation_ip should be +specified for auditing purposes. You can also create the initial +revision and publish text items in a single step:

     item_id := content_item.new(
        name      => 'my_item', 
    @@ -40,17 +43,17 @@
     

    If either the title or text are not null, the function will create the first revision of the item. It will also mark the item -as live if the is_live parameter is true. The alternative -to this one step method is to create a content item and then add a -revision using the Content Revision API.

    +as live if the is_live parameter is true. The +alternative to this one step method is to create a content item and +then add a revision using the Content Revision API.

    Publishing a content item

    If a content item has at least one revision, then it can be -published by calling the content_item.set_live_revision -procedure, which takes as input a revision_id:

    +published by calling the content_item.set_live_revision +procedure, which takes as input a revision_id:

     content_item.set_live_revision( revision_id => :revision_id );
     

    karlg\@arsdigita.com -

    Last Modified: $‌Id: items.html,v 1.1.1.1 2001/03/13 22:59:26 ben -Exp $

    +

    Last Modified: $‌Id: items.html,v 1.1.1.1.30.1 2016/06/22 +07:40:41 gustafn Exp $

    Index: openacs-4/packages/acs-content-repository/www/doc/guide/keywords.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/www/doc/guide/keywords.adp,v diff -u -r1.2.2.1 -r1.2.2.2 --- openacs-4/packages/acs-content-repository/www/doc/guide/keywords.adp 25 Aug 2015 18:02:04 -0000 1.2.2.1 +++ openacs-4/packages/acs-content-repository/www/doc/guide/keywords.adp 1 Jul 2016 09:17:33 -0000 1.2.2.2 @@ -5,29 +5,33 @@ (Categories)

    Subject Keywords (Categories)

    + +Content Repository : Developer +Guide

    Overview

    Subject Keywords are used to implement categorization for the Content Management system. A Subject Keyword is a small -label, such as "Oracle Documentation" or "My Favorite Foods", which -can be associated with any number of content items. Thus, content -items may be grouped by arbitrary categories. For example, -assigning the Subject Keyword "My Favorite Foods" to the content -items "Potstickers", "Strawberries" and "Ice Cream" would indicate +label, such as "Oracle Documentation" or "My +Favorite Foods", which can be associated with any number of +content items. Thus, content items may be grouped by arbitrary +categories. For example, assigning the Subject Keyword "My +Favorite Foods" to the content items "Potstickers", +"Strawberries" and "Ice Cream" would indicate that all the three items belong in the same category - namely, the -category of the user's favorite foods. The actual physical location -of these items within the repository is irrelevant.

    +category of the user's favorite foods. The actual physical +location of these items within the repository is irrelevant.

    Subject Keywords may be nested to provide more detailed control -over categorization; for example, "My Favorite Foods" may be -further subdivided into "Healthy" and "Unhealthy". Subject Keywords -which have descendants are referred to as "Subject -Categories".

    +over categorization; for example, "My Favorite Foods" may +be further subdivided into "Healthy" and +"Unhealthy". Subject Keywords which have descendants are +referred to as "Subject Categories".

    Data Model

    -

    The content_keyword object type is used to represent -Subject Keywords (see content_keyword.sql) The -content_keyword type inherits from -acs_object:

    +

    The content_keyword object type is used to represent +Subject Keywords (see content_keyword.sql) The +content_keyword type inherits from +acs_object:

      acs_object_type.create_type ( supertype => 'acs_object', object_type
        => 'content_keyword', pretty_name => 'Content Keyword',
    @@ -36,9 +40,9 @@
        ); 
     
    -In addition, the cr_keywords +In addition, the cr_keywords table (see -content-create.sql +content-create.sql ) contains extended attributes of Subject Keywords:
    @@ -53,7 +57,7 @@
     );
     
    -In content-keyword.sql +In content-keyword.sql :
     attr_id := acs_attribute.create_attribute (
    @@ -72,11 +76,12 @@
       pretty_plural  => 'Descriptions'
     );
     
    -

    Thus, each Subject Keyword has a heading, which is a -user-readable heading for the keyword, and a description, -which is a somewhat longer description of the keyword.

    -

    The cr_item_keyword_map table (see -content-create.sql) is used to relate content items to +

    Thus, each Subject Keyword has a heading, which is a +user-readable heading for the keyword, and a +description, which is a somewhat longer description of +the keyword.

    +

    The cr_item_keyword_map table (see +content-create.sql) is used to relate content items to keywords:

     create table cr_item_keyword_map (
    @@ -103,12 +108,12 @@
     
     Function/ProcedurePurposeDescription
     
    -newCreate a new Subject KeywordThis is a standard new function, used to create a new
    -Subject Keyword. If the parent id is specified, the new keword
    +newCreate a new Subject KeywordThis is a standard new function, used to create a
    +new Subject Keyword. If the parent id is specified, the new keword
     becomes a child of the parent keyword (which may now be called a
     Subject Category)
     
    -deleteDelete a Subject KeywordThis is a standard delete function, used to delete a
    +deleteDelete a Subject KeywordThis is a standard delete function, used to delete a
     Subject Keyword
     
     
    @@ -122,23 +127,27 @@
     Assign Keywords to ItemsThese functions should be used to assign Subject Keywords to
     content items, to unassign keywords from items, and to determine
     whether a particular keyword is assigned to an item.
    -

    The is_assigned function can be used to determine if a -keyword matches a content item, based on the recurse +

    The is_assigned function can be used to determine if +a keyword matches a content item, based on the recurse parameter:

      -
    • If recurse is set to 'none', -is_assigned will return 't' if and only if there -is an exact assignment of the keyword to the item.
    • If recurse is set to 'down', -is_assigned will return 't' if there is an exact -assignment of the keyword to the item, or if a narrower keyword is -assigned to the item. For example, a query whether "Potstickers" is -assigned the category "My Favorite Foods" will return 't' -even if "Potstickers" is only assigned the category "Healthy".
    • If recurse is set to 'up', -is_assigned will return 't' if there is an exact -assignment of the keyword to the item, or if a broader Subject -Category is assigned to the item. For example, a query whether -"Potstickers" is assigned the category "Healthy" will return -'t' even if "Potstickers" is assigned the broader category -"My Favorite Foods".
    • +
    • If recurse is set to 'none', +is_assigned will return 't' if and +only if there is an exact assignment of the keyword to the +item.
    • If recurse is set to 'down', +is_assigned will return 't' if there +is an exact assignment of the keyword to the item, or if a narrower +keyword is assigned to the item. For example, a query whether +"Potstickers" is assigned the category "My Favorite +Foods" will return 't' even if +"Potstickers" is only assigned the category +"Healthy".
    • If recurse is set to 'up', +is_assigned will return 't' if there +is an exact assignment of the keyword to the item, or if a broader +Subject Category is assigned to the item. For example, a query +whether "Potstickers" is assigned the category +"Healthy" will return 't' even if +"Potstickers" is assigned the broader category "My +Favorite Foods".
    Index: openacs-4/packages/acs-content-repository/www/doc/guide/object-relationships.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/www/doc/guide/object-relationships.adp,v diff -u -r1.2.2.3 -r1.2.2.4 --- openacs-4/packages/acs-content-repository/www/doc/guide/object-relationships.adp 1 Dec 2015 11:17:41 -0000 1.2.2.3 +++ openacs-4/packages/acs-content-repository/www/doc/guide/object-relationships.adp 1 Jul 2016 09:17:33 -0000 1.2.2.4 @@ -5,6 +5,9 @@ Relationships

    Object Relationships

    + +Content Repository : Developer +Guide

    Many applications of the content repository require that content items be related to each other as well as to other classes of objects. Examples include:

    @@ -25,10 +28,10 @@

    In many cases one content item may serve as a natural container for another item. An article divided into sections, or a news story with an associated photo are one example of this. These -"parent-child" relationships are handled by the basic hierarchical -organization of the content repository. Every item has a parent -item, represented internally by the parent_id column in -the cr_items table.

    +"parent-child" relationships are handled by the basic +hierarchical organization of the content repository. Every item has +a parent item, represented internally by the parent_id +column in the cr_items table.

    It is often desirable to constrain the number and content type of child items. For example, the specifications for a news story may only allow for a single photo. A structured report may have @@ -43,28 +46,29 @@

    The content repository accomodates these situations in the following ways:

      -
    • An API procedure, content_type.register_child_type, +
    • An API procedure, content_type.register_child_type, may be used to specify the minimum and maximum number of children of a particular content type that an item may have. You may -optionally specify a "tag" for identifying child items of the same -type. For example, you may want to allow only 1 image with the -"featured" tag, and up to 8 other images without this.
    • A Boolean API function, content_item.is_valid_child, +optionally specify a "tag" for identifying child items of +the same type. For example, you may want to allow only 1 image with +the "featured" tag, and up to 8 other images without +this.
    • A Boolean API function, content_item.is_valid_child, which checks all registered child constraints on the content type of an item and returns true if it is currently possible to add an child of a particular type to tan item. Note that this function does not protect against concurrent transactions; it is only -foolproof if you lock the cr_child_rels table -beforehand.
    • A mapping table, cr_child_rels, which contains two -attributes, order_n and relation_tag, that may be -used to characterize the parent-child relationship. Parent-child -relationships are themselves treated as ACS Objects, so this table -may be extended with additional attributes as required by the -developer.
    • +foolproof if you lock the cr_child_rels table +beforehand.
    • A mapping table, cr_child_rels, which contains two +attributes, order_n and relation_tag, that +may be used to characterize the parent-child relationship. +Parent-child relationships are themselves treated as ACS Objects, +so this table may be extended with additional attributes as +required by the developer.

    Note that there is no currently no explicit API to "add a -child." You specify the parent of an item upon creating it. You can -use the API procedure content_item.move to change the -parent of an item.

    +child." You specify the parent of an item upon creating it. +You can use the API procedure content_item.move to +change the parent of an item.

    Item-Object Relationships

    In addition to the relationships to their parents and children in the content repository hierarchy, content items may be linked to @@ -76,25 +80,26 @@ provides a data model and API for managing these constraints that parallels what is provided for parent-child relationships:

      -
    • An API procedure, content_type.register_relation_type, -may be used to specify the minimum and maximum number of relations -with a particular object type that an item may have. There is no +
    • An API procedure, +content_type.register_relation_type, may be used to +specify the minimum and maximum number of relations with a +particular object type that an item may have. There is no limitation on the type of objects that may be related to content items. If you wish to relate content items to other content items, however, the object type should specify a content type (a subtype -of content_revision) rather than simply -content_item. As for parent-child relationship -constraints, ou may optionally specify a "tag" for identifying -related objects of the same type.
    • A Boolean API function, +of content_revision) rather than simply +content_item. As for parent-child relationship +constraints, ou may optionally specify a "tag" for +identifying related objects of the same type.
    • A Boolean API function, content_item.is_valid_relation, which checks all registered constraints on the content type of an item and returns true if it is currently possible to relate an object of a -particular type to an item.
    • A mapping table, cr_item_rels, which contains two -attributes, order_n and relation_tag, that may be -used to characterize the item-object relationship. Item-object -relationships are themselves treated as ACS Objects, so this table -may be extended with additional attributes as required by the -developer.
    • +particular type to an item.
    • A mapping table, cr_item_rels, which contains two +attributes, order_n and relation_tag, that +may be used to characterize the item-object relationship. +Item-object relationships are themselves treated as ACS Objects, so +this table may be extended with additional attributes as required +by the developer.

    Extending Parent-Child and Item-Object Relationships

    The simple relation mechanisms described above may not be @@ -106,5 +111,5 @@ karlg\@arsdigita.com
    -Last modified: $‌Id: object-relationships.html,v 1.1.1.1 -2001/03/13 22:59:26 ben Exp $ +Last modified: $‌Id: object-relationships.html,v 1.1.1.1.30.1 +2016/06/22 07:40:41 gustafn Exp $ Index: openacs-4/packages/acs-content-repository/www/doc/guide/publish.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/www/doc/guide/publish.adp,v diff -u -r1.2.2.6 -r1.2.2.7 --- openacs-4/packages/acs-content-repository/www/doc/guide/publish.adp 9 Jun 2016 13:03:11 -0000 1.2.2.6 +++ openacs-4/packages/acs-content-repository/www/doc/guide/publish.adp 1 Jul 2016 09:17:33 -0000 1.2.2.7 @@ -5,6 +5,9 @@ Content

    Publishing Content

    + +Content Repository : Developer +Guide

    The content repository does not place any restrictions on the methods employed for delivering content via a public server infrastructure. Applications are free to query the repository and @@ -23,11 +26,12 @@ combines the data and layout into a rendered page.

    Matching URLs to Content Items

    The primary mechanism for matching URLs to Content Items are -virtual URL handlers, .vuh files. An explanation -of virtual URL handlers can be found in the tutorial on the -Request Processor.

    -

    Here is an example index.vuh file that you can adapt to -your own purposes:

    +virtual URL handlers, .vuh files. An +explanation of virtual URL handlers can be found in the tutorial on +the Request +Processor.

    +

    Here is an example index.vuh file that you can adapt +to your own purposes:

     # Get the paths
     
    @@ -42,7 +46,7 @@
     
     # Serve the page
     # DRB: Note that content::init modifies the local variable the_root, which is treated
    -# as though it's been passed by reference.   This requires that the redirect treat the
    +# as though it's been passed by reference.   This requires that the redirect treat the
     # path as an absolute path within the filesystem.
     if { [content::init the_url the_root $content_root $template_root] } {
       set file "$the_root/$the_url"
    @@ -51,56 +55,58 @@
       ns_returnnotfound
     }
     
    -

    The content_root and template_root parameters -select the content and template root folders. In the example, they -are just the default roots that the content repository initializes -on installation. If you want to store your content completely -independent from that of other packages, you can initialize your -own content root and pass that folder's ID on to -content::init.

    +

    The content_root and template_root +parameters select the content and template root folders. In the +example, they are just the default roots that the content +repository initializes on installation. If you want to store your +content completely independent from that of other packages, you can +initialize your own content root and pass that folder's ID on +to content::init.

    To publish content through URLs that are underneath -/mycontent you need to do the following:

    +/mycontent you need to do the following:

      -
    1. Create a directory mycontent in your server's page -root and an index.vuh file in that directory.
    2. Adapt the set content_root ... and set -template_root .. statements in the example above so that they +
    3. Create a directory mycontent in your server's +page root and an index.vuh file in that directory.
    4. Adapt the set content_root ... and set +template_root .. statements in the example above so that they are being set to the content and template root folders that you -want to publish content from.
    5. Change the set the_url ... statement so that the -variable the_url contains the absolute path to the content -item you wish to serve from your (or the default) content +want to publish content from.
    6. Change the set the_url ... statement so that the +variable the_url contains the absolute path to the +content item you wish to serve from your (or the default) content root.
    -

    If you use the example index.vuh file above unaltered -for requests to my_content, a request for -http://yourserver/mycontent/news/articles/42 would request -the content item /news/articles/42 from the content -repository on the default content root folder.

    +

    If you use the example index.vuh file above unaltered +for requests to my_content, a request for +http://yourserver/mycontent/news/articles/42 would +request the content item /news/articles/42 from the +content repository on the default content root folder.

    Matching Content Items to Templates

    Querying Content

    Querying Attributes

    When you create a new content type or add an attribute to an existing content type, a view is created (or recreated) that joins the attribute tables for the entire chain of inheritance for that content type. The view always has the same name as the attribute -table for the content table, with an "x" appended to distinguish it -from the table itself (for example, if the attribute table for -Press Releases is press_releases, then the view -will be named press_releasesx. Querying this view is a -convenient means of accessing any attribute associated with a -content item.

    -

    As a shortcut, the item's template may call -content::get_content in its Tcl file in order to -automatically retrieve the current item's attributes. The +table for the content table, with an "x" appended to +distinguish it from the table itself (for example, if the attribute +table for Press Releases is +press_releases, then the view will be named +press_releasesx. Querying this view is a convenient +means of accessing any attribute associated with a content +item.

    +

    As a shortcut, the item's template may call +content::get_content in its Tcl file in order to +automatically retrieve the current item's attributes. The attributes will be placed in a onerow datasource called -content . The template may then call -template::util::array_to_vars content in order to convert -the onerow datasource to local variables.

    -

    In addition to the "x" view, the Content Repository creates an -"i" view, which simplifies the creation of new revisions. The "i" -view has the same name as the content table, with "i" appended at -the end. You may insert into the view as if it was a normal table; -the insert trigger on the view takes care of inserting the actual -values into the content tables.

    +content . The template may then call +template::util::array_to_vars content in order to +convert the onerow datasource to local variables.

    +

    In addition to the "x" view, the Content Repository +creates an "i" view, which simplifies the creation of new +revisions. The "i" view has the same name as the content +table, with "i" appended at the end. You may insert into +the view as if it was a normal table; the insert trigger on the +view takes care of inserting the actual values into the content +tables.

    Querying Additional Data

    Templates often display more than simple content attributes. Additional queries may be necessary to obtain data about related @@ -116,5 +122,5 @@ karlg\@arsdigita.com
    -Last Modified: $‌Id: publish.html,v 1.4.4.1 2016/01/02 21:24:47 +Last Modified: $‌Id: publish.html,v 1.4.4.2 2016/06/22 07:40:41 gustafn Exp $ Index: openacs-4/packages/acs-content-repository/www/doc/guide/revisions.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/www/doc/guide/revisions.adp,v diff -u -r1.2.2.4 -r1.2.2.5 --- openacs-4/packages/acs-content-repository/www/doc/guide/revisions.adp 9 Jun 2016 13:03:11 -0000 1.2.2.4 +++ openacs-4/packages/acs-content-repository/www/doc/guide/revisions.adp 1 Jul 2016 09:17:33 -0000 1.2.2.5 @@ -5,22 +5,24 @@ Revisions

    Creating Content Revisions

    + +ACS Documentation : Content Repository : 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 -object.
    2. Insert a corresponding row in the cr_revisions table -with the basic attributes for the revision.
    3. Write the content data into the content BLOB column of -the cr_revisions table.
    4. Insert a corresponding row into the attribute table of each +
    5. Insert a row in the acs_objects table to create the +object.
    6. Insert a corresponding row in the cr_revisions table +with the basic attributes for the revision.
    7. Write the content data into the content BLOB column +of the cr_revisions table.
    8. 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 immediate subtype -thereof.
    9. Insert a corresponding row into the attribute table of the +the content type is Basic Item or an immediate +subtype thereof.
    10. 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.

    Use the Content Revision API to create a revision

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

    @@ -31,15 +33,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',
    @@ -56,27 +59,27 @@
     

    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 generic enough to support submission -of the attributes for all different content types. This leaves you -with three alternatives:

    +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 DML +
    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, which encapsulates the above code.
    4. Create revisions by inserting into the attribute view for each content type.
    -

    The last option is made possible by an instead of -insert trigger on the attribute view for each content type. +

    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 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 +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 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 possible to create complete revisions with a single insert statement:

    @@ -99,16 +102,16 @@
     

    Inserting content via file or text upload

    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 -revision is associated.

    +

    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(
    @@ -117,5 +120,5 @@
     

    karlg\@arsdigita.com -

    Last Modified: $‌Id: revisions.html,v 1.1.1.1 2001/03/13 22:59:26 -ben Exp $

    +

    Last Modified: $‌Id: revisions.html,v 1.1.1.1.30.1 2016/06/22 +07:40:41 gustafn Exp $

    Index: openacs-4/packages/acs-content-repository/www/doc/guide/search.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/www/doc/guide/search.adp,v diff -u -r1.2.2.3 -r1.2.2.4 --- openacs-4/packages/acs-content-repository/www/doc/guide/search.adp 1 Dec 2015 11:17:42 -0000 1.2.2.3 +++ openacs-4/packages/acs-content-repository/www/doc/guide/search.adp 1 Jul 2016 09:17:33 -0000 1.2.2.4 @@ -3,18 +3,22 @@ Content Repository Developer Guide: Search

    Search

    + +Content Repository : Developer +Guide

    The content repository provides a consistent sitewide interface for searching content. It uses Intermedia to index the -content column of cr_revisions) as well as all -the attribute columns for each content type.

    +content column of cr_revisions) as well as +all the attribute columns for each content type.

    Searching Content

    -

    The content column in cr_revisions may contain -data in any text or binary format. To accomodate searches across -multiple file types, the content repository uses an Intermedia -index with the INSO filtering option. The INSO filter automatically -detects the the file type of a binary object, and extracts text -from it for indexing. Most common file types are supported, -including PDF and Microsoft Word, and Excel and PowerPoint.

    +

    The content column in cr_revisions may +contain data in any text or binary format. To accomodate searches +across multiple file types, the content repository uses an +Intermedia index with the INSO filtering option. The INSO filter +automatically detects the the file type of a binary object, and +extracts text from it for indexing. Most common file types are +supported, including PDF and Microsoft Word, and Excel and +PowerPoint.

    Searching for content requires the same syntax as any text index:

    @@ -49,13 +53,14 @@
     
  • Multilingual searches are not enabled by default. You may enable them for one more languages by setting the appropriate Intermedia preferences when creating -cr_rev_content_index.
  • Some items are not appropriate to display "stand-alone", but -rather need to appear only in the context of a container document -(typically their parent in the content repository). This is -probably a limitation of content_item.get_path: it should -be possible to specify an arbitrary function to return the path for -items of a particular content type, with -content_item.get_path as the default.
  • +cr_rev_content_index.
  • Some items are not appropriate to display +"stand-alone", but rather need to appear only in the +context of a container document (typically their parent in the +content repository). This is probably a limitation of +content_item.get_path: it should be possible to specify +an arbitrary function to return the path for items of a particular +content type, with content_item.get_path as the +default.
  • Searching Attributes

    This task is primarily handled to two Intermedia indices:

    @@ -66,11 +71,11 @@
    1. After creating a new revision and inserting attributes into the storage table for the content type and all its ancestors, you must -execute the content_revision.index_attributes procedure. +execute the content_revision.index_attributes procedure. (Note that this cannot be called automatically by -content_revision.new, since the attributes in all extended -storage tables must be inserted first).

    2. This procedure creates a row in the -cr_revision_attributes table, and writes an XML document +content_revision.new, since the attributes in all +extended storage tables must be inserted first).

    3. This procedure creates a row in the +cr_revision_attributes table, and writes an XML document including all attributes into this row. A Java stored procedure using the Oracle XML Parser for Java v2 is used to actually generate the XML document.

    4. A special Intermedia index configured to parse XML documents is @@ -89,15 +94,15 @@

    Some limitations of the current implementation include:

      -
    1. A USER_DATASTORE associated with each row of the -cr_items table, which feeds Intermedia the contents of the -content column (a BLOB) for the live revision of -an item. This should theoretically be more efficient for searching -live content, especially in production environments where content -is revised often.
    2. A second USER_DATASTORE associated with each row of -the cr_items table, which feeds Intermedia the XML +
    3. A USER_DATASTORE associated with each row of the +cr_items table, which feeds Intermedia the contents of +the content column (a BLOB) for the live +revision of an item. This should theoretically be more efficient +for searching live content, especially in production environments +where content is revised often.
    4. A second USER_DATASTORE associated with each row of +the cr_items table, which feeds Intermedia the XML document representing all attributes for the live revision -of an item (from cr_revision_attributes).
    5. The default XML document handler for the content repository +of an item (from cr_revision_attributes).
    6. The default XML document handler for the content repository simply provides a flat file of all attributes. Content types should also be able implement custom handlers, to allow the XML document to reflect one-to-many relationships or special formatting of @@ -108,5 +113,5 @@ karlg\@arsdigita.com
      -Last Modified: $‌Id: search.html,v 1.1.1.1 2001/03/13 22:59:26 ben -Exp $ +Last Modified: $‌Id: search.html,v 1.1.1.1.30.1 2016/06/22 07:40:41 +gustafn Exp $ Index: openacs-4/packages/acs-content-repository/www/doc/guide/storage.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/www/doc/guide/storage.adp,v diff -u -r1.2.2.3 -r1.2.2.4 --- openacs-4/packages/acs-content-repository/www/doc/guide/storage.adp 1 Dec 2015 11:17:42 -0000 1.2.2.3 +++ openacs-4/packages/acs-content-repository/www/doc/guide/storage.adp 1 Jul 2016 09:17:33 -0000 1.2.2.4 @@ -30,7 +30,7 @@ );

    Content types are nothing more than standard ACS Objects that -inherit from content_revision:

    +inherit from content_revision:

     begin
     
    @@ -64,11 +64,12 @@
     /
     show errors
     
    -

    Note that content types always extend content_revision, -rather than content_item. This is because we want to store -multiple revisions of both the actual data (in this case the image) -as well as associated attributes (the width and height of the image -may vary among revisions).

    +

    Note that content types always extend +content_revision, rather than content_item. +This is because we want to store multiple revisions of both the +actual data (in this case the image) as well as associated +attributes (the width and height of the image may vary among +revisions).

    Define a Relationship to a Target Object

    The content repository implements a flexible mechanism for organizing data in a hierarchical fashion in a manner similar to a @@ -94,11 +95,11 @@ max_n_rels_two => 1 );

    -

    Note that the user object is related to a -content_item object rather than an image object -directly. Each image object represents only a single -revision of a portrait. Revisions always exist in the context of an -item.

    +

    Note that the user object is related to a +content_item object rather than an image +object directly. Each image object represents only a +single revision of a portrait. Revisions always exist in the +context of an item.

    Store Objects

    Now we have defined both a content type and relationship type, we can start storing portraits. The DML for processing a new @@ -119,5 +120,5 @@


    karlg\@arsdigita.com -

    Last Modified: $‌Id: storage.html,v 1.1.1.1 2001/03/13 22:59:26 -ben Exp $

    +

    Last Modified: $‌Id: storage.html,v 1.1.1.1.30.1 2016/06/22 +07:40:41 gustafn Exp $

    Index: openacs-4/packages/acs-content-repository/www/doc/guide/template.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/www/doc/guide/template.adp,v diff -u -r1.2.2.3 -r1.2.2.4 --- openacs-4/packages/acs-content-repository/www/doc/guide/template.adp 1 Dec 2015 11:17:42 -0000 1.2.2.3 +++ openacs-4/packages/acs-content-repository/www/doc/guide/template.adp 1 Jul 2016 09:17:33 -0000 1.2.2.4 @@ -5,6 +5,9 @@ Templates

    Applying Templates

    + +Content Repository : Developer +Guide

    The content repository allows you to associate templates with both content types and individual content items. A template determines how a content item is rendered when exported to the file @@ -28,26 +31,27 @@ template. The parent ID must be another content item, or a subclass of content item such as a folder.

    -The content_template.new function accepts the standard -creation_date, creation_user, and -creation_ip auditing parameters.

    +The content_template.new function accepts the +standard creation_date, creation_user, and +creation_ip auditing parameters.

    Content items and templates are organized in two separate hierarchies within the content repository. For example, you may -place all your press releases in the press folder under +place all your press releases in the press folder under the item root (having the ID returned by -content_item.get_root_folder). You may have 5 different +content_item.get_root_folder). You may have 5 different templates used to render press releases. These my be stored in the -press folder under the template root (having the -ID returned by content_template.get_root_folder).

    +press folder under the template root (having +the ID returned by +content_template.get_root_folder).

    Templates are placed under their own root to ensures that bare templates are never accessible via a public URL. This is also done because the relationship with the file system may be different for templates than for content items. For example, templates may be associated with additional code or resource files that developers maintain under separate source control.

    Associating templates with content types

    -

    You use the content_type.register_template procedure to -associate a template with a particular content type:

    +

    You use the content_type.register_template procedure +to associate a template with a particular content type:

     content_type.register_template(
       content_type => 'content_revision',
    @@ -56,14 +60,14 @@
       is_default   => 't'
     );
     
    -

    The use_context is a simple keyword that specifies the -situation in which the template is appropriate. One general -context, public, is loaded when the content repository is -installed. Templates in this context are for presenting content to -users of the site. Some sites may wish to distinguish this further, -for example using intranet, extranet and -public contexts.

    -

    The is_default flag specifies that this template will +

    The use_context is a simple keyword that specifies +the situation in which the template is appropriate. One general +context, public, is loaded when the content repository +is installed. Templates in this context are for presenting content +to users of the site. Some sites may wish to distinguish this +further, for example using intranet, extranet +and public contexts.

    +

    The is_default flag specifies that this template will serve as the default template in the case that no template is registered to a content item of this content type and this use context. Any content type/context pair may have any number of @@ -80,7 +84,7 @@

    Associating templates with content items

    Individual items may also be associated with templates using the -content_item.register_template procedure:

    +content_item.register_template procedure:

     content_item.register_template(
       item_id     => :item_id,
    @@ -98,7 +102,7 @@
     each press release.

    Retrieving the template for a content item

    The application server (AOLserver or servlet container) may use -the content_item.get_template function to determine the +the content_item.get_template function to determine the proper template to use for rendering a page in any particular context:

    @@ -112,7 +116,7 @@
     );
     

    In the case that no template is registered to given item/context -pair, content_item.get_template will return the default +pair, content_item.get_template will return the default template (if it exists) for the related content type/context pair.

    Unregistering templates

    @@ -136,5 +140,5 @@

    karlg\@arsdigita.com -

    Last Modified: $‌Id: template.html,v 1.1.1.1 2001/03/13 22:59:26 -ben Exp $

    +

    Last Modified: $‌Id: template.html,v 1.1.1.1.30.1 2016/06/22 +07:40:41 gustafn Exp $

    Index: openacs-4/packages/acs-content-repository/www/doc/guide/types.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/www/doc/guide/types.adp,v diff -u -r1.2.2.3 -r1.2.2.4 --- openacs-4/packages/acs-content-repository/www/doc/guide/types.adp 1 Dec 2015 11:17:42 -0000 1.2.2.3 +++ openacs-4/packages/acs-content-repository/www/doc/guide/types.adp 1 Jul 2016 09:17:33 -0000 1.2.2.4 @@ -5,6 +5,9 @@ Types

    Defining Content Types

    + +Content Repository : Developer +Guide

    The content repository requires you to define each type of content supported by your supplication. Content types are defined as ACS Object Types, and may be created in the same @@ -17,8 +20,8 @@

  • Text or binary data stored as a single object
  • Structured attributes stored as distinct values
  • Note that a content type does not have to store its -primary content in the BLOB column of the -cr_revisions table. There is some additional overhead +primary content in the BLOB column of the +cr_revisions table. There is some additional overhead associated with retrieving small passages of text from the BLOB column compared to an attribute column. In most cases the difference is trivial (fewer than about 10 microseconds), but if @@ -27,7 +30,7 @@ is perfectly acceptable to store the content in an attribute column instead.

    Basic attributes for all content types are stored in the -cr_revisions (note that they are stored in the revisions +cr_revisions (note that they are stored in the revisions table so that attributes may be updated for each new revision of the actual data). Most types of content require more than the basic attributes. For example, when storing images you will usually want @@ -51,7 +54,7 @@ );

    Note that your extended attribute table must reference the -cr_revisions table, notcr_items. As +cr_revisions table, notcr_items. As mentioned above, this allows you to maintain multiple revisions of the attribute data in tandem with revisions of the content object itself.

    @@ -84,22 +87,22 @@ ... -

    The content_type methods use the core ACS Object Type +

    The content_type methods use the core ACS Object Type API to create an object type for each content type, and to add attributes to the object type. In addition, -content_type.create_type will create the extended +content_type.create_type will create the extended attribute table with an appropriately defined primary key column (referencing its supertype) if the table does not already exist. -Likewise, content_type.create_attribute will add a column -to the table if the column does not already exist.

    -

    Most importantly, the content_type methods call -content_type.refresh_view after each change to the content -type definition. Each content type must have an associated -attribute view named -table_namex, where -table_name is the name of the extended attribute -table for a particular content type. The view joins the -acs_objects, cr_revisions, and all extended +Likewise, content_type.create_attribute will add a +column to the table if the column does not already exist.

    +

    Most importantly, the content_type methods call +content_type.refresh_view after each change to the +content type definition. Each content type must have an associated +attribute view named +table_namex, where +table_name is the name of the extended +attribute table for a particular content type. The view joins the +acs_objects, cr_revisions, and all extended attribute tables in the class hierarchy of a particular content type. This view may be used to query attributes when serving content.

    @@ -110,5 +113,5 @@ details.


    templating\@arsdigita.com -

    Last Modified: $‌Id: types.html,v 1.1.1.1 2001/03/13 22:59:26 ben -Exp $

    +

    Last Modified: $‌Id: types.html,v 1.1.1.1.30.1 2016/06/22 +07:40:41 gustafn Exp $

    Index: openacs-4/packages/acs-content-repository/www/doc/guide/workflow.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-content-repository/www/doc/guide/workflow.adp,v diff -u -r1.2.2.4 -r1.2.2.5 --- openacs-4/packages/acs-content-repository/www/doc/guide/workflow.adp 9 Jun 2016 13:03:11 -0000 1.2.2.4 +++ openacs-4/packages/acs-content-repository/www/doc/guide/workflow.adp 1 Jul 2016 09:17:33 -0000 1.2.2.5 @@ -3,6 +3,9 @@ Content Repository Developer Guide: Workflow

    Applying Workflow to Content Items

    + +Content Repository : Developer +Guide

    This document describes the workflow API calls necessary to apply a simple workflow to a content item.

    Workflow Description

    @@ -35,7 +38,7 @@ rejection.

    This simple workflow is defined in -sql/workflows/author-edit-publish.sql.

    +sql/workflows/author-edit-publish.sql.

    Workflow Creation

    Production of a content item frequently begins with a concept which is initiated by the publisher and then executed by the staff. @@ -65,18 +68,19 @@

    In this case, only one assignment is made per task. You can make as many assignments per task as desired. There is currently no workflow API to set deadlines, so you must write your own DML to -insert a row into wf_case_deadlines if you wish to allow +insert a row into wf_case_deadlines if you wish to allow the publisher to set deadlines ahead of time.

    -

    The above workflow is created in the Default context. In -practice, you may wish to create one or more contexts in which to -create your workflows. Contexts may be used to represent different -departments within an organization.

    -

    The start_case enables the first task in the workflow, -in this case Authoring.

    +

    The above workflow is created in the Default +context. In practice, you may wish to create one or more contexts +in which to create your workflows. Contexts may be used to +represent different departments within an organization.

    +

    The start_case enables the first task in the +workflow, in this case Authoring.

    Check Out Item

    If multiple persons are assigned to the same task, it is useful -to allow a single person to "check out" or lock an item while they -are working. This is accomplished with the following API calls:

    +to allow a single person to "check out" or lock an item +while they are working. This is accomplished with the following API +calls:

     declare
       v_journal_id integer;
    @@ -121,8 +125,8 @@
     

    Upon finishing a task, you must notify the workflow engine where to go next. In this case, an author wishes to simply check an item back in without actually completing the authoring task. The -set_attribute_value procedure must thus be used to set -next_place to the starting place of the workflow.

    +set_attribute_value procedure must thus be used to set +next_place to the starting place of the workflow.

    Finish Task

    The process to finish a task varies slightly depending on whether the user has previously checked out the item out or not. If @@ -150,11 +154,12 @@ end; /

    -

    In this case an author is finishing the Authoring task, -upon which the workflow engine will move the workflow to the -Authored state (as indicated by the next_place -attribute). If the author had previously checked out the item, then -only the second step is required.

    +

    In this case an author is finishing the +Authoring task, upon which the workflow engine +will move the workflow to the Authored state (as +indicated by the next_place attribute). If the author +had previously checked out the item, then only the second step is +required.

    Approve or Reject

    Approval steps more commonly do not involve an explicit check-out process. The code is thus virtually identical to that @@ -180,10 +185,10 @@ /

    Note the distinction between approval or rejection is determined -solely by the value of the next_place attribute.

    +solely by the value of the next_place attribute.


    karlg\@arsdigita.com
    -Last Modified: $‌Id: workflow.html,v 1.1.1.1 2001/03/13 22:59:26 -ben Exp $ +Last Modified: $‌Id: workflow.html,v 1.1.1.1.30.1 2016/06/22 +07:40:41 gustafn Exp $