Ejemplo n.º 1
0
 /**
  * @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;
         }
     }
 }
Ejemplo n.º 3
0
 /**
  * @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;
 }