fix available dependances field issue and change constraintes
All checks were successful
Build & Deploy / Validation, build et push (push) Successful in 8m16s

This commit is contained in:
Ploush 2026-06-14 10:40:27 +02:00
parent ee08bcecf0
commit c38193dc7f
2 changed files with 28 additions and 3 deletions

View file

@ -30,13 +30,12 @@ class ModType extends AbstractType
$mods = $this->modRepository->findAvailableDependances($builder->getData());
}
else{
$mods = $this->modRepository->findAll();
$mods = $this->modRepository->findBy(array(), array('nom' => 'ASC'));
}
$builder
->add('nom', TextType::class, [
'disabled' => $isEdit,
'label' => 'Nom du mod',
'required' => true,
'attr' => [

View file

@ -24,7 +24,7 @@ class ModRepository extends ServiceEntityRepository
{
$excludedIds = [];
if ($mod !== null) {
$excludedIds = $this->collectDependencyIds($mod, []);
$excludedIds = $this->collectDependentIds($mod, []);
$excludedIds[] = $mod->getId();
}
$qb = $this->createQueryBuilder('m');
@ -63,6 +63,32 @@ class ModRepository extends ServiceEntityRepository
return $ids;
}
/**
* Collecte récursivement les IDs de tous les mods qui dépendent du mod donné
* (dépendances inverses, directes ou indirectes), via la relation `soumis`.
*
* @param int[] $visited IDs déjà visités (évite les boucles infinies)
* @return int[]
*/
private function collectDependentIds(Mod $mod, array $visited): array
{
$ids = [];
foreach ($mod->getSoumis() as $dependent) {
$depId = $dependent->getId();
// Evite les boucles infinies en cas de dépendants cycliques
if (in_array($depId, $visited, true)) {
continue;
}
$visited[] = $depId;
$ids[] = $depId;
$ids = array_merge($ids, $this->collectDependentIds($dependent, $visited));
}
return $ids;
}
// /**
// * @return Mod[] Returns an array of Mod objects