/** * @depends testSavingMetadataWithSameName */ public function testGetAllByModelClassName() { $models = DropDownDependencyDerivedAttributeMetadata::getAllByModelClassName('Whatever'); $this->assertEquals(1, count($models)); $this->assertEquals('someName', $models[0]->name); $models = DropDownDependencyDerivedAttributeMetadata::getAllByModelClassName('Whatever2'); $this->assertEquals(1, count($models)); $this->assertEquals('someName2', $models[0]->name); }
public function getAttributes() { $attributes = array(); $calculatedAttributes = CalculatedDerivedAttributeMetadata::getAllByModelClassName($this->modelClassName); foreach ($calculatedAttributes as $attribute) { ModelAttributeCollectionUtil::populateCollection($attributes, $attribute->name, $attribute->getLabelByLanguage(Yii::app()->language), DerivedAttributeToMixedTypeUtil::getType($this->modelClassName, $attribute->name)); } $dropdownDependencyAttributes = DropDownDependencyDerivedAttributeMetadata::getAllByModelClassName($this->modelClassName); foreach ($dropdownDependencyAttributes as $attribute) { ModelAttributeCollectionUtil::populateCollection($attributes, $attribute->name, $attribute->getLabelByLanguage(Yii::app()->language), DerivedAttributeToMixedTypeUtil::getType($this->modelClassName, $attribute->name)); } return $attributes; }
/** * Given an array of customFieldData's data, resolve if any data has been removed and is currently mapped. If it * is mapped remove it. * @param string $modelClassName * @param string $attributeName * @param array $customFieldDataData */ public static function resolveValuesInMappingWhenValueWasRemoved($modelClassName, $attributeName, $customFieldDataData) { assert('is_string($modelClassName)'); assert('is_string($attributeName)'); assert('is_array($customFieldDataData)'); $attributesMetadata = DropDownDependencyDerivedAttributeMetadata::getAllByModelClassName($modelClassName); if (count($attributesMetadata) > 0) { foreach ($attributesMetadata as $metadata) { $saveMetadata = false; $parentPosition = null; if ($metadata->serializedMetadata != null) { $unserializedMetadata = unserialize($metadata->serializedMetadata); if (isset($unserializedMetadata['mappingData'])) { foreach ($unserializedMetadata['mappingData'] as $position => $data) { if ($data['attributeName'] == $attributeName) { $parentPosition = $position; if (isset($data['valuesToParentValues'])) { foreach ($data['valuesToParentValues'] as $value => $parentValue) { if (!in_array($value, $customFieldDataData)) { unset($unserializedMetadata['mappingData'][$position]['valuesToParentValues'][$value]); $saveMetadata = true; } } } } } if ($parentPosition !== null) { $nextPosition = $parentPosition + 1; if (isset($unserializedMetadata['mappingData'][$nextPosition]) && isset($unserializedMetadata['mappingData'][$nextPosition]['valuesToParentValues'])) { foreach ($unserializedMetadata['mappingData'][$nextPosition]['valuesToParentValues'] as $value => $parentValue) { if (!in_array($parentValue, $customFieldDataData)) { $unserializedMetadata['mappingData'][$nextPosition]['valuesToParentValues'][$value] = null; $saveMetadata = true; } } } } } } if ($saveMetadata) { $metadata->serializedMetadata = serialize($unserializedMetadata); $saved = $metadata->save(); if (!$saved) { throw new NotSupportedException(); } } } } }
/** * Public for testing only. */ public function getCustomFieldAttributesNotUsedInOtherDependencyAttributes() { $modelClassName = $this->modelClassName; $attributeNames = CustomFieldUtil::getCustomFieldAttributeNames($modelClassName); $dropDownDependencyModels = DropDownDependencyDerivedAttributeMetadata::getAllByModelClassName($this->modelClassName); foreach ($dropDownDependencyModels as $dropDownDependency) { if ($dropDownDependency->name != $this->attributeName) { $usedAttributeNames = $dropDownDependency->getUsedAttributeNames(); foreach ($usedAttributeNames as $usedAttributeName) { if (in_array($usedAttributeName, $attributeNames)) { $key = array_search($usedAttributeName, $attributeNames); unset($attributeNames[$key]); } } } } $attributeNamesAndLabels = array(); foreach ($attributeNames as $attributeName) { $attributeNamesAndLabels[$attributeName] = $modelClassName::getAnAttributeLabel($attributeName); } return $attributeNamesAndLabels; }