GIF89a;
| Direktori : /home/serb/www/chat/admin/ |
| Current File : /home/serb/www/chat/admin/chatlist.php |
<?php
require_once('init.php');
if(!inSession()) {
include('login.php');
exit;
}
else if(!inPermission('chats'))
{
$tabName = 'Chats';
include('nopermit.php');
exit;
}
//--------------------------------
// highlight page. artemK0
//--------------------------------
$bold = highlightPage(__FILE__);
$smarty->assign($bold[0], $bold[1]);
ChatServer::prepare();
$cms = $GLOBALS['fc_config']['cms'];
$cmsclass = strtolower(get_class($cms));
$manageUsers = ($cmsclass == 'defaultcms') || ($cmsclass == 'statelesscms' && (! isset($cms->constArr)));
if(!$manageUsers)
{
$smarty->assign('manageUsers',true);
$smarty->display('chatlist.tpl');
exit;
}
if(!isset($_REQUEST['roomid']) || isset($_REQUEST['clear'])) $_REQUEST['roomid'] = 0;
if(!isset($_REQUEST['initiatorid']) || isset($_REQUEST['clear'])) $_REQUEST['initiatorid'] = 0;
if(!isset($_REQUEST['moderatorid']) || isset($_REQUEST['clear'])) $_REQUEST['moderatorid'] = 0;
if(!isset($_REQUEST['days']) || isset($_REQUEST['clear'])) $_REQUEST['days'] = '';
if(!isset($_REQUEST['sort']) || isset($_REQUEST['clear'])) $_REQUEST['sort'] = 'none';
if(!isset($_REQUEST['msg2show']) || isset($_REQUEST['clear'])) $_REQUEST['msg2show'] = 10;
function str2timestamp($str)
{
return $parts = str_replace(array(' ',':','-'),'',$str);
}
function getEnters()
{
$query = 'SELECT `userid`, `roomid`, `command`, `created`, `toconnid` '.
'FROM `'.$GLOBALS['fc_config']['db']['pref'].'messages` '.
'WHERE ( `roomid` IS NULL OR `roomid` IN (SELECT `id` FROM `flashchat_rooms`)) '.
'AND ( `created` >= "'.date('Y-m-d G:i:s', 0).'" AND `created` <= "'.date('Y-m-d G:i:s', time() + 60).'" ) AND `command` IN ("adu", "rmu", "mvu") AND `toconnid` IS NULL ORDER BY `created`';
$statement = new Statement($query, 174);
$result_enters = $statement->process();
$enters = array();
while($row = $result_enters->next())
{
$uid = $row['userid'];
if($row['command'] == 'rmu')
{
foreach($enters as $roomid => $rooms)
{
foreach($rooms as $u_id => $sessions)
{
foreach($sessions as $k => $v)
{
if(isset($k) && $u_id == $uid)
{
$enters[$roomid][$u_id][$row['created']] = '0';
}
}
}
}
}
elseif($row['command'] == 'mvu')
{
foreach($enters as $roomid => $rooms)
{
foreach($rooms as $u_id => $sessions)
{
foreach($sessions as $k => $v)
{
if(isset($k) && $u_id == $uid)
{
$enters[$roomid][$u_id][$row['created']] = '#'.$row['userid'];
$enters[$row['roomid']][$u_id][$row['created']] = '1';
}
}
}
}
}
if($row['command'] == 'adu')
{
$enters[$row['roomid']][$uid][$row['created']] = '1';
}
}
return $enters;
}
function getMessages($start, $end, $roomid)
{
global $_REQUEST, $GLOBALS;
if($end == 0) $end = date('Y-m-d G:i:s', time());
$query = 'SELECT `roomid`, `userid`, `txt`, `command`, `created`, '.$GLOBALS['fc_config']['db']['pref'].'users.login '.
'FROM `'.$GLOBALS['fc_config']['db']['pref'].'messages` LEFT JOIN `'.$GLOBALS['fc_config']['db']['pref'].'users` ON ('.$GLOBALS['fc_config']['db']['pref'].'messages.userid = '.$GLOBALS['fc_config']['db']['pref'].'users.id) '.
'WHERE ((`roomid` = ? AND `command` IN ("msg", "adu") AND (`created` >= ? AND `created` <= ?)) OR (`roomid` IS NULL AND `command` = "rmu") AND (`created` >= ? AND `created` <= ?))';
$statement = new Statement($query, 173);
$result = $statement->process($roomid, $start, $end, $start, $end, $roomid);
$res = array();
$j = 0;
$enters = getEnters();
while($row = $result->next())
{
if($row['command'] == 'msg')
{
$res[$j]['name'] = $row['login'];
$res[$j]['txt'] = $row['txt'];
}
if(isset($enters[$roomid][$row['userid']][$row['created']]))
{
if($enters[$roomid][$row['userid']][$row['created']] == '1')
{
$res[$j]['name'] = $row['login'];
$res[$j]['txt'] = 'logged in';
}
elseif($enters[$roomid][$row['userid']][$row['created']] == '0')
{
$res[$j]['name'] = $row['login'];
$res[$j]['txt'] = 'logged out';
}
elseif(substr($enters[$roomid][$row['userid']][$row['created']], 0, 1) == '#')
{
$initid = substr($enters[$roomid][$row['userid']][$row['created']], 1);
if($row['created'] <= $start && $row['created'] <= $end)
{
$res[$j]['name'] = $row['login'];
$res[$j]['txt'] = $initid;
}
}
}
$j++;
if(count($res) >= $_REQUEST['msg2show'])
{
return $res;
}
}
return $res;
}
$urs = ChatServer::getUsers();
$user_array = array();
if(is_array($urs))
{
foreach($urs as $k => $rec)
{
$user_array[$k] = $rec;
}
}
else
{
while($rec = $urs->next())
{
$user_array[] = $rec;
}
}
if($GLOBALS['fc_config']['enableBots'])
{
$GLOBALS['fc_config']['bot']->getUsersIntoArray($user_array);
}
$stmt = new Statement('SELECT * FROM '.$GLOBALS['fc_config']['db']['pref'].'rooms', 55);
$result = $stmt->process();
$rooms_filter = array();
while($row = $result->next())
{
$rooms_filter[$row['id']] = $row['name'];
}
$query = 'SELECT `created`, `roomid`, `userid` FROM `'.$GLOBALS['fc_config']['db']['pref'].'messages` WHERE `roomid` IN ( SELECT `id` FROM `'.$GLOBALS['fc_config']['db']['pref'].'rooms` ) AND (`command`="adu" OR `command`="mvu") AND `toconnid` IS NULL';
$sttest = new Statement($query, 171);
$result = $sttest->process();
if($result->numRows != 0)
{
while($row = $result->next())
{
$opened_rooms[$row['created']] = $row;
foreach($opened_rooms as $k => $v)
{
if($v['userid'] == $row['userid']) $opened_rooms[$row['created']]['limit']++;
}
$query = 'SELECT `created`, `userid` FROM `'.$GLOBALS['fc_config']['db']['pref'].'messages` WHERE `userid`=? AND (`command`="rmu" OR `command`="mvu") LIMIT '.($opened_rooms[$row['created']]['limit'] - 1).', 1';
$sttest = new Statement($query, 172);
$result_exit = $sttest->process($row['userid'], $opened_rooms[$row['created']]['limit'] - 1);
while($row_exit = $result_exit->next())
{
if($row_exit['userid'] == $row['userid'] && strtotime($row_exit['created']) >= strtotime($row['created']))
{
$opened_rooms[$row['created']] ['exit'] = $row_exit['created'];
}
}
}
$rooms = array();
$max_date = mktime(0, 0, 0, 1, 1, 2010);
foreach($opened_rooms as $k => $v)
{
$rooms[$v['roomid']][$v['created']][$v['userid']] = '1';
if(!isset($v['exit']))
{
$max_date = $max_date - 60;
$v['exit'] = date('Y-m-d G:i:s', $max_date);
}
$rooms[$v['roomid']][$v['exit']][$v['userid']] = '0';
}
$final_rooms = array();
$i = 0;
$j = 0;
$tmp = array();
foreach($rooms as $roomid => $v)
{
$tmp []= $roomid;
}
foreach($tmp as $k => $v)
{
ksort($rooms[$v]);
}
if(!isset($_REQUEST['from']) || isset($_REQUEST['clear']))
{
reset($opened_rooms);
$_REQUEST['from'] = key($opened_rooms);
}
if(!isset($_REQUEST['to']) || isset($_REQUEST['clear']))
{
$_REQUEST['to'] = date('Y-m-d G:i:s', time());
}
foreach($rooms as $roomid => $enters)
{
foreach($enters as $times => $uid)
{
if($i == 0)
{
$final_rooms[$roomid][$j]['initiatorid'] = key($uid);
$final_rooms[$roomid][$j]['start'] = $times;
}
if($uid[key($uid)] == '1')
{
$i++;
}
elseif($uid[key($uid)] == '0')
{
$i--;
if($i == 0)
{
$final_rooms[$roomid][$j]['end'] = $times;
$j++;
}
}
}
}
$initiators = array();
$moderators = array();
$dispchats = array();
$j = 0;
$rooms_filter = array_flip($rooms_filter);
foreach($final_rooms as $roomid => $values)
{
if($_REQUEST['roomid'] == 0 || $_REQUEST['roomid'] == $roomid)
{
foreach($values as $key => $val)
{
if(strtotime($val['end']) >= $max_date)
{
$val['end'] = 0;
}
if(strtotime($_REQUEST['from']) <= strtotime($val['start']) && strtotime($val['end']) <= strtotime($_REQUEST['to']))
{
if($_REQUEST['initiatorid'] == 0 || $_REQUEST['initiatorid'] == $val['initiatorid'])
{
if($_REQUEST['moderatorid'] == 0)
{
foreach($user_array as $k => $v)
{
if($val['initiatorid'] == $v['id'])
{
$dispchats [$j]['initiatorlogin'] = $v['login'];
if($v['roles'] == ROLE_ADMIN || $v['roles'] == ROLE_MODERATOR)
{
$dispchats [$j]['moderatorid'] = $v['id'];
$dispchats [$j]['moderatorlogin'] = $v['login'];
}
}
}
$dispchats [$j]['start'] = $val['start'];
$dispchats [$j]['initiatorid'] = $val['initiatorid'];
$dispchats [$j]['roomid'] = $roomid;
$dispchats [$j]['roomname'] = array_search($roomid, $rooms_filter);
if($val['end'] == 0)
{
$dispchats [$j]['end'] = 'in progress...';
}
else
{
$dispchats [$j]['end'] = $val['end'];
}
$dispchats [$j]['messages'] = getMessages($val['start'], $val['end'], $roomid);
}
else
{
$t = false;
foreach($user_array as $k => $v)
{
if($val['initiatorid'] == $v['id'])
{
if($v['roles'] == ROLE_ADMIN || $v['roles'] == ROLE_MODERATOR)
{
if($_REQUEST['moderatorid'] == $v['id'])
{
$dispchats [$j]['moderatorid'] = $v['id'];
$dispchats [$j]['moderatorlogin'] = $v['login'];
$t = true;
}
}
if($t) $dispchats [$j]['initiatorlogin'] = $v['login'];
}
}
if($t) $dispchats [$j]['start'] = $val['start'];
if($t) $dispchats [$j]['initiatorid'] = $val['initiatorid'];
if($t) $dispchats [$j]['roomid'] = $roomid;
if($t) $dispchats [$j]['roomname'] = array_search($roomid, $rooms_filter);
if($val['end'] == 0)
{
if($t) $dispchats [$j]['end'] = 'in progress...';
}
else
{
if($t) $dispchats [$j]['end'] = $val['end'];
}
if($t) $dispchats [$j]['messages'] = getMessages($val['start'], $val['end'], $roomid);
}
$j++;
}
foreach($user_array as $k => $v)
{
if($val['initiatorid'] == $v['id'])
{
$initiators[$v['id']] = $v['login'];
if($v['roles'] == ROLE_ADMIN || $v['roles'] == ROLE_MODERATOR)
{
$moderators[$v['id']] = $v['login'];
}
}
}
}
}
}
}
$rooms_filter = array_flip($rooms_filter);
if ($_REQUEST['sort'] != 'none')
{
sort_table($_REQUEST['sort'], $dispchats);
}
}
else
{
$_REQUEST['from'] = date('Y-m-d G:i:s', time() - 86400);
$_REQUEST['to'] = date('Y-m-d G:i:s', time());
}
$query = 'SELECT `txt`, `created`, '.$GLOBALS['fc_config']['db']['pref'].'users.login, `touserid` '.
'FROM `'.$GLOBALS['fc_config']['db']['pref'].'messages` LEFT JOIN `'.$GLOBALS['fc_config']['db']['pref'].'users` ON ('.$GLOBALS['fc_config']['db']['pref'].'messages.userid = '.$GLOBALS['fc_config']['db']['pref'].'users.id) '.
'WHERE `roomid` IS NULL AND `command` = "msg" ORDER BY `created`';
$statement = new Statement($query, 175);
$result = $statement->process();
$private_messages = array();
while($row = $result->next())
{
$row['touserid'] = $user_array[$row['touserid']]['login'];
$private_messages []= $row;
}
//Assign Smarty variables and load the admin template
$smarty->assign('rooms', $rooms_filter);
$smarty->assign('moderators',$moderators);
$smarty->assign('initiators',$initiators);
$smarty->assign('chats',$dispchats);
$smarty->assign('private',$private_messages);
$smarty->assign('langs', $GLOBALS['fc_config']['languages_admin'][$_COOKIE['language']]['chatlist.tpl']);
$smarty->display('chatlist.tpl');
?>