Hola, esto es un problema con mi versión adaptada del chat de Jquery parecido al de Gmail...
El problema es, que al seleccionar un amigo, lo he tenido que hacer mediante ID ya que en el div si era por nombre quedaba...
Código HTML:
<div id="chatbox_pepito tiene espacios"></div>
De esta manera, el chat no funcionaba, pero lo puse para que quedase con la ID de pepito
Código HTML:
<div id="chatbox_999"></div>
El problema es que... obviamente... el titulo, en la parte superiro (La cabecera de con quien hablas) es que se muestra...
999
Os dejo los codigos...
chat.php
Código PHP:
<?php
define ('DBPATH','localhost');
define ('DBUSER','user');
define ('DBPASS','pass');
define ('DBNAME','nombre');
session_start();
global $dbh;
$dbh = mysql_connect(DBPATH,DBUSER,DBPASS);
mysql_selectdb(DBNAME,$dbh);
if ($_GET['action'] == "chatheartbeat") { chatHeartbeat(); }
if ($_GET['action'] == "sendchat") { sendChat(); }
if ($_GET['action'] == "closechat") { closeChat(); }
if ($_GET['action'] == "startchatsession") { startChatSession(); }
if (!isset($_SESSION['chatHistory'])) {
$_SESSION['chatHistory'] = array();
}
if (!isset($_SESSION['openChatBoxes'])) {
$_SESSION['openChatBoxes'] = array();
}
function chatHeartbeat() {
$sql = "select * from chat where (chat.to = '".mysql_real_escape_string($_SESSION['username'])."' AND recd = 0) order by id ASC";
$query = mysql_query($sql);
$items = '';
$chatBoxes = array();
while ($chat = mysql_fetch_array($query)) {
if (!isset($_SESSION['openChatBoxes'][$chat['from']]) && isset($_SESSION['chatHistory'][$chat['from']])) {
$items = $_SESSION['chatHistory'][$chat['from']];
}
$chat['message'] = sanitize($chat['message']);
$items .= <<<EOD
{
"s": "0",
"f": "{$chat['from']}",
"e": "{$chat['idfrom']}",
"m": "{$chat['message']}"
},
EOD;
if (!isset($_SESSION['chatHistory'][$chat['from']])) {
$_SESSION['chatHistory'][$chat['from']] = '';
}
$_SESSION['chatHistory'][$chat['from']] .= <<<EOD
{
"s": "0",
"f": "{$chat['from']}",
"e": "{$chat['idfrom']}",
"m": "{$chat['message']}"
},
EOD;
unset($_SESSION['tsChatBoxes'][$chat['from']]);
$_SESSION['openChatBoxes'][$chat['from']] = $chat['sent'];
}
if (!empty($_SESSION['openChatBoxes'])) {
foreach ($_SESSION['openChatBoxes'] as $chatbox => $time) {
if (!isset($_SESSION['tsChatBoxes'][$chatbox])) {
$now = time()-strtotime($time);
$time = date('g:iA M dS', strtotime($time));
$message = "Enviado a las $time";
if ($now > 180) {
$items .= <<<EOD
{
"s": "2",
"f": "$chatbox",
"m": "{$message}"
},
EOD;
if (!isset($_SESSION['chatHistory'][$chatbox])) {
$_SESSION['chatHistory'][$chatbox] = '';
}
$_SESSION['chatHistory'][$chatbox] .= <<<EOD
{
"s": "2",
"f": "$chatbox",
"m": "{$message}"
},
EOD;
$_SESSION['tsChatBoxes'][$chatbox] = 1;
}
}
}
}
$sql = "update chat set recd = 1 where chat.to = '".mysql_real_escape_string($_SESSION['username'])."' and recd = 0";
$query = mysql_query($sql);
if ($items != '') {
$items = substr($items, 0, -1);
}
header('Content-type: application/json');
?>
{
"items": [
<?php echo $items;?>
]
}
<?php
exit(0);
}
function chatBoxSession($chatbox) {
$items = '';
if (isset($_SESSION['chatHistory'][$chatbox])) {
$items = $_SESSION['chatHistory'][$chatbox];
}
return $items;
}
function startChatSession() {
$items = '';
if (!empty($_SESSION['openChatBoxes'])) {
foreach ($_SESSION['openChatBoxes'] as $chatbox => $void) {
$items .= chatBoxSession($chatbox);
}
}
if ($items != '') {
$items = substr($items, 0, -1);
}
header('Content-type: application/json');
?>
{
"username": "<?php echo $_SESSION['nombrechat'];?>",
"items": [
<?php echo $items;?>
]
}
<?php
exit(0);
}
function sendChat() {
$resultadoamigos = mysql_query("SELECT * FROM users WHERE (id = '$_POST[to]')");
while($filanombre = mysql_fetch_array($resultadoamigos)){
$from = $_SESSION['nombrechat'];
$to = $filanombre['nombre'];
$idto = $_POST['to'];
$idfrom = $_SESSION['username'];
$message = $_POST['message'];
}
$_SESSION['openChatBoxes'][$_POST['to']] = date('Y-m-d H:i:s', time());
$messagesan = sanitize($message);
if (!isset($_SESSION['chatHistory'][$_POST['to']])) {
$_SESSION['chatHistory'][$_POST['to']] = '';
}
$_SESSION['chatHistory'][$_POST['to']] .= <<<EOD
{
"s": "1",
"f": "{$to}",
"e": "{$idto}",
"m": "{$messagesan}"
},
EOD;
unset($_SESSION['tsChatBoxes'][$_POST['to']]);
$sql = "insert into chat (chat.from,idfrom,chat.to,idto,message,sent) values ('".mysql_real_escape_string($idfrom)."', '".mysql_real_escape_string($from)."', '".mysql_real_escape_string($idto)."', '".mysql_real_escape_string($to)."', '".mysql_real_escape_string($message)."',NOW())";
$query = mysql_query($sql);
echo "1";
exit(0);
}
function closeChat() {
unset($_SESSION['openChatBoxes'][$_POST['chatbox']]);
echo "1";
exit(0);
}
function sanitize($text) {
$text = htmlspecialchars($text, ENT_QUOTES);
$text = str_replace("\n\r","\n",$text);
$text = str_replace("\r\n","\n",$text);
$text = str_replace("\n","<br>",$text);
return $text;
}
Nota: Por razones que ahora no me acuerdo... hice que la IDfrom sea el nombre del usuario, y from sea la ID... (Error mio, nada más ténganlo en cuenta).
Nota 2: Esta parte no modifica el titulo del chat, pero por si lo quieren...
Código que inicia el chat en index.php
Código HTML:
<a href="javascript:void(0)" onclick="javascript:chatWith('<?=$filaamigos['idusuariopedido']?>')"><?=$filaamigos['usuariopedido']?></a>
Nota: De esta manera la chatbox quedaria... div id="chatbox_1"></div> (Por ejemplo, si pusiese nada mas usuario pedido... quedaría el nombre del usuario, con espacios, por lo que no lo cojería el div)