All pastes #935535 Raw Edit

Anonymous

public text v1 · immutable
·published 2008-03-09 18:40 UTC
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;
			}
		}
	}
?>