Exemplo n.º 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;
 }
Exemplo n.º 2
0
 public static function cabineTelephoner(&$perso, &$numero_destinataire, &$message)
 {
     $dbMgr = DbManager::getInstance();
     //Instancier le gestionnaire
     $db = $dbMgr->getConn('game');
     //Demander la connexion existante
     $errorUrl = '?popup=1&amp;m=Action_Lieu_TelephonerCabine';
     //Récup des info du téléphone de l'appelé
     $query = 'SELECT *' . ' FROM ' . DB_PREFIX . 'item_inv' . ' LEFT JOIN ' . DB_PREFIX . 'item_db ON (db_id = inv_dbid)' . ' WHERE db_type="telephone"' . ' AND inv_notel=:noTel' . ' LIMIT 1;';
     $prep = $db->prepare($query);
     $prep->bindValue(':noTel', $numero_destinataire, PDO::PARAM_STR);
     $prep->execute($db, __FILE__, __LINE__);
     $arr = $prep->fetch();
     $prep->closeCursor();
     $prep = NULL;
     $tel_distant = new Member_ItemTelephone($arr);
     //Si le téléphone n'existe pas
     if (empty($tel_distant)) {
         return fctErrorMSG('Numéro pas attribué.', $errorUrl);
     }
     $affichage_dest = $tel_distant->getTypeAffichage();
     $lieu_perso = $perso->getLieu()->getNom();
     //Entête selon le type d'affichage que possède l'utilisateur
     if ($affichage_dest == 2) {
         $entete_mess_dest = 'Appel provenant d\'une cabine téléphonique (' . $lieu_perso . '). ';
     } else {
         $entete_mess_dest = 'Votre téléphone ne possède pas d\'afficheur. ';
     }
     $entete_mess_dest .= 'Appel reçu sur le téléphone #' . $numero_destinataire;
     $id_destinataire = $tel_distant->getIdProprio();
     $id_expediteur = $perso->getId();
     $cout_appel = 2;
     $cash_exp = $perso->getCash();
     //Valider si le personnage à assez d'argent en poche pour téléphoner de la cabine.
     if ($cash_exp < $cout_appel) {
         return fctErrorMSG('Vous n\'avez pas assez d\'argent pour passer cet appel.', $errorUrl);
     }
     //Valider si le téléphone est possédé par quelqu'un
     if ($id_destinataire === NULL) {
         return fctErrorMSG('Ca sonne occupé. Réessayer plus tard.', $errorUrl);
     }
     //Retrait du cash du portefeuille du gars
     $perso->changeCash('-', $cout_appel);
     $perso->setCash();
     //Mise de l'argent sur le compte commun
     $query = 'SELECT *' . ' FROM ' . DB_PREFIX . 'banque_comptes' . ' WHERE compte_id=1' . ' LIMIT 1;';
     $prep = $db->prepare($query);
     $prep->execute($db, __FILE__, __LINE__);
     $arr = $prep->fetch();
     $prep->closeCursor();
     $prep = NULL;
     if ($arr === false) {
         return fctErrorMSG('Le fond commun n\'existe plus. Contacter un MJ.', $errorUrl);
     }
     $compteFC = new Member_BanqueCompte($arr);
     $compteFC->changeCash('+', $cout_appel);
     $compteFC->setCash();
     //Inscription de l'opération au fond commun
     $compteFC->add_bq_hist('', 'TELC', 0, $cout_appel);
     //Mise du message dans les HE des personnes impliquées
     $id_mess_he_dest = Member_He::add("Telephone", $id_destinataire, 'Telephone', $entete_mess_dest . "[sep]" . $message);
     $id_mess_he_exp = Member_He::add("Telephone", $id_expediteur, "Telephone", $message);
     //Log MJ
     $query = 'INSERT INTO ' . DB_PREFIX . 'log_telephone' . ' (`id_he_exp`, `id_he_dest`, `date`, `from_tel`, `from_persoid`, `to_tel`, `to_persoid`)' . ' VALUES(' . ' :fromMsgId,' . ' :toMsgId,' . ' UNIX_TIMESTAMP(),' . ' :lieu,' . ' :fromPersoId,' . ' :toNoTel,' . ' :toPersoId' . ' );';
     $prep = $db->prepare($query);
     $prep->bindValue(':fromMsgId', $id_mess_he_exp, PDO::PARAM_INT);
     $prep->bindValue(':toMsgId', $id_mess_he_dest, PDO::PARAM_INT);
     $prep->bindValue(':lieu', $lieu_perso . '(Cabine)', PDO::PARAM_STR);
     $prep->bindValue(':fromPersoId', $id_expediteur, PDO::PARAM_INT);
     $prep->bindValue(':toNoTel', $numero_destinataire, PDO::PARAM_STR);
     $prep->bindValue(':toPersoId', $id_destinataire, PDO::PARAM_INT);
     $prep->execute($db, __FILE__, __LINE__);
     $prep->closeCursor();
     $prep = NULL;
 }