2009-09-23 07:08:43 +00:00
< ? php
define ( 'NO_MOODLE_COOKIES' , true ); // session not used here
require ( '../../../config.php' );
require ( '../lib.php' );
$chat_sid = required_param ( 'chat_sid' , PARAM_ALPHANUM );
$chat_lasttime = optional_param ( 'chat_lasttime' , 0 , PARAM_INT );
$chat_lastrow = optional_param ( 'chat_lastrow' , 1 , PARAM_INT );
2010-01-16 15:39:56 +00:00
$url = new moodle_url ( '/mod/chat/gui_header_js/jsupdate.php' , array ( 'chat_sid' => $chat_sid ));
2009-09-23 07:08:43 +00:00
if ( $chat_lasttime !== 0 ) {
$url -> param ( 'chat_lasttime' , $chat_lasttime );
}
if ( $chat_lastrow !== 1 ) {
$url -> param ( 'chat_lastrow' , $chat_lastrow );
}
$PAGE -> set_url ( $url );
if ( ! $chatuser = $DB -> get_record ( 'chat_users' , array ( 'sid' => $chat_sid ))) {
print_error ( 'notlogged' , 'chat' );
}
//Get the minimal course
if ( ! $course = $DB -> get_record ( 'course' , array ( 'id' => $chatuser -> course ))) {
print_error ( 'invalidcourseid' );
}
//Get the user theme and enough info to be used in chat_format_message() which passes it along to
if ( ! $USER = $DB -> get_record ( 'user' , array ( 'id' => $chatuser -> userid ))) { // no optimisation here, it would break again in future!
print_error ( 'invaliduser' );
}
$USER -> description = '' ;
//Setup course, lang and theme
$PAGE -> set_course ( $course );
// force deleting of timed out users if there is a silence in room or just entering
if (( time () - $chat_lasttime ) > $CFG -> chat_old_ping ) {
// must be done before chat_get_latest_message!!!
chat_delete_old_users ();
}
if ( $message = chat_get_latest_message ( $chatuser -> chatid , $chatuser -> groupid )) {
$chat_newlasttime = $message -> timestamp ;
} else {
$chat_newlasttime = 0 ;
}
if ( $chat_lasttime == 0 ) { //display some previous messages
$chat_lasttime = time () - $CFG -> chat_old_ping ; //TO DO - any better value??
}
$timenow = time ();
2009-11-01 13:17:47 +00:00
$params = array ( 'groupid' => $chatuser -> groupid , 'chatid' => $chatuser -> chatid , 'lasttime' => $chat_lasttime );
2009-09-23 07:08:43 +00:00
$groupselect = $chatuser -> groupid ? " AND (groupid=:groupid OR groupid=0) " : " " ;
$messages = $DB -> get_records_select ( " chat_messages_current " ,
" chatid = :chatid AND timestamp > :lasttime $groupselect " , $params ,
" timestamp ASC " );
if ( $messages ) {
$num = count ( $messages );
} else {
$num = 0 ;
}
$chat_newrow = ( $chat_lastrow + $num ) % 2 ;
// no & in url, does not work in header!
$refreshurl = " { $CFG -> wwwroot } /mod/chat/gui_header_js/jsupdate.php?chat_sid= $chat_sid &chat_lasttime= $chat_newlasttime &chat_lastrow= $chat_newrow " ;
$refreshurlamp = " { $CFG -> wwwroot } /mod/chat/gui_header_js/jsupdate.php?chat_sid= $chat_sid &chat_lasttime= $chat_newlasttime &chat_lastrow= $chat_newrow " ;
header ( 'Expires: Sun, 28 Dec 1997 09:32:45 GMT' );
header ( 'Last-Modified: ' . gmdate ( 'D, d M Y H:i:s' ) . ' GMT' );
header ( 'Cache-Control: no-cache, must-revalidate' );
header ( 'Pragma: no-cache' );
header ( 'Content-Type: text/html; charset=utf-8' );
header ( " Refresh: $CFG->chat_refresh_room ; url= $refreshurl " );
/// required stylesheets
$stylesheetshtml = '' ;
2009-12-16 18:00:58 +00:00
/* foreach ( $CFG -> stylesheets as $stylesheet ) {
//TODO: MDL-21120
2009-09-23 07:08:43 +00:00
$stylesheetshtml .= '<link rel="stylesheet" type="text/css" href="' . $stylesheet . '" />' ;
2009-12-16 18:00:58 +00:00
} */
2009-09-23 07:08:43 +00:00
// use ob to be able to send Content-Length headers
// needed for Keep-Alive to work
ob_start ();
2006-04-17 21:04:19 +00:00
2003-07-07 06:44:16 +00:00
?>
2005-09-10 22:57:21 +00:00
<! DOCTYPE html PUBLIC " -//W3C//DTD XHTML 1.0 Transitional//EN " " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd " >
2005-02-03 20:39:27 +00:00
< html >
< head >
2006-11-11 17:23:20 +00:00
< meta http - equiv = " content-type " content = " text/html; charset=utf-8 " />
2005-02-03 20:39:27 +00:00
< script type = " text/javascript " >
2006-12-22 05:42:36 +00:00
//<![CDATA[
2008-10-14 08:39:55 +00:00
function safari_refresh () {
self . location . href = '<?php echo $refreshurl;?>' ;
}
var issafari = false ;
if ( window . devicePixelRatio ){
issafari = true ;
setTimeout ( 'safari_refresh()' , < ? php echo $CFG -> chat_refresh_room * 1000 ; ?> );
}
2008-06-18 03:18:22 +00:00
if ( parent . msg && parent . msg . document . getElementById ( " msgStarted " ) == null ) {
2005-02-10 19:25:42 +00:00
parent . msg . document . close ();
parent . msg . document . open ( " text/html " , " replace " );
2005-09-10 22:57:21 +00:00
parent . msg . document . write ( " <!DOCTYPE html PUBLIC \" -//W3C//DTD XHTML 1.0 Transitional//EN \" \" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd \" > " );
2005-02-10 19:25:42 +00:00
parent . msg . document . write ( " <html><head> " );
2006-11-11 17:23:20 +00:00
parent . msg . document . write ( " <meta http-equiv= \" content-type \" content= \" text/html; charset=utf-8 \" /> " );
2005-02-25 12:35:20 +00:00
parent . msg . document . write ( " <base target= \" _blank \" /> " );
2007-01-01 13:26:20 +00:00
parent . msg . document . write ( " <?php echo addslashes_js( $stylesheetshtml ) ?> " );
2006-12-22 05:42:36 +00:00
parent . msg . document . write ( " < \ /head><body class= \" mod-chat-gui_header_js course-<?php echo $chatuser->course ?> \" id= \" mod-chat-gui_header_js-jsupdate \" ><div style= \" display: none \" id= \" msgStarted \" > < \ /div> " );
2005-02-10 19:25:42 +00:00
}
2005-02-03 20:39:27 +00:00
< ? php
$beep = false ;
$refreshusers = false ;
$us = array ();
2005-09-10 22:57:21 +00:00
if (( $chat_lasttime != $chat_newlasttime ) and $messages ) {
2005-02-03 20:39:27 +00:00
foreach ( $messages as $message ) {
2005-09-10 22:57:21 +00:00
$chat_lastrow = ( $chat_lastrow + 1 ) % 2 ;
2006-04-17 21:06:28 +00:00
$formatmessage = chat_format_message ( $message , $chatuser -> course , $USER , $chat_lastrow );
2005-02-03 20:39:27 +00:00
if ( $formatmessage -> beep ) {
$beep = true ;
}
if ( $formatmessage -> refreshusers ) {
$refreshusers = true ;
}
$us [ $message -> userid ] = $timenow - $message -> timestamp ;
2008-06-18 03:18:22 +00:00
echo " if(parent.msg) " ;
2007-01-01 13:26:20 +00:00
echo " parent.msg.document.write(' " . addslashes_js ( $formatmessage -> html ) . " \\ n'); \n " ;
2003-07-07 06:44:16 +00:00
}
2005-02-03 20:39:27 +00:00
}
$chatuser -> lastping = time ();
2008-06-08 15:49:36 +00:00
$DB -> set_field ( 'chat_users' , 'lastping' , $chatuser -> lastping , array ( 'id' => $chatuser -> id ));
2005-02-03 20:39:27 +00:00
if ( $refreshusers ) {
2008-06-18 03:18:22 +00:00
?>
var link = parent . users . document . getElementById ( 'refreshLink' );
if ( link != null ) {
parent . users . location . href = link . href ;
}
< ? php
2005-02-03 20:39:27 +00:00
} else {
foreach ( $us as $uid => $lastping ) {
$min = ( int ) ( $lastping / 60 );
$sec = $lastping - ( $min * 60 );
$min = $min < 10 ? '0' . $min : $min ;
$sec = $sec < 10 ? '0' . $sec : $sec ;
$idle = $min . ':' . $sec ;
2008-06-18 03:18:22 +00:00
echo " if (parent.users && parent.users.document.getElementById('uidle { $uid } ') != null) { " .
2005-02-07 20:33:44 +00:00
" parent.users.document.getElementById('uidle { $uid } ').innerHTML = ' $idle ';} \n " ;
2005-02-03 20:39:27 +00:00
}
}
?>
2008-06-25 02:18:55 +00:00
if ( parent . input ){
var autoscroll = parent . input . document . getElementById ( 'auto' );
if ( parent . msg && autoscroll && autoscroll . checked ){
parent . msg . scroll ( 1 , 5000000 );
}
2008-06-18 04:06:11 +00:00
}
2006-12-22 05:42:36 +00:00
//]]>
2005-02-03 20:39:27 +00:00
</ script >
</ head >
< body >
< ? php
if ( $beep ) {
echo '<embed src="../beep.wav" autostart="true" hidden="true" name="beep" />' ;
}
?>
2006-12-22 05:42:36 +00:00
< a href = " <?php echo $refreshurlamp ?> " name = " refreshLink " > Refresh link </ a >
2005-02-03 20:39:27 +00:00
</ body >
</ html >
2006-04-17 21:04:19 +00:00
< ? php
// support HTTP Keep-Alive
header ( " Content-Length: " . ob_get_length () );
2008-06-18 03:18:22 +00:00
ob_end_flush ();
2006-04-17 21:04:19 +00:00
exit ;
?>