/** * Créer la version par defaut pour le scénario en cours de création et * en retourne son identifiant. * * @return integer */ public function createDefaultVersion(EiUserDefaultPackage $ei_user_default_package = null, Doctrine_Connection $conn = null) { if ($conn == null) { $conn = Doctrine_Manager::connection(); } //creation de la version par defaut du scénario $def_version = new EiVersion(); $def_version->ei_scenario_id = $this->getId(); $def_version->libelle = 'S' . $this->getId() . '-version1'; $def_version->save($conn); if ($ei_user_default_package != null) { //Création de la relation entre la version du scénario et le package $ei_scenario_package = new EiScenarioPackage(); $ei_scenario_package->setEiScenarioId($this->getId()); $ei_scenario_package->setPackageId($ei_user_default_package->getTicketId()); $ei_scenario_package->setPackageRef($ei_user_default_package->getTicketRef()); $ei_scenario_package->setEiVersionId($def_version->getId()); $ei_scenario_package->save($conn); } $ei_version_structure = new EiVersionStructure(); $ei_version_structure->setName("Root"); $ei_version_structure->setEiVersion($def_version); $ei_version_structure->setType(EiVersionStructure::$TYPE_BLOCK); $ei_version_structure->save($conn); $treeObject = Doctrine_Core::getTable('EiVersionStructure')->getTree(); $treeObject->createRoot($ei_version_structure); return $def_version->getId(); }
public function executeCreateClone(sfWebRequest $request) { $this->checkProject($request); $this->checkProfile($request, $this->ei_project); $this->checkEiScenario($request, $this->ei_project); $this->checkEiVersion($request, $this->ei_scenario); $this->getUrlParameters($request); $this->defaultPackage = $this->getDefaultPackage($this->ei_user, $this->ei_project); if ($this->defaultPackage != null) { //on vérifie que les identiefiants du package envoyé correspondent à ceux du package par défaut if ($this->defaultPackage->getTicketId() != intval($request->getParameter('package_id')) || $this->defaultPackage->getTicketRef() != intval($request->getParameter('package_ref'))) { $this->forward404("Default package and receive package aren\\'t the same..."); } } else { //On s'assure que le package par défaut n'ait pas été detruit avant l'envoi de la requête $this->forward404("Default package has been set to null before processing..."); } /* A ce niveau , tout s'est bien passé : on crée la copie et on la lie au package par défaut */ //$this->forward404Unless($request->isMethod(sfRequest::POST) || $request->isMethod(sfRequest::PUT) || $request->isXmlHttpRequest()); $this->forward404Unless($request->getParameter('new_name'), "Missing version's name"); $conn = Doctrine_Manager::connection(); try { $conn->beginTransaction(); $result = $this->ei_version->createCopie($request->getParameter('new_name')); if ($result != null) { /* Création des relations profil-scenario pour la nouvelle version */ //On recherche une éventuelle version associée au package par défaut $ei_scenario_default_package = Doctrine_Core::getTable('EiScenarioPackage')->findOneByEiScenarioIdAndPackageIdAndPackageRef($this->ei_scenario->getId(), $this->defaultPackage->getTicketId(), $this->defaultPackage->getTicketRef()); if ($ei_scenario_default_package != null) { //On met à jour tous les éléments de la table EiProfilScenario (en changeant le champs ei_version_id Doctrine_Query::create()->update('EiProfilScenario ps')->set('ps.ei_version_id', '?', $result->getId())->where('ps.ei_scenario_id=' . $this->ei_scenario->getId() . ' And ps.ei_version_id=' . $ei_scenario_default_package->getEiVersionId())->execute(); } //On associe le profil courant à la version clonée Doctrine_Query::create()->update('EiProfilScenario ps')->set('ps.ei_version_id', '?', $result->getId())->where('ps.ei_scenario_id=' . $this->ei_scenario->getId() . ' And ps.profile_id=' . $this->ei_profile->getProfileId() . ' And ps.profile_ref=' . $this->ei_profile->getProfileRef())->execute(); // On lie la copie au package par défaut $ei_scenario_package = new EiScenarioPackage(); $ei_scenario_package->setEiScenarioId($this->ei_scenario->getId()); $ei_scenario_package->setEiVersionId($result->getId()); $ei_scenario_package->setPackageId($this->defaultPackage->getTicketId()); $ei_scenario_package->setPackageRef($this->defaultPackage->getTicketRef()); $ei_scenario_package->save($conn); } $conn->commit(); } catch (Exception $e) { $conn->rollback(); throw $e; } $this->getUser()->setFlash("version_success", "Version has been cloned."); $paramsForRedirection = $this->urlParameters; $paramsForRedirection['ei_scenario_id'] = $request->getParameter("ei_scenario_id"); $paramsForRedirection['ei_version_id'] = $result->getId(); $paramsForRedirection['action'] = 'edit'; return $this->redirect($this->generateUrl('projet_edit_eiversion', $paramsForRedirection)); }