/** * Méthode permettant de créer une copie de la version. * * @param $new_name * @param Doctrine_Connection $conn * @param null $ei_scenario_id * @return EiVersion|null * @throws Exception */ public function createCopie($new_name, Doctrine_Connection $conn = null, $ei_scenario_id = null) { // Déclaration de la variable représentant l'instance de la version. /** @var EiVersion $copie */ $copie = null; /** @var sfLogger $logger */ $logger = sfContext::getInstance()->getLogger(); try { if ($conn == null) { $conn = Doctrine_Manager::connection(); } //Debut de la transaction $conn->beginTransaction(); //********************************************************// //********** CREATION VERSION **********// //********************************************************// $logger->info("----------------------------------------------"); $logger->info("---------- CREATION VERSION ----------"); $logger->info("----------------------------------------------"); // Instanciation de la version $copie = new EiVersion(); // Affectation de son libellé. $copie->setLibelle($new_name); // On stocke l'identifiant du scénario. if ($ei_scenario_id) { $copie->setEiScenarioId($ei_scenario_id); } else { $copie->setEiScenarioId($this->getEiScenarioId()); } // La description $copie->setDescription($this->getDescription()); $this->createStructureCopy($copie, $conn, $ei_scenario_id); // Fin de la transaction. Tout s'est bien déroulé, on enregistre. $conn->commit(); } catch (Exception $e) { // En cas d'erreur, on annule l'ensemble de la transaction. $conn->rollback(); throw $e; } return $copie; }
public function executeCreate(sfWebRequest $request) { $this->checkProject($request); $this->checkProfile($request, $this->ei_project); $this->checkEiScenario($request, $this->ei_project); /* On recherche le package par défaut. S'il n'est pas définit , on le spécifie à l'utilisateur au lieu de lui retourner le formulaire */ $this->searchDefPackAndRedirect(); if (!($request->isMethod(sfRequest::POST) || $request->isXmlHttpRequest())) { $this->forward404("Request error ..."); } //vérification des paramètres. $this->getUrlParameters($request); $this->ei_block_root = Doctrine_Core::getTable('EiBlock')->getEiBlockRoot($this->ei_scenario_id); if (!$this->ei_block_root) { return $this->createJSONErrorResponse("The version could not be created. Scenario's root block not found."); } $ei_blocks = Doctrine_Core::getTable('EiVersionStructure')->getEiBlocksTree($this->ei_block_root->getId(), EiVersionStructure::getBlockTypes()); //création de la version $ei_version = new EiVersion(); $ei_version->setEiScenarioId($this->ei_scenario_id); $ei_version->setEiScenarioBlocks($ei_blocks); $ei_version->setOldVersionId($this->ei_block_root->getEiVersionId()); $this->form = new EiVersionForm($ei_version, array('ei_scenario_package' => new EiScenarioPackage())); $ei_scenario_package_form = $request->getParameter($this->form->getName()); $ei_scenario_package_datas = $ei_scenario_package_form['ei_scenario_package']; if ($ei_scenario_package_datas['package_id'] != null && $ei_scenario_package_datas['package_ref'] != null) { $this->ei_package = Doctrine_core::getTable('EiTicket')->findOneByTicketIdAndTicketRef($ei_scenario_package_datas['package_id'], $ei_scenario_package_datas['package_ref']); /* On recherche si pour le package par défaut et le scénario , il existe une version */ $this->ei_scenario_package = Doctrine_Core::getTable('EiScenarioPackage')->findOneByEiScenarioIdAndPackageIdAndPackageRef($this->ei_scenario_id, $ei_scenario_package_datas['package_id'], $ei_scenario_package_datas['package_ref']); } else { //Erreur dû au fait qu'on ne permet pas la création d'une version sans spécification de package throw new Exception('No package set for version !'); } $this->processForm($request, $this->form); $this->setTemplate('new'); }