Index: openacs-4/packages/chat/tcl/chat-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/tcl/chat-procs.tcl,v diff -u -r1.10 -r1.11 --- openacs-4/packages/chat/tcl/chat-procs.tcl 24 Jun 2007 15:21:19 -0000 1.10 +++ openacs-4/packages/chat/tcl/chat-procs.tcl 19 Nov 2007 01:14:16 -0000 1.11 @@ -2,15 +2,14 @@ ad_library { TCL Library for the chat system v.4 - @author David Dao (ddao@arsdigita.com) and Pablo Mu�oz(pablomp@tid.es) - + @author David Dao (ddao@arsdigita.com) + @creation-date November 17, 2000 + @cvs-id $Id$ } -namespace eval chat::rss {} - ad_proc -private chat_start_server {} { Start Java chat server. } { - if {[nsv_get chat server_started]} { + if [nsv_get chat server_started] { return } ns_log notice "chat_start_server: Starting chat server" @@ -63,7 +62,7 @@ while { 1 } { # Wait until there is new message in queue. ns_mutex lock [nsv_get chat new_message] - if {[nsv_exists chat html_message]} { + if [nsv_exists chat html_message] { # Get message from queue. puts $w [nsv_get chat html_message] flush $w @@ -99,7 +98,7 @@ regexp "(.*)" $line match screen_name regexp "(.*)" $line match msg regexp "(.*)" $line match user_id - if {![nsv_exists chat_room $room_id]} { + if ![nsv_exists chat_room $room_id] { nsv_set chat_room $room_id {} } @@ -119,12 +118,12 @@ } } - chat_room_get -room_id $room_id -array room_info - if { $room_info(archive_p) eq "t" } { - if {[catch {chat_post_message_to_db -creation_user $user_id $room_id $msg} errmsg]} { - ns_log error "chat_post_message_to_db: error: $errmsg" - } - } + chat_room_get -room_id $room_id -array room_info + if { $room_info(archive_p) eq "t" } { + if [catch {chat_post_message_to_db -creation_user $user_id $room_id $msg} errmsg] { + ns_log error "chat_post_message_to_db: error: $errmsg" + } + } nsv_lappend chat_room $room_id $line @@ -143,138 +142,48 @@ } { Log chat message to the database. } { - + # ns_log Notice $msg db_exec_plsql post_message {} } -ad_proc -public chat_room_new { - {-alias ""} - {-key_words ""} - {-maxP ""} - {-end_date ""} - {-Rss_service ""} - {-frequency1 ""} - {-frequency2 ""} - {-Mail_service ""} - {-moderated_p ""} - {-active_p ""} - {-archive_p ""} - {-auto_flush_p ""} - {-auto_transcript_p ""} - {-context_id ""} - {-comm_name ""} +ad_proc -public chat_room_new { + {-description ""} + {-moderated_p f} + {-active_p t} + {-archive_p f} + {-auto_flush_p t} + {-auto_transcript_p f} + {-context_id ""} {-creation_user ""} {-creation_ip ""} - description pretty_name + } { Create new chat room. Return room_id if successful else raise error. } { - db_transaction { set room_id [db_exec_plsql create_room {}] } db_exec_plsql grant_permission {} - - for {set i 0} {$i < [llength $key_words]} {incr i 1} { - set word [lindex $key_words $i] - - db_exec_plsql insert_keywords { } - } - - return $room_id } -ad_proc -public chat_room_private_new { - {-alias ""} - {-key_words ""} - {-maxP ""} - {-end_date ""} - {-Rss_service ""} - {-Mail_service ""} - {-moderated_p ""} - {-active_p ""} - {-archive_p ""} - {-auto_flush_p ""} - {-auto_transcript_p ""} - {-context_id ""} - {-comm_name ""} - {-creation_user ""} - {-creation_ip ""} - {-private ""} - description - pretty_name -} { - Create new chat room. Return room_id if successful else raise error. -} { - - db_transaction { - set room_id [db_exec_plsql create_private_room {}] - } - - - - return $room_id -} - ad_proc -public chat_room_edit { - {-alias ""} - {-key_words ""} - {-maxP ""} - {-end_date ""} - {-Rss_service ""} - {-frequency1 ""} - {-frequency_mail ""} - {-Mail_service ""} - {-moderated_p ""} - {-active_p ""} - {-archive_p ""} - {-user_id ""} - {-room_id ""} - description + room_id pretty_name + description + moderated_p + active_p + archive_p + auto_flush_p + auto_transcript_p } { Edit information on chat room. All information require. } { - - for {set i 0} {$i < [llength $key_words]} {incr i 1} { - set word [lindex $key_words $i] - - db_1row room_info { - select count(ck.room_id) as words - from chat_keywords ck - where ck.room_id = :room_id - and ck.keyword = :word - } - if { $words eq 0 } { - db_exec_plsql insert_keywords { } - } - } - - db_exec_plsql edit_room {} - - - #A professor who creates a rooom will be able to admin it. - db_1row room_info2 { - select count(cr.creator) as counter2 - from chat_rooms cr - where cr.room_id = :room_id - and cr.creator = :user_id - } - if { $counter2 > 0} { - return 0 - } else { - set context_id [ad_conn package_id] - set creation_ip [ad_conn peeraddr] - db_exec_plsql edit_room_admin {} - return 0 - } - - + db_exec_plsql edit_room {} } ad_proc -public chat_room_delete { @@ -426,10 +335,7 @@ Return display name of this user to use in chat. } { acs_user::get -user_id $user_id -array user - - set name [expr {$user(screen_name) ne "" ? $user(screen_name) : $user(name)}] - return $name } @@ -463,22 +369,20 @@ if { $room_info(archive_p) eq "f" } { return } # write message to the database - if {[catch {chat_post_message_to_db -creation_user $user_id $room_id $message} errmsg]} { + if [catch {chat_post_message_to_db -creation_user $user_id $room_id $message} errmsg] { ns_log error "chat_post_message_to_db: error: $errmsg" } } - - ad_proc -public chat_moderate_message_post { room_id user_id message } { Post moderate message to the chat room and broadcast to all applet clients. Only use by HTML client. } { - set chat_msg "[chat_user_name2 $user_id $alias]$user_id$room_id$messagepending" + set chat_msg "[chat_user_name $user_id]$user_id$room_id$messagepending" # Add message to queue. Notify thread responsible for broadcast message to applets. nsv_set chat html_message $chat_msg @@ -497,7 +401,7 @@ # The first time html client enter chat room, chat_room variable is not initialize correctly. # Therefore I just hard code the variable. - if {![nsv_exists chat_room $room_id]} { + if ![nsv_exists chat_room $room_id] { nsv_set chat_room $room_id [list "[chat_user_name $user_id]$room_id[_ chat.has_entered_the_room]approved"] } @@ -513,14 +417,14 @@ set counter 0 #foreach msg $chat_messages - for { set i [expr {$cnt - 1}] } { $i >= 0 } { set i [expr {$i - 1}] } { + for { set i [expr $cnt - 1] } { $i >= 0 } { set i [expr $i - 1] } { set msg [lindex $chat_messages $i] regexp "(.*)" $msg match screen_name regexp "(.*)" $msg match chat_msg regexp "(.*)" $msg match status - if {$status eq "pending" || $status eq "rejected"} { + if {$status == "pending" || $status == "rejected"} { continue; } @@ -531,7 +435,7 @@ incr counter set array_val(rownum) $counter - if {$screen_name == $user_name && $chat_msg eq "has entered the room."} { + if {$screen_name == $user_name && $chat_msg == "has entered the room."} { return } } @@ -544,7 +448,6 @@ {-context_id ""} {-creation_user ""} {-creation_ip ""} - {-keywords ""} pretty_name contents room_id @@ -576,33 +479,14 @@ transcript_id pretty_name description - contents + contents } { Edit chat transcript. } { db_exec_plsql edit_transcript {} db_dml update_contents {} } -ad_proc -public chat_transcript_edit_keywords { - transcript_id - keywords -} { - Edit chat transcript. -} { - for {set i 0} {$i < [llength $keywords]} {incr i 1} { - set word [lindex $keywords $i] - - db_1row select_keywords {select count(ck.keyword) as ckey from chat_room_transcript_keywords ck where ck.transcript_id = :transcript_id and ck.keyword = :word} - if { $ckey > 0 } { - } else { - db_exec_plsql store_transcripts_keywords {} - } - } - - -} - ad_proc -public chat_room_get { {-room_id {}} {-array:required} @@ -621,1245 +505,32 @@ } ad_proc -private chat_flush_rooms {} {Flush the messages in all of the chat rooms} { - + # ns_log Notice "YY Starting chat_flush_rooms operation" set room_ids [db_list get_rooms *SQL*] foreach room_id $room_ids { chat_room_flush $room_id } -} - +} ad_proc -private chat_room_flush { room_id } {Flush the messages a single chat room} { - + # ns_log Notice "YY flushing room $room_id" db_transaction { array set room_info [chat_room_get_not_cached $room_id] set contents "" # do we have to create a transcript for the room - if { $room_info(auto_transcript_p) eq "t" } { - set time [clock format [expr [clock seconds]-86400] -format "%D"] - # build a list of all messages - db_foreach get_archives_messages {} { - - if { $creation_user eq "-1" } { - append contents "\[$creation_date\] System: $msg
\n" - } else { - db_1row room_info2 { - select count(r.alias) - from chat_registered_users r - where r.user_id = :creation_user - and r.room_id = :room_id - } - - if { $count > 0} { - db_1row room_info2 { - select r.alias - from chat_registered_users r - where r.user_id = :creation_user - and r.room_id = :room_id - } - append contents "\[$creation_date\] [chat_user_name2 $creation_user $alias]: $msg
\n" - } else { - append contents "\[$creation_date\] [chat_user_name $creation_user]: $msg
\n" - } - } - #append contents "\[$creation_date\] [chat_user_name $creation_user]: $msg
\n" - } - + if { $room_info(auto_transcript_p) eq "t" } { + # build a list of all messages + db_foreach get_archives_messages {} { + append contents "\[$creation_date\] [chat_user_name $creation_user]: $msg
\n" + } if { $contents ne "" } { - - set transcript_id [chat_transcript_new \ + chat_transcript_new \ -description "#chat.automatically_created_transcript#" \ - "#chat.transcript_of_date# [clock format [clock seconds] -format "%d.%m.%Y"]" $contents $room_id] - set time [clock format [expr [clock seconds]-86400] -format "%D"] - db_foreach get_files_sent {} { - set ft [store_sent_files_tanscript $transcript_id $f_id] - } - - db_foreach partitipants_transcript "select distinct msg.creation_user as msg_creator - from chat_msgs as msg - where msg.room_id = :room_id and creation_date >= :time and msg.creation_user>-1" { - - #append de los participantes - - db_1row room_info { - select count(r.alias) as count - from chat_registered_users r - where r.room_id = :room_id - and r.user_id = :msg_creator - } - - if { $count > 0 } { - db_1row room_info { - select r.alias as partitipant - from chat_registered_users r - where r.room_id = :room_id - and r.user_id = :msg_creator - } - } else { - db_1row room_info { - select p.first_names as first_names, p.last_name as last_name - from persons p - where p.person_id = :msg_creator - } - append msg_creator1 $first_names " " - append partitipant $msg_creator1 $last_name - } - - set pt [store_partitipants_transcript $transcript_id $partitipant] - - - } if_no_rows { - - } + "#chat.transcript_of_date# [clock format [clock seconds] -format "%d.%m.%Y"]" $contents $room_id } - } - # clear all the messages in the room - #chat_room_message_delete $room_id - } -} - -ad_proc -public chat_registered_user { - {-RSS_service ""} - {-mail_service ""} - {-context_id ""} - {-creation_ip ""} - {-frequency_mail ""} - room_id - alias - user_id -} { - A user is regitered in a chat room. -} { - - db_transaction { - set registered_id [db_exec_plsql register {}] - } - - return $registered_id -} - -ad_proc -public chat_send_mails { - room_id - community_id - user_id - package_id - frequency -} { - Send mails to the registered users with the brief of the chat room conversation -} { - - db_1row info { - select r.frequency_mail, - to_char(r.registered_date, 'YYYY-MM-DD HH24:MI:SS') as registered_date - from chat_registered_users r - where r.room_id = :room_id - and r.user_id = :user_id - } - - set entry_date_ansi [lc_time_tz_convert -from [lang::system::timezone] -to "Etc/GMT" -time_value $registered_date] - set entry_timestamp [clock scan $entry_date_ansi] - - switch $frequency_mail { - "dayly" { - set mail_time [expr [clock seconds]-86400] - - } - "weekly" { - set mail_time [expr [clock seconds]-604800] - } - "monthly" { - set mail_time [expr [clock seconds]-2592000] - } - } - - if { !($mail_time eq $entry_timestamp) } { - # the mail does not have to be sent - return - } - - set sende_first_names "" - set sender_last_name "" - set sender_email "" - db_foreach room_info "select user_id as user_id from chat_registered_users where chat_registered_users.room_id = :room_id" { - - set sender_id $user_id - db_1row select_sender_info { - - select parties.email as sender_email, - persons.first_names as sender_first_names, - persons.last_name as sender_last_name - from parties,persons - where parties.party_id = :sender_id - and persons.person_id = :sender_id - } - - db_1row query { - select parties.email as email - from dotlrn_member_rels_full,parties - where dotlrn_member_rels_full.community_id = :community_id - and parties.party_id = dotlrn_member_rels_full.user_id - and parties.party_id = :user_id - } - - - - - - set from $sender_email - - - if { $community_id eq "" } { - set community_name "All Dotlrn communities" - set community_url "Dotlrn" - set safe_community_name [db_quote $community_name] - append who_will_receive_this_clause [db_map recipients_clause] - set query [db_map sender_info] - - } else { - set community_name [dotlrn_community::get_community_name_not_cached $community_id] - set community_url "[ad_parameter -package_id [ad_acs_kernel_id] SystemURL][dotlrn_community::get_community_url $community_id]" - set safe_community_name [db_quote $community_name] - append who_will_receive_this_clause [db_map recipients_clause] - - set query [db_map sender_info4] - - } - - - set send_date [template::util::date::now_min_interval] - - db_1row room_info { - select r.pretty_name as name,r.comm_name as comm_name,r.description as description,p.first_names as first_names, p.last_name as last_name - from chat_rooms as r, persons as p - where r.room_id = :room_id - and p.person_id = r.creator - } - db_1row room_info2 { select count(fs.title) as count - from chat_rooms as r, chat_rooms_files_sent as fs - where r.room_id = :room_id - and r.room_id = fs.room_id } - - if { $count > 0 } { - db_1row room_info2 { select fs.title as file_name, fs.description as fdescription,fs.creation_user as sender - from chat_rooms as r, chat_rooms_files_sent as fs - where r.room_id = :room_id - and r.room_id = fs.room_id } - db_0or1row sf2 { - select p.first_names as sender_first_names, p.last_name as sender_last_name - from persons p - where p.person_id = :sender - } - append sender_name1 $sender_first_names " " - append sender_name $sender_name1 $sender_last_name - - } - set partitipants "" - - db_foreach rss_partitipants "select distinct persons.first_names as first_names, persons.last_name as last_name - from chat_msgs as msg,persons - where msg.room_id = :room_id - and msg.creation_user = persons.person_id" { - #append de los participantes - append partitipants $first_names " " - append partitipants $last_name " " - append partitipants " |" " " - - } if_no_rows { - - set partitipants "There are not partitipants" - } - - - if { [string index $partitipants [expr [string length $partitipants]-2]] eq "|" } { - set inicio 0 - set final [expr [string length $partitipants]-3] - - set partitipants [string range $partitipants $inicio $final] - - } - - set registered_users "" - db_foreach rss_registered "select distinct registered.alias as users - from chat_registered_users as registered - where registered.room_id = :room_id" { - #append de los participantes - append registered_users $users " | " - } if_no_rows { - - set registered_users "There are not registered users" - } - - - - if { [string index $registered_users [expr [string length $registered_users]-2]] eq "|" } { - set inicio 0 - set final [expr [string length $registered_users]-3] - set registered_users [string range $registered_users $inicio $final] - - } - - set keywords "" - db_foreach keywords "select k.keyword as key from chat_keywords as k - where k.room_id = :room_id" { - #append de las keywords - append keywords $key " | " - } if_no_rows { - - set keywords "There are not keywords" - } - if { [string index $keywords [expr [string length $keywords]-2]] eq "|" } { - set inicio 0 - set final [expr [string length $keywords]-3] - set keysw [string range $keywords $inicio $final] - } - - set subject "$name conversations brief" - if { $count > 0 } { - set message "This is a brief of the conversations during the $frequency: \r\n\r\n Room name --> $name \r\n\r\n Community name --> $comm_name \r\n\r\n Description --> $description \r\n\r\n Creator --> $first_names $last_name \r\n\r\n Keywords --> $keysw \r\n\r\n Partitipants --> $partitipants \r\n\r\n Registered users --> $registered_users \r\n\r\n File Title--> $file_name \r\n\r\n File description --> $fdescription \r\n\r\n File sender --> $sender_name" - } else { - set message "This is a brief of the conversations during the $frequency: \r\n\r\n Room name --> $name \r\n\r\n Community name --> $comm_name \r\n\r\n Description --> $description \r\n\r\n Creator --> $first_names $last_name \r\n\r\n Keywords --> $keysw \r\n\r\n Partitipants --> $partitipants \r\n\r\n Registered users --> $registered_users \r\n\r\n File Title--> " - } - set message_type "text" - - bulk_mail::new \ - -package_id $package_id \ - -send_date [template::util::date::get_property linear_date $send_date] \ - -date_format "YYYY MM DD HH24 MI SS" \ - -from_addr $from \ - -subject "\[$community_name\] $subject" \ - -message $message \ - -message_type $message_type \ - -query $query \ - } if_no_rows { - } - -} - -ad_proc -public chat_send_mails_monthly { - room_id - community_id - user_id - package_id - week - frequency -} { - Send mails to the registered users with the brief of the chat room conversation -} { - if { $week eq "4"} { - - - - set sende_first_names "" - set sender_last_name "" - set sender_email "" - db_foreach room_info "select user_id as user_id from chat_registered_users where chat_registered_users.room_id = :room_id" { - - set sender_id $user_id - - db_1row select_sender_info { - - select parties.email as sender_email, - persons.first_names as sender_first_names, - persons.last_name as sender_last_name - from parties,persons - where parties.party_id = :sender_id - and persons.person_id = :sender_id - } - - db_1row query { - select parties.email as email - from dotlrn_member_rels_full,parties - where dotlrn_member_rels_full.community_id = :community_id - and parties.party_id = dotlrn_member_rels_full.user_id - and parties.party_id = :user_id - } - - - - set from $sender_email - - - if { $community_id eq "" } { - set community_name "All Dotlrn communities" - set community_url "Dotlrn" - set safe_community_name [db_quote $community_name] - append who_will_receive_this_clause [db_map recipients_clause] - set query [db_map sender_info] - - } else { - set community_name [dotlrn_community::get_community_name_not_cached $community_id] - set community_url "[ad_parameter -package_id [ad_acs_kernel_id] SystemURL][dotlrn_community::get_community_url $community_id]" - set safe_community_name [db_quote $community_name] - append who_will_receive_this_clause [db_map recipients_clause] - - set query [db_map sender_info4] - - } - - - set send_date [template::util::date::now_min_interval] - - db_1row room_info { - select r.pretty_name as name,r.comm_name as comm_name,r.description as description,p.first_names as first_names, p.last_name as last_name - from chat_rooms as r, persons as p - where r.room_id = :room_id - and p.person_id = r.creator - } - db_1row room_info2 { select count(fs.title) as count - from chat_rooms as r, chat_rooms_files_sent as fs - where r.room_id = :room_id - and r.room_id = fs.room_id } - - if { $count > 0 } { - db_1row room_info2 { select fs.title as file_name, fs.description as fdescription - from chat_rooms as r, chat_rooms_files_sent as fs - where r.room_id = :room_id - and r.room_id = fs.room_id } - } - set partitipants "" - - db_foreach rss_partitipants "select distinct persons.first_names as first_names, persons.last_name as last_name - from chat_msgs as msg,persons - where msg.room_id = :room_id - and msg.creation_user = persons.person_id" { - #append de los participantes - append partitipants $first_names " " - append partitipants $last_name " " - append partitipants " |" " " - - } if_no_rows { - - set partitipants "There are not partitipants" - } - - - if { [string index $partitipants [expr [string length $partitipants]-2]] eq "|" } { - set inicio 0 - set final [expr [string length $partitipants]-3] - - set partitipants [string range $partitipants $inicio $final] - - } - - set registered_users "" - db_foreach rss_registered "select distinct registered.alias as users - from chat_registered_users as registered - where registered.room_id = :room_id" { - #append de los participantes - append registered_users $users " | " - } if_no_rows { - - set registered_users "There are not registered users" - } - - - - if { [string index $registered_users [expr [string length $registered_users]-2]] eq "|" } { - set inicio 0 - set final [expr [string length $registered_users]-3] - set registered_users [string range $registered_users $inicio $final] - #set registered_users [string range 0 [expr [string length $registered_users]-3]] - - } - - set keywords "" - db_foreach keywords "select k.keyword as key from chat_keywords as k - where k.room_id = :room_id" { - #append de las keywords - append keywords $key " | " - } if_no_rows { - - set keywords "There are not keywords" - } - if { [string index $keywords [expr [string length $keywords]-2]] eq "|" } { - set inicio 0 - set final [expr [string length $keywords]-3] - set registered_users [string range $keywords $inicio $final] - - } - - set subject "$name conversations brief" - if { $count > 0 } { - set message "This is a brief of the conversations during the $frequency: \r\n\r\n Room name --> $name \r\n\r\n Community name --> $comm_name \r\n\r\n Description --> $description \r\n\r\n Creator --> $first_names $last_name \r\n\r\n Keywords --> $keysw \r\n\r\n Partitipants --> $partitipants \r\n\r\n Registered users --> $registered_users \r\n\r\n File Title--> $file_name \r\n\r\n File description --> $fdescription \r\n\r\n File sender --> $sender_name" - } else { - set message "This is a brief of the conversations during the $frequency: \r\n\r\n Room name --> $name \r\n\r\n Community name --> $comm_name \r\n\r\n Description --> $description \r\n\r\n Creator --> $first_names $last_name \r\n\r\n Keywords --> $keysw \r\n\r\n Partitipants --> $partitipants \r\n\r\n Registered users --> $registered_users \r\n\r\n File Title--> " - } - set message_type "text" - - bulk_mail::new \ - -package_id $package_id \ - -send_date [template::util::date::get_property linear_date $send_date] \ - -date_format "YYYY MM DD HH24 MI SS" \ - -from_addr $from \ - -subject "\[$community_name\] $subject" \ - -message $message \ - -message_type $message_type \ - -query $query \ - } if_no_rows { - - } - } else { - set week [expr $week+1] - ad_schedule_proc -thread t -schedule_proc ns_schedule_weekly [list 0 15 18] chat_send_mails_monthly $room_id $community_id $user_id $package_id $week - } - -} - - -ad_proc -public chat_message_post2 { - room_id - user_id - alias - message - moderator_p -} { - Post message to the chat room and broadcast to all applet clients. Used by ajax + html. -} { - if {$moderator_p == "1" } { - set status "approved" - } else { - set status "pending" + # clear all the messages in the room + chat_room_message_delete $room_id } - - set default_client [parameter::get -parameter "DefaultClient" -default "ajax"] - if {$default_client eq "java"} { - set chat_msg "[chat_user_name2 $user_id $alias]$user_id$room_id$message$status" - # Add message to queue. Notify thread responsible for - # broadcast message to applets. - nsv_set chat html_message $chat_msg - ns_mutex unlock [nsv_get chat new_message] - } - - # do not write messages to the database if the room should not be archived - chat_room_get -room_id $room_id -array room_info - if { $room_info(archive_p) eq "f" } { return } - - # write message to the database - if {[catch {chat_post_message_to_db -creation_user $user_id $room_id $message} errmsg]} { - ns_log error "chat_post_message_to_db: error: $errmsg" - } } -ad_proc -public chat_user_name2 { - user_id - alias -} { - Return display name of this user to use in chat. -} { - acs_user::get -user_id $user_id -array user - set name [expr {$alias ne "" ? $alias : $alias}] - return $name - -} - -ad_proc -public chat_room_delete_registered_users { - room_id - user_id -} { - Delete the registered users in a room. -} { - db_exec_plsql delete_users {} -} - -#pablomp - -ad_proc -private send_file { - chat_id - file - title - description - date - context_id - creation_user - creation_ip - send_file_id -} { - - - db_exec_plsql send_file {} - - } - - -ad_proc -private send_file_message { - chat_id -} { - - db_exec_plsql send_file_message {} - - } - - - - - - - -ad_proc -private chat__rss_datasource { -summary_context_id -} { - This procedure implements the "datasource" operation of the - RssGenerationSubscriber service contract. - - @author Dave Bauer (dave@thedesignexperience.org) and Pablo Mu�oz (pablomp@tid.es) -} { - - - set limit 15 - set items [list] - - db_1row room_info { - select r.context_id as package_id - from chat_rooms r - where r.room_id = :summary_context_id - } - - set package_url [chat_util_get_url $package_id] - set content "RSS in the chat" - set column_array(channel_lastBuildDate) "" - set items "" - - db_foreach get_chat_items {} { - #set entry_url [export_vars -base "[ad_url]${package_url}chat?[export_vars -url {{room_id $summary_context_id}}]"] - set entry_url [export_vars -base "[ad_url]${package_url}chat?room_id=$summary_context_id"] - - set content_as_text [ad_html_text_convert -from "text/plain" -to text/plain -- $content] - # for now, support only full content in feed - set description $content_as_text - - # Always convert timestamp to GMT - set entry_date_ansi [lc_time_tz_convert -from [lang::system::timezone] -to "Etc/GMT" -time_value $last_modified] - #set entry_timestamp "[clock format [clock scan $entry_date_ansi] -format "%a, %d %b %Y %H:%M:%S"] GMT" - set entry_timestamp "[clock format [clock scan $entry_date_ansi] -format "%Y-%m-%d %H:%M:%S"] GMT" - - set items [rss_generation $summary_context_id $entry_url $content_as_text $entry_timestamp] - - # set the lastbuilddate just once - expr { [string eq $column_array(channel_lastBuildDate) ""] ? [set column_array(channel_lastBuildDate) $entry_timestamp] : [set column_array(channel_lastBuildDate) ""] } - } - set column_array(channel_title) "RSS Chat" - set column_array(channel_description) "RSS Chat" - set column_array(items) $items - set column_array(channel_language) "" - set column_array(channel_copyright) "" - set column_array(channel_managingEditor) "" - set column_array(channel_webMaster) "" - set column_array(channel_rating) "" - set column_array(channel_skipDays) "" - set column_array(channel_skipHours) "" - set column_array(version) 2.0 - set column_array(image) "" - set column_array(channel_link) $entry_url - - return [array get column_array] -} - -ad_proc -private chat::rss::create_rss_gen_subscr_impl {} { -} { - set spec { - name "chat_rss" - aliases { - datasource chat__rss_datasource - lastUpdated chat_update_rss - } - contract_name "RssGenerationSubscriber" - owner "chat" - } - acs_sc::impl::new_from_spec -spec $spec -} - -ad_proc chat_util_get_url { - package_id -} { - @author Pablo Mu�oz -} { - - set url_stub "" - - db_0or1row get_url_stub " - select site_node__url(node_id) as url_stub - from site_nodes - where object_id=:package_id - " - - return $url_stub - -} - -ad_proc -private chat_update_rss_monthly { -summary_context_id -week -} { - Returns the time that the last chat room was modified, - in Unix time. Returns 0 otherwise. - - @author PabloMP (pablomp@tid.es) -} { - if { $week eq "4" } { - [chat_update_rss $summary_context_id] - } else { - set week [expr $week+1] - ad_schedule_proc -thread t -schedule_proc ns_schedule_weekly [list 0 15 18] [chat_update_rss_monthly $room_id $week] - } - -} - - -ad_proc -private chat_update_rss { -summary_context_id -} { - Returns the time that the last chat room was modified, - in Unix time. Returns 0 otherwise. - - @author PabloMP (pablomp@tid.es) -} { - - - - set subscr_id [rss_support::get_subscr_id \ - -summary_context_id $summary_context_id \ - -impl_name "chat_rss" \ - -owner "chat"] - - rss_gen_report $subscr_id - -} - - - - - - - -ad_proc rss_generation { room_id entry_url content_as_text entry_timestamp } { - @author Pablo Mu�oz (pablomp@tid.es) -} { - set msg_creator "" - set registered_users "" - set partitipants "" - set r_creator "" - - db_foreach rss_partitipants { - select distinct room.pretty_name as room_name,room.frequency1, - room.creator as room_creator, room.description as room_description, - room.end_date as end_date - from chat_rooms as room where room.room_id = :room_id - } { - if { ![db_0or1row user_info { - select r.alias as r_creator - from chat_registered_users r - where r.room_id = :room_id - and r.user_id = :room_creator - limit 1 - }] } { - set r_creator [person::name -person_id $room_creator] - } - - } - - #regisered users - set registered_users_list [db_list rss_registered_users { - select distinct registered.alias as users - from chat_registered_users as registered - where registered.room_id = :room_id - }] - set registered_users [join $registered_users_list " | "] - -# # room participants -# append registered_users $users " | " -# #$registered_users -# if { [string index $registered_users [expr [string length $registered_users]-2]] eq "|" } { -# set inicio 0 -# set final [expr [string length $registered_users]-4] -# set registered_users [string range $registered_users $inicio $final] - -# } - - #comm_name - - db_1row room_info { - select r.comm_name as comm_name - from chat_rooms r, persons p - where r.room_id = :room_id - and p.person_id = r.creator - } - - #Store the values of the new rss in the data base - - set rss_id [rss_db $room_name $room_description $end_date $r_creator $comm_name $registered_users $entry_timestamp] - - db_1row frequency { - select r.frequency1 - from chat_rooms r - where r.room_id = :room_id - } - - switch $frequency1 { - "dayly" { - set rss_time [clock format [expr [clock scan $entry_timestamp -gmt "true"]-86400] -format "%D"] - } - "weekly" { - set rss_time [clock format [expr [clock scan $entry_timestamp -gmt "true"]-604800] -format "%D"] - } - "monthly" { - set rss_time [clock format [expr [clock scan $entry_timestamp -gmt "true"]-2592000] -format "%D"] - } - } - - #partitipants - - db_foreach rss_partitipants "select distinct msg.creation_user as msg_creator - from chat_msgs as msg - where msg.room_id = :room_id and creation_date >= :rss_time" { - - #append de los participantes - #$msg_creator - if { $msg_creator eq "-1" } { - append partitipant "System" "" - } else { - db_1row room_info { - select count(r.alias) as count - from chat_registered_users r - where r.room_id = :room_id - and r.user_id = :msg_creator - } - - if { $count > 0 } { - db_1row room_info { - select r.alias as partitipant - from chat_registered_users r - where r.room_id = :room_id - and r.user_id = :msg_creator - } - } else { - db_1row room_info { - select p.first_names as first_names, p.last_name as last_name - from persons p - where p.person_id = :msg_creator - } - append msg_creator1 $first_names " " - append partitipant $msg_creator1 $last_name - } - } - - set p [store_partitipants_rss $rss_id $partitipant] - set partitipant "" - - #append partitipants $creator " | " - - } if_no_rows { - - } - - - db_1row room_info { - select r.comm_name as comm_name - from chat_rooms r, persons p - where r.room_id = :room_id - and p.person_id = r.creator - } - - - #sent files - - db_foreach room_info2 "select fs.send_file_id - from chat_rooms_files_sent fs - where fs.room_id = :room_id and date >= :rss_time" { - - set s [store_sent_files_rss $rss_id $send_file_id] - } - - #keywords - - set keywords "" - set keysw "" - db_foreach keywords "select k.keyword as key from chat_keywords k - where k.room_id = :room_id" { - #append de las keywords - - set k [store_keywords_rss $rss_id $key] - - #append keywords $key " | " - } if_no_rows { - - set keywords "There are not keywords" - } - - - db_1row room_info6 { - select count(ct.room_id) as count2 - from chat_transcripts ct - where ct.room_id = :room_id - } - set tname "" - set tdescription "" - set tdate "" - - db_foreach room_info2 "select ct.transcript_id as transcription_id - from chat_transcripts ct - where ct.room_id = :room_id and date >= :rss_time" { - set t [store_transcripts_rss $rss_id $transcription_id] - } - - set rss_data [list] - - db_foreach rss_stored "select r.room_name as r_name,r.rss_id,r.creator as r_cre,r.end_date as r_end_date,r.description as r_description,r.comm_name as r_comm_name,r.user_registered as r_user_registered,r.date as entry_timestamp from chat_rss r where r.room_name = :room_name - and r.creator = :r_creator - order by entry_timestamp desc" { - - - set keywords "" - set keysw "" - db_foreach keywords "select k.key from chat_key_rss k - where k.rss_id = :rss_id" { - - #append de las keywords - append keywords $key " | " - - } if_no_rows { - - set keywords "There are not keywords" - } - if { [string index $keywords [expr [string length $keywords]-2]] eq "|" } { - set inicio 0 - set final [expr [string length $keywords]-4] - set keysw [string range $keywords $inicio $final] - } - - set partitipants "" - - db_foreach partitipants "select p.partitipant as part from chat_partitipants_rss p - where p.rss_id = :rss_id" { - - #append de las keywords - append partitipants $part " | " - - } if_no_rows { - - set partitipants "There are not partitipants" - } - #set p_pants "There are not partitipants" - - if { [string index $partitipants [expr [string length $partitipants]-2]] eq "|" } { - set inicio 0 - set final [expr [string length $partitipants]-4] - set p_pants [string range $partitipants $inicio $final] - } else { - set p_pants "" - } - set file "" - set file [list] - set files "" - - db_foreach sent_files "select f.file_id as f_id from chat_files_rss f - where f.rss_id = :rss_id" { - - - append file $f_id " " - - - } if_no_rows { - - set f_name "" - set f_description "" - set f_sender "" - set files "f" - - } - - set f_name_end "" - set f_description_end "" - set f_sender_end "" - set sender_name1 "" - set sender_name "" - - if { !($files eq "f") } { - set sender_name1 " " - set sender_name "" - - - for {set i 0} {$i < [llength $file]} {incr i 1} { - set f_id [lindex $file $i] - - db_1row sf { - select fs.title as file_name, fs.description as fdescription, fs.creation_user as sender - from chat_rooms_files_sent fs - where fs.send_file_id = :f_id - } - db_0or1row sf2 { - select p.first_names as sender_first_names, p.last_name as sender_last_name - from persons p - where p.person_id = :sender - } - append sender_name1 $sender_first_names " " - append sender_name $sender_name1 $sender_last_name - append f_name $file_name " | " - append f_description $fdescription " | " - append f_sender $sender_name " | " - set sender_name1 "" - set sender_name "" - } - - if { [string index $f_name [expr [string length $f_name]-2]] eq "|" } { - set inicio 0 - set final [expr [string length $f_name]-4] - set f_name_end [string range $f_name $inicio $final] - - set final [expr [string length $f_description]-4] - set f_description_end [string range $f_description $inicio $final] - - set final [expr [string length $f_sender]-4] - set f_sender_end [string range $f_sender $inicio $final] - set f_sender "" - set sender_name1 "" - set sender_name "" - } - - } - - - set trans "" - set tname "" - set tdescription "" - set tdate "" - set tname6 "" - set tname5 "" - set transcription "" - - db_foreach transcripts "select t.transcription_id as t_id from chat_transcription_rss t - where t.rss_id = :rss_id" { - - - append transcription $t_id " " - - - } if_no_rows { - - set trans "f" - } - - - - - if { !($trans eq "f") } { - - - for {set i 0} {$i < [llength $transcription]} {incr i 1} { - set t_id [lindex $transcription $i] - - db_1row sf { - select ct.pretty_name as tname1, ct.description as tdescription1,ct.date as tdate1 - from chat_transcripts ct - where ct.transcript_id = :t_id - } - if { [string index $tname1 0] eq "#" } { - - set inicio 6 - set final [expr [string length $tname1]-13] - set tname2 [string range $tname1 $inicio $final] - set tname3 [string range $tname1 [expr $final+2] [string length $tname1]] - db_1row room_info2 { - select distinct lm.message as tname4 - from lang_messages lm - where lm.message_key = :tname2 - } - set tname6 "" - set tname5 "" - append tname5 $tname4 " " - append tname6 $tname5 $tname3 - append tname $tname6 " | " - } else { - append tname $tname1 " | " - } - set tname1 "" - set transcriptname "" - - if { [string index $tdescription1 0] eq "#" } { - - set inicio 6 - set final [expr [string length $tdescription1]-2] - set tdescription2 [string range $tdescription1 $inicio $final] - - db_1row room_info11 { - select distinct lm.message as tdescription3 - from lang_messages lm - where lm.message_key = :tdescription2 - } - - append tdescription $tdescription3 " | " - - } else { - if { $tdescription eq "" } { - append tdescription "No description" " | " - } else { - append tdescription $tdescription1 " | " - } - } - set tdescription1 "" - - - - - append tdate $tdate1 " | " - } - } - set transcriptname "" - #le quito la barrita del final - if { [string index $tname [expr [string length $tname]-2]] eq "|" } { - set inicio 0 - set final [expr [string length $tname]-4] - set transcriptname [string range $tname $inicio $final] - } - set transcriptdescription "" - #le quito la barrita del final - if { [string index $tdescription [expr [string length $tdescription]-2]] eq "|" } { - set inicio 0 - set final [expr [string length $tdescription]-4] - set transcriptdescription [string range $tdescription $inicio $final] - } - set transcriptdate "" - #le quito la barrita del final - if { [string index $tdate [expr [string length $tdate]-2]] eq "|" } { - set inicio 0 - set final [expr [string length $tdate]-4] - set transcriptdate [string range $tdate $inicio $final] - } - - db_1row room_info2 { - select r.context_id as package_id - from chat_rooms r - where r.room_id = :room_id - } - - - set package_url [chat_util_get_url $package_id] - set entry_url [export_vars -base "[ad_url]${package_url}chat-transcripts?room_id=$room_id"] - - set dat "" - set dat "#chat.transcript_of_date# " - append dat [clock format [clock seconds] -format %d.%m.%Y] - - - db_1row room_info2 { - select cr.frequency1 - from chat_rooms cr - where cr.room_id = :room_id - } - if { $frequency1 eq "dayly" } { - db_1row room_info2 { - select count(ct.pretty_name) as trans - from chat_transcripts ct - where ct.pretty_name = :dat - and ct.room_id = :room_id - } - if { $trans > 0 } { - db_1row room_info2 { - select ct.transcript_id - from chat_transcripts ct - where ct.pretty_name = :dat - and ct.room_id = :room_id - } - set entry_url [export_vars -base "[ad_url]${package_url}chat-transcript?room_id=$room_id&transcript_id=$transcript_id"] - } - } - - - - - - set rss_data_stored1 [list \ - link $entry_url \ - title "$room_name $entry_timestamp" \ - description "

[_ chat.Description]: $r_description

[_ chat.room_creator]: $r_cre

[_ chat.comm_name]: $r_comm_name

[_ chat.reg_users]: $r_user_registered

[_ chat.k_words]: $keysw

[_ chat.partitipants]: $p_pants

[_ chat.files_sent]:

[_ chat.name]: $f_name_end

[_ chat.Description]: $f_description_end

[_ chat.sender]: $f_sender_end

[_ chat.transcripton]:

[_ chat.name]: $transcriptname

[_ chat.Description]: $transcriptdescription

[_ chat.date_rss2]: $transcriptdate

" \ - value $content_as_text \ - timestamp $entry_timestamp] - lappend rss_data $rss_data_stored1 - - set f_name "" - set f_name_end "" - set f_description "" - set f_description_end "" - set f_sender "" - set sender_name1 "" - set sender_name "" - set f_sender_end "" - set tname "" - set trans "" - set tdescription "" - set tdate "" - } - - return $rss_data - - # set rss [rss_creation $room_id $entry_url $content_as_text $entry_timestamp] - - # return $rss - -} - -# ad_proc rss_creation { room_id entry_url content_as_text entry_timestamp } { -# @author Pablo Mu�oz (pablomp@tid.es) -# } { -# } - -ad_proc rss_db { - room_name - room_description - end_date - r_creator - comm_name - registered_users - entry_timestamp -} { - db_exec_plsql rss_db {} - -} - -ad_proc store_partitipants_rss { - rss_id - partitipant -} { - db_exec_plsql store_partitipants_rss {} - -} - -ad_proc store_partitipants_transcript { - transcript_id - partitipant -} { - db_exec_plsql store_partitipants_transcript {} - -} - -ad_proc store_sent_files_rss { - rss_id - send_file_id -} { - db_exec_plsql store_sent_files_rss {} - -} - -ad_proc store_sent_files_tanscript { - transcript_id - f_id -} { - db_exec_plsql store_sent_files_tanscript {} - -} - -ad_proc store_keywords_rss { - rss_id - key -} { - db_exec_plsql store_keywords_rss {} - -} - -ad_proc store_transcripts_rss { - rss_id - transcription_id -} { - db_exec_plsql store_transcripts_rss {} - -}