Forum OpenACS Development: Re: title attribute in both acs_objects and cr_revisions
Posted by
Stan Kaufman
on 10/06/05 08:12 PM
Maybe what isn't clear is which proc we're talking about. It's content::attribute_insert_statement, and all it does is return an sql string for inserting into cr_revisioni:
ad_proc -private content::attribute_insert_statement { content_type table_name bind_vars form_name {prefix {}} {new_p 1} } { Prepare the insert statement into the attribute input view for a new revision (see the content repository documentation for details about the view). @param content_type The content type of the item for which a new revision is being prepared. @param table_name The storage table of the content type. @param bind_vars The name of an ns_set in which to store the attribute values for the revision. (Typically duplicates the contents of [ns_getform]) @param form_name The name of the ATS form object used to process the submission. } { # get creation_user and creation_ip ns_set put $bind_vars creation_user null ns_set put $bind_vars creation_ip null # initialize the column and value list set columns [list item_id revision_id creation_user creation_ip] set values [list :item_id :revision_id null null] set default_columns [list] set default_values [list] set missing_columns [list] # query for attribute names and datatypes foreach attribute [get_attributes $content_type attribute_name datatype default_value ancestor] { foreach {attribute_name datatype default_value ancestor} $attribute { break } # get the form value if { [template::element exists $form_name $prefix$attribute_name] } { set value [template::element get_value $form_name $prefix$attribute_name] # Convert dates to linear "YYYY MM DD HH24 MI SS" format if { [string equal $datatype date] } { set value [template::util::date get_property linear_date $value] foreach i {1 2} { if {[string equal [lindex $value $i] "00"]} { set value [lreplace $value $i $i 01] } } } if { ! [string equal $value {} ] && ![expr { [string equal $ancestor "content_revision"] && [string equal $attribute_name "title"] }] } { ns_set put $bind_vars $attribute_name $value lappend columns $attribute_name lappend values [get_sql_value $attribute_name $datatype] } } elseif { ![string equal $ancestor "acs_object"] && ( ![string equal $ancestor "cr_revision"] || [lsearch -exact {revision_id item_id publish_date} $attribute_name] == -1) } { # We preserve attributes not in the form and not "special" like acs_object and some of cr_revision. lappend missing_columns $attribute_name if {$new_p && ![string equal $default_value {}]} { ns_set put $bind_vars $attribute_name $default_value lappend default_columns $attribute_name lappend default_values [get_sql_value $attribute_name $datatype] } } } if {$new_p} { set insert_statement "insert into ${table_name}i ( [join [concat $columns $default_columns] ", "] )\nvalues ( [join [concat $values $default_values] ", "] )" } else { set insert_statement "insert into ${table_name}i ( [join [concat $columns $missing_columns] ", "] )\nselect [join [concat $values $missing_columns] ", "]\nfrom ${table_name}i\nwhere revision_id = content_item.get_latest_revision(:item_id)" } return $insert_statement }
So it doesn't need to alias anything -- just return the correct args, eh?