[Aporte][PHP][Class] Sistema de mensajeria para tu sitio

April 29, 2011

Bueno, leyendo el siguiente tema de @macadamQuejoso , se me ocurrio crear un sistema de mensajeria hecho en POO ( programacion orientada a objetos) para ir practicando un poco esto de POO, incluye lo escencial.

primero tienen que crear una tabla con el nombre que quieran, pero de la siguiente manera

`ID` int(11) NOT NULL AUTO_INCREMENT,
`from` varchar(32) NOT NULL,
`to` varchar(32) NOT NULL,
`subject` text NOT NULL,
`body` text NOT NULL,
`isread` tinyint(1) NOT NULL,
`deletefrom` tinyint(1) NOT NULL,
`deleteto` tinyint(1) NOT NULL,
PRIMARY KEY (`ID`)

antes de usar el sistema tienen que conectar y seleccionar la base de mysql asi

<?php
mysql_connect('SERVER','USER','PASS');
mysql_select_db('BASE');
?>

Ahora la clase que deben utilizar, la documente toda en el codigo asi que no voy a dar explicaciones aca..

<?php
class mensajeria{
    //creamos una variable privada donde almacenaremos el nombre de la tabla donde se almacenan los mensajes
    private $tabla;
    
    //al crear la clase pasamos como parametro el nombre de la base, si esta vacio doy un mensaje de error,si no lo almaceno en la variable privada $tabla
    public function __construct($base){
        if(empty($base)){
            die('Debe Seleccionar Una Base Para Poder Iniciar El Sistema De Mensajeria');
        }else{
            $this->tabla = $base;
        }
    }

    //pasamos como parametros el nombre del usuario que envia,a quien,el asunto y el mensaje para luego insertarlo en la tabla.
    //el parametro isread establece si el mensaje esta leido o no.
    //deletefrom define si el mensaje es borrado de la bandeja de salida (autor)
    //deleteto define si el mensaje es borrado de la bandeja de entrada (receptor)
    public function enviar($de,$para,$asunto,$mensaje){
        $enviar = mysql_query("INSERT INTO $this->tabla (de,para,subject,body,isread,deletefrom,deleteto) VALUES ('$de','$para','$asunto','$mensaje',0,0,0)");
        if($enviar){
            return true;
        }else{
            return false;
        }
    }
    
    //pasamos como parametro el nombre del usuario, para luego de hacer una consulta a la tabla, recorrer con un bucle el resultado, almacenar en un array todos los datos.
    //devuelve un array similar a este
    //Array ( [0] => Array ( [ID] => 12 [From] => DE QUIEN [Subject] => ASUNTO [IsRead] => 0 SI NO ESTA LEIDO,EN CASO CONTRARIO 1 ) ) 
    public    function obtenerrecibidos ($user){
        if(empty($user)){
            die('Debe Pasar Como Parametro Un Usuario Del Cual Obtener Los Mensajes');
        }else{
            $recibidos = mysql_query("SELECT ID,de,subject,isread FROM $this->tabla WHERE para = '$user' AND deleteto = 0");
            if(mysql_num_rows($recibidos) > 0){
                while ($r = mysql_fetch_assoc($recibidos)){
                    $mensajes[] = array(
                        'ID'=>$r['ID'],
                        'From'=>$r['de'],
                        'Subject'=>$r['subject'],
                        'IsRead'=>$r['isread'],
                    );
                }
                return $mensajes;
            }else{
                return 'No Tienes Ningun Mensaje';
            }
        }
    }
    
    //esta funcion es exactamente igual a la anterior, solo que obtiene los mensajes enviados, devolviendo un array similar a este
    //Array ( [0] => Array ( [ID] => 12 [To] => A QUIEN [Subject] => ASUNTO) ) 
    public function obtenerenviados ($user){
        if(empty($user)){
            die('Debe Pasar Como Parametro Un Usuario Del Cual Obtener Los Mensajes');
        }else{
            $recibidos = mysql_query("SELECT ID,para,subject FROM $this->tabla WHERE de = '$user' AND deletefrom = 0");
            if(mysql_num_rows($recibidos) > 0){
                while ($r = mysql_fetch_assoc($recibidos)){
                    $mensajes[] = array(
                        'ID'=>$r['ID'],
                        'To'=>$r['para'],
                        'Subject'=>$r['subject'],
                    );
                }
                return $mensajes;
            }else{
                return 'No Enviaste Ningun Mensaje';
            }
        }
    }
    
    //pasamos como parametro el id del mensaje, para luego de hacer la consulta a la tabla, devolver un array con todos los datos similar a este
    //Array ( [0] => Array ( [From] => DE QUIEN [Subject] => ASUNTO [Body] => MENSAJE) ) 
    public function ver($id){
        if(empty($id)){
            return 'Debe Pasar Como Parametro Un ID De Mensaje Para Ver';
        }else{
            $ver = mysql_query("SELECT de,subject,body FROM mensajes");
            while ($r = mysql_fetch_assoc($ver)){
                $datosmensaje = array(
                    'From'=> $r['de'],
                    'Subject'=> $r['subject'],
                    'Body'=> $r['body'],
                );
            }
            $marcarleido = mysql_query("UPDATE mensajes SET isread=1 WHERE ID = $id");
            return $datosmensaje;
        }
    
    }
    
    //borra de la bandeja de entrada el mensaje con id pasado por parametro
    public function borrarrecibido ($id){
        if(empty($id)){
            return 'Debe Pasar Como Parametro Un ID De Mensaje Para Borrar';
        }else{
            $borrarrecibido = mysql_query("UPDATE mensajes SET deleteto=1 WHERE ID=$id");
            if($borrarrecibido){
                return true;
            }else{
                return false;
            }
        }    
    }
    
    //borra de la bandeja de salida el mensaje con id pasado por parametro
    public function borrarenviado ($id){
        if(empty($id)){
            return 'Debe Pasar Como Parametro Un ID De Mensaje Para Borrar';
        }else{
            $borrarenviado = mysql_query("UPDATE mensajes SET deletefrom=1 WHERE ID=$id");
            if($borrarenviado){
                return true;
            }else{
                return false;
            }
        }    
    }    

}
?>

y se usa de la siguiente manera..

<?php
//creamos una nueva instancia de la clase
$mensjaes = new mensajeria('ACA NOMBRE DE LA BASE');

//para enviar mensaje, pasando parametros
$mensjaes->enviar('DE','PARA','ASUNTO','MENSAJE');

//devuelve un array con los mensajes recibidos del user pasado como parametro
$mensjaes->obtenerrecibidos('USER');

//devuelve un array con los mensajes enviados del user pasado como parametro
$mensjaes->obtenerenviados('USER');

//devuelve un array con los datos del mensaje pasado como parametro a traves de su ID 
$mensjaes->ver('ID');

//borra de la baneja de enrtada el mensaje pasado como parametro a traves de su ID
$mensjaes->borrarrecibido('ID');

//borra de la baneja de salida el mensaje pasado como parametro a traves de su ID
$mensjaes->borrarenviado('ID');
?>

PD OLVIDADA : Lo Realize En POO Para Ir Practicando Ademas Al Tener Que Realizar Un Cambio, Lo Haces En La Clase, Y Listo, Cambias Absolutamente Casi Todo El Sitio

Leave your comment on the github issue, sending me an email or DMing me on twitter