public function getFromWebserviceImport($value, $relatedObject = null, $params = [], $idMapper = null)
{
if (empty($value)) {
return null;
} elseif (is_array($value)) {
$hrefs = [];
foreach ($value as $href) {
// cast is needed to make it work for both SOAP and REST
$href = (array) $href;
if (is_array($href) and array_key_exists("id", $href) and array_key_exists("type", $href)) {
$type = $href["type"];
$id = $href["id"];
if ($idMapper) {
$id = $idMapper->getMappedId($type, $id);
}
$e = null;
if ($id) {
$e = Element\Service::getElementById($type, $id);
}
if ($e instanceof Element\ElementInterface) {
$elMeta = new Object\Data\ElementMetadata($this->getName(), $this->getColumnKeys(), $e);
foreach ($this->getColumns() as $c) {
$setter = "set" . ucfirst($c['key']);
$elMeta->{$setter}($href[$c['key']]);
}
$hrefs[] = $elMeta;
} else {
if (!$idMapper || !$idMapper->ignoreMappingFailures()) {
throw new \Exception("cannot get values from web service import - unknown element of type [ " . $href["type"] . " ] with id [" . $href["id"] . "] is referenced");
} else {
$idMapper->recordMappingFailure("object", $relatedObject->getId(), $type, $href["id"]);
}
}
}
}
return $hrefs;
} else {
throw new \Exception("cannot get values from web service import - invalid data");
}
}