content::revision::new (public)
content::revision::new [ -revision_id revision_id ] -item_id item_id \ [ -title title ] [ -description description ] [ -content content ] \ [ -mime_type mime_type ] [ -publish_date publish_date ] \ [ -nls_language nls_language ] [ -creation_date creation_date ] \ [ -content_type content_type ] [ -creation_user creation_user ] \ [ -creation_ip creation_ip ] [ -package_id package_id ] \ [ -attributes attributes ] [ -is_live is_live ] \ [ -tmp_filename tmp_filename ] [ -storage_type storage_type ]
Defined in packages/acs-content-repository/tcl/content-revision-procs.tcl
Adds a new revision of a content item. If content_type is not passed in, we determine it from the content item. This is needed to find the attributes for the content type.
- Switches:
- -revision_id (optional)
- -item_id (required)
- -title (optional)
- -description (optional)
- -content (optional)
- -mime_type (optional)
- -publish_date (optional)
- -nls_language (optional)
- -creation_date (optional)
- -content_type (optional)
- -creation_user (optional)
- -creation_ip (optional)
- -package_id (optional)
- Package_id content belongs to
- -attributes (optional)
- A list of lists of pairs of additional attributes and their values to pass to the constructor. Each pair is a list of two elements: key => value such as [list [list attribute value] [list attribute value]]
- -is_live (optional, defaults to
"f"
)- True is revision should be set live
- -tmp_filename (optional)
- file containing content to be added to revision. The caller is responsible for cleaning up the temporary file.
- -storage_type (optional)
- Returns:
- Error:
- Author:
- Dave Bauer <dave@thedesignexperience.org>
- Created:
- 2004-06-04
- Partial Call Graph (max 5 caller/called nodes):
- Testcases:
- content_image, content_revision
Source code: if {![info exists creation_user]} { set creation_user [ad_conn user_id] } if {![info exists creation_ip]} { set creation_ip [ad_conn peeraddr] } if {![info exists content_type] || $content_type eq ""} { set content_type [::content::item::get_content_type -item_id $item_id] } if {$storage_type eq ""} { set storage_type [db_string get_storage_type ""] } if {![info exists package_id]} { set package_id [ad_conn package_id] } set attribute_names "" set attribute_values "" if { [info exists attributes] && $attributes ne "" } { set type_attributes [package_object_attribute_list $content_type] set valid_attributes [list] # add in extended attributes for this type, ignore # content_revision as those are already captured as named # parameters to this procedure foreach type_attribute $type_attributes { if {"cr_revisions" ne [lindex $type_attribute 1] && "acs_objects" ne [lindex $type_attribute 1] } { lappend valid_attributes [lindex $type_attribute 2] } } foreach attribute_pair $attributes { lassign $attribute_pair attribute_name attribute_value if {$attribute_name in $valid_attributes} { # first add the column name to the list append attribute_names ", ${attribute_name}" # create local variable to use for binding set $attribute_name $attribute_value append attribute_values ", :${attribute_name}" } } } set table_name [acs_object_type::get_table_name -object_type $content_type] set mime_type [cr_check_mime_type -filename $title -mime_type $mime_type -file $tmp_filename] set query_text [subst { insert into ${table_name}i (revision_id, object_type, creation_user, creation_date, creation_ip, title, description, item_id, object_package_id, mime_type $attribute_names) values (:revision_id, :content_type, :creation_user, :creation_date, :creation_ip, :title, :description, :item_id, :package_id, :mime_type $attribute_values) }] db_transaction { # An explicit lock was necessary for PostgreSQL between 8.0 and # 8.2; left the following statement here for documentary purposes # # db_dml lock_objects "LOCK TABLE acs_objects IN SHARE ROW EXCLUSIVE MODE" if {$revision_id eq ""} { set revision_id [db_nextval "acs_object_id_seq"] } # the postgres "insert into view" is rewritten by the rule into a "select" [expr {[db_driverkey ""] eq "postgresql" ? "db_0or1row" : "db_dml"}] insert_revision $query_text ::content::revision::update_content -item_id $item_id -revision_id $revision_id -content $content -tmp_filename $tmp_filename -storage_type $storage_type -mime_type $mime_type } if {[string is true $is_live]} { content::item::set_live_revision -revision_id $revision_id } return $revision_idGeneric XQL file: <fullquery name="content::revision::new.get_storage_type"> <querytext> select storage_type from cr_items where item_id=:item_id </querytext> </fullquery>packages/acs-content-repository/tcl/content-revision-procs.xql
PostgreSQL XQL file: packages/acs-content-repository/tcl/content-revision-procs-postgresql.xql
Oracle XQL file: packages/acs-content-repository/tcl/content-revision-procs-oracle.xql