예제 #1
0
 /**
  * Extrait les membre des donnes de battlnet et et les transforme en objet utilisable de notre coté.
  * @param type $aDataGuildeBnet
  * @param \Core\Model\Guildes $oGuilde
  * @param array $aOptionFiltre lvlMin|
  * @return array de \Core\Model\Personnages
  * @throws Exception
  */
 public static function extraitMembreDepuisBnetGuilde($aDataGuildeBnet, \Commun\Model\Guildes $oGuilde, array $aOptionFiltre)
 {
     if (!isset($aDataGuildeBnet)) {
         throw new Exception("Les datas pour l'extraction de membres issues de bnet ne peuvent être vide.");
     }
     $aPersonnage = array();
     $lvlMin = 0;
     if (isset($aOptionFiltre)) {
         if (isset($aOptionFiltre['lvlMin'])) {
             $lvlMin = $aOptionFiltre['lvlMin'];
         }
     }
     if (isset($aDataGuildeBnet['members'])) {
         foreach ($aDataGuildeBnet['members'] as $aCharacter) {
             if ($aCharacter['character']['level'] >= $lvlMin) {
                 //                    $oPersonnage = new \Commun\Model\Personnages();
                 //                    $oPersonnage->setNom($aCharacter['character']['name']);
                 //                    $oPersonnage->setNiveau($aCharacter['character']['level']);
                 //                    $oPersonnage->setIdGuildes($oGuilde->getIdGuildes());
                 //                    $oPersonnage->setIdClasses($aCharacter['character']['class']);
                 //                    //$oPersonnage->setIdFaction($aCharacter['character']['faction']);
                 //                    $oPersonnage->setIdFaction($oGuilde->getIdFaction());
                 //                    $oPersonnage->setIdRace($aCharacter['character']['race']);
                 //                    $oPersonnage->setGenre($aCharacter['character']['gender']);
                 //                    $oPersonnage->setRoyaume($aCharacter['character']['realm']);
                 //                    $oPersonnage->setminiature($aCharacter['character']['thumbnail']);
                 //                    $aPersonnage[] = $oPersonnage;
                 $oPersonnage = \Core\Util\ParserWow::extraitPersonnageDepuisBnet($aCharacter['character']);
                 $oPersonnage->setIdGuildes($oGuilde->getIdGuildes());
                 $oPersonnage->setIdFaction($oGuilde->getIdFaction());
                 $aPersonnage[] = $oPersonnage;
             }
         }
         return $aPersonnage;
     }
 }
예제 #2
0
 /**
  * import un item depuis un tableau.
  * @param array $aPost
  * @return  \Commun\Model\Items
  */
 public function importItem($aPost)
 {
     try {
         $aInfoItem = $this->extractInfoItem($aPost['id']);
         try {
             $oTabItems = $this->selectBy(array("idBnet" => $aInfoItem[0]));
         } catch (\Exception $exc) {
             throw new DatabaseException(3000, 4, $this->_getServiceLocator(), $aPost, $exc);
         }
         // si n'existe pas on importe
         if (!$oTabItems) {
             $itemBnet = $this->_getServBnet()->warcraft(new Region(Region::EUROPE, "en_GB"))->items();
             $oBnetItem = $itemBnet->find($aInfoItem[0]);
             if (!$oBnetItem) {
                 throw new BnetException(399, $this->_getServiceLocator(), $aPost);
             }
             $oItem = \Core\Util\ParserWow::extraitItemDepuisBnet($oBnetItem);
             return $this->saveOrUpdateItem($oItem);
         }
         return $oTabItems;
     } catch (\Exception $ex) {
         throw new \Exception("Erreur lors de l'import de l'item", 0, $ex);
     }
 }
예제 #3
0
 public function importZone($aPost)
 {
     try {
         $zone = $this->_getServBnet()->warcraft(new Region(Region::EUROPE, "en_GB"))->zones();
         $aZoneBnet = $zone->find($aPost['idZone']);
         if (!$aZoneBnet) {
             throw new BnetException(499, $this->_getServiceLocator(), $aPost);
         }
         $oZone = \Core\Util\ParserWow::extraitZoneDepuisBnetZone($aZoneBnet);
         $oZone = $this->saveOrUpdateZone($oZone);
         //mode de difficulté
         //supprime toutes les clé correpsondnat au boss dans la table BossesHasModeDifficulté
         $oTabZoneHasDifficulte = $this->_getTableZoneHasModeDiffculte()->selectBy(array("idZone" => $oZone->getIdZone()));
         if ($oTabZoneHasDifficulte) {
             if (is_array($oTabZoneHasDifficulte)) {
                 foreach ($oTabZoneHasDifficulte as $oDiff) {
                     $this->_getTableZoneHasModeDiffculte()->delete($oDiff);
                 }
             } else {
                 $this->_getTableZoneHasModeDiffculte()->delete($oTabZoneHasDifficulte);
             }
         }
         foreach ($oZone->getModeDifficulte() as $oDiff) {
             $oTabModeDifficulte = $this->_getTableModeDifficulte()->selectBy(array("nom_bnet" => $oDiff));
             $oZoneHasModeDiff = new \Commun\Model\ZoneHasModeDiffculte();
             $oZoneHasModeDiff->setIdZone($oZone->getIdZone());
             $oZoneHasModeDiff->setIdMode($oTabModeDifficulte->getIdMode());
             $this->_getTableZoneHasModeDiffculte()->insert($oZoneHasModeDiff);
         }
         if ($aPost['imp-boss'] == "Oui") {
             $aBossZone = \Core\Util\ParserWow::extraitBossDepuisBnetZone($aZoneBnet, $oZone);
         } else {
             $aBossZone = array();
         }
         //supprime toutes les clé correpsondnat au zone dans la table ZoneHasBosses
         //            $oTabZoneHasBoss = $this->_getTableZoneHasBosses()->selectBy(
         //                    array("idZone" => $oZone->getIdZone()));
         //            if ($oTabZoneHasBoss) {
         //                if (is_array($oTabZoneHasBoss)) {
         //                    foreach ($oTabZoneHasBoss as $oZoneHasBoss) {
         //                        $this->_getTableZoneHasBosses()->delete($oZoneHasBoss);
         //                    }
         //                } else {
         //                    $this->_getTableZoneHasBosses()->delete($oTabZoneHasBoss);
         //                }
         //            }
         foreach ($aBossZone as $oBoss) {
             // table boss
             $oTabBoss = $this->_getTableBoss()->selectBy(array("idBosses" => $oBoss->getIdBosses()));
             // si n'existe pas on insert
             if (!$oTabBoss) {
                 $this->_getTableBoss()->insert($oBoss);
             } else {
                 // sinon on update
                 $this->_getTableBoss()->update($oBoss);
             }
             // table npc
             //                //supprime toutes les clé correspondant au boss dans la table BossesHasNpc
             //                $oTabBossHasNpc = $this->_getTableBossesHasNpc()->selectBy(
             //                        array("idBosses" => $oBoss->getIdBosses()));
             //                if ($oTabBossHasNpc) {
             //                    if (is_array($oTabBossHasNpc)) {
             //                        foreach ($oTabBossHasNpc as $oNpc) {
             //                            $this->_getTableBossesHasNpc()->delete($oNpc);
             //                        }
             //                    } else {
             //                        $this->_getTableBossesHasNpc()->delete($oTabBossHasNpc);
             //                    }
             //                }
             foreach ($oBoss->getNpc() as $oNpc) {
                 $oTabNpc = $this->_getTableNpc()->selectBy(array("idNpc" => $oNpc->getIdNpc()));
                 // si n'existe pas on insert
                 if (!$oTabNpc) {
                     $this->_getTableNpc()->insert($oNpc);
                 } else {
                     // sinon on update
                     $this->_getTableNpc()->update($oNpc);
                 }
                 $oBossHasNpc = new \Commun\Model\BossesHasNpc();
                 $oBossHasNpc->setIdBosses($oBoss->getIdBosses());
                 $oBossHasNpc->setIdNpc($oNpc->getIdNpc());
                 $oTabBossANpc = $this->_getTableBossesHasNpc()->selectBy(array("idNpc" => $oBossHasNpc->getIdNpc(), 'idBosses' => $oBossHasNpc->getIdBosses()));
                 // si le lien boss / npc n'existe pas on le cree
                 if (!$oTabBossANpc) {
                     $this->_getTableBossesHasNpc()->insert($oBossHasNpc);
                 }
             }
             $oZoneHasBoss = new \Commun\Model\ZoneHasBosses();
             $oZoneHasBoss->setIdBosses($oBoss->getIdBosses());
             $oZoneHasBoss->setIdZone($oZone->getIdZone());
             $oTabZoneABoss = $this->_getTableZoneHasBosses()->selectBy(array("idZone" => $oZoneHasBoss->getIdZone(), 'idBosses' => $oZoneHasBoss->getIdBosses()));
             // si le lien zone / boss n'existe pas on le cree
             if (!$oTabZoneABoss) {
                 $this->_getTableZoneHasBosses()->insert($oZoneHasBoss);
             }
         }
     } catch (\Exception $ex) {
         throw new \Commun\Exception\LogException("Erreur lors de l'import de zone", 0, $this->_getServiceLocator(), $ex, $aPost);
     }
 }
예제 #4
0
 /**
  * import une guilde depuis un tableau.
  * @param \Commun\Model\Guildes
  */
 public function importGuilde($aPost)
 {
     try {
         $guild = $this->_getServBnet()->warcraft(new Region(Region::EUROPE, "en_GB"))->guilds();
         $guild->on($aPost['serveur']);
         $aOptionBnet = array();
         if ($aPost['imp-membre'] == "Oui") {
             $aOptionBnet[] = 'members';
         }
         $aGuildeBnet = $guild->find($aPost['guilde'], $aOptionBnet);
         if (!$aGuildeBnet) {
             $aError = array();
             $aError[] = $aPost['serveur'];
             $aError[] = $aPost['guilde'];
             $aError[] = $aPost['imp-membre'];
             throw new BnetException(199, $this->_getServiceLocator(), $aError);
         }
         $aOptionFiltre = array();
         if (isset($aPost['lvlMin'])) {
             $aOptionFiltre = array('lvlMin' => $aPost['lvlMin']);
         }
         $oGuilde = \Core\Util\ParserWow::extraitGuildeDepuisBnetGuilde($aGuildeBnet);
         $oGuilde = $this->saveOrUpdateGuilde($oGuilde);
         if ($aPost['imp-membre'] == "Oui") {
             $aMembreGuilde = \Core\Util\ParserWow::extraitMembreDepuisBnetGuilde($aGuildeBnet, $oGuilde, $aOptionFiltre);
         } else {
             $aMembreGuilde = array();
         }
         foreach ($aMembreGuilde as $oPersonnage) {
             $this->_getTablePersonnage()->saveOrUpdatePersonnage($oPersonnage, $oGuilde);
         }
         return $oGuilde;
     } catch (\Exception $ex) {
         throw new \Commun\Exception\LogException("Erreur lors de l'import de guilde", 0, $this->_getServiceLocator(), $ex, $aPost);
     }
 }
예제 #5
0
 /**
  * Ajoute les liens wowhead au loots.
  * @param array $aLoots
  * @return array
  */
 private function addLienWowHeadItem($aLoots)
 {
     foreach ($aLoots as $key => $loot) {
         $wowhead['idBnet'] = $loot['idBnet'];
         $wowhead['bonus'] = $loot['bonus'];
         $aLoots[$key]['wowHead'] = \Core\Util\ParserWow::genereLienItemWowHead($wowhead);
     }
     return $aLoots;
 }
예제 #6
0
 /**
  * Traitement de l'import Bnet.
  *
  * @return array
  */
 public function importTraitementAction()
 {
     $aOptPersonnage = array('nom' => '', 'serveur' => '');
     $this->layout('layout/ajax');
     //$this->layout('backend/layout');
     $oRequest = $this->getRequest();
     if ($oRequest->isPost()) {
         $aPost = $oRequest->getPost();
         $this->getTablePersonnage()->beginTransaction();
         try {
             $aPersoBnet = $this->getTablePersonnage()->importPersonnage($aPost);
             $oPersonnage = \Core\Util\ParserWow::extraitPersonnageDepuisBnet($aPersoBnet);
             $this->getTablePersonnage()->saveOrUpdatePersonnage($oPersonnage);
             $this->getTablePersonnage()->commit();
             $msg = $this->_getServTranslator()->translate("Le personnage a été importé avec succès.");
             $this->_getLogService()->log(LogService::INFO, $msg, LogService::USER, $aPost);
         } catch (\Exception $exc) {
             // on rollback en cas d'erreur
             $this->getTablePersonnage()->rollback();
             $this->_getLogService()->log(LogService::ERR, $exc->getMessage(), LogService::USER, $aPost);
             $aAjaxEx = \Core\Util\ParseException::tranformeExceptionToArray($exc);
             $result = new JsonModel(array('error' => $aAjaxEx));
             return $result;
         }
     }
     $result = new JsonModel(array('success' => array('msg' => $this->_getServTranslator()->translate('Personnage importé avec succès'))));
     return $result;
 }
 /**
  * Convertit le retour de getQueryBaseLoot (id entre autre) en version lisible
  * @param type $aAllItemPersonnage
  * @return \Commun\Table\LogApiProblem
  */
 public function traiterItemsLoot($aAllItemPersonnage, $bWithId = false)
 {
     $aReturn = array();
     foreach ($aAllItemPersonnage as $item) {
         $oTabItem = $this->getTableItems()->selectBy(array("idItem" => $item['idItem']));
         if (!$oTabItem) {
             return new LogApiProblem(404, sprintf($this->_getServTranslator()->translate("L'item [ %s ] n'a pas été trouvé.")), $this->_getServTranslator()->translate("Non trouvé"), $this->_getServTranslator()->translate("Personnage / Serveur inconnu"), array("idItem" => $item['idItem']), $this->_service);
         }
         $aLien = array();
         $aLien['idBnet'] = $oTabItem->getIdBnet();
         $aLien['bonus'] = $item['bonus'];
         $aItem = array();
         $aItem['nom'] = $oTabItem->getNom();
         $aItem['lien'] = \Core\Util\ParserWow::genereLienItemWowHead($aLien);
         $aItem['date'] = $item['date'];
         $aItem['roster'] = $item['roster'];
         $aItem['zone'] = $item['zone'];
         $aItem['boss'] = $item['boss'];
         $aItem['nom_personnage'] = $item['nom_personnage'];
         $aItem['royaume_personnage'] = $item['royaume_personnage'];
         switch ($item['valeur']) {
             case 0.0:
                 $aItem['spe'] = $this->_getServTranslator()->translate('principal');
                 break;
             case 1.0:
                 $aItem['spe'] = $this->_getServTranslator()->translate('secondaire');
                 break;
             case 2.0:
                 $aItem['spe'] = $this->_getServTranslator()->translate('3');
                 break;
             case 3.0:
                 $aItem['spe'] = $this->_getServTranslator()->translate('4');
                 break;
             default:
                 $aItem['spe'] = $this->_getServTranslator()->translate('principal');
                 break;
         }
         if ($bWithId) {
             $this->ajouteIds($aItem, $item);
         }
         $aReturn[] = $aItem;
     }
     return $aReturn;
 }
예제 #8
0
 /**
  * Sauvegarde les personnages du raid.
  * @param array $aMembre
  * @param \Commun\Model\Raids $oRaid
  * @param sring $sServeur
  * @param \Zend\Config\Config $oData
  * @param \Zend\Config\Writer\Json $oWriter
  * @return \Core\Model\Personnages
  */
 private function savePersonnages($aMembre, $oRaid, $sServeur, \Zend\Config\Config $oData, \Zend\Config\Writer\Json $oWriter)
 {
     try {
         $aLstPersonnage = array();
         foreach ($aMembre as $aPersonnage) {
             $sNom = $aPersonnage['name'];
             $sServeurPersonnage = $sServeur;
             // si le nom contient un '-' alors il est suivi du nom du serveur
             $pos = strrpos($sNom, "-");
             if ($pos !== false) {
                 $sServeurPersonnage = substr($sNom, $pos + 1);
                 $sNom = substr($sNom, 0, $pos);
             }
             $sServeurPersonnage = preg_replace('/(\\w+)([A-Z])/U', '\\1 \\2', $sServeurPersonnage);
             //    $sServeurPersonnage = str_replace('des', ' des', $sServeurPersonnage);
             //TODO Anta A revoir
             $sServeurPersonnage = str_replace('Croisadeécarlate', 'Croisade écarlate', $sServeurPersonnage);
             $sServeurPersonnage = str_replace("Pozzodell'Eternità", "Pozzo dell'Eternità", $sServeurPersonnage);
             $sServeurPersonnage = str_replace("Chantséternels", "Chants éternels", $sServeurPersonnage);
             $sServeurPersonnage = str_replace("Conseildes Ombres", "Conseil des Ombres", $sServeurPersonnage);
             //fin TODO Anta
             $aOptPersonnage = array('nom' => $sNom, 'serveur' => $sServeurPersonnage);
             // ne marche pas avec les membre sur sargeras et chez mystra (c'est le serveur sargeras qui du coup utiliser pour chercher la guilde mystra)
             // pas très grave
             //                if (isset($aPersonnage['guild'])) {
             //                    $aOptGuilde = array(
             //                        'guilde' => $aPersonnage['guild'],
             //                        'serveur' => $sServeurPersonnage,
             //                        'lvlMin' => 100,
             //                        'imp-membre' => 'Non',
             //                    );
             //                    $oGuildes = $this->getTableGuilde()->importGuilde($aOptGuilde);
             //                }
             $aPersoBnet = $this->getTablePersonnage()->importPersonnage($aOptPersonnage);
             $oPersonnage = \Core\Util\ParserWow::extraitPersonnageDepuisBnet($aPersoBnet);
             $oPersonnage = $this->getTablePersonnage()->saveOrUpdatePersonnage($oPersonnage);
             // on cree le lien raid personnage
             $this->getTableRaidPersonnages()->saveOrUpdateRaid($oPersonnage, $oRaid);
             $aLstPersonnage[] = $oPersonnage;
         }
         return $aLstPersonnage;
     } catch (\Exception $ex) {
         throw new \Exception("Erreur lors de la sauvagarde des personnages", 0, $ex);
     }
 }
 /**
  * Action pour la majour des personnage du roster.
  *
  * @return array
  */
 public function majAction()
 {
     $id = (int) $this->params()->fromRoute('id', 0);
     try {
         $oEntite = $this->getTableRoster()->findRow($id);
         if (!$oEntite) {
             $this->flashMessenger()->addMessage($this->_getServTranslator()->translate("Identifiant de roster inconnu."), 'error');
             return $this->redirect()->toRoute('backend-roster-list');
         }
     } catch (\Exception $ex) {
         $this->flashMessenger()->addMessage($this->_getServTranslator()->translate("Une erreur est survenue lors de la récupération du roster."), 'error');
         return $this->redirect()->toRoute('backend-roster-list');
     }
     $this->layout('layout/ajax');
     $oRequest = $this->getRequest();
     try {
         $oTabRosterHasPersonnage = $this->getTableRosterHasPersonnage()->select(array('idRoster' => $id));
         if (isset($oTabRosterHasPersonnage)) {
             foreach ($oTabRosterHasPersonnage as $aCharacter) {
                 $oPerso = $this->getTablePersonnage()->findRow($aCharacter['idPersonnage']);
                 $aPersonnage = array('serveur' => $oPerso->getRoyaume(), 'nom' => $oPerso->getNom());
                 $aPersoBnet = $this->getTablePersonnage()->importPersonnage($aPersonnage);
                 $oPersonnage = \Core\Util\ParserWow::extraitPersonnageDepuisBnet($aPersoBnet);
                 $this->getTablePersonnage()->saveOrUpdatePersonnage($oPersonnage);
             }
         }
         return new JsonModel(array('success' => array('msg' => $this->_getServTranslator()->translate('Personnage mis à jour avec succès'))));
     } catch (\Exception $ex) {
         $aAjaxEx = \Core\Util\ParseException::tranformeExceptionToArray($ex);
         $result = new JsonModel(array('error' => $aAjaxEx));
         return $result;
     }
 }