/** * 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; } }
/** * 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); } }
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); } }
/** * 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); } }
/** * 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; }
/** * 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; }
/** * 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; } }