/** * @param mixed $data * @param null $relatedObject * @param null $idMapper * @return mixed * @throws \Exception */ public function getFromWebserviceImport($data, $relatedObject, $idMapper = null) { $containerName = "\\Pimcore\\Model\\Object\\" . ucfirst($relatedObject->getClass()->getName()) . "\\" . ucfirst($this->getName()); $container = new $containerName($relatedObject, $this->getName()); if (is_array($data)) { foreach ($data as $collectionRaw) { if ($collectionRaw instanceof \stdClass) { $class = "\\Pimcore\\Model\\Webservice\\Data\\Object\\Element"; $collectionRaw = Tool\Cast::castToClass($class, $collectionRaw); } if ($collectionRaw != null) { if (!$collectionRaw instanceof Webservice\Data\Object\Element) { throw new \Exception("invalid data in objectbrick [" . $this->getName() . "]"); } $brick = $collectionRaw->type; $collectionData = array(); $collectionDef = Object\Objectbrick\Definition::getByKey($brick); if (!$collectionDef) { throw new \Exception("Unknown objectbrick in webservice import [" . $brick . "]"); } foreach ($collectionDef->getFieldDefinitions() as $fd) { foreach ($collectionRaw->value as $field) { if ($field instanceof \stdClass) { $class = "\\Pimcore\\Model\\Webservice\\Data\\Object\\Element"; $field = Tool\Cast::castToClass($class, $field); } if (!$field instanceof Webservice\Data\Object\Element) { throw new \Exception("invalid data in objectbricks [" . $this->getName() . "]"); } else { if ($field->name == $fd->getName()) { if ($field->type != $fd->getFieldType()) { throw new \Exception("Type mismatch for objectbricks field [" . $field->name . "]. Should be [" . $fd->getFieldType() . "] but is [" . $field->type . "]"); } $collectionData[$fd->getName()] = $fd->getFromWebserviceImport($field->value, $relatedObject, $idMapper); break; } } } } $collectionClass = "\\Pimcore\\Model\\Object\\Objectbrick\\Data\\" . ucfirst($brick); $collection = new $collectionClass($relatedObject); $collection->setValues($collectionData); $collection->setFieldname($this->getName()); $setter = "set" . ucfirst($brick); $container->{$setter}($collection); } } } return $container; }
/** * @param mixed $value * @param null $object * @param null $idMapper * @return mixed|null|Object\Localizedfield * @throws \Exception */ public function getFromWebserviceImport($value, $object = null, $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() . " ] "); } else { if ($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, $idMapper), $field->language); } return $localizedFields; } else { if (!empty($value)) { throw new \Exception("Invalid data in localized fields"); } else { return null; } } }
/** * @param mixed $data * @param null $object * @param null $idMapper * @return mixed|Object\Fieldcollection * @throws \Exception */ public function getFromWebserviceImport($data, $object = null, $idMapper = null) { $values = array(); $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 = array(); $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; }