/** * Ajouter une fonction à une version/sous_version * @author Grégory Elhaimer * @param sfWebRequest $request * @return type */ public function executeAjouter(sfWebRequest $request) { $this->getUrlParameters($request); $this->checkProject($request); $this->checkProfile($request, $this->ei_project); //Récupération du profil $this->forward404Unless($this->ei_version, "Version not found."); $this->checkFunction($request, $this->ei_project); $this->forward404Unless($this->kal_function); /* Récupération du User courant et du package par défaut */ $this->defaultPackage = $this->getDefaultPackage($this->ei_user, $this->ei_project); $function_ref = $request->getParameter('function_ref'); $function_id = $request->getParameter('function_id'); $subjectFunctions = array(); /* Récupération d'une liaison éventuelle liaison existente entre la fonction et le bug */ if ($function_id != null && $function_ref != null && $this->defaultPackage != null) { /* Recherche du sujet par rapport au package par défaut. * Ici, on vérifie que plusieurs bugs ne sont pas associés au même package , auquel cas on déclenche un exception pour contacter l'administrateur . */ $this->defaultPackageSubjects = Doctrine_Core::getTable('EiSubject')->findByPackageIdAndPackageRefAndProjectIdAndProjectRef($this->defaultPackage->getTicketId(), $this->defaultPackage->getTicketRef(), $this->ei_project->getProjectId(), $this->ei_project->getRefId()); if (count($this->defaultPackageSubjects) > 1) { //Plusieurs sujets avec la même intervention.On déclenche une alerte système. throw new Exception('Please contact administrator.There many intervention with the same package ...'); } elseif (count($this->defaultPackageSubjects) == 1) { $this->ei_subject = $this->defaultPackageSubjects->getFirst(); $link = Doctrine_Core::getTable('EiSubjectFunctions')->findOneBySubjectIdAndFunctionIdAndFunctionRef($this->ei_subject->getId(), $function_id, $function_ref); if ($link != null) { $subjectFunctions[] = array('sf_subject_id' => $link->getSubjectId(), 'sf_function_id' => $link->getFunctionId(), 'sf_function_ref' => $link->getFunctionRef(), 'sf_automate' => $link->getAutomate()); } } } //création et initialisation de la fonction $ei_fonction = new EiFonction(); $ei_fonction->setName($this->kal_function->getNodeTree()->getName()); $ei_fonction->setProjectId($this->project_id); $ei_fonction->setProjectRef($this->project_ref); $ei_fonction->setFunctionId($this->kal_function->getFunctionId()); $ei_fonction->setFunctionRef($this->kal_function->getFunctionRef()); $ei_fonction->setSubjectFunctions($subjectFunctions); $this->ei_version_structure = Doctrine_Core::getTable('EiVersionStructure')->find($request->getParameter('ei_version_structure_id')); $this->forward404Unless($this->ei_version_structure && $this->ei_version_structure->getEiVersionId() == $this->ei_version->getId()); $ei_version_structure = new EiVersionStructure(); $ei_version_structure->setType('EiFonction'); $ei_version_structure->setEiVersion($this->ei_version); $ei_version_structure->setEiVersionStructureParentId($this->ei_version_structure->getId()); $ei_fonction->setEiVersionStructure($ei_version_structure); $ei_fonction = $ei_fonction->save(); if ($insert_after = $request->getParameter('insert_after')) { $aft_version = Doctrine_Core::getTable('EiVersionStructure')->find($insert_after); $this->forward404Unless($aft_version); $ei_version_structure->getNode()->insertAsNextSiblingOf($aft_version); } else { $ei_version_structure->getNode()->insertAsFirstChildOf($this->ei_version_structure); } $form = new EiFonctionForm($ei_fonction, array('params' => $ei_fonction->getEiParams(), 'mappings' => $ei_fonction->getEiFunctionMapping())); return $this->renderPartial('ajouterFonction', array('form' => $form, 'insert_after' => $ei_version_structure->getId(), 'obj' => $ei_fonction, 'paramsForUrl' => array('ei_version_id' => $this->ei_version->getId(), 'ei_version_structure_id' => $this->ei_version_structure->getId(), 'project_id' => $this->project_id, 'project_ref' => $this->project_ref, 'profile_id' => $this->profile_id, 'profile_ref' => $this->profile_ref, 'profile_name' => $this->profile_name, 'default_notice_lang' => $this->ei_project->getDefaultNoticeLang()))); }
public function createCopie($ei_version_str, $conn = null) { $copie = null; try { //$conn->beginTransaction(); //Création de la copie $copie = new EiFonction(); $copie->setDescription($this->getDescription()); $copie->setEiVersionStructure($ei_version_str); $copie->setFunctionId($this->getFunctionId()); $copie->setFunctionRef($this->getFunctionRef()); $copie->setProjectRef($this->getProjectRef()); $copie->setProjectId($this->getProjectId()); //Sauvegarde de la copie $copie->save($conn, false); $params = $this->getEiParams(); if ($params->getFirst()) { foreach ($params as $i => $param) { $param->createCopie($copie->getId(), $conn); } } } catch (Exception $e) { throw $e; } return $copie; }