Exemple #1
0
 /** Envoie un message à un téléphone
  * @param string $callTo Numéro auquel le coup de téléphone est passé au format XXX-XXXX
  * @param string $message Message à envoyer
  * @param bool $anonyme Si l'appel est envoyé de facon anonyme ou non
  */
 public function envoyerMessage($callTo, $message, $anonyme)
 {
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante
     //Récup des info du téléphone du destinataire
     $query = 'SELECT *' . ' FROM ' . DB_PREFIX . 'item_inv' . ' LEFT JOIN ' . DB_PREFIX . 'item_db ON (db_id = inv_dbid)' . ' WHERE inv_notel=:noTel' . ' AND db_type="telephone"' . ' LIMIT 1;';
     $prep = $db->prepare($query);
     $prep->bindValue(':noTel', $callTo, PDO::PARAM_STR);
     $prep->execute($db, __FILE__, __LINE__);
     $arr = $prep->fetch();
     $prep->closeCursor();
     $prep = NULL;
     //Valider si le téléphone existe
     if ($arr === false) {
         throw new GameException('Le numéro que vous avez composé n\'est pas en service.');
     }
     //Instancier le téléphone
     $tel_distant = new Member_ItemTelephone($arr);
     //Récup des info sur le compte en banque de l'appeleur
     $query = 'SELECT *' . ' FROM ' . DB_PREFIX . 'banque_comptes' . ' WHERE compte_banque=:banque' . ' AND compte_compte=:compte' . ' LIMIT 1;';
     $prep = $db->prepare($query);
     $prep->bindValue(':banque', $this->getNobanque(), PDO::PARAM_STR);
     $prep->bindValue(':compte', $this->getNocompte(), PDO::PARAM_STR);
     $prep->execute($db, __FILE__, __LINE__);
     $arrBanque = $prep->fetch();
     $prep->closeCursor();
     $prep = NULL;
     //Valider si le compte bancaire existe
     if ($arrBanque === false) {
         throw new GameException('Le numéro que vous avez composé n\'est pas en service (compte introuvable)');
     }
     //Instancier le compte bancaire
     $compteAppeleur = new Member_BanqueCompte($arrBanque);
     //Valider si le mode anonyme est demandé & possible
     if ($anonyme && $tel_distant->getAnonymeCapable()) {
         throw new GameException('Mode anonyme impossible avec cet appareil.');
     }
     //destinataire n'a pas d'afficheur
     if ($tel_distant->getTypeAffichage() == 0) {
         $entete_message_dest = 'Votre téléphone ne possède pas d\'afficheur. Appel reçu sur le téléphone #[i]' . $callTo . '[/i]';
     } elseif ($tel_distant->getTypeAffichage() != 2 && $this->getAnonymeCapable()) {
         $entete_message_dest = 'Le numéro de votre interlocuteur est caché. Appel reçu sur le téléphone #[i]' . $callTo . '[/i]';
     } elseif ($tel_distant->getTypeAffichage() == 2 && $this->getAnonymeCapable()) {
         $entete_message_dest = 'Appel provenant du #[i]' . $this->getNotel() . '[/i]. Appel reçu sur le téléphone #[i]' . $callTo . '[/i]';
     } elseif ($tel_distant->getTypeAffichage() != 0 && !$this->getAnonymeCapable()) {
         $entete_message_dest = 'Appel provenant du #[i]' . $this->getNotel() . '[/i]. Appel reçu sur le téléphone #[i]' . $callTo . '[/i]';
     }
     //Si le compte de l'expéditeur contient moins que le cout de l'appel ou si aucun compte n'est associé  au téléphone
     if ($compteAppeleur->getcash() < $this->getPrixAppel() || $this->getNotel() == 0) {
         throw new GameException('Vous n\'avez pas assez de crédit, ou alors aucun compte n\'est associé à ce téléphone.');
     }
     //Si le téléphone du destinataire est dans un sac et/ou n'est pas possédé par un personnage
     $telDistantProprioId = $tel_distant->getIdProprio();
     //Contournement d'un bug de Can't write in this context.
     if (empty($telDistantProprioId)) {
         if (!empty($arr['inv_itemid'])) {
             $query = 'SELECT inv_persoid' . ' FROM ' . DB_PREFIX . 'item_inv' . ' WHERE inv_id=:sacid' . ' LIMIT 1;';
             $prep = $db->prepare($query);
             $prep->bindValue(':sacid', $arr['inv_itemid'], PDO::PARAM_INT);
             $prep->execute($db, __FILE__, __LINE__);
             $arrSac = $prep->fetch();
             $prep->closeCursor();
             $prep = NULL;
             if ($arrSac != NULL && !empty($arrSac['inv_persoid'])) {
                 Member_He::add('System', $arrSac['inv_persoid'], 'Telephone', 'Un téléphone a sonné dans votre sac, vous n\'avez pas eu le temps de répondre.');
             }
         }
         throw new GameException('Aucune réponse, réessayer plus tard.');
     }
     //Retrait de l'argent du compte téléphonique
     $compteAppeleur->changeCash('-', $this->getPrixAppel());
     $compteAppeleur->setCash();
     //On le cout d'appel met dans le fond commun
     $query = 'UPDATE `' . DB_PREFIX . 'banque_comptes`' . ' SET `compte_cash`=`compte_cash`+:cash' . ' WHERE `compte_id`=1;';
     $prep = $db->prepare($query);
     $prep->bindValue(':cash', $this->getPrixAppel(), PDO::PARAM_INT);
     $prep->execute($db, __FILE__, __LINE__);
     $prep->closeCursor();
     $prep = NULL;
     //mise du message dans les HE des personnes impliquées
     $destMsgId = Member_He::add('System', $telDistantProprioId, 'Telephone', $entete_message_dest . '<hr />' . $message);
     $expMsgId = Member_He::add('System', $this->getIdProprio(), 'Telephone', $message);
     //log MJ: on enregistre le message qu'a reçu (et reçu dans son HE) le destinataire
     $query = 'INSERT INTO ' . DB_PREFIX . 'log_telephone' . ' (' . '`id_he_exp`, `id_he_dest`, `date`, `from_tel`, `from_persoid`, `to_tel`, `to_persoid`' . ' )' . ' VALUES' . ' (' . ' :expId, :destId, :date, :fromTel, :fromId, :toTel, :toId' . ' );';
     $prep = $db->prepare($query);
     $prep->bindValue(':expId', $expMsgId, PDO::PARAM_INT);
     $prep->bindValue(':destId', $destMsgId, PDO::PARAM_INT);
     $prep->bindValue(':date', time(), PDO::PARAM_INT);
     $prep->bindValue(':fromTel', $this->getNotel(), PDO::PARAM_STR);
     $prep->bindValue(':fromId', $this->getIdProprio(), PDO::PARAM_INT);
     $prep->bindValue(':toTel', $callTo, PDO::PARAM_STR);
     $prep->bindValue(':toId', $telDistantProprioId, PDO::PARAM_INT);
     $prep->execute($db, __FILE__, __LINE__);
     $prep->closeCursor();
     $prep = NULL;
 }