Index: openacs-4/packages/acs-subsite/tcl/email-image-procs-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-subsite/tcl/email-image-procs-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/acs-subsite/tcl/email-image-procs-oracle.xql 14 Jan 2005 14:38:36 -0000 1.1 @@ -0,0 +1,50 @@ + + +oracle8.1.6 + + + + update cr_revisions + set content_length = dbms_lob.getlength(content) + where revision_id = :revision_id + + + + + + update cr_revisions + set content = empty_blob() + where revision_id = :revision_id + returning content into :1 + + + + + + update cr_revisions + set content_length = dbms_lob.getlength(content) + where revision_id = :revision_id + + + + + + update cr_revisions + set content = empty_blob() + where revision_id = :revision_id + returning content into :1 + + + + + + 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/tcl/email-image-procs-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-subsite/tcl/email-image-procs-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/acs-subsite/tcl/email-image-procs-postgresql.xql 14 Jan 2005 14:38:36 -0000 1.1 @@ -0,0 +1,54 @@ + + +postgresql7.1 + + + + update cr_revisions + set content_length = lob_length(lob) + where revision_id = :revision_id + + + + + + update cr_revisions + set mime_type = :mime_type, + lob = [set __lob_id [db_string get_lob_id "select empty_lob()"]] + where revision_id = :revision_id + + + + + + + update cr_revisions + set content_length = lob_length(lob) + where revision_id = :revision_id + + + + + + update cr_revisions + set mime_type = :mime_type, + lob = [set __lob_id [db_string get_lob_id "select empty_lob()"]] + where revision_id = :revision_id + + + + + + select acs_rel__new ( + null, + 'email_image_rel', + :user_id, + :item_id, + null, + null, + null + ) + + + + Index: openacs-4/packages/acs-subsite/tcl/email-image-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-subsite/tcl/email-image-procs.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/acs-subsite/tcl/email-image-procs.tcl 14 Jan 2005 14:38:36 -0000 1.1 @@ -0,0 +1,331 @@ +ad_library { + + Tcl API for email_image store and manipulation + + @author Miguel Marin (miguelmarin@viaro.net) Viaro Networks (www.viaro.net) +} + +namespace eval email_image {} + + +ad_proc -public email_image::update_private_p { + -user_id:required + -level:required +} { + Changes the priv_email field from the users table + @user_id + @level Change to this level +} { + db_transaction { + db_dml update_users { *SQL* } + } +} + +ad_proc -public email_image::get_priv_email { + -user_id:required +} { + Returns the priv_email field of the user from the users table. + @user_id +} { + return [db_string get_private_email { *SQL* }] +} + + +ad_proc -public email_image::check_image_magick {} { + Check if the ImageMagick software is installed and if the necesary + library (FreeType) is present, by looking for the "convert" command and + freetype library. + + returns 1 if required software is present, 0 otherwise +} { + set convert_p [string length [exec find /usr/local/bin -name convert]] + set freetype_p [string length [exec whereis freetype]] + if { $convert_p != 0 && $freetype_p != 0 } { + return 1 + } else { + return 0 + } +} + + + +ad_proc -public email_image::get_user_email { + -user_id:required + {-return_url ""} + {-bgcolor "" } + {-transparent "" } +} { + Returns the email in differnet diferent ways (text level 4, image or text and image level 3, link level 2, ...) + according to the priv_email field in the users table. To create an image the ImageMagick software is required, + if ImageMagick is not present then the @ symbol in the email will be shown as an image. When creating an image + you can choose the background color (In this format \#xxxxxx). Also you can make the background color transparent + (1 or 0). + + @user_id + @return_url The url to return when the email is shown as a link + @bgcolor The Background color of the image. Default to \#ffffff + @transparent If the bgcolor is transparent. Default to 1 +} { + set email [email_image::get_email -user_id $user_id] + set user_level [email_image::get_priv_email -user_id $user_id] + if { $user_level == 5 } { + # We get the privacy level from PrivateEmailLevelP parameter + set priv_level [parameter::get_from_package_key -package_key "acs-subsite" \ + -parameter "PrivateEmailLevelP" -default 4] + } else { + # We use the privacy level that the user select + set priv_level $user_level + } + switch $priv_level { + "4" { + return "$email" + } + "3" { + if { [email_image::check_image_magick] } { + set email_image_id [email_image::get_related_item_id -user_id $user_id] + if { $email_image_id != "-1" } { + # The user has an email image stored in the content repository + set revision_id [content::item::get_latest_revision -item_id $email_image_id] + set export_vars "user_id=$user_id&revision_id=$revision_id" + set email_image "\ + " + + } else { + # Create a new email_image + set email_image [email_image::new_item -user_id $user_id -bgcolor $bgcolor -transparent $transparent] + } + } else { + # ImageMagick not present, we protect the email by adding + # an image replacing the "@" symbol + set email_user [lindex [split $email '@'] 0] + set email_domain [lindex [split $email '@'] 1] + set email_image "${email_user}\ + ${email_domain}" + } + return $email_image + } + "2" { + return "\ + \#acs-subsite.Send_email_to_this_user\#" + } + "1" { + #Do not show e-mail + return "\#acs-subsite.email_not_available\#" + } + } +} + + +ad_proc -public email_image::get_email { + -user_id:required +} { + Returns the email of the user + + @user_id +} { + return [db_string get_email { *SQL* }] +} + + + +ad_proc -public email_image::new_item { + -user_id:required + {-bgcolor ""} + {-transparent ""} +} { + Creates the email_image of the user with his/her email on it and store it + in the content repository under the Email_Images folder. + + @user_id + @bgcolor The background color of the image in the format \#xxxxxx, default to \#ffffff + @transparent If you want the background color transparent set it to 1. Default to 1 +} { + + # First we create a type and a folder in the content repository + # with label Email_Images where only items of type email_image + # will be stored. + + set folder_id [email_image::get_folder_id] + set email [email_image::get_email -user_id $user_id] + set image_name "email${user_id}.gif" + set email_length [string length $email] + set dest_path "/tmp/$image_name" + set width [expr $email_length * 10] + set size "${width}x20" + + if { [string equal $bgcolor ""]} { + set bgcolor "\#ffffff" + } + + set bg "xc:$bgcolor" + + # Creating an image of the rigth length where the email will be + exec convert -size $size $bg $dest_path + + # Creating the image with the email of the user on it + exec convert -font helvetica -fill blue -pointsize 16 -draw "text 1,15 $email" \ + $dest_path $dest_path + + if { [string equal $transparent ""] || [string equal $transparent "1"] } { + # Making the bg color transparent + exec convert $dest_path -transparent $bgcolor $dest_path + } + + # Time to store the image in the content repository + db_transaction { + + set mime_type [cr_filename_to_mime_type -create $dest_path] + set creation_ip [ad_conn peeraddr] + + set item_id [content::item::new -name $image_name -parent_id $folder_id -content_type "email_image" \ + -storage_type "lob" -creation_ip $creation_ip] + + set revision_id [content::revision::new -item_id $item_id -title $image_name -mime_type $mime_type \ + -description "User email image" -creation_ip $creation_ip ] + + email_image::add_relation -user_id $user_id -item_id $item_id + db_dml update_cr_items { *SQL* } + db_dml lob_content { *SQL* } -blob_files [list ${dest_path}] + db_dml lob_size { *SQL* } + } + + # Delete the temporary file created by ImageMagick + catch { file delete $dest_path } errMsg + + set export_vars "user_id=$user_id&revision_id=$revision_id" + set email_image "" + + return "$email_image" +} + + + +ad_proc -public email_image::edit_email_image { + -user_id:required + -new_email:required + {-bgcolor ""} + {-transparent ""} +} { + Creates a new email_image of the user with his/her new edited email on it and store it + in the content repository under the Email_Images folder. If the user has an image already + stored it makes a new revision of the image, if not, it creates a new item with the new + image. + + @user_id + @bgcolor The background color of the image in the format \#xxxxxx, default to \#ffffff + @transparent If you want the background color transparent set it to 1. Default to 1 +} { + + if { ![email_image::check_image_magick]} { + # ImageMagick or library not present + return + } + if { $new_email == [email_image::get_email -user_id $user_id] } { + # Email didn't change + return + } + set folder_id [email_image::get_folder_id] + set image_name "email${user_id}.gif" + set email_length [string length $new_email] + set dest_path "/tmp/$image_name" + set width [expr $email_length * 10] + set size "${width}x20" + + if { [string equal $bgcolor ""]} { + set bgcolor "\#ffffff" + } + + set bg "xc:$bgcolor" + + # Creating an image of the rigth length where the email will be + exec convert -size $size $bg $dest_path + + # Creating the image with the email of the user on it + exec convert -font helvetica -fill blue -pointsize 16 -draw "text 1,15 $new_email" \ + $dest_path $dest_path + + if { [string equal $transparent ""] || [string equal $transparent "1"] } { + # Making the bg color transparent + exec convert $dest_path -transparent $bgcolor $dest_path + } + + set email_image_id [email_image::get_related_item_id -user_id $user_id] + set mime_type [cr_filename_to_mime_type -create $dest_path] + set creation_ip [ad_conn peeraddr] + + if { $email_image_id != "-1" } { + db_transaction { + set item_id $email_image_id + set revision_id [content::revision::new -item_id $item_id -title $image_name \ + -mime_type $mime_type \ + -description "User email image" -creation_ip $creation_ip ] + db_dml update_cr_items { *SQL* } + db_dml lob_content { *SQL* } -blob_files [list ${dest_path}] + db_dml lob_size { *SQL* } + } + } else { + db_transaction { + + set item_id [content::item::new -name $image_name -parent_id $folder_id -content_type "email_image" \ + -storage_type "lob" -creation_ip $creation_ip] + + set revision_id [content::revision::new -item_id $item_id -title $image_name -mime_type $mime_type \ + -description "User email image" -creation_ip $creation_ip ] + + email_image::add_relation -user_id $user_id -item_id $item_id + + db_dml update_cr_items { *SQL* } + db_dml lob_content { *SQL* } -blob_files [list ${dest_path}] + db_dml lob_size { *SQL* } + } + } + # Delete the temporary file created by ImageMagick + catch { file delete $dest_path } errMsg +} + + + +ad_proc -public email_image::get_folder_id { } { + Returns the folder_id of the folder with the name "Email_Images" +} { + return [db_string check_folder_name { *SQL* } ] +} + +ad_proc -public email_image::add_relation { + -user_id:required + -item_id:required +} { + Add a new relation between user_id and item_id + @user_id + @item_id the item_id of the image in the content repository +} { + db_exec_plsql add_relation { *SQL* } +} + +ad_proc -public email_image::get_related_item_id { + -user_id:required +} { + Returns the item_id of the email_image stored in the content repository for + user_id. + @user_id +} { + return [db_string get_rel_item { *SQL* } -default -1 ] +} + + +ad_proc -public email_image::create_type_folder_rel { } { + Creates a new folder in the content repository with the name and label Email_Images. + Also create a new type and register this type to the created folder. + Makes a new relation type to asociate the item_id (email_image in the content repository) + with the user_id. +} { + set type_id [content::type::new -content_type "email_image" -pretty_name "Email_Image" \ + -pretty_plural "Email_Images" -table_name "users_email_image" -id_column "email_image_id"] + + set folder_id [content::folder::new -name "Email_Images" -label "Email_Images"] + + content::folder::register_content_type -folder_id $folder_id -content_type "email_image" + + rel_types::new email_image_rel "Email Image" "Email Images" user 0 1 content_item 0 1 +} Index: openacs-4/packages/acs-subsite/tcl/email-image-procs.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/acs-subsite/tcl/email-image-procs.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/acs-subsite/tcl/email-image-procs.xql 14 Jan 2005 14:38:36 -0000 1.1 @@ -0,0 +1,66 @@ + + + + + + + select email + from cc_users + where user_id = :user_id + + + + + + + + + select priv_email + from users + where user_id = :user_id + + + + + + + select folder_id from cr_folders + where label = 'Email_Images' + + + + + + select object_id_two from acs_rels + where rel_type = 'email_image_rel' and object_id_one = :user_id + + + + + + update users + set priv_email = :level + where user_id = :user_id + + + + + + + + update cr_items + set live_revision = :revision_id + where item_id = :item_id + + + + + + update cr_items + set live_revision = :revision_id + where item_id = :item_id + + + + +