Index: openacs-4/packages/acs-templating/www/scripts/xinha/attach-file.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-templating/www/scripts/xinha/attach-file.tcl,v diff -u -N -r1.10 -r1.11 --- openacs-4/packages/acs-templating/www/scripts/xinha/attach-file.tcl 21 Dec 2006 15:12:39 -0000 1.10 +++ openacs-4/packages/acs-templating/www/scripts/xinha/attach-file.tcl 13 Mar 2007 13:48:20 -0000 1.11 @@ -8,13 +8,15 @@ @cvs-id $Id$ } { {parent_id:integer} - {package_id:integer} {selector_type "file"} + {f_href ""} } #HAM : ajax sources set js_source [ah::js_sources] +set package_id [ad_conn package_id] + set user_id [ad_conn user_id] # if user has write permission, create image upload form, set write_p [permission::permission_p \ @@ -28,6 +30,7 @@ -object_id $package_id \ -privilege "write"] } +#ns_log notice "HAM : permission write_p : $write_p ************" if {$write_p} { # set recent files set recent_files_options [list] @@ -48,7 +51,7 @@ set name " $name" lappend recent_files_options [list $name $item_id] } - +# ns_log notice "HAM : recent_files_options : $recent_files_options ********************" set share_options [list [list "[_ acs-templating.Only_myself]" private] [list "[_ acs-templating.This_Group]" group] [list "[_ acs-templating.Anyone_on_this_system]" site] [list "[_ acs-templating.Anyone_on_the_internet]" public]] ad_form \ @@ -57,24 +60,39 @@ -export {selector_type file_types parent_id} \ -html { enctype multipart/form-data } \ -form { - item_id:key + item_id:key {package_id:text(hidden)} - {f_title:text,optional {label "[_ acs-templating.Link_Text]"} {html {size 50 id f_title} } } + {f_href:text(hidden),optional {html {id f_href}}} + {f_title:text,optional {label "[_ acs-templating.Link_Title]"} {html {size 50 id f_title} } } + {f_url:url,optional {label "[_ acs-templating.Link_Url]"} {html {size 50 id f_url } } } + {url_ok_btn:text(submit) {label "[_ acs-templating.Link_Url_Btn]"} } {choose_file:text(radio),optional {options $recent_files_options}} - {upload_file:file(file) {html {size 30}} } + {upload_file:file(file),optional {html {size 30}} } {share:text(radio),optional {label "[_ acs-templating.This_file_can_be_reused_by]"} {options $share_options} {help_text "[_ acs-templating.This_file_can_be_reused_help]"}} {select_btn:text(submit) {label "[_ acs-templating.Add_the_selected_file]"}} {ok_btn:text(submit) {label "[_ acs-templating.HTMLArea_SelectUploadBtn]"} } } \ -on_request { set share site - set f_title "" - set f_href "" + if {$f_href ne ""} { + set f_url $f_href + } } \ -on_submit { + if {$f_href eq ""} { + set f_href $f_url + element set_value upload_form f_href $f_href + } + # ensure that Link Title is specified + if { ![exists_and_not_null f_title] && [exists_and_not_null url_ok_btn] } { + template::form::set_error upload_form f_title "Specify a [_ acs-templating.Link_Title]" + } # check file name - if {$choose_file eq "" && $upload_file eq ""} { + if {$choose_file eq "" && $upload_file eq "" && $f_url eq ""} { + if { [info exists f_url] && $url_ok_btn ne ""} { + template::form::set_error upload_form f_url "Specify a [_ acs-templating.Link_Url]" + } if {[info exists ok_btn] && $ok_btn ne ""} { template::form::set_error upload_form upload_file \ [_ acs-templating.HTMLArea_SpecifyUploadFilename] @@ -86,111 +104,114 @@ set share site set f_title "" set f_href "" - + } else { - if {$upload_file ne ""} { # check quota # FIXME quota is a good idea, set per-user upload quota?? - # set maximum_folder_size [ad_parameter "MaximumFolderSize"] - + # set maximum_folder_size [ad_parameter "MaximumFolderSize"] # if { $maximum_folder_size ne "" } { # set max [ad_parameter "MaximumFolderSize"] # if { $folder_size+[file size ${upload_file.tmpfile}] > $max } { - # template::form::set_error upload_form upload_file \ - [_ file-storage.out_of_space] - # break - # } - # } - - set file_name [template::util::file::get_property filename $upload_file] - set upload_tmpfile [template::util::file::get_property tmp_filename $upload_file] - set mime_type [template::util::file::get_property mime_type $upload_file] - if {$mime_type eq ""} { - set mime_type [ns_guesstype $file_name] - } + # template::form::set_error upload_form upload_file [_ file-storage.out_of_space] + # break + # } + # } + + set file_name [template::util::file::get_property filename $upload_file] + set upload_tmpfile [template::util::file::get_property tmp_filename $upload_file] + set mime_type [template::util::file::get_property mime_type $upload_file] + if {$mime_type eq ""} { + set mime_type [ns_guesstype $file_name] + } - if {[string match "image/*" $mime_type]} { - - image::new \ - -item_id $item_id \ - -name ${item_id}_$file_name \ - -parent_id $parent_id \ - -title $f_title \ - -tmp_filename $upload_tmpfile \ - -creation_user $user_id \ - -creation_ip [ad_conn peeraddr] \ - -package_id [ad_conn package_id] - } else { - content::item::new \ - -item_id $item_id \ - -name ${item_id}_$file_name \ - -title $f_title \ - -parent_id $parent_id \ - -tmp_filename $upload_tmpfile \ - -creation_user $user_id \ - -creation_ip [ad_conn peeraddr] \ - -package_id [ad_conn package_id] \ - -mime_type $mime_type - } - file delete $upload_tmpfile - permission::grant \ - -object_id $item_id \ - -party_id $user_id \ - -privilege admin - - switch -- $share { - private { - permission::set_not_inherit -object_id $item_id - } - group { - # Find the closest application group - # either dotlrn or acs-subsite - - permission::grant \ - -party_id [acs_magic_object "registered_users"] \ - -object_id $item_id \ - -privilege "read" - } - public { - permission::grant \ - -party_id [acs_magic_object "the_public"] \ - -object_id $item_id \ - -privilege "read" - } - site - - default { - permission::grant \ - -party_id [acs_magic_object "registered_users"] \ - -object_id $item_id \ - -privilege "read" - } - - } - } else { - set item_id $choose_file - set file_name [lindex [lindex $recent_files_options [util_search_list_of_lists $recent_files_options $item_id 1]] 0] - # we have to get rid of the icon from the form. - set file_name [regsub -all {<.*?>} $file_name {}] - } + if {[string match "image/*" $mime_type]} { + + image::new \ + -item_id $item_id \ + -name ${item_id}_$file_name \ + -parent_id $parent_id \ + -title $f_title \ + -tmp_filename $upload_tmpfile \ + -creation_user $user_id \ + -creation_ip [ad_conn peeraddr] \ + -package_id [ad_conn package_id] + } else { + content::item::new \ + -item_id $item_id \ + -name ${item_id}_$file_name \ + -title $f_title \ + -parent_id $parent_id \ + -tmp_filename $upload_tmpfile \ + -creation_user $user_id \ + -creation_ip [ad_conn peeraddr] \ + -package_id [ad_conn package_id] \ + -mime_type $mime_type + } + file delete $upload_tmpfile + permission::grant \ + -object_id $item_id \ + -party_id $user_id \ + -privilege admin + + switch -- $share { + private { + permission::set_not_inherit -object_id $item_id + } + group { + # Find the closest application group + # either dotlrn or acs-subsite + + permission::grant \ + -party_id [acs_magic_object "registered_users"] \ + -object_id $item_id \ + -privilege "read" + } + public { + permission::grant \ + -party_id [acs_magic_object "the_public"] \ + -object_id $item_id \ + -privilege "read" + } + site - + default { + permission::grant \ + -party_id [acs_magic_object "registered_users"] \ + -object_id $item_id \ + -privilege "read" + } + + } + } else { + if {$choose_file ne ""} { + set item_id $choose_file + set file_name [lindex [lindex $recent_files_options [util_search_list_of_lists $recent_files_options $item_id 1]] 0] + # we have to get rid of the icon from the form. + set file_name [regsub -all {<.*?>} $file_name {}] + } + } if {$f_title eq ""} { element set_value upload_form f_title $file_name } + if {$share eq "private" && [string match "image/*" $mime_type]} { # need a private URL that allows viewers of this # object to see the image # this isn't totally secure, because of course # you need to be able to see the image somehow # but we only allow read on the image if you can # see the parent object - set f_href "/image/${item_id}/private/${parent_id}/${file_name}" - + set f_href "/image/${item_id}/private/${parent_id}/${file_name}" } else { - set f_href "/file/${item_id}/${file_name}" + if { [exists_and_not_null f_url] && $url_ok_btn ne "" } { + set f_href $f_url + } else { + set f_href "/file/${item_id}/${file_name}" + } } } - + element set_value upload_form f_href $f_href } } else {