/** * Sauvegarde ou met a jour le lien roster /opersonnage/role passé. * @param \Commun\Model\Roster $oRoster * @return \Core\Model\Roster */ public function saveOrUpdateRoster(\Commun\Model\Roster $oRoster) { try { // mise en minuscule pour faciliter les rechecrhe et uniformisé les données $oRoster->setNom(strtolower($oRoster->getNom())); //recherche si le roster existe try { $oTabRoster = $this->selectBy(array("idRoster" => $oRoster->getIdRoster())); } catch (\Exception $exc) { throw new DatabaseException(6000, 4, $this->_getServiceLocator(), $oRoster->getArrayCopy(), $exc); } //si l'e nom existe et que c'est le meme id'identifiant existe, if ($oTabRoster) { try { $oRosterTmp = $this->selectBy(array("nom" => $oRoster->getNom())); } catch (\Exception $exc) { throw new DatabaseException(6000, 4, $this->_getServiceLocator(), $oRoster->getNom(), $exc); } //si le nom existe if ($oRosterTmp) { // on leve un exception de contrainte unique throw new DatabaseException(6000, 5, $this->_getServiceLocator(), $oRoster->getNom()); } //on met a jour try { $this->update($oRoster); // on recupere les anciens personnage bank et disenchant $oOldBank = $this->_getTablePersonnage()->selectBy(array('nom' => strtolower($oTabRoster->getNom() . $this->_getConfig()["roster"]["suffixe"]["bank"]))); $oOldDisenchant = $this->_getTablePersonnage()->selectBy(array('nom' => strtolower($oTabRoster->getNom() . $this->_getConfig()["roster"]["suffixe"]["disenchant"]))); // on met a jour leur nom $oOldBank->setNom($oRoster->getNom() . $this->_getConfig()["roster"]["suffixe"]["bank"]); $oOldDisenchant->setNom($oRoster->getNom() . $this->_getConfig()["roster"]["suffixe"]["disenchant"]); // on met a jour en base $this->_getTablePersonnage()->saveOrUpdatePersonnage($oOldBank); $this->_getTablePersonnage()->saveOrUpdatePersonnage($oOldDisenchant); } catch (\Exception $exc) { throw new DatabaseException(6000, 1, $this->_getServiceLocator(), $oRoster->getArrayCopy(), $exc); } } try { $oTabRoster = $this->selectBy(array("nom" => $oRoster->getNom())); } catch (\Exception $exc) { throw new DatabaseException(6000, 4, $this->_getServiceLocator(), $oRoster->getArrayCopy(), $exc); } //si le nom existe et que les id sont differents if ($oTabRoster && $oTabRoster->getIdRoster() != $oRoster->getIdRoster()) { // on leve un exception de contrainte unique throw new DatabaseException(6000, 5, $this->_getServiceLocator(), $oRoster->getArrayCopy()); } // si n'existe pas on insert if (!$oTabRoster) { try { $oRoster->setKey($this->getRosterKey($oRoster->getNom())); $this->insert($oRoster); $oRoster->setIdRoster($this->lastInsertValue); // on cree les deux personnage lié au roster $oRosterBank = new \Commun\Model\Personnages(); $oRosterBank->setNom($oRoster->getNom() . $this->_getConfig()["roster"]["suffixe"]["bank"]); $oRosterBank->setIsTech(true); $oRosterBank->setGenre(1); $oRosterBank->setIdClasses(1); $oRosterBank->setIdRace(1); $oRosterBank->setIdFaction(1); $oRosterBank->setNiveau(0); $oRosterBank->setRoyaume("bank"); $oRosterDisenchant = new \Commun\Model\Personnages(); $oRosterDisenchant->setNom($oRoster->getNom() . $this->_getConfig()["roster"]["suffixe"]["disenchant"]); $oRosterDisenchant->setIsTech(true); $oRosterDisenchant->setGenre(1); $oRosterDisenchant->setIdClasses(1); $oRosterDisenchant->setIdRace(1); $oRosterDisenchant->setIdFaction(1); $oRosterDisenchant->setNiveau(0); $oRosterDisenchant->setRoyaume("disenchant"); // on sauvegarde en base $this->_getTablePersonnage()->saveOrUpdatePersonnage($oRosterBank); $this->_getTablePersonnage()->saveOrUpdatePersonnage($oRosterDisenchant); } catch (\Exception $exc) { $aError = array(); $aError[] = $oRoster->getArrayCopy(); if (isset($oRosterBank)) { $aError[] = $oRosterBank->getArrayCopy(); } if (isset($oRosterDisenchant)) { $aError[] = $oRosterDisenchant->getArrayCopy(); } throw new DatabaseException(6000, 2, $this->_getServiceLocator(), $aError, $exc); } } return $oRoster; } catch (\Exception $ex) { throw new \Commun\Exception\LogException("Erreur lors de la sauvegarde ou mise à jour du roster", 0, $this->_getServiceLocator(), $ex); } }
/** * Extrait les informations du personnagee des donnes de battlnet et et les transforme en objet utilisable de notre coté. * Manque la faction qui n'est pas disponible * @param type $aDataPersonnageBnet * @return \Core\Model\Personnages * @throws Exception */ public static function extraitPersonnageDepuisBnet($aDataPersonnageBnet) { if (!isset($aDataPersonnageBnet)) { throw new \Exception('Les datas personnages issues de bnet ne peuvent être vide.'); } $oPersonnage = new \Commun\Model\Personnages(); $oPersonnage->setNom($aDataPersonnageBnet['name']); $oPersonnage->setNiveau($aDataPersonnageBnet['level']); $oPersonnage->setIdClasses($aDataPersonnageBnet['class']); if (isset($aDataPersonnageBnet['faction'])) { $oPersonnage->setIdFaction($aDataPersonnageBnet['faction']); } $oPersonnage->setIdRace($aDataPersonnageBnet['race']); $oPersonnage->setGenre($aDataPersonnageBnet['gender']); $oPersonnage->setRoyaume($aDataPersonnageBnet['realm']); $oPersonnage->setminiature($aDataPersonnageBnet['thumbnail']); $oPersonnage->setIsTech(false); if (isset($aDataPersonnageBnet['items'])) { $oPersonnage->setIlvl($aDataPersonnageBnet['items']['averageItemLevelEquipped']); } return $oPersonnage; }