public function getGridColumns($editable = false) { $gridColumns = array(); $primaryKeys = array(); foreach ($this->getPrimaryKeys() as $primaryKey) { $primaryKeys[] = sfInflector::underscore($primaryKey); } $form = $this->configuration->getForm(); $formFields = $form->getWidgetSchema()->getFields(); foreach ($this->configuration->getValue('list.display') as $name => $field) { $params = array(); // type du champ: $field->getType() $extjsParams = $this->getExtjsParams($field); $params['header'] = 'mmw.getI18nColumnHeader(' . sfMmwExtjsUtil::addQuote(sfMmwExtjsUtil::getSfExtjsNameFromField($this->getSingularName(), $name)) . ', ' . sfMmwExtjsUtil::addQuote($field->getConfig('label')) . ')'; // check if the field is a key. If yes, set it to hidden if (in_array($name, $primaryKeys)) { $params['hidden'] = true; } $params['width'] = isset($extjsParams['width']) ? $extjsParams['width'] : '75'; if (isset($extjsParams['renderer'])) { $params['renderer'] = $extjsParams['renderer']; } if (isset($extjsParams['sortable'])) { $params['sortable'] = $extjsParams['sortable'] ? 'true' : 'false'; } else { if (isset($formFields[$name])) { $params['sortable'] = 'true'; } else { $params['sortable'] = 'false'; } } $params['dataIndex'] = sfMmwExtjsUtil::getSfExtjsNameFromField($this->getSingularName(), $name, true); if (isset($formFields[$name])) { $widget = $form->getWidget($name); if ($editable) { $validator = $form->getValidator($name); $params['editor'] = $this->getExtjsField(true, $widget, $validator, $name); } switch (get_class($widget)) { case 'sfWidgetFormDoctrineChoice': case 'sfWidgetFormDoctrineSelect': if ($editable) { $params['renderer'] = 'function(value, metaData, record, rowIndex, colIndex) { return mmw.util.getRecordDisplayFieldValue(scope, colIndex, value); }'; } break; case 'sfWidgetFormInputCheckbox': $params['renderer'] = 'function(value) { return scope.getRecordCheckboxDisplayImage(value); }'; break; case 'sfWidgetFormDateTime': case 'sfWidgetFormDate': $params['renderer'] = 'function(value) { return scope.getRecordCorrectDateFormat(value); }'; break; } } $gridColumns[] = $this->getConfigArray($params); } return $this->toArray($gridColumns); }
public function getExtjsField($widget, $validator, $name, $label, $extjsParams = array()) { $widgetOptions = $widget->getOptions(); $result = array(); $result['name'] = sfMmwExtjsUtil::getSfExtjsNameFromField($this->getSingularName(), $name, true); $result['itemId'] = $result['name']; $result['fieldLabel'] = sfMmwExtjsUtil::addQuote($label); $result['width'] = 250; if (!$validator->hasOption('required') || $validator->hasOption('required') && $validator->getOption('required') == true) { $result['allowBlank'] = 'false'; } else { $result['allowBlank'] = 'true'; } if ($validator->hasOption('max_length')) { $result['maxLength'] = $validator->getOption('max_length'); } if ($validator->hasOption('min_length')) { $result['minLength'] = $validator->getOption('max_length'); } // we get all parameters from the field, but for specific parameter, we may add it to extjs_params //$params = $field->getConfig('extjs_params', array()); switch (get_class($widget)) { case 'sfWidgetFormInputHidden': $result['xtype'] = sfMmwExtjsUtil::addQuote('hidden'); break; case 'sfWidgetFormInput': $result['xtype'] = sfMmwExtjsUtil::addQuote('textfield'); break; case 'sfWidgetFormTextarea': $result['xtype'] = sfMmwExtjsUtil::addQuote('textarea'); $result['width'] = isset($extjsParams['width']) ? $extjsParams['width'] : 230; $result['height'] = isset($extjsParams['height']) ? $extjsParams['height'] : 40; break; // single select // single select case 'sfWidgetFormDoctrineChoice': $model = sfMmwExtjsUtil::addQuote($widgetOptions['model']); $result['hiddenName'] = $result['name']; $result['name'] = sfMmwExtjsUtil::getSfExtjsNameFromField($this->getSingularName(), $name . '--name', true); $result['xtype'] = sfMmwExtjsUtil::addQuote('combo'); $result['emptyText'] = sfMmwExtjsUtil::addQuote('Enter a value'); $result['triggerAction'] = sfMmwExtjsUtil::addQuote('all'); $result['mode'] = sfMmwExtjsUtil::addQuote('local'); // $result['store'] = 'new mmw.'.sfInflector::underscore($widgetOptions['model']).'Store'; $result['store'] = 'new Ext.data.ArrayStore()'; $result['displayField'] = 'mmw.baseSf' . ucfirst(sfInflector::underscore($widgetOptions['model'])) . 'Object.displayField'; $result['valueField'] = 'mmw.baseSf' . ucfirst(sfInflector::underscore($widgetOptions['model'])) . 'Object.keyField'; break; case 'sfWidgetFormInputCheckbox': $result['xtype'] = sfMmwExtjsUtil::addQuote('checkbox'); break; // double select // double select case 'sfWidgetFormDoctrineChoiceMany': $model = sfMmwExtjsUtil::addQuote($widgetOptions['model']); $result['xtype'] = sfMmwExtjsUtil::addQuote('mmwItemSelector'); $result['store'] = 'new mmw.' . sfInflector::underscore($widgetOptions['model']) . 'Store'; $result['width'] = 450; break; /* case 'sfWidgetFormInputCheckbox': $result['xtype'] = ''; break; */ /* case 'sfWidgetFormInputCheckbox': $result['xtype'] = ''; break; */ case 'sfWidgetFormDateTime': case 'sfWidgetFormDate': $result['xtype'] = sfMmwExtjsUtil::addQuote('datefield'); break; case 'sfWidgetFormInputFileEditable': $result['xtype'] = sfMmwExtjsUtil::addQuote('mmwFileUploadField'); $result['emptyText'] = sfMmwExtjsUtil::addQuote('Select a file'); $result['buttonText'] = sfMmwExtjsUtil::addQuote(''); $result['buttonCfg'] = '{iconCls: \'upload-icon\'}'; break; default: break; } switch (get_class($validator)) { case 'sfValidatorEmail': $result['vtype'] = sfMmwExtjsUtil::addQuote('email'); break; // case 'sfValidatorString': // $result['vtype'] = sfMmwExtjsUtil::addQuote('alphanum'); // break; // case 'sfValidatorString': // $result['vtype'] = sfMmwExtjsUtil::addQuote('alphanum'); // break; case 'sfValidatorUrl': $result['vtype'] = sfMmwExtjsUtil::addQuote('url'); break; case 'sfValidatorInteger': $result['vtype'] = sfMmwExtjsUtil::addQuote('num'); break; } return $result; }
Object; Ext.apply(this, this.initialConfig, { title: this.getLl('Title', new Array(this.sfObject.pluralHumanName, this.sfObject.pluralUpHumanName)<?php echo ($gridTitle = $this->configuration->getListTitle()) != null ? ', ' . sfMmwExtjsUtil::addQuote(addslashes($gridTitle)) : ''; ?> ), line: Ext.data.Record.create([{}]), store: store, bbar: new Ext.PagingToolbar({ pageSize: 15, store: store, displayInfo: true, displayMsg: this.getLl('PagerDisplayMsg', new Array(scope.sfObject.pluralHumanName, scope.sfObject.pluralUpHumanName, '{0}', '{1}', '{2}')<?php echo ($pagerCaption = $this->configuration->getListPagerCaption()) != null ? ', ' . sfMmwExtjsUtil::addQuote(addslashes($pagerCaption . ' {0} to {1} of {2}')) : ''; ?> ), emptyMsg: this.getLl('PagerEmptyMsg', new Array(scope.sfObject.humanName, scope.sfObject.upHumanName, '{0}', '{1}', '{2}')<?php echo ($pagerEmptyCaption = $this->configuration->getListPagerEmptyCaption()) != null ? ', ' . sfMmwExtjsUtil::addQuote(addslashes($pagerEmptyCaption)) : ''; ?> ) }), columns: <?php echo $this->getGridColumns(true); ?> }); mmw.<?php echo $this->getSingularName(); ?> EditorGridPanel.superclass.initComponent.call(this); } });