/**
  * @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;
 }