/**
  * 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);
 }
Пример #3
0
 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);
     }
 }