Index: openacs-4/packages/chat/tcl/chat-ajax-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/tcl/chat-ajax-procs.tcl,v diff -u -N -r1.13 -r1.14 --- openacs-4/packages/chat/tcl/chat-ajax-procs.tcl 17 Jun 2016 17:36:11 -0000 1.13 +++ openacs-4/packages/chat/tcl/chat-ajax-procs.tcl 7 Aug 2017 23:48:07 -0000 1.14 @@ -4,12 +4,23 @@ @creation-date 2006-02-02 @author Gustaf Neumann @author Peter Alberer - @cvs-id $Id$ + @cvs-id $Id$ } namespace eval ::chat { - ::xo::ChatClass Chat -superclass ::xo::Chat + ::xo::ChatClass Chat -superclass ::xo::Chat + Chat instproc init {} { + :instvar chat_id + if {[chat_room_exists_p $chat_id]} { + chat_room_get -room_id $chat_id -array c + set :login_messages_p $c(login_messages_p) + set :logout_messages_p $c(logout_messages_p) + set :timewindow $c(messages_time_window) + } + next + } + Chat instproc render {} { my orderby time set result "" @@ -20,20 +31,23 @@ set timelong [clock format [$child time]] set timeshort [clock format [$child time] -format {[%H:%M:%S]}] set userlink [my user_link -user_id $user_id -color $color] - append result "

$timeshort" \ - "$userlink:" \ - "[my encode $msg]

\n" + append result " +

+ $timeshort + $userlink: + [my encode $msg] +

\n" } return $result } Chat proc login {-chat_id -package_id} { - auth::require_login + auth::require_login if {![info exists package_id]} { - set package_id [ad_conn package_id] + set package_id [ad_conn package_id] } if {![info exists chat_id]} { - set chat_id $package_id + set chat_id $package_id } set context "id=$chat_id&s=[ad_conn session_id].[clock seconds]" @@ -46,26 +60,24 @@ set path [lindex [site_node::get_url_from_object_id -object_id $package_id] 0] set login_url [ns_quotehtml "${path}ajax/chat?m=login&$context"] - set send_url [ns_quotehtml "${path}ajax/chat?m=add_msg&$context&msg="] + set send_url "${path}ajax/chat?m=add_msg&$context&msg=" set users_url [ns_quotehtml "${path}ajax/chat?m=get_users&$context"] set html_url [ns_quotehtml [ad_conn url]?[ad_conn query]] regsub {client=ajax} $html_url {client=html} html_url - + return "\ - -
- - @@ -77,8 +89,57 @@ #chat.message# -
+ + + " } -} + # if chat doesn't exist anymore, send a message that will inform + # the user of being looking at an invalid chat + Chat instproc check_valid_room {} { + if {![chat_room_exists_p [:chat_id]]} { + ns_return 500 text/plain "chat-errmsg: [_ chat.Room_not_found]" + ad_script_abort + } + } + + Chat instproc get_new {} { + :check_valid_room + next + } + + Chat instproc add_msg { + {-get_new:boolean true} + {-uid ""} + msg + } { + if {![chat_room_exists_p [:chat_id]]} { + return + } + + # ignore empty messages + if {$msg eq ""} return + + # code around expects the return value of the original method + set retval [next] + + # This way messages can be persisted immediately every time a + # message is sent + if {[:current_message_valid]} { + chat_message_post [:chat_id] [:user_id] $msg 1 + } + + return $retval + } +}