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.4 -r1.5
--- openacs-4/packages/chat/tcl/chat-procs.tcl 11 Dec 2003 21:40:00 -0000 1.4
+++ openacs-4/packages/chat/tcl/chat-procs.tcl 14 Mar 2006 12:16:09 -0000 1.5
@@ -10,7 +10,7 @@
ad_proc -private chat_start_server {} { Start Java chat server. } {
if [nsv_get chat server_started] {
- return
+ return
}
ns_log notice "chat_start_server: Starting chat server"
set port [ad_parameter ServerPort]
@@ -23,11 +23,11 @@
# Wait until chat server started before spawning new threads connecting to the server.
while { $done == 0} {
- if [catch {set fds [ns_sockopen -nonblock $host_location $port]} errmsg] {
- set done 0
- } else {
- set done 1
- }
+ if [catch {set fds [ns_sockopen -nonblock $host_location $port]} errmsg] {
+ set done 0
+ } else {
+ set done 1
+ }
}
# Free up resources.
@@ -43,28 +43,30 @@
nsv_set chat server_started 1
}
-ad_proc -private chat_broadcast_to_applets {host port} { Broadcast chat message from HTML client to Java server. } {
+ad_proc -private chat_broadcast_to_applets {host port} { Broadcast chat message from HTML client to Java server. } {
# Chat server must already started otherwise error will occur.
set fds [ns_sockopen -nonblock $host $port]
set r [lindex $fds 0]
set w [lindex $fds 1]
- ns_log debug "chat_broadcast_to_applets: Ready to broadcast message to applets."
+ ns_log Notice "chat_broadcast_to_applets: Ready to broadcast message to applets."
+ ns_log Notice $host
+ ns_log Notice $port
# Register to java chat server.
puts $w "-1AOL_WRITERT-1"
flush $w
while { 1 } {
- # Wait until there is new message in queue.
- ns_mutex lock [nsv_get chat new_message]
- if [nsv_exists chat html_message] {
- # Get message from queue.
- puts $w [nsv_get chat html_message]
- flush $w
- }
+ # Wait until there is new message in queue.
+ ns_mutex lock [nsv_get chat new_message]
+ if [nsv_exists chat html_message] {
+ # Get message from queue.
+ puts $w [nsv_get chat html_message]
+ flush $w
+ }
}
}
@@ -77,36 +79,40 @@
set w [lindex $fds 1]
set r_fd [list $r]
- ns_log debug "chat_receive_from_server: Listening for messages from applets."
+ ns_log Notice "chat_receive_from_server: Listening for messages from applets."
puts $w "-1AOL_READERT-1"
flush $w
set running 1
while { $running } {
- set sel [ns_sockselect $r_fd {} {}]
- set rfds [lindex $sel 0]
+ set sel [ns_sockselect $r_fd {} {}]
+ set rfds [lindex $sel 0]
- foreach r $rfds {
+ foreach r $rfds {
- if {[ns_sockcheck $r] && [set line [string trim [gets $r]]] != ""} {
- regexp "(.*)" $line match room_id
- regexp "(.*)" $line match screen_name
- regexp "
(.*)" $line match msg
- regexp "(.*)" $line match user_id
- if ![nsv_exists chat_room $room_id] {
- nsv_set chat_room $room_id {}
- }
- 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
+ if {[ns_sockcheck $r] && [set line [string trim [gets $r]]] != ""} {
+
+ regexp "(.*)" $line match room_id
+ regexp "(.*)" $line match screen_name
+ regexp "(.*)" $line match msg
+ regexp "(.*)" $line match user_id
+ if ![nsv_exists chat_room $room_id] {
+ nsv_set chat_room $room_id {}
+ }
- } else {
- set running 0
- }
- }
+
+ 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
+
+ } else {
+ set running 0
+ }
+ }
}
}
@@ -118,16 +124,8 @@
} {
Log chat message to the database.
} {
- db_dml post_message {
- begin
- chat_room.message_post (
- room_id => :room_id,
- msg => :msg,
- creation_user => :creation_user,
- creation_ip => :creation_ip
- );
- end;
- }
+ ns_log Notice $msg
+ db_exec_plsql post_message {}
}
ad_proc -public chat_room_new {
@@ -143,31 +141,13 @@
} {
Create new chat room. Return room_id if successful else raise error.
} {
+
db_transaction {
- set room_id [db_exec_plsql create_room {
- begin
- :1 := chat_room.new (
- pretty_name => :pretty_name,
- moderated_p => :moderated_p,
- description => :description,
- active_p => :active_p,
- archive_p => :archive_p,
- context_id => :context_id,
- creation_user => :creation_user,
- creation_ip => :creation_ip
- );
- -- Automatic grant room privilege to creator of the room (must not be null).
- if :creation_user <> ''
- then
- acs_permission.grant_permission(:1, :creation_user, 'chat_room_edit');
- acs_permission.grant_permission(:1, :creation_user, 'chat_room_view');
- acs_permission.grant_permission(:1, :creation_user, 'chat_room_delete');
- acs_permission.grant_permission(:1, :creation_user, 'chat_transcript_create');
- end if;
- end;
- }]
+ set room_id [db_exec_plsql create_room {}]
}
+ db_exec_plsql grant_permission {}
+
return $room_id
}
@@ -181,66 +161,52 @@
} {
Edit information on chat room. All information require.
} {
- return [db_exec_plsql edit_room {
- begin
- chat_room.edit (
- room_id => :room_id,
- pretty_name => :pretty_name,
- description => :description,
- moderated_p => :moderated_p,
- active_p => :active_p,
- archive_p => :archive_p
- );
- end;
- }]
+ db_exec_plsql edit_room {}
}
ad_proc -public chat_room_delete {
room_id
} {
Delete chat room.
} {
- db_exec_plsql delete_room {
- begin
- chat_room.del(:room_id);
- end;
- }
+ db_exec_plsql delete_room {}
}
ad_proc -public chat_room_message_delete {
room_id
} {
Delete all message in the room.
} {
- db_exec_plsql delete_message {
- begin
- chat_room.delete_all_msgs(:room_id);
- end;
- }
+ db_exec_plsql delete_message {}
}
ad_proc -public chat_message_count {
room_id
} {
Get message count in the room.
} {
- return [db_exec_plsql message_count {
- begin
- :1 := chat_room.message_count(:room_id);
- end;
- }]
+
+ return [db_exec_plsql message_count {}]
}
+
+
+ad_proc -public room_active_status {
+ room_id
+} {
+ Get room active status.
+} {
+
+ return [db_string get_active { select active_p from chat_rooms where room_id = :room_id}]
+
+}
+
ad_proc -public chat_room_name {
room_id
} {
Get chat room name.
} {
- return [db_exec_plsql get_room_name {
- begin
- :1 := chat_room.name(:room_id);
- end;
- }]
+ return [db_string get_room_name {} -default "" ]
}
@@ -250,11 +216,7 @@
} {
Grant party a chat moderate privilege to this chat room.
} {
- db_dml grant_moderator {
- begin
- acs_permission.grant_permission(:room_id, :party_id, 'chat_room_moderate');
- end;
- }
+ db_exec_plsql grant_moderator {}
}
ad_proc -public chat_moderator_revoke {
@@ -264,11 +226,7 @@
Revoke party a chat moderate privilege to this chat room.
} {
- db_dml revoke_moderator {
- begin
- acs_permission.revoke_permission(:room_id, :party_id, 'chat_room_moderate');
- end;
- }
+ db_exec_plsql revoke_moderator {}
}
@@ -279,12 +237,7 @@
Grant party a chat privilege to this chat room.
} {
db_transaction {
- db_dml grant_user {
- begin
- acs_permission.grant_permission(:room_id, :party_id, 'chat_write');
- acs_permission.grant_permission(:room_id, :party_id, 'chat_read');
- end;
- }
+ db_exec_plsql grant_user {}
}
}
@@ -296,12 +249,7 @@
Revoke party a chat privilege to this chat room.
} {
db_transaction {
- db_dml revoke_user {
- begin
- acs_permission.revoke_permission(:room_id, :party_id, 'chat_write');
- acs_permission.revoke_permission(:room_id, :party_id, 'chat_read');
- end;
- }
+ db_exec_plsql revoke_user {}
}
}
@@ -311,11 +259,7 @@
} {
Explicit ban user from this chat room.
} {
- db_dml ban_user {
- begin
- acs_permission.grant_permission(:room_id, :party_id, 'chat_ban');
- end;
- }
+ db_exec_plsql ban_user {}
}
@@ -325,11 +269,7 @@
} {
unban user from this chat room.
} {
- db_dml ban_user {
- begin
- acs_permission.revoke_permission(:room_id, :party_id, 'chat_ban');
- end;
- }
+ db_exec_plsql ban_user {}
}
ad_proc -public chat_revoke_moderators {
@@ -339,11 +279,11 @@
Revoke a list of parties of a moderate privilege from this room.
} {
foreach party_id $revoke_list {
- db_dml revoke_moderate {
- begin
- acs_persmission.revoke_permission(:room_id, :party_id, 'chat_moderate_room');
- end
- }
+ db_dml revoke_moderate {
+ begin
+ acs_persmission.revoke_permission(:room_id, :party_id, 'chat_moderate_room');
+ end
+ }
}
}
@@ -354,9 +294,9 @@
Return the moderate status of this chat room.
} {
set moderate_p [db_string get_chat_room_moderate {
- select moderated_p
- from chat_rooms
- where room_id = :room_id
+ select moderated_p
+ from chat_rooms
+ where room_id = :room_id
}]
return $moderate_p
@@ -368,12 +308,9 @@
} {
Return display name of this user to use in chat.
} {
- return [db_exec_plsql get_chat_user_name {
- begin
- :1 := person.name(:user_id);
- end;
- }]
+ return [db_exec_plsql get_chat_user_name {}]
+
}
ad_proc -public chat_message_post {
@@ -385,16 +322,17 @@
Post message to the chat room and broadcast to all applet clients. Only use by HTML client.
} {
if {$moderator_p == "1" } {
- set status "approved"
+ set status "approved"
} else {
- set status "pending"
+ set status "pending"
}
set chat_msg "[chat_user_name $user_id]$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]
+
}
@@ -425,8 +363,8 @@
# 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] {
- nsv_set chat_room $room_id [list "[chat_user_name $user_id]$room_idhas entered the roomapproved"]
- }
+ nsv_set chat_room $room_id [list "[chat_user_name $user_id]$room_id[_ chat.has_entered_the_room]approved"]
+ }
set user_name [chat_user_name $user_id]
@@ -441,26 +379,26 @@
#foreach msg $chat_messages
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
+ set msg [lindex $chat_messages $i]
+ regexp "(.*)" $msg match screen_name
+ regexp "(.*)" $msg match chat_msg
+ regexp "(.*)" $msg match status
- if {$status == "pending" || $status == "rejected"} {
- continue;
- }
+ if {$status == "pending" || $status == "rejected"} {
+ continue;
+ }
- upvar "$msgs:[expr {$counter + 1}]" array_val
+ upvar "$msgs:[expr {$counter + 1}]" array_val
- set array_val(screen_name) $screen_name
- set array_val(chat_msg) $chat_msg
- incr counter
- set array_val(rownum) $counter
+ set array_val(screen_name) $screen_name
+ set array_val(chat_msg) $chat_msg
+ incr counter
+ set array_val(rownum) $counter
- if {$screen_name == $user_name && $chat_msg == "has entered the room."} {
- return
- }
+ if {$screen_name == $user_name && $chat_msg == "has entered the room."} {
+ return
+ }
}
}
@@ -479,34 +417,17 @@
} {
db_transaction {
- set transcript_id [db_exec_plsql create_transcript {
- begin
- :1 := chat_transcript.new (
- pretty_name => :pretty_name,
- contents => empty_clob(),
- description => :description,
- room_id => :room_id,
- context_id => :context_id,
- creation_user => :creation_user,
- creation_ip => :creation_ip
- );
- -- Automatic grant transcript privilege to creator of the transcript (must not be null).
- if :creation_user is not null
- then
- acs_permission.grant_permission(:1, :creation_user, 'chat_transcript_edit');
- acs_permission.grant_permission(:1, :creation_user, 'chat_transcript_view');
- acs_permission.grant_permission(:1, :creation_user, 'chat_transcript_delete');
- end if;
- end;
- }]
- db_dml transcript_content {
- update chat_transcripts
- set contents = empty_clob()
- where transcript_id = :transcript_id
- returning contents into :1
- } -clobs [list $contents]
- } on_error {
- ad_return_complaint 1 "Insert fail: $errmsg"
+ set transcript_id [db_exec_plsql create_transcript {}]
+ db_exec_plsql grant_permission {}
+#
+# db_dml transcript_content {
+# update chat_transcripts
+# set contents = empty_clob()
+# where transcript_id = :transcript_id
+# returning contents into :1
+# } -clobs [list $contents]
+# } on_error {
+# ad_return_complaint 1 "Insert fail: $errmsg"
}
return $transcript_id
@@ -518,11 +439,7 @@
} {
Delete chat transcript.
} {
- db_exec_plsql delete_transcript {
- begin
- chat_transcript.del(:transcript_id);
- end;
- }
+ db_exec_plsql delete_transcript {}
}
ad_proc -public chat_transcript_edit {
@@ -534,23 +451,17 @@
Edit chat transcript.
} {
db_transaction {
- db_exec_plsql edit_transcript {
- begin
- chat_transcript.edit(
- transcript_id => :transcript_id,
- pretty_name => :pretty_name,
- contents => :empty_clob(),
- description => :description);
- end;
- }
- db_dml transcript_content {
- update chat_transcripts
- set contents = empty_clob()
- where transcript_id = :transcript_id
- returning contents into :1
- } -clobs [list $contents]
+ db_exec_plsql edit_transcript {
+
+ }
+ #db_dml transcript_content {
+ # update chat_transcripts
+ # set contents = empty_clob()
+ # where transcript_id = :transcript_id
+ # returning contents into :1
+ #} -clobs [list $contents]
}
-
+
}