ILIAS  release_9 Revision v9.13-25-g2c18ec4c24f
ScaffoldProvider.php
Go to the documentation of this file.
1 <?php
2 
19 declare(strict_types=1);
20 
22 
28 
30 {
35 
36  public function __construct(
37  ScaffoldFactory $scaffold_factory,
38  PathFactoryInterface $path_factory,
39  NavigatorFactoryInterface $navigator_factory,
40  StructureSetInterface $structure,
41  ) {
42  $this->scaffold_factory = $scaffold_factory;
43  $this->path_factory = $path_factory;
44  $this->navigator_factory = $navigator_factory;
45  $this->structure = $structure;
46  }
47 
51  public function getScaffoldsForElement(
52  ElementInterface $element
53  ): \Generator {
54  $navigator = $this->navigator_factory->structureNavigator(
55  $this->path_factory->toElement($element),
56  $this->structure->getRoot()
57  );
58  $structure_element = $navigator->elementAtFinalStep();
59 
60  $sub_names = [];
61  foreach ($element->getSubElements() as $sub) {
62  $sub_names[] = $sub->getDefinition()->name();
63  }
64 
65  $previous_sub = null;
66  foreach ($structure_element->getSubElements() as $sub) {
67  $sub = $sub->getDefinition();
68  if (
69  isset($previous_sub) &&
70  (!$previous_sub->unique() || !in_array($previous_sub->name(), $sub_names))
71  ) {
72  yield $sub->name() => $this->scaffold_factory->scaffold($previous_sub);
73  }
74  $previous_sub = $sub;
75  }
76  if (
77  isset($previous_sub) &&
78  (!$previous_sub->unique() || !in_array($previous_sub->name(), $sub_names))
79  ) {
80  yield '' => $this->scaffold_factory->scaffold($previous_sub);
81  }
82  }
83 }
__construct(ScaffoldFactory $scaffold_factory, PathFactoryInterface $path_factory, NavigatorFactoryInterface $navigator_factory, StructureSetInterface $structure,)