/** * 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; }
/** * 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); } }
/** * Action pour la création. * * @return array */ public function createAction() { $oForm = new \Commun\Form\PersonnagesForm($this->getServiceLocator()); $oRequest = $this->getRequest(); $oFiltre = new \Commun\Filter\PersonnagesFilter(); $oForm->setInputFilter($oFiltre->getInputFilter()); if ($oRequest->isPost()) { $oEntite = new \Commun\Model\Personnages(); $oForm->setData($oRequest->getPost()); if ($oForm->isValid()) { try { $oEntite->exchangeArray($oForm->getData()); $this->getTablePersonnage()->insert($oEntite); $msg = $this->_getServTranslator()->translate("Le personnage a été créé avec succès."); $this->_getLogService()->log(LogService::INFO, $msg, LogService::USER, $oRequest->getPost()); $this->flashMessenger()->addMessage($msg, 'success'); return $this->redirect()->toRoute('backend-personnages-list'); } catch (\Exception $exc) { $msg = $this->_getServTranslator()->translate("Une erreur est survenue lors de la création du personnage."); $this->_getLogService()->log(LogService::ERR, $exc->getMessage(), LogService::USER, $oRequest->getPost()); $this->flashMessenger()->addMessage($msg, 'error'); } } } // Pour optimiser le rendu $oViewModel = new ViewModel(); $oViewModel->setTemplate('backend/personnages/create'); return $oViewModel->setVariables(array('form' => $oForm)); }