private function getParentValue($object, $key)
 {
     $parent = Object_Service::hasInheritableParentObject($object);
     $getter = "get" . ucfirst($key);
     if ($parent) {
         $value = $parent->{$getter}();
         if ($value) {
             $result = new stdClass();
             $result->value = $value;
             $result->id = $parent->getId();
             return $result;
         } else {
             return $this->getParentValue($parent, $key);
         }
     }
 }
Exemplo n.º 2
0
 /**
  * @return mixed
  */
 public function getValueFromParent($key)
 {
     $parent = Object_Service::hasInheritableParentObject($this->getObject());
     if (!empty($parent)) {
         $containerGetter = "get" . ucfirst($this->fieldname);
         $brickGetter = "get" . ucfirst($this->getType());
         $getter = "get" . ucfirst($key);
         if ($parent->{$containerGetter}()->{$brickGetter}()) {
             return $parent->{$containerGetter}()->{$brickGetter}()->{$getter}();
         }
     }
     return null;
 }
Exemplo n.º 3
0
 /**
  * gets recursively attribute data from parent and fills objectData and metaData
  *
  * @param  $object
  * @param  $key
  * @param  $fielddefinition
  * @return void
  */
 private function getDataForField($item, $key, $fielddefinition, $level, $baseObject, $getter, $objectFromVersion)
 {
     $result = new stdClass();
     $parent = Object_Service::hasInheritableParentObject($baseObject);
     $valueGetter = "get" . ucfirst($key);
     // relations but not for objectsMetadata, because they have additional data which cannot be loaded directly from the DB
     if (!$objectFromVersion && method_exists($fielddefinition, "getLazyLoading") and $fielddefinition->getLazyLoading() and !$fielddefinition instanceof Object_Class_Data_ObjectsMetadata) {
         //lazy loading data is fetched from DB differently, so that not every relation object is instantiated
         if ($fielddefinition->isRemoteOwner()) {
             $refKey = $fielddefinition->getOwnerFieldName();
             $refId = $fielddefinition->getOwnerClassId();
         } else {
             $refKey = $key;
         }
         $relations = $item->getRelationData($refKey, !$fielddefinition->isRemoteOwner(), $refId);
         if (empty($relations) && !empty($parent)) {
             $parentItem = $parent->{"get" . ucfirst($this->getName())}();
             if (!empty($parentItem)) {
                 $parentItem = $parentItem->{$getter}();
                 if ($parentItem) {
                     return $this->getDataForField($parentItem, $key, $fielddefinition, $level + 1, $parent, $getter, $objectFromVersion);
                 }
             }
         }
         $data = array();
         if ($fielddefinition instanceof Object_Class_Data_Href) {
             $data = $relations[0];
         } else {
             foreach ($relations as $rel) {
                 if ($fielddefinition instanceof Object_Class_Data_Objects) {
                     $data[] = array($rel["id"], $rel["path"], $rel["subtype"]);
                 } else {
                     $data[] = array($rel["id"], $rel["path"], $rel["type"], $rel["subtype"]);
                 }
             }
         }
         $result->objectData = $data;
         $result->metaData['objectid'] = $baseObject->getId();
         $result->metaData['inherited'] = $level != 0;
     } else {
         $value = null;
         if (!empty($item)) {
             $value = $fielddefinition->getDataForEditmode($item->{$valueGetter}(), $baseObject);
         }
         if (empty($value) && !empty($parent)) {
             $parentItem = $parent->{"get" . ucfirst($this->getName())}()->{$getter}();
             if (!empty($parentItem)) {
                 return $this->getDataForField($parentItem, $key, $fielddefinition, $level + 1, $parent, $getter, $objectFromVersion);
             }
         }
         $result->objectData = $value;
         $result->metaData['objectid'] = $baseObject->getId();
         $result->metaData['inherited'] = $level != 0;
     }
     return $result;
 }