/** * Given an import rules type and an attribute index or derived type string, make an AttributeImportRules object. * @param $importRulesType * @param string $attributeIndexOrDerivedType * @param null || string $penultimateModelClassName * @param null || ExplicitReadWriteModelPermissions $explicitReadWriteModelPermissions * @return object AttributeImportRules * @throws NotSupportedException */ public static function makeByImportRulesTypeAndAttributeIndexOrDerivedType($importRulesType, $attributeIndexOrDerivedType, $penultimateModelClassName = null, $explicitReadWriteModelPermissions = null) { assert('is_string($importRulesType)'); assert('is_string($attributeIndexOrDerivedType)'); assert('($penultimateModelClassName === null) || is_string($penultimateModelClassName)'); assert('($explicitReadWriteModelPermissions === null) || $explicitReadWriteModelPermissions instanceof ExplicitReadWriteModelPermissions'); $importRulesTypeClassName = ImportRulesUtil::getImportRulesClassNameByType($importRulesType); $attributeImportRulesType = $importRulesTypeClassName::getAttributeImportRulesType($attributeIndexOrDerivedType); $modelClassName = $importRulesTypeClassName::getModelClassNameByAttributeIndexOrDerivedType($attributeIndexOrDerivedType); $attributeName = self::resolveModelClassNameAndAttributeNameByAttributeIndexOrDerivedType($modelClassName, $attributeIndexOrDerivedType); if (isset(self::$modelsByClassName[$modelClassName])) { $model = self::$modelsByClassName[$modelClassName]; } else { $model = new $modelClassName(false); self::$modelsByClassName[$modelClassName] = $model; } assert('$attributeImportRulesType !== null'); $attributeImportRulesClassName = $attributeImportRulesType . 'AttributeImportRules'; if (is_subclass_of($attributeImportRulesClassName, 'DerivedAttributeImportRules')) { return new $attributeImportRulesClassName($model, $explicitReadWriteModelPermissions); } if (is_subclass_of($attributeImportRulesClassName, 'NonDerivedAttributeImportRules')) { $attributeImportRules = new $attributeImportRulesClassName($model, $attributeName, $explicitReadWriteModelPermissions); $attributeImportRules->setPenultimateModelClassName($penultimateModelClassName); $penultimateAttributeName = AttributeImportRulesFactory::getAttributeNameFromAttributeNameByAttributeIndexOrDerivedType($attributeIndexOrDerivedType); $attributeImportRules->setPenultimateAttributeName($penultimateAttributeName); return $attributeImportRules; } return new $attributeImportRulesClassName($model, $attributeName, $explicitReadWriteModelPermissions); }
public function testGetAttributeNameFromAttributeNameByAttributeIndexOrDerivedType() { $attributeName = AttributeImportRulesFactory::getAttributeNameFromAttributeNameByAttributeIndexOrDerivedType('string'); $this->assertEquals('string', $attributeName); $attributeName = AttributeImportRulesFactory::getAttributeNameFromAttributeNameByAttributeIndexOrDerivedType('something_string'); $this->assertEquals('something_string', $attributeName); $attributeName = AttributeImportRulesFactory::getAttributeNameFromAttributeNameByAttributeIndexOrDerivedType('something__string'); $this->assertEquals('something', $attributeName); }
protected static function resolveModelForAttributeIndexWithMultipleNonDerivedAttributes(RedBeanModel $model, $attributeImportRules, $attributeValueData, $columnMappingData) { assert('is_array($columnMappingData)'); $attributeName = AttributeImportRulesFactory::getAttributeNameFromAttributeNameByAttributeIndexOrDerivedType($columnMappingData['attributeIndexOrDerivedType']); $relationModelClassName = $attributeImportRules->getModelClassName(); if ($model->{$attributeName} == null) { $model->{$attributeName} = new $relationModelClassName(); } elseif (!$model->{$attributeName} instanceof $relationModelClassName) { throw new NotSupportedException(); } foreach ($attributeValueData as $relationAttributeName => $value) { assert('$model->$attributeName->isAttribute($relationAttributeName)'); static::resolveReadOnlyAndSetValueToAttribute($model->{$attributeName}, $relationAttributeName, $value); } }