rendered paste body<?php
/**
* Cette classe réprésente la table 'message' de la base de données.
* Elle permet la création, la modification et la suppression d'un ou plusieurs messages.
* De plus, elle permet la sélection de messages selon le destinataire ou l'expéditeur.
*
*/
class Message extends Zend_Db_Table {
protected $_name = 'message';
protected $_primary = 'id';
/*
* Envoyer un message :
* $sender : id de l'expéditeur
* $addressee : id du destinataire
* $title : titre du message
* $message : corps du message
*/
function send($sender, $addressee, $object, $message) {
$state = array(
"errors" => '',
"has_error" => false,
"success" => false,
);
if(empty($sender) || !is_numeric($sender)) {
$state['has_error'] = true;
$state['errors']['sender'] = "Veuillez spécifier un expéditeur pour ce message !";
}
if(empty($addressee)) {
$state['has_error'] = true;
$state['errors']['addressee'] = "Veuillez spécifier un destinataire pour ce message !";
}else {
$membre = new Membre();
$destinataire = $membre->getMembreByName($addressee);
if(empty($destinataire)) {
$state['has_error'] = true;
$state['errors']['addressee'] = "Destinataire inconnu !";
}else {
$id_addressee = $destinataire->id;
if($destinataire->id == $sender) {
$state['has_error'] = true;
$state['errors']['addressee'] = "Le destinataire et l'expéditeur ne peuvent être les mêmes !";
}
}
}
if(empty($object) || (strlen($object) > 50) ||(strlen($object) < 4)) {
$state['has_error'] = true;
$state['errors']['object'] = "Veuillez spécifier un objet de 4 à 50 caractères pour ce message !";
}
if(empty($message) || (strlen($message) < 10)) {
$state['has_error'] = true;
$state['errors']['message'] = "Veuillez spécifier un texte d'au moins 10 caractères pour ce message !";
}
// On vérifie qu'il n'y a pas d'erreur jusque là
if($state['has_error'] == false) {
$this->insert(array(
'id_sender' => $sender,
'id_receiver' => $id_addressee,
'object' => $object,
'message' => $message,
'send_time' => time(),
'read_time' => '0'
));
$state['success'] = true;
}
return $state;
}
/*
* Supprimer un message.
* $message : id du message.
*/
function remove($message) {
$where = $this->getAdapter()->quoteInto('id = ?', $message->id);
$this->delete($where);
}
/*
* Récupere les messages de la boîte de répection du membre 'member'.
*/
function getReceivedMessages($member) {
$db = $this->getAdapter();
if($member && is_numeric($member->id)) {
$where = $db->quoteInto('e.id_receiver = ?', array($member->id));
$select = $db->select()
->from(array('e' => 'message'))
->joinLeft(array('m' => 'membre'), 'e.id_sender = m.id', array('m.nom as nom_membre'))
->where($where);
return $db->fetchAll($select);
}
return null;
}
/*
* Récupere les messages de la boîte d'envoi du membre 'member'.
*/
function getSendBoxMessages($member) {
$db = $this->getAdapter();
if($member && is_numeric($member->id)) {
$where = $db->quoteInto('e.id_sender = ?', array($member->id));
$select = $db->select()
->from(array('e' => 'message'))
->joinLeft(array('m' => 'membre'), 'e.id_receiver = m.id', array('m.nom as nom_membre'))
->where($where);
return $db->fetchAll($select);
}
return null;
}
function read($id) {
$db = $this->getAdapter();
if(is_numeric($id)) {
$where = $db->quoteInto('e.id = ?', array($id));
$select = $db->select()
->from(array('e' => 'message'))
->joinLeft(array('m' => 'membre'), 'e.id_sender = m.id', array('m.nom as sender_name'))
->joinLeft(array('b' => 'membre'), 'e.id_receiver = b.id', array('b.nom as receiver_name'))
->where($where);
$message = $db->fetchRow($select);
if(!empty($message) && $message->read_time == 0) {
$readtime = array(
'read_time' => time()
);
$where = $db->quoteInto('id = ?', array($id));
$this->update($readtime, $where);
}
return $message;
}
}
}
?>