public function getFromWebserviceImport($data, $object = null, $params = [], $idMapper = null)
{
$values = [];
$count = 0;
if (is_array($data)) {
foreach ($data as $collectionRaw) {
if ($collectionRaw instanceof \stdClass) {
$collectionRaw = Cast::castToClass("\\Pimcore\\Model\\Webservice\\Data\\Object\\Element", $collectionRaw);
}
if (!$collectionRaw instanceof Webservice\Data\Object\Element) {
throw new \Exception("invalid data in fieldcollections [" . $this->getName() . "]");
}
$fieldcollection = $collectionRaw->type;
$collectionData = [];
$collectionDef = Object\Fieldcollection\Definition::getByKey($fieldcollection);
if (!$collectionDef) {
throw new \Exception("Unknown fieldcollection in webservice import [" . $fieldcollection . "]");
}
foreach ($collectionDef->getFieldDefinitions() as $fd) {
foreach ($collectionRaw->value as $field) {
if ($field instanceof \stdClass) {
$field = Cast::castToClass("\\Pimcore\\Model\\Webservice\\Data\\Object\\Element", $field);
}
if (!$field instanceof Webservice\Data\Object\Element) {
throw new \Exception("invalid data in fieldcollections [" . $this->getName() . "]");
} elseif ($field->name == $fd->getName()) {
if ($field->type != $fd->getFieldType()) {
throw new \Exception("Type mismatch for fieldcollection field [" . $field->name . "]. Should be [" . $fd->getFieldType() . "] but is [" . $field->type . "]");
}
$collectionData[$fd->getName()] = $fd->getFromWebserviceImport($field->value, $object, [], $idMapper);
break;
}
}
}
$collectionClass = "\\Pimcore\\Model\\Object\\Fieldcollection\\Data\\" . ucfirst($fieldcollection);
$collection = new $collectionClass();
$collection->setValues($collectionData);
$collection->setIndex($count);
$collection->setFieldname($this->getName());
$values[] = $collection;
$count++;
}
}
$container = new Object\Fieldcollection($values, $this->getName());
return $container;
}