public static function getCellElement($viewClassName, $modelClassName, $elementName) { assert('is_string($viewClassName)'); assert('is_string($modelClassName) && is_subclass_of($modelClassName, "RedBeanModel")'); assert('is_string($elementName)'); $editableMetadata = $viewClassName::getMetadata(); $designerRulesType = $viewClassName::getDesignerRulesType(); $designerRulesClassName = $designerRulesType . 'DesignerRules'; $designerRules = new $designerRulesClassName(); $modelAttributesAdapter = DesignerModelToViewUtil::getModelAttributesAdapter($viewClassName, $modelClassName); $derivedAttributesAdapter = new DerivedAttributesAdapter($modelClassName); $attributeCollection = array_merge($modelAttributesAdapter->getAttributes(), $derivedAttributesAdapter->getAttributes()); $attributesLayoutAdapter = AttributesLayoutAdapterUtil::makeAttributesLayoutAdapter($attributeCollection, $designerRules, $editableMetadata); $derivedAttributes = $attributesLayoutAdapter->getAvailableDerivedAttributeTypes(); $placeableLayoutAttributes = $attributesLayoutAdapter->getPlaceableLayoutAttributes(); if (in_array($elementName, $derivedAttributes)) { $element = array('attributeName' => 'null', 'type' => $elementName); // Not Coding Standard } elseif (isset($placeableLayoutAttributes[$elementName]) && $placeableLayoutAttributes[$elementName]['elementType'] == 'DropDownDependency') { throw new NotSupportedException(); } elseif (isset($placeableLayoutAttributes[$elementName])) { $element = array('attributeName' => $elementName, 'type' => $placeableLayoutAttributes[$elementName]['elementType']); } else { throw new NotSupportedException(); } return $designerRules->formatSavableElement($element, $viewClassName); }
/** * @param string $viewClassName * @param string $modelClassName * @return ModelAttributesAdapter|ModelFormAttributesAdapter */ public static function getModelAttributesAdapter($viewClassName, $modelClassName) { $modelForViewClassName = DesignerModelToViewUtil::getModelForViewClassName($viewClassName, $modelClassName); assert('is_subclass_of($modelForViewClassName, "ModelForm") || is_subclass_of($modelForViewClassName, "RedBeanModel")'); if (is_subclass_of($modelForViewClassName, 'ModelForm')) { return new ModelFormAttributesAdapter(new $modelForViewClassName(new $modelClassName())); } return new ModelAttributesAdapter(new $modelClassName(false)); }
/** * @param string $viewClassName * @param string $modelClassName * @param DesignerRules $designerRules * @return AttributesLayoutAdapter */ public static function makeByViewAndModelAndDesignerRules($viewClassName, $modelClassName, DesignerRules $designerRules) { assert('is_string($viewClassName)'); assert('is_string($modelClassName)'); $editableMetadata = $viewClassName::getMetadata(); $modelAttributesAdapter = DesignerModelToViewUtil::getModelAttributesAdapter($viewClassName, $modelClassName); $attributeCollection = $modelAttributesAdapter->getAttributes(); $attributesLayoutAdapter = AttributesLayoutAdapterUtil::makeAttributesLayoutAdapter($attributeCollection, $designerRules, $editableMetadata); return $attributesLayoutAdapter; }
public function testGetValuesAndLabelsData() { $moduleClassName = 'AccountsModule'; $modelAttributesAdapter = DesignerModelToViewUtil::getModelAttributesAdapterByModelForViewClassName($moduleClassName::getGlobalSearchFormClassName(), $moduleClassName::getPrimaryModelName()); $attributeCollection = $modelAttributesAdapter->getAttributes(); $this->assertEquals(34, count($attributeCollection)); $adapter = new ModelAttributeCollectionToGlobalSearchAttributesAdapter($attributeCollection); $this->assertEquals(12, count($adapter->getValuesAndLabelsData())); $compareData = array('annualRevenue' => 'Annual Revenue', 'anyCity' => 'Any City', 'anyCountry' => 'Any Country', 'anyEmail' => 'Any Email Address', 'anyPostalCode' => 'Any Postal Code', 'anyState' => 'Any State', 'anyStreet' => 'Any Street', 'description' => 'Description', 'employees' => 'Employees', 'name' => 'Name', 'officeFax' => 'Office Fax', 'officePhone' => 'Office Phone'); $this->assertEquals($compareData, $adapter->getValuesAndLabelsData()); }
public function __construct($viewClassName, $moduleClassName) { assert('is_string($viewClassName)'); assert('is_string($moduleClassName)'); $modelClassName = $moduleClassName::getPrimaryModelName(); $editableMetadata = $viewClassName::getMetadata(); $designerRulesType = $viewClassName::getDesignerRulesType(); $designerRulesClassName = $designerRulesType . 'DesignerRules'; $designerRules = new $designerRulesClassName(); $modelAttributesAdapter = DesignerModelToViewUtil::getModelAttributesAdapter($viewClassName, $modelClassName); $derivedAttributesAdapter = new DerivedAttributesAdapter($modelClassName); $attributeCollection = array_merge($modelAttributesAdapter->getAttributes(), $derivedAttributesAdapter->getAttributes()); $attributesLayoutAdapter = AttributesLayoutAdapterUtil::makeAttributesLayoutAdapter($attributeCollection, $designerRules, $editableMetadata); $this->layoutMetadataAdapter = new LayoutMetadataAdapter($viewClassName, $moduleClassName, $editableMetadata, $designerRules, $attributesLayoutAdapter->getPlaceableLayoutAttributes(), $attributesLayoutAdapter->getRequiredDerivedLayoutAttributeTypes()); $this->designerLayoutAttributes = $attributesLayoutAdapter->makeDesignerLayoutAttributes(); $this->viewClassName = $viewClassName; }
public function getModuleForm() { $moduleFormClassName = $this->moduleClassName . 'Form'; $moduleForm = new $moduleFormClassName(); //FIGURE OUT HOW TO ONLY MAP SOME ATTRIBUTES SINCE MODULE LABELS ARE HANDLED DIFFERENTLY foreach ($moduleForm->attributeNames() as $attributeName) { if (isset($this->metadata[$attributeName])) { $moduleForm->{$attributeName} = $this->metadata[$attributeName]; } } $moduleClassName = $this->moduleClassName; foreach (Yii::app()->languageHelper->getActiveLanguagesData() as $languageCode => $languageData) { $moduleForm->singularModuleLabels[$languageCode] = $moduleClassName::getModuleLabelByTypeAndLanguage('SingularLowerCase', $languageCode); $moduleForm->pluralModuleLabels[$languageCode] = $moduleClassName::getModuleLabelByTypeAndLanguage('PluralLowerCase', $languageCode); } if ($moduleForm instanceof GlobalSearchEnabledModuleForm) { $moduleClassName = $this->moduleClassName; $modelAttributesAdapter = DesignerModelToViewUtil::getModelAttributesAdapterByModelForViewClassName($moduleClassName::getGlobalSearchFormClassName(), $moduleClassName::getPrimaryModelName()); $attributeCollection = $modelAttributesAdapter->getAttributes(); $adapter = new ModelAttributeCollectionToGlobalSearchAttributesAdapter($attributeCollection); $moduleForm->availableGlobalSearchAttributeNames = $adapter->getValuesAndLabelsData(); } return $moduleForm; }
public static function getMetadataByWebForm(ContactWebForm $contactWebForm) { assert('$contactWebForm instanceof ContactWebForm'); $contactWebFormAttributes = unserialize($contactWebForm->serializedData); $viewClassName = 'ContactExternalEditAndDetailsView'; $moduleClassName = 'ContactsModule'; $modelClassName = $moduleClassName::getPrimaryModelName(); $editableMetadata = $viewClassName::getMetadata(); $designerRules = new EditAndDetailsViewDesignerRules(); $modelAttributesAdapter = DesignerModelToViewUtil::getModelAttributesAdapter($viewClassName, $modelClassName); $derivedAttributesAdapter = new DerivedAttributesAdapter($modelClassName); $attributeCollection = array_merge($modelAttributesAdapter->getAttributes(), $derivedAttributesAdapter->getAttributes()); $attributesLayoutAdapter = AttributesLayoutAdapterUtil::makeAttributesLayoutAdapter($attributeCollection, $designerRules, $editableMetadata); $layoutMetadataAdapter = new LayoutMetadataAdapter($viewClassName, $moduleClassName, $editableMetadata, $designerRules, $attributesLayoutAdapter->getPlaceableLayoutAttributes(), $attributesLayoutAdapter->getRequiredDerivedLayoutAttributeTypes()); $metadata = $layoutMetadataAdapter->resolveMetadataFromSelectedListAttributes($viewClassName, $contactWebFormAttributes); foreach ($metadata['global']['panels'][0]['rows'] as $index => $data) { if ($data['cells'][0]['elements'][0]['type'] == 'EmailAddressInformation') { $metadata['global']['panels'][0]['rows'][$index]['cells'][0]['elements'][0]['hideOptOut'] = true; } } return $metadata; }
public function testGetModelFormAttributesAdapter() { Yii::app()->user->userModel = User::getByUsername('super'); $adapter = DesignerModelToViewUtil::getModelAttributesAdapter('AccountsSearchView', 'Account'); $this->assertTrue($adapter instanceof ModelFormAttributesAdapter); }
public function actionLayoutEdit() { assert('!empty($_GET["moduleClassName"])'); assert('!empty($_GET["viewClassName"])'); $viewClassName = $_GET['viewClassName']; $moduleClassName = $_GET['moduleClassName']; $modelClassName = $moduleClassName::getPrimaryModelName(); $editableMetadata = $viewClassName::getMetadata(); $designerRulesType = $viewClassName::getDesignerRulesType(); $designerRulesClassName = $designerRulesType . 'DesignerRules'; $designerRules = new $designerRulesClassName(); $modelAttributesAdapter = DesignerModelToViewUtil::getModelAttributesAdapter($viewClassName, $modelClassName); $derivedAttributesAdapter = new DerivedAttributesAdapter($modelClassName); $attributeCollection = array_merge($modelAttributesAdapter->getAttributes(), $derivedAttributesAdapter->getAttributes()); $attributesLayoutAdapter = AttributesLayoutAdapterUtil::makeAttributesLayoutAdapter($attributeCollection, $designerRules, $editableMetadata); if (isset($_POST['save'])) { $layoutMetadataAdapter = new LayoutMetadataAdapter($viewClassName, $moduleClassName, $editableMetadata, $designerRules, $attributesLayoutAdapter->getPlaceableLayoutAttributes(), $attributesLayoutAdapter->getRequiredDerivedLayoutAttributeTypes()); $savableMetadata = array(); if ($designerRules->canConfigureLayoutPanelsType() && !PanelsDisplayTypeLayoutMetadataUtil::populateSaveableMetadataFromPostData($savableMetadata, $_POST['LayoutPanelsTypeForm'])) { echo CJSON::encode(array('message' => Zurmo::t('DesignerModule', 'Invalid panel configuration type'), 'type' => 'error')); } elseif ($layoutMetadataAdapter->setMetadataFromLayout(ArrayUtil::getArrayValue($_POST, 'layout'), $savableMetadata)) { if ($designerRules->requireAllRequiredFieldsInLayout()) { RequiredAttributesValidViewUtil::setAsContainingRequiredAttributes($moduleClassName, $viewClassName); } echo CJSON::encode(array('message' => $layoutMetadataAdapter->getMessage(), 'type' => 'message')); } else { echo CJSON::encode(array('message' => $layoutMetadataAdapter->getMessage(), 'type' => 'error')); } Yii::app()->end(0, false); } $title = Zurmo::t('DesignerModule', 'Edit Layout') . ': ' . $designerRules->resolveDisplayNameByView($_GET['viewClassName']); $breadcrumbLinks = array($moduleClassName::getModuleLabelByTypeAndLanguage('Plural') . ': ' . Zurmo::t('DesignerModule', 'Layouts') => array('default/moduleLayoutsList', 'moduleClassName' => $_GET['moduleClassName']), $title); $canvasView = new MetadataViewEditView($this->getId(), $this->getModule()->getId(), $_GET['moduleClassName'], $_GET['viewClassName'], $editableMetadata, $designerRules, $attributeCollection, $attributesLayoutAdapter->makeDesignerLayoutAttributes(), $title); $view = new DesignerPageView(ZurmoDefaultAdminViewUtil::makeViewWithBreadcrumbsForCurrentUser($this, $canvasView, $breadcrumbLinks, 'DesignerBreadCrumbView')); echo $view->render(); }