<?php
class MailBoxesModel extends ModelBase {

    public function getMailBoxes($iduser) {
        //preparamos la cadena de consulta
        $query = $this->db->prepare(' SELECT m.*, t.* FROM sis_mailbox AS m LEFT JOIN sis_typemailbox AS t ON m.idtypemb = t.idtypemb WHERE m.iduser = '.$iduser.' AND m.state = 1 ORDER BY m.ordering, m.alias ');
        $query->execute();
        //devolvemos la coleccion para que la vista la presente.
        return $query;
    }

    public function getMailBoxesUser($iduser,$datos = array("inicio" => 0, "tamanio" => 5),$paginador= false) {
        //preparamos la cadena de consulta
        $str_query = 'SELECT m.*, t.*, count(mens.idmessage) as num_messages FROM sis_mailbox AS m LEFT JOIN sis_typemailbox AS t ON m.idtypemb = t.idtypemb LEFT JOIN sis_message as mens ON m.idmailbox = mens.idmailbox  WHERE m.iduser = '.$iduser.' AND m.state = 1   AND t.idtypemb = 4  GROUP BY m.idmailbox  ORDER BY m.ordering, m.alias';
        $query = $this->db->prepare($str_query);
	
	
	if($paginador) {
            //realizamos la consulta de todos los items
            $consulta = $this->db->prepare($str_query);
            $consulta->execute();
            $num_filas = $consulta->rowCount();
            if($num_filas == $datos['inicio']) {
                $datos['inicio'] = $num_filas - $datos['tamanio'];
                ($datos['inicio'] < 0)?$datos['inicio'] = 0: $datos['inicio'] = $datos['inicio'];

            }
            $inicio = $datos['inicio'];
            //getPager($datos = array("total" => 0, "inicio" => 0, "pagina" => 5)//uso de la variable arreglo.
            $parametros = array("total" => $num_filas, "inicio" => $datos['inicio'], "pagina" =>  $datos['tamanio']);
            list($paginas,$navegador) = $this->getPager($parametros);
            //realizamos una consulta paginada
            $consulta = $this->db->prepare($str_query.' LIMIT '.$datos['inicio'].' , '.$datos['tamanio'].' ');
            $consulta->execute();
            //devolvemos la coleccion para que la vista la presente.
            return array($consulta,$paginas,$navegador,$inicio);
            //return array($datos,$paginas,$navegador);
        }else {
            $consulta = $this->db->prepare($str_query.' ');
            $consulta->execute();
            //devolvemos la coleccion para que la vista la presente.
            return $consulta;
        }
    }

    public function getMailBoxesSystem($iduser) {
        //preparamos la cadena de consulta
        $query = $this->db->prepare(' SELECT m.*, t.* FROM sis_mailbox AS m LEFT JOIN sis_typemailbox AS t ON m.idtypemb = t.idtypemb WHERE m.iduser = '.$iduser.'  AND t.idtypemb <=  3 AND m.state = 1  ORDER BY m.ordering, m.alias ');
        $query->execute();
        //devolvemos la coleccion para que la vista la presente.
        return $query;
    }

    public function getIDMailBoxesSystem($iduser) {
        $str_query = ' SELECT idmailbox, idtypemb FROM sis_mailbox'
                    .' WHERE iduser = '.$iduser
                    .' AND state = 1 ORDER BY ordering';
        $query = $this->db->prepare($str_query);
        $query->execute();
        return $query;
    }

    public function getMailBoxesListMove($iduser,$idmailbox) {
        //preparamos la cadena de consulta
        $query = $this->db->prepare(' SELECT m.*, t.* FROM sis_mailbox AS m LEFT JOIN sis_typemailbox AS t ON m.idtypemb = t.idtypemb WHERE m.iduser = '.$iduser.'  AND t.idtypemb >=  3 AND m.state = 1  AND m.idmailbox != '.$idmailbox.' ORDER BY m.ordering, m.alias ');
        $query->execute();
        //devolvemos la coleccion para que la vista la presente.
        return $query;
    }


    public function getMailBox($idmailbox) {
        //preparamos lala cadena de consulta
        $query = $this->db->prepare(' SELECT m.*, t.* FROM sis_mailbox AS m LEFT JOIN sis_typemailbox AS t ON m.idtypemb = t.idtypemb WHERE m.idmailbox = '.$idmailbox.' AND m.state = 1  LIMIT 0,1 ');
        $query->execute();
        //devolvemos la coleccion para que la vista la presente.
        return $query;
    }


     public function getMailBoxForName($alias) {
        //preparamos lala cadena de consulta
        $query = $this->db->prepare(' SELECT m.*, t.* FROM sis_mailbox AS m LEFT JOIN sis_typemailbox AS t ON m.idtypemb = t.idtypemb WHERE m.alias = "'.$alias.'" AND m.state = 1  LIMIT 0,1 ');
        $query->execute();
        //devolvemos la coleccion para que la vista la presente.
        return $query;
    }
    
    
    
     public function getMailBoxForNameInUser($alias,$iduser) {
        //preparamos lala cadena de consulta
        $query = $this->db->prepare(' SELECT m.*, t.* FROM sis_mailbox AS m LEFT JOIN sis_typemailbox AS t ON m.idtypemb = t.idtypemb WHERE m.alias = "'.$alias.'" AND m.iduser = '.$iduser.' AND m.state = 1  LIMIT 0,1 ');
        $query->execute();
        //devolvemos la coleccion para que la vista la presente.
        return $query;
    }


    public function getMailBoxDuplicateForName($alias,$idmailbox) {
        //preparamos lala cadena de consulta
        $query = $this->db->prepare(' SELECT m.*, t.* FROM sis_mailbox AS m LEFT JOIN sis_typemailbox AS t ON m.idtypemb = t.idtypemb WHERE m.alias = "'.$alias.'" AND m.idmailbox != '.$idmailbox.' AND m.state = 1  LIMIT 0,1 ');
        $query->execute();
        //devolvemos la coleccion para que la vista la presente.
        return $query;
    }
    
    public function getMailBoxDuplicateForNameInUser($alias,$idmailbox,$iduser) {
        //preparamos lala cadena de consulta
        $query = $this->db->prepare(' SELECT m.*, t.* FROM sis_mailbox AS m LEFT JOIN sis_typemailbox AS t ON m.idtypemb = t.idtypemb WHERE m.alias = "'.$alias.'" AND m.iduser = '.$iduser.' AND m.idmailbox != '.$idmailbox.' AND m.state = 1  LIMIT 0,1 ');
        $query->execute();
        //devolvemos la coleccion para que la vista la presente.
        return $query;
    }



    public function getMailBoxType($iduser, $idtypemb) {
        //preparamos la cadena de consulta
        $query = $this->db->prepare(' SELECT m.*, t.* FROM sis_mailbox AS m LEFT JOIN sis_typemailbox AS t ON m.idtypemb = t.idtypemb WHERE m.iduser = '.$iduser.' AND m.state = 1  AND m.idtypemb = '.$idtypemb.' LIMIT 0,1 ');
        $query->execute();
        //devolvemos la coleccion para que la vista la presente.
        return $query;
    }


    public function getMessages($idmailbox,$datos = array("inicio" => 0, "tamanio" => 5),$paginador= false) {
        //$str_query = ' SELECT m.*, msg.* FROM sis_mailbox AS m LEFT JOIN sis_message AS msg ON m.idmailbox = msg.idmailbox WHERE m.idmailbox = '.$idmailbox.' ORDER BY msg.date_message DESC  ';

        $str_query = ' SELECT m.*, msg.*, CONCAT(f.firstname," ",f.lastname) as "from", CONCAT(t.firstname," ",t.lastname) as "to" FROM sis_mailbox AS m  JOIN sis_message AS msg ON m.idmailbox = msg.idmailbox LEFT JOIN sis_user as f ON msg.user_from = f.iduser LEFT JOIN sis_user as t ON msg.userto = t.iduser WHERE m.idmailbox = '.$idmailbox.' AND (msg.state = 1 OR msg.state = 2) ORDER BY msg.date_message DESC ';
        if($paginador) {
            //realizamos la consulta de todos los items
            $consulta = $this->db->prepare($str_query);
            $consulta->execute();
            $num_filas = $consulta->rowCount();
            if($num_filas == $datos['inicio']) {
                $datos['inicio'] = $num_filas - $datos['tamanio'];
                ($datos['inicio'] < 0)?$datos['inicio'] = 0: $datos['inicio'] = $datos['inicio'];

            }
            $inicio = $datos['inicio'];
            //getPager($datos = array("total" => 0, "inicio" => 0, "pagina" => 5)//uso de la variable arreglo.
            $parametros = array("total" => $num_filas, "inicio" => $datos['inicio'], "pagina" =>  $datos['tamanio']);
            list($paginas,$navegador) = $this->getPager($parametros);
            //realizamos una consulta paginada
            $consulta = $this->db->prepare($str_query.' LIMIT '.$datos['inicio'].' , '.$datos['tamanio'].' ');
            $consulta->execute();
            //devolvemos la coleccion para que la vista la presente.
            return array($consulta,$paginas,$navegador,$inicio);
            //return array($datos,$paginas,$navegador);
        }else {
            $consulta = $this->db->prepare($str_query.' LIMIT '.$datos['inicio'].' , '.$datos['tamanio'].' ');
            $consulta->execute();
            //devolvemos la coleccion para que la vista la presente.
            return $consulta;
        }
    }




    public function getMessagesNoRead($idmailbox,$datos = array("inicio" => 0, "tamanio" => 5),$paginador= false) {
        //$str_query = ' SELECT m.*, msg.* FROM sis_mailbox AS m LEFT JOIN sis_message AS msg ON m.idmailbox = msg.idmailbox WHERE m.idmailbox = '.$idmailbox.' ORDER BY msg.date_message DESC  ';

        $str_query = ' SELECT m.*, msg.*, CONCAT(f.firstname," ",f.lastname) as "from", CONCAT(t.firstname," ",t.lastname) as "to" FROM sis_mailbox AS m  JOIN sis_message AS msg ON m.idmailbox = msg.idmailbox LEFT JOIN sis_user as f ON msg.user_from = f.iduser LEFT JOIN sis_user as t ON msg.userto = t.iduser WHERE m.idmailbox = '.$idmailbox.' AND  msg.state = 1 ORDER BY msg.date_message DESC ';
        if($paginador) {
            //realizamos la consulta de todos los items
            $consulta = $this->db->prepare($str_query);
            $consulta->execute();
            $num_filas = $consulta->rowCount();
            if($num_filas == $datos['inicio']) {
                $datos['inicio'] = $num_filas - $datos['tamanio'];
                ($datos['inicio'] < 0)?$datos['inicio'] = 0: $datos['inicio'] = $datos['inicio'];

            }
            $inicio = $datos['inicio'];
            //getPager($datos = array("total" => 0, "inicio" => 0, "pagina" => 5)//uso de la variable arreglo.
            $parametros = array("total" => $num_filas, "inicio" => $datos['inicio'], "pagina" =>  $datos['tamanio']);
            list($paginas,$navegador) = $this->getPager($parametros);
            //realizamos una consulta paginada
            $consulta = $this->db->prepare($str_query.' LIMIT '.$datos['inicio'].' , '.$datos['tamanio'].' ');
            $consulta->execute();
            //devolvemos la coleccion para que la vista la presente.
            return array($consulta,$paginas,$navegador,$inicio);
            //return array($datos,$paginas,$navegador);
        }else {
            $consulta = $this->db->prepare($str_query.' LIMIT '.$datos['inicio'].' , '.$datos['tamanio'].' ');
            $consulta->execute();
            //devolvemos la coleccion para que la vista la presente.
            return $consulta;
        }
    }



    public function getMessage($idmessage) {

        $str_query = ' SELECT m.*, msg.*, CONCAT(f.firstname," ",f.lastname) as "from", CONCAT(t.firstname," ",t.lastname) as "to" FROM sis_mailbox AS m  JOIN sis_message AS msg ON m.idmailbox = msg.idmailbox LEFT JOIN sis_user as f ON msg.user_from = f.iduser LEFT JOIN sis_user as t ON msg.userto = t.iduser WHERE msg.idmessage = '.$idmessage.' ORDER BY msg.date_message DESC ';
        //SELECT *  FROM  sis_message LIMIT 0 , 30
        //SELECT i . * , m . * FROM sis_inbox AS i LEFT JOIN sis_message AS m ON i.idinbox = m.idinbox WHERE i.iduser =1 LIMIT 0 , 30
        $query = $this->db->prepare( $str_query );
        $query->execute();
        //devolvemos la coleccion para que la vista la presente.
        return $query;
    }

    public function insertMenssage($datos) {
        //realizamos la consulta de usuario por id
        $str_query ="INSERT INTO sis_message (idmessage, idmailbox, user_from, userto, common, subject, description, date_message, state) VALUES ('', '".$datos['idmailbox']."', '".$datos['user_from']."', '".$datos['userto']."', '".$datos['common']."', '".$datos['subject']."', '".$datos['description']."', '".$datos['date_message']."', '".$datos['state']."') ";
        $query = $this->db->prepare($str_query);
        $query->execute();
        //$id = $this->lastInsertId();
        //echo($id);
        //devolvemos la coleccion para que la vista la presente.
        return $query;
    }
    
    
    public function insertMailBox($datos) {
        //realizamos la consulta de usuario por id
        $str_query =" INSERT INTO sis_mailbox (idmailbox, iduser, idtypemb, ordering, alias, mb_create, mb_update, state) VALUES ('', '".$datos['iduser']."', '".$datos['idtypemb']."', '".$datos['ordering']."', '".$datos['alias']."', '".$datos['mb_create']."', '".$datos['mb_update']."', '".$datos['state']."') ";
        $query = $this->db->prepare($str_query);
        $query->execute();
        //$id = $this->lastInsertId();
        //echo($id);
        //devolvemos la coleccion para que la vista la presente.
        return $query;
    }


    
    public function updateMailBox($datos) {
        //realizamos la consulta de usuario por id
        $str_query = " UPDATE sis_mailbox SET iduser =  '".$datos['iduser']."', idtypemb =  '".$datos['idtypemb']."', ordering =  '".$datos['ordering']."', alias =  '".$datos['alias']."' , mb_update =  '".$datos['mb_update']."' , state =  '".$datos['state']."' WHERE  idmailbox = '".$datos['idmailbox']."' ";
        $query = $this->db->prepare($str_query);
        $query->execute();
        //devolvemos la coleccion para que la vista la presente.
        return $query;

    }

     public function removeMailbox($idmailbox) {
        //Se establece el valor de 'status' en '3'. Esto es eliminado
        $str_update = 'UPDATE  sis_mailbox SET  state =  "2"  WHERE  idmailbox = '.$idmailbox.' ';
        $update = $this->db->prepare($str_update);
        $update->execute();
        //devolvemos el resultado de la actualización. (true or false)
        return $update;

    }


     public function moveMessage($idmessage,$idmailbox) {
        //realizamos la consulta de usuario por id
        $str_query = 'UPDATE  sis_message SET  idmailbox =  "'.$idmailbox.'" WHERE  idmessage = '.$idmessage.' ';
        $query = $this->db->prepare($str_query);
        $query->execute();
        //devolvemos la coleccion para que la vista la presente.
        return $query;

    }


    public function removeMessage($idmessage) {
        //Se establece el valor de 'status' en '3'. Esto es eliminado
        $str_query = 'UPDATE  sis_message SET  state =  "3" WHERE  idmessage = '.$idmessage.' ';
        $query = $this->db->prepare($str_query);
        $query->execute();
        //devolvemos el resultado de la actualización. (true or false)
        return $query;

    }

    public function setReadMessage($idmessage) {
        //Se establece el valor de 'status' en '2'. Esto es leído
        $str_query = 'UPDATE  sis_message SET  state =  "2" WHERE  idmessage = '.$idmessage.' ';
        $query = $this->db->prepare($str_query);
        $query->execute();
        //devolvemos el resultado de la actualización. (true or false)
        return $query;

    }

    public function setNoreadMessage($idmessage) {
        //Se establece el valor de 'status' en '1'. Esto es no leído
        $str_query = 'UPDATE  sis_message SET  state =  "1" WHERE  idmessage = '.$idmessage.' ';
        $query = $this->db->prepare($str_query);
        $query->execute();
        //devolvemos el resultado de la actualización. (true or false)
        return $query;

    }




}
?>