GIF89a;
| Direktori : /home/serb/public_html/freichat/server/ |
| Current File : /home/serb/public_html/freichat/server/freichat.php |
<?php
if (!isset($_REQUEST['freimode']))
exit;
if (get_magic_quotes_gpc()) {
$process = array(&$_GET, &$_POST, &$_COOKIE, &$_REQUEST);
while (list($key, $val) = each($process)) {
foreach ($val as $k => $v) {
unset($process[$key][$k]);
if (is_array($v)) {
$process[$key][stripslashes($k)] = $v;
$process[] = &$process[$key][stripslashes($k)];
} else {
$process[$key][stripslashes($k)] = stripslashes($v);
}
}
}
unset($process);
}
session_start();
error_reporting(-1);
require '../arg.php';
$video_req = array("video", "create_video_session", "get_video_offers", "get_video_details", "video_req", "gen_room_id",
"get_video", "post_video");
$arr = array("post", "post_video", "video", "create_video_session", "update_status",
"create_chatroom", "delete_chatroom", "validate_chatroom_password", "creategroupchat", "add_participant_to_groupchat");
if (in_array($_REQUEST['freimode'], $arr)) {
$id = $_POST['id'];
if (isset($_SESSION[$uid . "is_xc"]) && $_SESSION[$uid . "is_xc"] == true) {
$_POST['xhash'] = md5($id . $uid);
}
$xhash = $_POST['xhash'];
} else {
$id = $_GET['id'];
if (isset($_SESSION[$uid . "is_xc"]) && $_SESSION[$uid . "is_xc"] == true) {
$_GET['xhash'] = md5($id . $uid);
}
$xhash = $_GET['xhash'];
}
if (md5($id . $uid) != $xhash) {
//$_SESSION[$uid . 'usr_ses_id'] = 0; some problem ??
echo 'invalid install uid';
$_GET['id'] = 0;
$_GET['first'] = 'false';
exit;
}
class freichat_data {
}
class Conn extends FreiChat {
public $userdata;
public $messages = array();
public $chatroom_raw_mesgs = array();
public $isset_video_offer = false;
public $is_mobile;
public function __construct() {
parent::__construct();
$this->init_vars();
$this->last_mesg_time = 0;
require_once RDIR . '/server/drivers/' . $this->driver . '.php';
$this->set_vars();
}
//-------------------------------------------------------------------------
public function set_vars() {
$this->url = str_replace('server/freichat.php', '', $this->url);
$this->frm_id = $_SESSION[$this->uid . 'usr_ses_id'];
$_SESSION[$this->uid . 'usr_name'] = str_replace("amp;", "", $_SESSION[$this->uid . 'usr_name']);
$this->frm_name = $_SESSION[$this->uid . 'usr_name'];
if (isset($_GET['mobile'])) {
$this->is_mobile = (int) $_GET['mobile'];
} else {
$this->is_mobile = 0;
}
if ($this->is_mobile == 1) {
$this->show_videochat_plugin = 'disabled';
}
if ($this->debug == true) {
error_reporting(-1);
}
}
//-----------------------------------s--------------------------------------
private function inc_cls() {
if ($this->show_chatroom_plugin == 'enabled') {
require 'plugins/chatroom/chatroom.php';
$this->chatroom = new chatroom();
}
if ($this->show_videochat_plugin == 'enabled') {
require 'plugins/video/video.php';
$this->video = new video();
}
}
//-------------------------------------------------------------------------
public function bigintval($value) {
$value = trim($value);
if (ctype_digit($value)) {
return $value;
}
$value = preg_replace("/[^0-9](.*)$/", '', $value);
if (ctype_digit($value)) {
return $value;
}
return 0;
}
//-------------------------------------------------------
public function msubstr($str, $from, $len) {
return preg_replace('#^(?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,' . $from . '}' .
'((?:[\x00-\x7F]|[\xC0-\xFF][\x80-\xBF]+){0,' . $len . '}).*#s', '$1', $str);
}
//-------------------------------------------------------
public function json_encode($a = false) {
if (!function_exists('json_encode')) {
if (is_null($a))
return 'null';
if ($a === false)
return 'false';
if ($a === true)
return 'true';
if (is_scalar($a)) {
if (is_float($a)) {
// Always use "." for floats.
return floatval(str_replace(",", ".", strval($a)));
}
if (is_string($a)) {
static $jsonReplaces = array(array("\\", "/", "\n", "\t", "\r", "\b", "\f", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"'));
return '"' . str_replace($jsonReplaces[0], $jsonReplaces[1], $a) . '"';
} else
return $a;
}
$isList = true;
for ($i = 0, reset($a); $i < count($a); $i++, next($a)) {
if (key($a) !== $i) {
$isList = false;
break;
}
}
$result = array();
if ($isList) {
foreach ($a as $v)
$result[] = json_encode($v);
return '[' . join(',', $result) . ']';
} else {
foreach ($a as $k => $v)
$result[] = json_encode($k) . ':' . json_encode($v);
return '{' . join(',', $result) . '}';
}
}
}
//----------------------------------------------------------------------
public function check_perms() {
if (($this->show_name == 'buddy' || $this->show_name == 'user') && $_SESSION[$this->uid . 'is_guest'] == 1) {
$status = "guesthasnopermissions";
} else if ($this->show_name == 'guest' && $_SESSION[$this->uid . 'is_guest'] == 1) {
$status = "guesthaspermissions";
} else if (($this->show_name == 'buddy' || $this->show_name == 'user' || $this->show_name == 'guest') && $_SESSION[$this->uid . 'is_guest'] == 0) {
$status = "userloggedin";
} else {
$this->freichat_debug('Something seems to be wrong in ' . RDIR . '/server/freichat.php (get_members)');
}
return $status;
}
//----------------------------------------------------------------------
public function get_statusimg_url($status, $onlineimg, $busyimg) {
$img_url = '';
if ($status == 1 || $status == 4) {
$status = "online";
$img_url = $this->url . 'client/themes/' . $this->color . '/' . $onlineimg;
} else if ($status == 3) {
$status = "busy";
$img_url = $this->url . 'client/themes/' . $this->color . '/' . $busyimg;
} else {
/* User should be offline or invisible */
$img_url = $this->url . 'client/themes/' . $this->color . '/images/offlineimg.png';
}
return $img_url;
}
//-------------------------------------------------------------------
protected function lim_top($lim) {
//if only the standards provided the limits
//limit -> mysql,postgresql,sqlite
//top -> mssql
if ($this->pdo_driver == "sqlsrv") {
return array(" TOP $lim ", " ");
} else {
return array(" ", " LIMIT $lim ");
}
}
//----------------------------------------------------------------------
/* public function delete_messages() {
if (isset($_SESSION[$this->uid . 'delay'])) {
if ($_SESSION[$this->uid . 'delay'] > 50) {
$_SESSION[$this->uid . 'delay'] = 0;
*
* NOTE: if you want to use this func. keep in mind the **microtime**
$delete_mesg_query = "DELETE FROM frei_chat WHERE recd =1 AND sent < $this->mysql_now-" . $this->time;
$this->db->query($delete_mesg_query);
} else {
$_SESSION[$this->uid . 'delay'] = $_SESSION[$this->uid . 'delay'] + 5;
}
} else {
$_SESSION[$this->uid . 'delay'] = 0;
}
}
*/
//----------------------------------------------------------------------
public function update_messages($active_room) {
if ($active_room != -1) {
$active_room = "OR room_id=" . $active_room;
} else {
$active_room = "";
}
$update_mesg_query = "UPDATE frei_chat set recd = 1 WHERE (frei_chat.\"to\" = " . $this->frm_id . " $active_room) AND recd = 0";
$this->db->query($update_mesg_query);
}
//----------------------------------------------------------------------
public function get_last_message_time($get_mesg, $time) {
if ($get_mesg != null) {
$end_mesg = end($get_mesg);
$time = ($this->last_mesg_time > $end_mesg['time']) ? $this->last_mesg_time : $end_mesg['time'];
}
//echo $time;
if ($time == 0) {
$time = time() . str_replace(" ", "", microtime());
return $time;
}
return $time;
}
//----------------------------------------------------------------------
public function call_driver($options) {
$update_usr_info = false;
if ($_SESSION[$this->uid . 'custom_mesg'] != $options['custom_mesg'] || $_SESSION[$this->uid . 'in_room'] != $options['in_room']) {
$update_usr_info = true;
}
if (isset($options['custom_gst_name'])) {
if ($_SESSION[$this->uid . 'usr_name'] != $options['custom_gst_name'] && $_SESSION[$this->uid . 'is_guest'] == 1) {
$_SESSION[$this->uid . 'usr_name'] = $options['custom_gst_name'];
$_SESSION[$this->uid . 'gst_nam'] = $_SESSION[$this->uid . 'usr_name'];
$update_usr_info = true;
}
}
$sessions = new $this->driver($this->db);
$sessions->uid = $this->uid;
$sessions->permanent_name = $this->permanent_name;
$sessions->permanent_id = $this->permanent_id;
$sessions->online_time = $this->online_time;
$sessions->online_time2 = $this->online_time2;
$sessions->time_string = $this->time_string;
$sessions->show_name = $this->show_name;
$sessions->options = $options;
$sessions->usr_list_wanted = $options['usr_list_wanted'];
$sessions->db_prefix = $this->db_prefix;
$sessions->displayname = $this->displayname;
$sessions->frei_trans = $this->frei_trans;
$sessions->debug = $this->debug;
$sessions->update_usr_info = $update_usr_info;
$sessions->url = $this->url;
$sessions->driver = $this->driver;
$sessions->to_freichat_path = $this->to_freichat_path;
$sessions->long_polling = $this->long_polling;
$sessions->sef_link_profile = $this->sef_link_profile;
$sessions->ug_ids = $this->ug_ids;
$sessions->avatar_field_name = $this->avatar_field_name;
$sessions->row_username = $this->row_username;
$sessions->row_userid = $this->row_userid;
$sessions->usertable = $this->usertable;
$sessions->use_cookie = $this->use_cookie;
$sessions->pdo_driver = $this->pdo_driver;
return $sessions;
}
//----------------------------------------------------------------------
public function get_messages($time) {
$frm_id = $this->frm_id;
$result = array();
if ($time == 0) {
//$get_mesg_query = "SELECT DISTINCT * FROM frei_chat WHERE frei_chat.\"to\"=" . $frm_id . "AND time<2 order by time";
} else {
$get_mesg_query = "SELECT * FROM frei_chat WHERE frei_chat.\"to\"=" . $frm_id . " AND frei_chat.\"from\"<>" . $frm_id . " AND time>:time AND message_type<>1 order by time ";
$stmt = $this->db->prepare($get_mesg_query);
$stmt->execute(array("time" => $time));
$result = $stmt->fetchAll();
}
$gids = array();
$arr = array();
$i = 0;
foreach ($result as $res) {
if(!isset($_SESSION[$this->uid . 'can_receive_video_messages'])
&& $res['message_type'] == 2) {
$this->last_mesg_time = $res['time'];
continue;
}
$gid = $res['room_id'];
$arr[$i] = $res;
if (!in_array($gid, $gids) && $gid != -1) {
//is a group whose information is not fetched
$gids[] = $gid;
$arr[$i]['group_participants'] = $this->get_group_info($gid);
}
$i++;
}
if($i > 0) {
$_SESSION[$this->uid . 'can_receive_video_messages'] = true;
}
return $arr;
}
//----------------------------------------------------------------------
public function getmembers() {
$freichat = new freichat_data();
$onlcnt = 0;
$online_time = $this->online_time2;
$text = array();
$guest = NULL;
$freichat->userdata = array();
if (isset($_SESSION[$this->uid . 'freistatus']) == false) {
$_SESSION[$this->uid . 'freistatus'] = 1;
}
$active_room = (int) $_GET['in_room'];
$update_usr_info = false;
$_SESSION[$this->uid . 'in_room'] = $active_room;
if (!isset($_SESSION[$this->uid . 'custom_mesg'])) {
$_SESSION[$this->uid . 'custom_mesg'] = $this->frei_trans['default_status'];
}
$custom_mesg = htmlspecialchars($_GET['custom_mesg'], ENT_QUOTES, "UTF-8");
$custom_gst_name = htmlspecialchars($_GET['custom_gst_name'], ENT_QUOTES, "UTF-8");
if ($_GET['custom_mesg'] != 'i am null') {
$_SESSION[$this->uid . 'custom_mesg'] = $custom_mesg;
}
$first = $_GET['first'];
$options = array(
"id" => $_GET['id'],
"custom_mesg" => $custom_mesg,
"custom_gst_name" => $custom_gst_name,
"usr_list_wanted" => true,
"first" => $_GET['first'],
"in_room" => $active_room
);
$object = $this->call_driver($options);
$result = $object->load_driver();
//var_dump($result);
$profile_img = $this->url . 'client/themes/' . $this->color . '/profilelink.png';
$path = str_replace($this->to_freichat_path, "", $this->url);
//for($i=0;$i<=10;$i++){
//TODO: remove this dependency
require_once RDIR . '/client/themes/' . $this->color . '/argument.php';
$active_room = $_SESSION[$this->uid . 'in_room'];
$chatroom_user_array = array();
$user_ids = array();
foreach ($result as $res) {
if (in_array($res['session_id'], $user_ids))
continue;
$guest = str_replace("amp;", "", $res['username']);
$guest = strlen($guest) > 30 ? $this->msubstr($guest, 0, 16) . "..." : $guest;
$img_url = $this->get_statusimg_url($res['status'], $onlineimg, $busyimg);
$profile_link = '';
if ($this->linkprofile == 'enabled' && $res['guest'] == 0 && $_SESSION[$this->uid . "is_guest"] == 0) {
$profile_link = $object->linkprofile_url($res, $path, $profile_img);
$guest = strlen($guest) > 18 ? $this->msubstr($guest, 0, 12) . "..." : $guest;
}
$avatar_url = "http://www.gravatar.com/avatar/" . md5($guest) . "?s=24&d=wavatar"; //$this->url . "/client/jquery/user.jpeg";
if (isset($res[$this->avatar_field_name])) {
if ($res[$this->avatar_field_name] != "") {
$avatar_url = $object->avatar_url($res);
} else {
$avatar_url = "http://www.gravatar.com/avatar/" . md5($guest) . "?s=24&d=wavatar";
}
}
$guest = str_replace("'", " ", $guest);
$onlcnt++;
$show_name = (strlen($guest) > 20 ? $this->msubstr($guest, 0, 10) . "..." : $guest);
$freichat->userdata[] = array(
"username" => $guest,
"userid" => $res['session_id'],
"avatar" => $avatar_url,
"img_url" => $img_url,
"show_name" => $show_name,
"status_mesg" => $res['status_mesg'],
"profile_link" => $profile_link,
);
$user_ids[] = $res['session_id'];
}
$cres = $object->get_guests();
$user_ids = array();
foreach ($cres as $res) {
if (in_array($res['session_id'], $user_ids))
continue;
$guest = htmlspecialchars($res['username']);
$guest = strlen($guest) > 30 ? $this->msubstr($guest, 0, 16) . "..." : $guest;
$img_url = $this->get_statusimg_url($res['status'], $onlineimg, $busyimg);
$profile_link = '';
if ($this->linkprofile == 'enabled' && $res['guest'] == 0 && $_SESSION[$this->uid . "is_guest"] == 0) {
$profile_link = $object->linkprofile_url($res, $path, $profile_img);
$guest = strlen($guest) > 18 ? $this->msubstr($guest, 0, 12) . "..." : $guest;
}
$avatar_url = "http://www.gravatar.com/avatar/" . md5($guest) . "?s=24&d=wavatar"; //$this->url . "/client/jquery/user.jpeg";
if (isset($res[$this->avatar_field_name])) {
if ($res[$this->avatar_field_name] != "") {
$avatar_url = $object->avatar_url($res);
} else {
$avatar_url = "http://www.gravatar.com/avatar/" . md5($guest) . "?s=24&d=wavatar";
}
}
$guest = str_replace("'", " ", $guest);
$show_name = (strlen($guest) > 20 ? $this->msubstr($guest, 0, 10) . "..." : $guest);
if ((isset($res['in_room']) && $active_room == $res['in_room']) && $this->show_chatroom_plugin == 'enabled') {
$chatroom_user_array[] = array("username" => $guest, "userid" => $res['session_id'], "avatar" => $avatar_url, "img_url" => $img_url);
}
$user_ids[] = $res['session_id'];
}
//}
if ($this->show_chatroom_plugin == 'enabled') {
$freichat->room_array = $this->get_rooms($first);
$freichat->room_online_count = $this->get_online_cnt();
$freichat->chatroom_users_array = $chatroom_user_array;
$freichat->in_room = $active_room;
$this->delete_inactive_chatrooms();
}
$freichat->islog = $this->check_perms();
$freichat->status = $_SESSION[$this->uid . 'freistatus'];
// $freichat->userdata[] = $text;
$freichat->count = $onlcnt;
$freichat->username = str_replace("'", "", $this->frm_name);
$freichat->userid = $this->frm_id;
$freichat->is_guest = $_SESSION[$this->uid . 'is_guest'];
if (is_array($_GET['clrchtids'])) {
if ($_GET['clrchtids'][0] != '') {
$this->clrcht($_GET["clrchtids"]);
}
}
if ($this->long_polling == "enabled" && $_GET['long_poll'] != 'false' && isset($_SESSION[$this->uid . 'main_loaded'])) {
session_write_close();
$new_data = false;
$time = time();
while ((time() - $time) < $this->poll_time) {
// $new_data = array();
$freichat = $this->update_message_data($freichat);
if ($freichat->time > $_GET['time'] /* || $this->isset_video_offer == true */) {
// a new message !
$new_data = true;
}
if ($this->show_chatroom_plugin == "enabled") {
if ($freichat->chatroom_mesg_time > $_GET['chatroom_mesg_time']) {
// a new message
$new_data = true;
}
}
if ($new_data == true) {
echo json_encode($freichat);
break;
}
usleep(($this->chatspeed * 1000));
}
if ($new_data == false) {
echo json_encode($freichat);
}
} else {
$freichat = $this->update_message_data($freichat);
echo json_encode($freichat);
}
}
//-------------------------------------------------------------------
public function make_array($arr) {
foreach ($arr as $array) {
return explode(",", $array);
}
}
//-------------------------------------------------------------------
public function update_message_data($freichat) {
$curr_time = $_GET['time'];
$chatroom_mesg_time = $_GET['chatroom_mesg_time'];
$active_room = $_SESSION[$this->uid . 'in_room'];
$get_mesg = $this->get_messages($curr_time);
// $this->delete_messages();
$this->update_messages($active_room);
$freichat->time = $this->get_last_message_time($get_mesg, $curr_time);
$freichat->messages = $get_mesg;
if ($this->show_chatroom_plugin == 'enabled') {
if ($_GET['first'] == 'false') {
$chatroom_messages = $this->get_chatroom_messages($active_room, 'multi', $chatroom_mesg_time);
} else {
$chatroom_messages = $this->get_chatroom_messages($active_room, 'single', $chatroom_mesg_time);
}
$freichat->chatroom_messages = $chatroom_messages;
$last_chatroom_message = end($chatroom_messages);
$freichat->last_chatroom_usr_id = $last_chatroom_message['from'];
$chatroom_mesg_time = $this->get_last_message_time($chatroom_messages, $chatroom_mesg_time);
$freichat->chatroom_mesg_time = $chatroom_mesg_time;
}
return $freichat;
}
//-------------------------------------------------------------------
public function prepare_insert_msg() {
$insert_mesg_query = "INSERT INTO frei_chat (frei_chat.\"from\",from_name,frei_chat.\"to\",to_name,message,frei_chat.\"sent\",frei_chat.\"recd\",frei_chat.\"time\",message_type,room_id,GMT_time) VALUES(?,?,?,?,?,?,?,?,?,?,?)";
$this->insert_mesg_query = $this->db->prepare($insert_mesg_query);
}
//-------------------------------------------------------------------
public function post() {
$freichat = new freichat_data();
if (isset($_SESSION[$this->uid . 'is_banned']) && $_SESSION[$this->uid . 'is_banned']) {
//echo json_encode($freichat);
exit;
}
$frm_id = $this->frm_id;
$usr_name = str_replace("'", "", $this->frm_name);
$room_id = -1;
if (in_array($_POST['message_type'], array(0, 2, 3))) {
if ($this->driver == "Sugarcrm") {
$to = $_POST['to'];
} else if ($_POST['message_type'] == 3) {
$to = explode(",", $_POST['to']);
} else {
$to = array($this->bigintval($_POST['to']));
}
}
/*
0 => normal message
1 => chatroom message
2 => video request
3 => group chat message
*/
$message_type = null;
$chatroom_mesg_time = 0.00;
$active_room = (int) $_POST['in_room'];
if (isset($_POST['message_type'])) {
$message_type = strip_tags($_POST['message_type']);
}
if (isset($_POST['in_room'])) {
$room_id = (int) $_POST['in_room'];
}
$mesg = $_POST['message'];
$last_mesg_time = null;
$get_mesg = null;
foreach ($mesg as $message) {
if ($message_type > 1) {
$messages = array($message);
} else {
$messages = explode(',', $message);
}
}
$GMT_time = $this->bigintval($_POST['GMT_time']);
$this->prepare_insert_msg();
if ($_POST['to'] == 'FcX_AlIcE') {
$_REQUEST['oreqmode'] = 'json';
var_dump($messages);
$_REQUEST['chatbotmessage'] = $messages[0];
require '../client/plugins/bot/chat.php';
}
foreach ($messages as $message) {
$message = nl2br($message);
$to_name = htmlspecialchars($_POST['to_name'], ENT_QUOTES, "UTF-8");
$time = time() . str_replace(" ", "", microtime());
if (in_array($message_type, array(0, 2, 3))) {
$chatroom_mesg_time = $_POST['chatroom_mesg_time'];
if ($message_type != 3) {
$room_id = -1;
}
foreach ($to as $_to) {
// if ($to != $frm_id)
$this->insert_mesg_query->execute(array($frm_id, $usr_name, $_to, $to_name, $message, $this->mysql_now, 0, $time, $message_type, $room_id, $GMT_time));
}
if($message_type == 3 && !in_array($frm_id, $to)) {
//send a copy to myself for group chat
$this->insert_mesg_query->execute(array($frm_id, $usr_name, $frm_id, $to_name, $message, $this->mysql_now, 0, $time, $message_type, $room_id, $GMT_time));
}
} else if ($this->show_chatroom_plugin == 'enabled') {
//$chatroom_mesg_time = $time;
$message = $this->parseBBcode($message);
$chatroom_mesg_time = $_POST['chatroom_mesg_time'];
$this->insert_mesg_query->execute(array($frm_id, $usr_name, $room_id, $room_id, $message, $this->mysql_now, 0, $time, $message_type, $room_id, $GMT_time));
$this->update_chatroom_activity($room_id);
} else {
$this->freichat_debug("undefined message post req");
}
}
$custom_mesg = htmlspecialchars($_POST['custom_mesg'], ENT_QUOTES, "UTF-8");
if ($_POST['passBYpost'] == true) {
if (!isset($_SESSION[$this->uid . 'in_room'])) {
$_SESSION[$this->uid . 'in_room'] = -1;
}
$freichat_time = $_POST['time'];
//settype($freichat_time,"float");
$get_mesg = $this->get_messages($freichat_time);
$last_mesg_time = $this->get_last_message_time($get_mesg, $freichat_time);
// $this->delete_messages();
$this->update_messages($active_room);
$_SESSION[$this->uid . 'custom_mesg'] = $custom_mesg;
$freichat->chatroom_messages = null;
if ($this->show_chatroom_plugin == 'enabled') {
$freichat->chatroom_messages = $this->get_chatroom_messages($active_room, 'single', $chatroom_mesg_time);
}
}
$freichat->messages = $get_mesg;
$freichat->time = $last_mesg_time;
$freichat->username = $usr_name;
$freichat->message = $messages;
$freichat->chatroom_mesg_time = $this->get_last_message_time($freichat->chatroom_messages, $chatroom_mesg_time);
echo json_encode($freichat);
}
//--------------------------------------------------------------------------
public function get_clean_id($id) {
if (!$this->driver == "Sugarcrm")
return $this->bigintval($id);
return $id;
}
//--------------------------------------------------------------------------
public function getdata() {
$freichat = new freichat_data();
$frm_id = $this->frm_id;
$exist = false;
$getdata_query = "SELECT * FROM frei_chat WHERE (frei_chat.\"to\"=" . $frm_id . " OR (frei_chat.\"from\"=" . $frm_id . " AND message_type<>3))
AND message_type<>1 AND message_type<>2 order by time";
$messages = $this->db->query($getdata_query)->fetchAll();
$gids = array();
$arr = array();
$i = 0;
foreach ($messages as $res) {
$gid = $res['room_id'];
$arr[$i] = $res;
$arr[$i]['group_participants'] = array();
if (!in_array($gid, $gids) && $gid != -1) {
//is a group whose information is not fetched
$gids[] = $gid;
$arr[$i]['group_participants'] = $this->get_group_info($gid);
}
$i++;
}
$exist = true;
if (empty($arr)) {
$exist = false;
}
/* foreach ($messages as $analyse) {
if ($analyse == NULL) {
$exist = false;
} else {
$exist = true;
}
} */
$freichat->exist = $exist;
$freichat->messages = $arr;
echo json_encode($freichat);
}
//-------------------------------------------------------------------------------
public function isset_mesg() {
$freichat = new freichat_data();
$frm_id = $this->frm_id;
$to_id = (int) $_GET['Cid'];
if (isset($_GET['mobile']) && $_GET['mode'] == "chatroom") {
$get_mesg = $this->get_chatroom_messages($_GET['active_room'], 'multi');
} else {
$isset_mesg_query = "SELECT * FROM frei_chat WHERE ((frei_chat.\"to\"=" . $frm_id . " AND frei_chat.\"from\"=" . $this->db->quote($to_id) . ")
OR (frei_chat.\"from\"=" . $frm_id . " AND frei_chat.\"to\"=" . $this->db->quote($to_id) . ") )
AND message_type <> 2 AND message_type <> 3 order by time";
$get_mesg = $this->db->query($isset_mesg_query)->fetchAll();
}
$freichat->messages = $get_mesg;
$analyze = $freichat->messages;
$exist = false;
foreach ($analyze as $analyse) {
if ($analyse == NULL) {
$exist = false;
} else {
$exist = true;
}
}
$freichat->exist = $exist;
echo json_encode($freichat);
}
//-------------------------------------------------------------------------------
public function clrcht($id) {
$id = implode(',', $id);
$clrcht_query = "DELETE FROM frei_chat where (frei_chat.\"to\" IN (" . $this->db->quote($id) . ") AND frei_chat.\"from\" IN(" . $this->frm_id . ")) OR (frei_chat.\"from\" IN(" . $this->db->quote($id) . ") AND frei_chat.\"to\" IN(" . $this->frm_id . "))";
$this->db->query($clrcht_query);
}
//---------------------------------------------------------------------------------
public function update_status() {
$freichat = new freichat_data();
$user_id = $_SESSION[$this->uid . 'gst_ses_id'];
$freistatus = (int) $_POST['freistatus'];
if ($_SESSION[$this->uid . 'freistatus'] != $_POST['freistatus']) {
$freistatus = ($freistatus == 4) ? 3 : $freistatus;
$qry = "UPDATE frei_session set status=$freistatus WHERE permanent_id=" . $user_id;
$this->db->query($qry);
}
$_SESSION[$this->uid . 'freistatus'] = (int) $_POST['freistatus'];
$freichat->status = (int) $_POST['freistatus'];
$freichat->id = $user_id;
echo json_encode($freichat);
}
//---------------------------------------------------------------------------------
public function get_new_messages_mobile() {
//offcourse everything here relates to messages so no prefix message_
$freichat = new freichat_data();
$last_rec_time = $_GET['last_rec_time'];
$messages = $this->get_messages($last_rec_time);
$last_rec_time = $this->get_last_message_time($messages, $last_rec_time);
$freichat->messages = $messages;
$freichat->last_rec_time = $last_rec_time;
echo json_encode($freichat);
}
//---------------------------------------------------------------------------------
public function add_participant_to_groupchat() {
$gid = (int) $_POST['gid'];
$qry = 'SELECT group_author, group_created FROM frei_groupchat WHERE gid=' . $gid;
$obj = $this->db->query($qry);
if ($obj) {
$res = $obj->fetch();
$author = $res['group_author'];
$created = $res['group_created'];
$qry = 'INSERT INTO frei_groupchat (gid, group_author, group_created, group_participants) '
. 'VALUES(:gid, :author, :created, :participants)';
$stmt = $this->db->prepare($qry);
$ids = $_POST['new_participants'];
foreach ($ids as $id) {
$stmt->execute(array(
":gid" => $gid,
":author" => $author,
":created" => $created,
":participants" => (int) $id
));
}
echo json_encode('success');
exit();
}
echo json_encode('fail');
}
//---------------------------------------------------------------------------------
public function creategroupchat() {
$qry = 'SELECT MAX(id) AS last FROM frei_groupchat';
$obj = $this->db->query($qry);
$res = $obj->fetch();
$last = $res['last'];
if ($last == null) {
$last = 0;
}
$gid = $last+1;
$qry = 'INSERT INTO frei_groupchat (gid, group_author, group_created, group_participants) VALUES(:gid, :author, :created, :participants)';
$stmt = $this->db->prepare($qry);
$ids = $_POST['participants'];
$author_id = (int) $_POST['author'];
$ids[] = $author_id;
$created = time();
foreach ($ids as $id) {
$stmt->execute(array(
":gid" => $gid,
":author" => $author_id,
":created" => $created,
":participants" => (int) $id
));
}
echo json_encode($gid);
}
//---------------------------------------------------------------------------------
public function get_group_info($gid) {
$qry = 'SELECT g.group_participants AS id , u.username FROM frei_groupchat AS g '
. ' ,' . $this->db_prefix . 'users AS u '
. ' WHERE u.id=g.group_participants AND g.gid=' . (int) $gid;
$res = $this->db->query($qry);
if ($res) {
return $res->fetchAll();
}
return array();
}
//---------------------------------------------------------------------------------
public function get_group_participants() {
$gid = (int) $_GET['gid'];
echo json_encode($this->get_group_info($gid));
}
//---------------------------------------------------------------------------------
public function get_groupchat_members() {
$sessions = new $this->driver($this->db);
$result = $sessions->search_users($_GET['term']);
$userdata = array();
$_userdata = array();
//var_dump($result);
foreach ($result as $res) {
if ($res['userid'] == $this->frm_id)
continue;
$guest = str_replace("amp;", "", $res['username']);
$guest = strlen($guest) > 30 ? $this->msubstr($guest, 0, 16) . "..." : $guest;
$img_url = $this->get_statusimg_url($res['status'], 'images/onlineimg.png', 'images/busyimg.png');
$avatar_url = "http://www.gravatar.com/avatar/" . md5($guest) . "?s=24&d=wavatar"; //$this->url . "/client/jquery/user.jpeg";
if (isset($res[$this->avatar_field_name])) {
if ($res[$this->avatar_field_name] != "") {
$avatar_url = $object->avatar_url($res);
} else {
$avatar_url = "http://www.gravatar.com/avatar/" . md5($guest) . "?s=24&d=wavatar";
}
}
$guest = str_replace("'", " ", $guest);
$show_name = (strlen($guest) > 20 ? $this->msubstr($guest, 0, 10) . "..." : $guest);
$userdata[] = array(
"username" => $guest,
"userid" => $res['userid'],
"statusimg" => $img_url,
"avatar" => $avatar_url,
"value" => $show_name,
"label" => $show_name
);
//$_userdata[] = $show_name;
}
echo json_encode($userdata);
}
}
$freimode = $_REQUEST['freimode'];
$cls = '';
if (in_array($freimode, $video_req)) {
$cls = 'video';
require 'plugins/video/video.php';
} else {
$cls = 'chatroom';
require 'plugins/chatroom/chatroom.php';
}
$fc = new $cls();
$fc->$freimode();
if (isset($_SESSION[$fc->uid . 'usr_name']) == false) {
echo "Unable To Store In session";
$fc->freichat_debug("Unable to store in session");
var_dump($_SESSION);
}