19 declare(strict_types=1);
71 $this->structure->getRoot(),
82 $navigator = $this->navigator_factory->structureNavigator(
84 $this->structure->getRoot()
104 int $id_from_parent_table,
108 throw new \ilMDStructureException(
'LOM Structure is nested to deep.');
112 $tag = $this->
tag($sub);
113 $table = $tag?->table() ??
'';
117 $parent_id = $id_from_parent_table;
119 if (!is_null($result_row)) {
120 $result_rows = [$result_row];
122 if ($table && $result_row?->table() !== $table) {
123 $parent_id = $result_row?->id() ?? 0;
124 $result_rows = $this->querier->read(
131 foreach ($result_rows as $row) {
132 $value = $row->value($tag?->dataField() ??
'');
133 if ($definition->dataType() === Type::VOCAB_SOURCE) {
134 $value = LOMVocabInitiator::SOURCE;
138 $definition->dataType() !== Type::NULL &&
159 $definition->dataType() !== Type::VOCAB_SOURCE &&
160 count($sub_elements) <= 1 &&
161 (($sub_elements[0] ?? null)?->getData()?->type() ?? Type::VOCAB_SOURCE) === Type::VOCAB_SOURCE
166 yield $this->element_factory->element(
185 throw new \ilMDStructureException(
'LOM Structure is nested to deep.');
188 $tag = $this->
tag($struct);
189 if (!is_null($tag) && $table !== $tag?->table()) {
192 if (!is_null($tag)) {
211 return $struct->getDefinition();
221 yield
from $struct->getSubElements();
224 if ($next_struct = $struct->
nextStep()) {
237 return $this->dictionary->tagForElement($struct);
244 $root_definition = $this->structure->
getRoot()->getDefinition();
245 return $this->element_factory->set(
247 $this->element_factory->root(