public function getFromWebserviceImport($value, $object = null, $params = [], $idMapper = null)
{
if (is_array($value)) {
$validLanguages = Tool::getValidLanguages();
if (!$idMapper || !$idMapper->ignoreMappingFailures()) {
foreach ($value as $v) {
if (!in_array($v->language, $validLanguages)) {
throw new \Exception("Invalid language in localized fields");
}
}
}
$localizedFields = $object->getLocalizedFields();
if (!$localizedFields) {
$localizedFields = new Object\Localizedfield();
}
if ($object instanceof Object\Concrete) {
$localizedFields->setObject($object);
}
$user = Tool\Admin::getCurrentUser();
$languagesAllowed = null;
if ($user && !$user->isAdmin()) {
$languagesAllowed = Object\Service::getLanguagePermissions($object, $user, "lEdit");
if ($languagesAllowed) {
$languagesAllowed = array_keys($languagesAllowed);
}
}
foreach ($value as $field) {
if ($field instanceof \stdClass) {
$field = Tool\Cast::castToClass("\\Pimcore\\Model\\Webservice\\Data\\Object\\Element", $field);
}
if ($idMapper && $idMapper->ignoreMappingFailures()) {
if (!in_array($field->language, $validLanguages)) {
continue;
}
}
if ($languagesAllowed && !in_array($field->language, $languagesAllowed)) {
//TODO needs to be discussed. Maybe it is better to throw an exception instead of ignoring
//the language
continue;
}
if (!$field instanceof Model\Webservice\Data\Object\Element) {
throw new \Exception("Invalid import data in field [ {$field->name} ] for language [ {$field->language} ] in localized fields [ " . $this->getName() . " ]");
}
$fd = $this->getFielddefinition($field->name);
if (!$fd instanceof Object\ClassDefinition\Data) {
if ($idMapper && $idMapper->ignoreMappingFailures()) {
continue;
}
throw new \Exception("Unknown field [ {$field->name} ] for language [ {$field->language} ] in localized fields [ " . $this->getName() . " ] ");
} elseif ($fd->getFieldtype() != $field->type) {
throw new \Exception("Type mismatch for field [ {$field->name} ] for language [ {$field->language} ] in localized fields [ " . $this->getName() . " ]. Should be [ " . $fd->getFieldtype() . " ], but is [ " . $field->type . " ] ");
}
$localizedFields->setLocalizedValue($field->name, $this->getFielddefinition($field->name)->getFromWebserviceImport($field->value, $object, $params, $idMapper), $field->language);
}
return $localizedFields;
} elseif (!empty($value)) {
throw new \Exception("Invalid data in localized fields");
} else {
return null;
}
}