chat_get_posts db chat_room_id number_of_postsWhat it does:
Returns a Tcl list. The first element is 1 or 0, depending on whether or not there are more postings than requested (1 if there are more_p). The second element is the last NUMBER_OF_POSTS messages in a chat room, as an HTML fragment, separated by BR tagsDefined in: /web/philip/tcl/chat-defs.tcl
Source code:
set reverse_p 0
if {[ad_parameter MostRecentOnTopP chat]} {
set reverse_p 1
}
# we keep the query the same regardless of the order because in fact
# we're going to be flushing the db connection; we only want the most
# most recent N rows so we have to start at the top to hit the index and
# not suck 9000 old rows out of the db
set selection [ns_db select $db "select to_char(creation_date, 'HH24:MI:SS') as time,
nvl(msg_bowdlerized, msg) as filtered_msg, first_names, last_name, creation_user, system_note_p
from chat_msgs, users
where chat_msgs.creation_user = users.user_id
and chat_room_id = $chat_room_id
and chat_msgs.approved_p = 't'
order by creation_date desc"]
set counter 0
set chat_rows ""
while { [ns_db getrow $db $selection] } {
if { $counter >= $number_of_posts } {
# flush out the db connection and throw away the rest of the rows
ns_db flush $db
# return and tell the caller that there were more
return [list 1 $chat_rows]
}
set_variables_after_query
incr counter
set filtered_msg [link_urls [ns_quotehtml $filtered_msg]]
if { $system_note_p == "t" } {
set row "<a target=newwindow href=\"/shared/community-member?user_id=$creation_user\">$first_names $last_name</a><font color=brown>($time) $filtered_msg</font><br>\n"
} else {
set row "<a target=newwindow href=\"/shared/community-member?user_id=$creation_user\">$first_names $last_name</a> ($time) $filtered_msg<br>\n"
}
if { $reverse_p } {
append chat_rows $row
} else {
set chat_rows "$row$chat_rows"
}
}
# we got everything in the table but there aren't more to be had
return [list 0 $chat_rows]