Index: openacs-4/packages/lorsm/www/delivery-no-index/index.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/lorsm/www/delivery-no-index/index.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/lorsm/www/delivery-no-index/index.tcl 26 Apr 2005 08:56:24 -0000 1.2 +++ openacs-4/packages/lorsm/www/delivery-no-index/index.tcl 17 May 2005 21:48:05 -0000 1.3 @@ -10,6 +10,7 @@ @cvs-id $Id$ } { man_id:integer,notnull + ims_id:integer,notnull,optional } -properties { } -validate { } -errors { @@ -18,6 +19,12 @@ set user_id [ad_conn user_id] set community_id [dotlrn_community::get_community_id] +if { [info exists ims_id] } { + set item_id $ims_id + + set body_url [export_vars -base "record-view" -url {item_id man_id}] +} + # Get the course name if {[db_0or1row manifest " select @@ -38,20 +45,20 @@ } db_0or1row get_last_viewed { - select item_id as imsitem_id, coalesce(acs_object__name(object_id),'Item '||object_id) as last_page_viewed + select ims_item_id as imsitem_id, coalesce(acs_object__name(object_id),'Item '||object_id) as last_page_viewed from views v, ims_cp_items i, ims_cp_organizations o where v.viewer_id = :user_id - and v.object_id = i.item_id + and v.object_id = i.ims_item_id and i.org_id = o.org_id and o.man_id = :man_id order by v.last_viewed desc limit 1 } set all_items [db_list get_total_items { - select i.item_id + select i.ims_item_id from ims_cp_items i, ims_cp_organizations o where o.man_id = :man_id Index: openacs-4/packages/lorsm/www/delivery-no-index/record-view.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/lorsm/www/delivery-no-index/record-view.tcl,v diff -u -r1.1 -r1.2 --- openacs-4/packages/lorsm/www/delivery-no-index/record-view.tcl 22 Apr 2005 09:10:55 -0000 1.1 +++ openacs-4/packages/lorsm/www/delivery-no-index/record-view.tcl 17 May 2005 21:48:05 -0000 1.2 @@ -22,40 +22,73 @@ set views [views::record_view -object_id $item_id -viewer_id $viewer_id] -set revision_id [item::get_best_revision $item_id] +set ns_item_id $item_id +set revision_id $item_id -db_1row manifest_info "select fs_package_id, folder_id from ims_cp_manifests where man_id = :man_id" -set content_root [fs::get_root_folder -package_id $fs_package_id] +set item_id [lorsm::delivery::get_item_id -revision_id $revision_id] -set url2 "[db_string select_folder_key {select key from fs_folders where folder_id = :folder_id}]/" +set folder_id [lorsm::delivery::get_folder_id_from_man_id -man_id $man_id] +set lors_root [lorsm::get_root_folder_id] +set folder_name [lorsm::delivery::get_folder_name -folder_id $folder_id] +set content_root [lorsm::delivery::get_item_id_from_name_parent -name $folder_name -parent_id $lors_root] -set href [db_string href "select href from ims_cp_resources r, ims_cp_items_to_resources ir where ir.item_id = :item_id and ir.res_id = r.res_id" -default ""] -db_1row item_info "select title from ims_cp_items where item_id = :item_id" +if {[empty_string_p $content_root]} { + # This was uploaded with lorsm so we use the folder_id from the table + set content_root [lorsm::delivery::get_folder_id_from_man_id -man_id $man_id] +} -set fs_item_id [fs::get_item_id -folder_id $folder_id -name $href] + +#set url2 "[db_string select_folder_key {select key from fs_folders where folder_id = :folder_id}]/" +set url2 $folder_name + +# Get the href of the item +set href [lorsm::delivery::get_href -ims_item_id $revision_id] + +# Get the item title +set item_title [lorsm::delivery::get_ims_item_title -ims_item_id $revision_id] + +set cr_item_id [lors::cr::get_item_id -folder_id $content_root -name $href] + + # If no fs_item_id, this item is probably a folder # Else deliver the page -if { ![empty_string_p $fs_item_id] } { +if { [empty_string_p $cr_item_id] } { + set res_id [lorsm::delivery::get_res_id -ims_item_id $revision_id] + if { ![empty_string_p $res_id] } { + set file_id [lorsm::delivery::get_file_id -res_id $res_id] + if { [empty_string_p $file_id]} { + set cr_item_id "" + } else { + set cr_item_id [lorsm::delivery::get_item_id -revision_id $file_id] + } + } else { + set cr_item_id "" + } +} - set fs_revision_id [item::get_best_revision $fs_item_id] - set fs_item_mime [item::get_mime_info $fs_revision_id mime_info] +# If no cr_item_id, this item is probably a folder +# Else deliver the page +if { ![empty_string_p $cr_item_id] } { - if { ![string equal -length 4 "text" $mime_info(mime_type)] } { + # This is the revision of the file (html, jpg, etc) + set cr_revision_id [item::get_best_revision $cr_item_id] + set cr_item_mime [item::get_mime_info $cr_revision_id mime_info] + if { ![string equal -length 4 "text" $mime_info(mime_type)] } { # It's a file. - cr_write_content -revision_id $fs_revision_id + cr_write_content -revision_id $cr_revision_id ad_script_abort } else { - set href $url2$href + set href "$url2/$href" regsub -all {//} $href {/} href - set imsitem_id $item_id - - # lorsm::set_content_root content_root + set ims_item_id $cr_revision_id + + # lorsm::set_content_root content_root lorsm::set_ims_item_id $item_id # we use nsv variables to set the delivery environment this is a @@ -68,18 +101,19 @@ nsv_set delivery_vars [ad_conn session_id] [list] nsv_lappend delivery_vars [ad_conn session_id] $content_root - - ad_returnredirect [export_vars -base view/$href {imsitem_id} ] + ad_returnredirect [export_vars -base view/$href {ims_item_id} ] + ad_script_abort } } else { lorsm::set_ims_item_id $item_id - + # We have no content, so wipe item_id from the lorsm namespace # This fixes a strange bug if you click a 'no content' menu item # repeatedly and different content appears! if { [info exists lorsm::item_id] } { set lorsm::item_id "" } - rp_internal_redirect -absolute_path [acs_root_dir]/templates/lorsm-default } + + Index: openacs-4/packages/lorsm/www/delivery-no-index/view/index.vuh =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/lorsm/www/delivery-no-index/view/index.vuh,v diff -u -r1.1 -r1.2 --- openacs-4/packages/lorsm/www/delivery-no-index/view/index.vuh 22 Apr 2005 09:10:55 -0000 1.1 +++ openacs-4/packages/lorsm/www/delivery-no-index/view/index.vuh 17 May 2005 21:48:05 -0000 1.2 @@ -12,14 +12,22 @@ ad_returnredirect [dotlrn_community::get_community_url [dotlrn_community::get_community_id -package_id [ad_conn package_id]]] } +if {[info exists ims_item_id]} { + lorsm::set_ims_item_id $ims_item_id +} + # Get the paths set the_root [ns_info pageroot] set the_url [ad_conn path_info] set content_type "content_revision" set content_root [lindex [nsv_get delivery_vars [ad_conn session_id]] 0] +set ns_item_id [lindex [nsv_get delivery_vars [ad_conn session_id]] 1] +set ims_item_id [lorsm::get_ims_item_id] +set the_url [join [lrange [split $the_url "/"] 1 end] "/"] + set template_root [db_string template_root ""] # Serve the page @@ -28,6 +36,36 @@ # as though it's been passed by reference. This requires that the redirect treat the # path as an absolute path within the filesystem. +# MIGUELM: we need a way to use other content root not only the one for the course since we can have +# items from other courses + +set item_id [content::item::get_id -item_path $the_url -root_folder_id $content_root -resolve_index "f"] + +if { [empty_string_p $item_id] } { + # This item was probably added. We need to check if the item exist on other folder. + # So we will get the first part of the URL + set item_id [lorsm::delivery::get_item_other_folder -url $the_url] +} + +# To get the revision_id (file_id) we need to show here we have to items here +# one is the item_id that is recived on record-view page from the menu +# and the other one is the one that holds all the revisions for one file +set revision_id [lorsm::delivery::get_file_id_from_ims_item_id -ims_item_id $ns_item_id -item_id $item_id] + +if { [empty_string_p $revision_id] } { + # Is a reference to an image or some other resource inside the page, this items don't + # have an entry in ims_cp_files table + set revision_id [item::get_best_revision $item_id] +} + +if { ![empty_string_p $revision_id] } { + # We catch the revision id using the_url and content root + cr_write_content -revision_id $revision_id +} else { + # Write the ims_item_id that we recieve on the page since this is the one that holds the content + cr_write_content -revision_id $ims_item_id +} + if { [lorsm::init the_url the_root $content_root $template_root public "" $content_type] } { # we introduced our own template