schedule explicit set levels
This commit is contained in:
parent
a64df64b76
commit
3cf1aff6a9
10 changed files with 156 additions and 38 deletions
|
|
@ -6,11 +6,13 @@ use App\Element\Element;
|
|||
use App\Element\ElementRepository;
|
||||
use App\Exceptions\NotFoundException;
|
||||
use App\Set\SetRepository;
|
||||
use App\Set\SetLevelRepository;
|
||||
|
||||
class GetSetLayout
|
||||
{
|
||||
public function __construct(
|
||||
private SetRepository $setRepository,
|
||||
private SetLevelRepository $setLevelRepository,
|
||||
private ElementRepository $elementRepository,
|
||||
) {}
|
||||
|
||||
|
|
@ -24,10 +26,15 @@ class GetSetLayout
|
|||
throw new NotFoundException('set not found');
|
||||
}
|
||||
|
||||
$elements = $this->elementRepository->findBySet($set);
|
||||
$elementsByParentId = [];
|
||||
foreach ($this->elementRepository->findBySet($set) as $element) {
|
||||
$elementCountsByLevelId = [];
|
||||
foreach ($elements as $element) {
|
||||
$parentId = $element->getParentElement()?->getId() ?? 0;
|
||||
$elementsByParentId[$parentId][] = $element;
|
||||
$levelId = $element->getLevel()->getId();
|
||||
$elementCountsByLevelId[$levelId]
|
||||
= ($elementCountsByLevelId[$levelId] ?? 0) + 1;
|
||||
}
|
||||
|
||||
foreach ($elementsByParentId as &$siblings) {
|
||||
|
|
@ -46,8 +53,17 @@ class GetSetLayout
|
|||
}
|
||||
unset($siblings);
|
||||
|
||||
$layoutLevels = [];
|
||||
foreach ($this->setLevelRepository->findBySet($set) as $level) {
|
||||
$layoutLevels[] = new SetLayoutLevel(
|
||||
level: $level,
|
||||
elementCount: $elementCountsByLevelId[$level->getId()] ?? 0,
|
||||
);
|
||||
}
|
||||
|
||||
return new SetLayout(
|
||||
set: $set,
|
||||
levels: $layoutLevels,
|
||||
elements: $this->buildNodes(0, $elementsByParentId),
|
||||
);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue