/** * @param EiTestSet $testSet * @param EiTestSetBlockParam $parent * @param null $index * @param string $path * @return mixed */ public function generateTestSetParameters(EiTestSet $testSet = null, $parent = null, $index = null, $path = "", $deep = false, Doctrine_Connection $conn = null) { $conn = $conn == null ? Doctrine_Manager::connection() : $conn; $path .= "/" . $this->getName(); $chronometre = new Chronometre(); $recupStr = $chronometre->lancerChrono("Récupération structure param", true); // Vérification si l'élément existe. /** @var EiTestSetBlockParam $element */ $element = EiTestSetBlockParamTable::getInstance()->findOneByEiTestSetIdAndPath($testSet->getId(), $path); $chronometre->arreterEtAfficherChrono("Récupération structure param", $recupStr); $eltExists = $element == null ? false : true; if (!$eltExists) { $element = new EiTestSetBlockParam(); $element->setEiVersionStructureId($this->getId()); $element->setName($this->getName()); $element->setSlug($this->getSlug()); $element->setType($this->getType()); $element->setEiTestSetId($testSet->getId()); $element->setIndexRepetition($index); $element->setPath($path); if ($parent != null) { $element->setParentId($parent->getId()); } } $recupMap = $chronometre->lancerChrono("Récupération du mapping", true); /** @var EiBlockDataSetMapping $mapping */ $mapping = $this->getMapping(EiBlockDataSetMapping::$TYPE_IN); if ($mapping != null && $parent->getType() == EiVersionStructure::$TYPE_FOREACH) { /** @var EiMappingStructureSyncIn $iteratorMap */ $iteratorMap = $parent->getEiVersionStructure()->getIteratorMapping(); /** @var Doctrine_Node_NestedSet $node */ $node = $mapping != null ? $mapping->getEiDataSetStructureMapping()->getNode() : null; $indexToMap = !$node->isDescendantOf($iteratorMap->getEiDataSetStructureMapping()) ? 1 : $index; $value = $mapping->getValueFromTestSetJdd($testSet, $indexToMap, $parent); } elseif ($mapping != null) { $value = $mapping->getValueFromTestSetJdd($testSet, $index, $parent); } else { $value = ""; } $chronometre->arreterEtAfficherChrono("Récupération du mapping", $recupMap); // Sauvegarde de la valeur de l'élément. $element->setValue($value); $saveChro = $chronometre->lancerChrono("Sauvegarde paramètre de block", true); $element->save($conn); if (!$eltExists) { if (!$parent->getNode()->getChildren()) { $element->getNode()->insertAsFirstChildOf($parent); } else { $element->getNode()->insertAsNextSiblingOf($parent->getNode()->getLastChild()); } } $chronometre->arreterEtAfficherChrono("Sauvegarde paramètre de block", $saveChro); return $element; }