Index: openacs-4/packages/acs-subsite/www/user/portrait/comment-edit.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-subsite/www/user/portrait/comment-edit.tcl,v diff -u -r1.6 -r1.7 --- openacs-4/packages/acs-subsite/www/user/portrait/comment-edit.tcl 27 Nov 2007 18:02:10 -0000 1.6 +++ openacs-4/packages/acs-subsite/www/user/portrait/comment-edit.tcl 27 Nov 2007 19:29:27 -0000 1.7 @@ -19,9 +19,6 @@ if {$user_id eq ""} { set user_id $current_user_id - set admin_p 0 -} else { - set admin_p 1 } ad_require_permission $user_id "write" Fisheye: Tag 1.6 refers to a dead (removed) revision in file `openacs-4/packages/acs-subsite/www/user/portrait/upload-2-oracle.xql'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1.7 refers to a dead (removed) revision in file `openacs-4/packages/acs-subsite/www/user/portrait/upload-2-postgresql.xql'. Fisheye: No comparison available. Pass `N' to diff? Fisheye: Tag 1.17 refers to a dead (removed) revision in file `openacs-4/packages/acs-subsite/www/user/portrait/upload-2.tcl'. Fisheye: No comparison available. Pass `N' to diff? Index: openacs-4/packages/acs-subsite/www/user/portrait/upload-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-subsite/www/user/portrait/Attic/upload-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/acs-subsite/www/user/portrait/upload-oracle.xql 27 Nov 2007 19:29:27 -0000 1.1 @@ -0,0 +1,19 @@ + + + + oracle8.1.6 + + + + + begin + :1 := acs_rel.new ( + rel_type => 'user_portrait_rel', + object_id_one => :user_id, + object_id_two => :item_id); + end; + + + + + Index: openacs-4/packages/acs-subsite/www/user/portrait/upload-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-subsite/www/user/portrait/Attic/upload-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/acs-subsite/www/user/portrait/upload-postgresql.xql 27 Nov 2007 19:29:27 -0000 1.1 @@ -0,0 +1,22 @@ + + + + postgresql7.1 + + + + + select acs_rel__new ( + null, + 'user_portrait_rel', + :user_id, + :item_id, + null, + null, + null + ) + + + + + Index: openacs-4/packages/acs-subsite/www/user/portrait/upload.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-subsite/www/user/portrait/upload.adp,v diff -u -r1.9 -r1.10 --- openacs-4/packages/acs-subsite/www/user/portrait/upload.adp 27 Nov 2007 14:51:53 -0000 1.9 +++ openacs-4/packages/acs-subsite/www/user/portrait/upload.adp 27 Nov 2007 19:29:27 -0000 1.10 @@ -7,39 +7,12 @@

#acs-subsite.lt_Upload_your_favorite#

+
-
-
@export_vars;noquote@
- - - - - + - - - - - - - - -
#acs-subsite.Your_Portrait#
(#acs-subsite.Erase_Portrait#) -
#acs-subsite.Filename#: -
-#acs-subsite.lt_Use_the_Browse_button# -
#acs-subsite.Story_Behind_Photo# -
-#acs-subsite.optional# -
-
-

- -

-
-
+ Index: openacs-4/packages/acs-subsite/www/user/portrait/upload.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-subsite/www/user/portrait/upload.tcl,v diff -u -r1.10 -r1.11 --- openacs-4/packages/acs-subsite/www/user/portrait/upload.tcl 27 Nov 2007 14:51:53 -0000 1.10 +++ openacs-4/packages/acs-subsite/www/user/portrait/upload.tcl 27 Nov 2007 19:29:27 -0000 1.11 @@ -40,12 +40,134 @@ return } +if { $return_url eq "" } { + set return_url [ad_pvt_home] +} + if {$admin_p} { set context [list [list "./?[export_vars user_id]" [_ acs-subsite.User_Portrait]] [_ acs-subsite.Upload_Portrait]] } else { set context [list [list "./?[export_vars return_url]" [_ acs-subsite.Your_Portrait]] [_ acs-subsite.Upload_Portrait]] } -set export_vars [export_form_vars user_id return_url] +set help_text [_ acs-subsite.lt_Use_the_Browse_button] +ad_form -name "portrait_upload" -html {enctype "multipart/form-data"} -export {user_id return_url} -form { + {upload_file:text(file) + {label "#acs-subsite.Filename#"} + {help_text $help_text} + } +} + +if { $portrait_p } { + set description [db_string getstory {}] + ad_form -extend -name "portrait_upload" -form { + {portrait_comment:text(textarea),optional + {label "#acs-subsite.Story_Behind_Photo#"} + {value $description} + {html {rows 6 cols 50}} + } + } +} else { + ad_form -extend -name "portrait_upload" -form { + {portrait_comment:text(textarea),optional + {label "#acs-subsite.Story_Behind_Photo#"} + {html {rows 6 cols 50}} + } + } +} + +set mime_types [ad_parameter AcceptablePortraitMIMETypes "user-info"] +set max_bytes [ad_parameter MaxPortraitBytes "user-info"] + +ad_form -extend -name "portrait_upload" -validate { + + # check to see if this is one of the favored MIME types, + # e.g., image/gif or image/jpeg + + # DRB: the code actually depends on our having either gif or jpeg and this was true + # before I switched this routine to use cr_import_content (i.e. don't believe the + # generality implicit in the following if statement) + + {upload_file + + { [empty_string_p $mime_types] || [lsearch $mime_types [ns_guesstype $upload_file]] > -1 } + {Your image wasn't one of the acceptable MIME types: $mime_types} + } + {upload_file + + { [empty_string_p $max_bytes] || [file size [ns_queryget upload_file.tmpfile]] <= $max_bytes } + {Your file is too large. The publisher of [ad_system_name] has chosen to limit portraits to [util_commify_number $max_bytes] bytes. You can use PhotoShop or the GIMP (free) to shrink your image} + } + +} -on_submit { + + # this stuff only makes sense to do if we know the file exists + set tmp_filename [ns_queryget upload_file.tmpfile] + + set file_extension [string tolower [file extension $upload_file]] + + # remove the first . from the file extension + regsub "\." $file_extension "" file_extension + + set guessed_file_type [ns_guesstype $upload_file] + + set n_bytes [file size $tmp_filename] + + # strip off the C:\directories... crud and just get the file name + if {![regexp {([^/\\]+)$} $upload_file match client_filename]} { + # couldn't find a match + set client_filename $upload_file + } + + # Wrap the whole creation along with the relationship in a big transaction + # Just to make sure it really worked. + + db_transaction { + set item_id [content::item::get_id_by_name -name "portrait-of-user-$user_id" -parent_id $user_id] + if { $item_id eq ""} { + # The user doesn't have a portrait relation yet + set item_id [content::item::new -name "portrait-of-user-$user_id" -parent_id $user_id -content_type image] + set resized_item_id "" + } else { + set resized_item_id [image::get_resized_item_id -item_id $item_id -size_name "thumbnail"] + } + + # Load the file into the revision + set revision_id [cr_import_content \ + -item_id $item_id \ + -image_only \ + -storage_type file \ + -creation_user [ad_conn user_id] \ + -creation_ip [ad_conn peeraddr] \ + -description $portrait_comment \ + $user_id \ + $tmp_filename \ + $n_bytes \ + $guessed_file_type \ + "portrait-of-user-$user_id"] + + content::item::set_live_revision -revision_id $revision_id + + if {$resized_item_id ne ""} { + # Delete the item + content::item::delete -item_id $resized_item_id + + # Resize the item + image::resize -item_id $item_id -size_name "thumbnail" + } + + # Only create the new relationship if there does not exist one already + set user_portrait_rel_id [relation::get_id -object_id_one $user_id -object_id_two $item_id -rel_type "user_portrait_rel"] + if {$user_portrait_rel_id eq ""} { + db_exec_plsql create_rel {} + } + } + + # Flush the portrait cache + util_memoize_flush [list acs_user::get_portrait_id_not_cached -user_id $user_id] + + ad_returnredirect $return_url +} + ad_return_template