Index: openacs-4/contrib/packages/bcms/tcl/bcms-item-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/contrib/packages/bcms/tcl/bcms-item-procs.tcl,v diff -u -r1.6 -r1.7 --- openacs-4/contrib/packages/bcms/tcl/bcms-item-procs.tcl 9 Oct 2003 09:57:17 -0000 1.6 +++ openacs-4/contrib/packages/bcms/tcl/bcms-item-procs.tcl 14 Oct 2003 14:58:31 -0000 1.7 @@ -148,6 +148,7 @@ # initialize the addtionals we will use set addtnl_where_list [list] + set addtnl_where_folder_list [list] if {[info exists additional_columns]} { set addtnl_select_list $additional_columns } else { @@ -179,9 +180,12 @@ # construct the additionals if {[llength $addtnl_where_list] > 0} { set addtnl_where "and [join $addtnl_where_list " and "]" - set addtnl_where_folder "and [join $addtnl_where_folder_list " and "]" } else { set addtnl_where "" + } + if {[llength $addtnl_where_folder_list] > 0} { + set addtnl_where_folder "and [join $addtnl_where_folder_list " and "]" + } else { set addtnl_where_folder "" } if {[llength $addtnl_select_list] > 0} { @@ -330,11 +334,30 @@ } +ad_proc -public bcms::item::get_item_id_by_url { + {-root_id:required} + {-url:required} + {-resolve_index:boolean} +} { + get the content item details based from the url. + + @param root_id starting from which url to resolve the item + @param url the url which we would like to resolve + @param resolve_index return the item_id of the index content item on a content_folder + rather than the content_folder's item_id + + @returns the item_id of the item from that URL, or the empty string if no such item exists. +} { + set resolve_index [db_boolean $resolve_index_p] + return [db_exec_plsql get_item_id {}] +} + + #TODO: use the views to select the revision info ad_proc -public bcms::item::get_item_by_url { {-root_id:required} {-url:required} - {-revision} + {-revision ""} {-resolve_index:boolean} } { get the content item details based from the url. @@ -366,27 +389,19 @@ array unset yourarray. } { - if {$resolve_index_p} { set resolve_index true } else { set resolve_index false } + set item_id [get_item_id_by_url -root_id $root_id -url $url -resolve_index=$resolve_index_p] - set item_id [db_exec_plsql get_item_id "SQL"] - - if [string equal $item_id ""] { + if { [string equal $item_id ""] } { return {} - } else { - if [info exists revision] { - array set one_item [get_item -item_id $item_id -revision $revision] - } else { - array set one_item [get_item -item_id $item_id] - } - set one_item(item_id) $item_id - return [array get one_item] } + + return [get_item -item_id $item_id -revision $revision] } #TODO: use the views to select the revision info ad_proc -public bcms::item::get_item { {-item_id:required} - {-revision} + {-revision ""} } { get the content item details. @@ -415,7 +430,7 @@ # if additional revision data must be returned, set the additional columns here # for revisions. I am not using db_map since I think its not useful. - if [info exists revision] { + if { [exists_and_not_null revision] } { set addtnl_select ", r.revision_id, r.title, r.content, r.description, r.publish_date, r.mime_type" set addtnl_from ", cr_revisions r" switch -exact $revision { @@ -438,7 +453,7 @@ set addtnl_where "" } - if {[db_0or1row get_1item "SQL" -column_array one_item]} { + if {[db_0or1row get_1item {} -column_array one_item]} { return [array get one_item] } else { return {} @@ -464,10 +479,10 @@ } { switch -exact $revision { latest { - set addtnl_select ", bcms__get_title(i.item_id, 'latest_revision') as title, content_folder__get_label(i.item_id) as folder_label" + set addtnl_select ", bcms__get_title(i.item_id, 'latest') as title, content_folder__get_label(i.item_id) as folder_label" } live { - set addtnl_select ", bcms__get_title(i.item_id, 'live_revision') as title, content_folder__get_label(i.item_id) as folder_label" + set addtnl_select ", bcms__get_title(i.item_id, 'live') as title, content_folder__get_label(i.item_id) as folder_label" } default { ns_log notice "bcms: revision requested not valid"