Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/03/2012, 03:16
Avatar de roal40
roal40
 
Fecha de Ingreso: enero-2012
Mensajes: 61
Antigüedad: 12 años, 3 meses
Puntos: 4
Problema chat

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($items0, -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($items0, -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($textENT_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)