public function testGetEffectivePlacedAttributes()
 {
     Yii::app()->user->userModel = User::getByUsername('super');
     $viewClassName = 'ContactEditAndDetailsView';
     $modelClassName = 'Contact';
     $designerRules = DesignerRulesFactory::createDesignerRulesByView($viewClassName);
     $attributesLayoutAdapter = AttributesLayoutAdapterUtil::makeByViewAndModelAndDesignerRules($viewClassName, $modelClassName, $designerRules);
     $this->assertFalse(in_array('industry', $attributesLayoutAdapter->getEffectivePlacedAttributes()));
     $this->assertTrue(in_array('firstName', $attributesLayoutAdapter->getEffectivePlacedAttributes()));
     $this->assertTrue(in_array('lastName', $attributesLayoutAdapter->getEffectivePlacedAttributes()));
     $this->assertTrue(in_array('source', $attributesLayoutAdapter->getEffectivePlacedAttributes()));
 }
 /**
  * @param string $modelClassName
  * @param string $attributeName
  */
 public static function resolveToRemoveAttributeAsMissingRequiredAttribute($modelClassName, $attributeName)
 {
     assert('is_string($modelClassName)');
     assert('is_string($attributeName)');
     $modules = Module::getModuleObjects();
     foreach ($modules as $module) {
         try {
             if ($module::getPrimaryModelName() == $modelClassName) {
                 $viewClassNames = $module::getViewClassNames();
                 foreach ($viewClassNames as $viewClassName) {
                     $classToEvaluate = new ReflectionClass($viewClassName);
                     if (is_subclass_of($viewClassName, 'MetadataView') && !$classToEvaluate->isAbstract() && $viewClassName::getDesignerRulesType() != null) {
                         $designerRules = DesignerRulesFactory::createDesignerRulesByView($viewClassName);
                         if ($designerRules->allowEditInLayoutTool() && $designerRules->requireAllRequiredFieldsInLayout()) {
                             $attributesLayoutAdapter = AttributesLayoutAdapterUtil::makeByViewAndModelAndDesignerRules($viewClassName, $modelClassName, $designerRules);
                             if (!in_array($attributeName, $attributesLayoutAdapter->getEffectivePlacedAttributes())) {
                                 self::removeAttributeAsMissingRequiredAttribute(get_class($module), $viewClassName);
                             }
                         }
                     }
                 }
             }
         } catch (NotSupportedException $e) {
         }
     }
 }