/** * Méthode permettant de localiser la partie du JDD à lier à l'élément du block. * * TODO: Unifier les deux méthodes en une seule. * TODO: A vérifier * * Liée à EiTestSetBlockStack->getDataFromDataSet * * @param EiTestSet $testSet * @param EiVersionStructure $block * @param EiTestSetBlockStack $previousStack * @param EiTestSetBlockStack $parentStack * @return mixed|null */ public function getDataFromDataSet(EiTestSet $testSet, EiVersionStructure $block, EiTestSetBlockStack $previousStack = null, EiTestSetBlockStack $parentStack = null) { /** @var EiTestSetDataSetTable $tableDSS */ $tableDSS = Doctrine_Core::getTable("EiTestSetDataSet"); $mapping = $block->getMappingDataSet(EiBlockDataSetMapping::$TYPE_IN); $dssStr = null; // Cas où il y a un mapping et que le parent est nul : On prend le premier élément que l'on trouve. if ($parentStack == null && $mapping != null) { $dssStr != null ? $tableDSS->getRelatedDataFromUniqueDataSetStructure($testSet->getId(), $mapping) : null; } elseif ($mapping != null) { // On vérifie que le block en question est une boucle. if ($block->isEiLoop()) { // On récupère le contexte du père. $contexte = $parentStack->getContext(); $index = 1; // var_dump("DataSet Père : " . $parentStack->getEiTestSetDatasetId()); // var_dump("Contexte DataSet Père : " . $contexte); // Si le block courant est de même nature que le block précédent if ($parentStack->getEiVersionStructureId() != $block->getId() && $block->getId() == $previousStack->getEiVersionStructureId()) { // var_dump("DataSet Structure CAS 1"); // On vérifie s'il s'agit de la même boucle mais concerne une partie différente. if ($previousStack->getPartIndex() < $previousStack->getPartsCount()) { $index = $previousStack->getRepetitionIndex(); $contexte .= "-" . $index; } else { $index = $previousStack->getRepetitionIndex() + 1; $contexte .= "-" . $index; } } elseif ($parentStack->getEiVersionStructureId() != $block->getId()) { // var_dump("DataSet Structure CAS 2"); $parentStr = $parentStack->getEiTestSetDataSet() != null ? $parentStack->getEiTestSetDataSet()->getEiDataSetStructure() : null; if ($parentStr != null && $mapping->getEiDataSetStructureMapping()->getNode()->isDescendantOf($parentStr)) { // var_dump("DataSet Structure CAS 2.1"); $parentMapping = $parentStr != null ? $parentStr->getId() : null; $myMappingParent = $mapping->getEiDataSetStructureMapping()->getEiDatasetStructureParentId(); if ($parentMapping == null || $myMappingParent == $parentMapping) { $contexte .= "-1"; } else { if (preg_match("/([0-9]+)\$/", $contexte, $matched)) { $length = strlen($matched[1]); } else { $length = 1; } $contexte = substr($contexte, 0, -$length) . 1; } } else { // var_dump("DataSet Structure CAS 2.2"); $contexteArray = array(); for ($cpt = 0; $cpt <= $mapping->getEiDataSetStructureMapping()->getLevel(); $cpt++) { $contexteArray[] = 1; } $contexte = implode("-", $contexteArray); // var_dump("New context : " . $contexte); } } else { // var_dump("DataSet Structure CAS 3"); if (preg_match("/([0-9]+)\$/", $contexte, $matched)) { $length = strlen($matched[1]); } else { $length = 1; } $contexte = substr($contexte, 0, -$length); // On vérifie s'il s'agit de la même boucle mais concerne une partie différente. if (!$parentStack->isComplete()) { $index = $parentStack->getRepetitionIndex(); } else { $index = $parentStack->getRepetitionIndex() + 1; } $contexte .= $index; // var_dump($parentStack->getEiVersionStructureId(), $block->getId()); // var_dump($contexte); } $dssStr = $tableDSS->getDataFromContext($testSet->getId(), $mapping->getEiDatasetStructureId(), $contexte, $index); } } return $dssStr; }