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) { } } }
protected static function assertMetadataIsValid(array $metadata) { parent::assertMetadataIsValid($metadata); $attributeNames = array(); $derivedTypes = array(); if (isset($metadata['global']['panels'])) { foreach ($metadata["global"]["panels"] as $panel) { assert('is_array($panel["rows"])'); foreach ($panel["rows"] as $row) { $cellCount = 0; assert('is_array($row["cells"])'); foreach ($row["cells"] as $cell) { if (is_array($cell['elements'])) { assert('count($cell["elements"]) == 1'); $elementInformation = $cell['elements'][0]; if ($elementInformation['attributeName'] == 'null') { assert('!in_array($elementInformation["type"], $derivedTypes)'); $derivedTypes[] = $elementInformation['type']; $elementclassname = $elementInformation['type'] . 'Element'; assert('class_exists($elementclassname)'); } elseif ($elementInformation['attributeName'] == null) { assert('$elementInformation["type"] == "Null"'); // Not Coding Standard } else { /* Is attribute present more than once on the view? */ assert('!in_array($elementInformation["attributeName"], $attributeNames)'); $attributeNames[] = $elementInformation['attributeName']; assert('is_string($elementInformation["attributeName"])'); } } $cellCount++; $designerRules = DesignerRulesFactory::createDesignerRulesByView(get_called_class()); if ($designerRules != null) { assert('$cellCount <= $designerRules->maxCellsPerRow()'); } } } } } if (isset($metadata['global']['toolbar'])) { assert('is_array($metadata["global"]["toolbar"]["elements"])'); assert('count($metadata["global"]["toolbar"]) == 1'); $elementTypes = array(); foreach ($metadata['global']['toolbar']['elements'] as $elementInformation) { assert('isset($elementInformation["type"])'); $elementTypes[] = $elementInformation['type']; $elementclassname = $elementInformation['type'] . 'ActionElement'; assert('class_exists($elementclassname)'); } } if (isset($metadata['global']['nonPlaceableAttributeNames'])) { assert('is_array($metadata["global"]["nonPlaceableAttributeNames"])'); } assert('!isset($metadata["derivedAttributeTypes"])'); if (isset($metadata['global']['derivedAttributeTypes'])) { assert('is_array($metadata["global"]["derivedAttributeTypes"])'); foreach ($metadata['global']['derivedAttributeTypes'] as $elementType) { $elementclassname = $elementType . 'Element'; assert('class_exists($elementclassname)'); } } }