/** * Returns the element or attribute form type * that should be used with the named attribute * of the given model, (the name minus the Element * or AttributeForm suffix). */ public static function getDesignerType(ModelForm $model, $attributeName) { assert('$model !== null'); assert('is_string($attributeName) && $attributeName != ""'); $metadata = $model->getMetadata(); foreach ($metadata as $className => $perClassMetadata) { if (isset($perClassMetadata['elements'][$attributeName])) { return $perClassMetadata['elements'][$attributeName]; } } $validators = $model->getValidators($attributeName); foreach ($validators as $validator) { switch (get_class($validator)) { case 'CBooleanValidator': return 'CheckBox'; case 'CEmailValidator': return 'Email'; case 'RedBeanModelTypeValidator': case 'TypeValidator': switch ($validator->type) { case 'date': return 'Date'; case 'datetime': return 'DateTime'; case 'integer': return 'Integer'; case 'float': return 'Decimal'; case 'time': return 'Time'; case 'array': throw new NotSupportedException(); } break; case 'CUrlValidator': return 'Url'; } } return 'Text'; }