예제 #1
0
 /**
  * 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();
 }
예제 #2
0
 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));
 }