/**
  *
  * Get model properties as array.
  * return array
  */
 public function getData()
 {
     $data = array();
     $data['id'] = $this->model->id;
     $retrievableAttributes = static::resolveRetrievableAttributesByModel($this->model);
     foreach ($this->model->getAttributes($retrievableAttributes) as $attributeName => $notUsed) {
         $type = ModelAttributeToMixedArrayTypeUtil::getType($this->model, $attributeName);
         $adapterClassName = $type . 'RedBeanModelAttributeValueToArrayValueAdapter';
         if ($type != null && @class_exists($adapterClassName) && !($this->model->isRelation($attributeName) && $this->model->getRelationType($attributeName) != RedBeanModel::HAS_ONE)) {
             $adapter = new $adapterClassName($this->model, $attributeName);
             $adapter->resolveData($data);
         } elseif ($this->model->isOwnedRelation($attributeName) && ($this->model->getRelationType($attributeName) == RedBeanModel::HAS_ONE || $this->model->getRelationType($attributeName) == RedBeanModel::HAS_MANY_BELONGS_TO)) {
             if ($this->model->{$attributeName}->id > 0) {
                 $util = new ModelToArrayAdapter($this->model->{$attributeName});
                 $relatedData = $util->getData();
                 $data[$attributeName] = $relatedData;
             } else {
                 $data[$attributeName] = null;
             }
         } elseif ($this->model->isRelation($attributeName) && $this->model->getRelationType($attributeName) == RedBeanModel::HAS_ONE) {
             if ($this->model->{$attributeName}->id > 0) {
                 $data[$attributeName] = array('id' => $this->model->{$attributeName}->id);
             } else {
                 $data[$attributeName] = null;
             }
         }
     }
     return $data;
 }
 /**
  * @param string $relation
  * @return bool
  * @throws NotSupportedException if the relation string is malformed
  */
 public function isRelationASingularRelation($relation)
 {
     assert('is_string($relation)');
     $delimiter = FormModelUtil::DELIMITER;
     $relationAndInferredData = explode($delimiter, $relation);
     $derivedRelations = $this->getDerivedRelationsViaCastedUpModelData();
     if (count($relationAndInferredData) == 3) {
         list($modelClassName, $relation, $notUsed) = $relationAndInferredData;
         $type = $this->model->getRelationType($relation);
     } elseif (count($relationAndInferredData) == 2) {
         list($relation, $notUsed) = $relationAndInferredData;
         $type = $this->model->getRelationType($relation);
     } elseif (count($relationAndInferredData) == 1 && isset($derivedRelations[$relation])) {
         $type = $this->model->getDerivedRelationType($relation);
     } elseif (count($relationAndInferredData) == 1) {
         $type = $this->model->getRelationType($relation);
     } else {
         throw new NotSupportedException();
     }
     if ($type == RedBeanModel::HAS_ONE || $type == RedBeanModel::HAS_ONE_BELONGS_TO || $type == RedBeanModel::HAS_MANY_BELONGS_TO) {
         return true;
     }
     return false;
 }
Exemplo n.º 3
0
 public static function getHasManyOpposingRelationName(RedBeanModel $model, $precedingModelClassName, $precedingRelation)
 {
     assert('is_string($precedingModelClassName)');
     assert('is_string($precedingRelation)');
     foreach ($model->attributeNames() as $attributeName) {
         if ($model->isRelation($attributeName) && ($model->getRelationType($attributeName) == RedBeanModel::HAS_ONE || $model->getRelationType($attributeName) == RedBeanModel::HAS_MANY_BELONGS_TO) && static::relationLinksToPrecedingRelation(get_class($model), $attributeName, $precedingModelClassName, $precedingRelation)) {
             return $attributeName;
         }
     }
 }
 /**
  * @param RedBeanModel $model
  * @param array $modelRelations
  * @return bool
  * @throws ApiException
  */
 protected function manageModelRelations($model, $modelRelations)
 {
     try {
         if (isset($modelRelations) && !empty($modelRelations)) {
             foreach ($modelRelations as $modelRelation => $relations) {
                 if ($model->isAttribute($modelRelation) && ($model->getRelationType($modelRelation) == RedBeanModel::HAS_MANY || $model->getRelationType($modelRelation) == RedBeanModel::MANY_MANY)) {
                     foreach ($relations as $relation) {
                         $relatedModelClassName = $relation['modelClassName'];
                         try {
                             $relatedModel = $relatedModelClassName::getById(intval($relation['modelId']));
                         } catch (Exception $e) {
                             $message = Zurmo::t('ZurmoModule', 'The related model ID specified was invalid.');
                             throw new NotFoundException($message);
                         }
                         if ($relation['action'] == 'add') {
                             $model->{$modelRelation}->add($relatedModel);
                         } elseif ($relation['action'] == 'remove') {
                             $model->{$modelRelation}->remove($relatedModel);
                         } else {
                             $message = Zurmo::t('ZurmoModule', 'Unsupported action.');
                             throw new NotSupportedException($message);
                         }
                     }
                 } else {
                     $message = Zurmo::t('ZurmoModule', 'You can add relations only for HAS_MANY and MANY_MANY relations.');
                     throw new NotSupportedException($message);
                 }
             }
         }
     } catch (Exception $e) {
         $message = $e->getMessage();
         throw new ApiException($message);
     }
     return true;
 }