/** * Updates provided content's elements with data * * @param AbstractClassContent $content * @param array $elementsData * @return self */ private function updateElements(AbstractClassContent $content, array $elementsData) { if ($content instanceof ContentSet) { $content->clear(); foreach ($elementsData as $data) { $element = $this->findOneByTypeAndUid($data['type'], $data['uid']); if ($content->isAccepted($element)) { $content->push($element); } } } else { foreach ($elementsData as $key => $values) { if (is_scalar($values) && $content->isAccepted($values, $key)) { $content->{$key} = $values; } elseif (is_array($values)) { if (isset($values['type']) && isset($values['uid'])) { $values = [$values]; } $elements = []; foreach ($values as $data) { $element = $this->findOneByTypeAndUid($data['type'], $data['uid']); if ($content->isAccepted($element, $key)) { $elements[] = $element; } } $content->{$key} = $elements; } } } return $this; }