protected function compile() { parent::compile(); // =================================== // = Add for exporting configuration = // =================================== $this->configuration['credentials']['export'] = array(); $this->configuration['export'] = array('fields' => array(), 'title' => $this->getExportTitle(), 'actions' => $this->getExportActions() ? $this->getExportActions() : array('_list' => array('action' => 'index', 'label' => 'Back'))); $config = $this->getConfig(); foreach (array_keys($config['default']) as $field) { $formConfig = array_merge($config['default'][$field], isset($config['form'][$field]) ? $config['form'][$field] : array()); $this->configuration['export']['fields'][$field] = new sfModelGeneratorConfigurationField($field, array_merge(array('label' => sfInflector::humanize(sfInflector::underscore($field))), $config['default'][$field], isset($config['export'][$field]) ? $config['export'][$field] : array())); } foreach ($this->getExportDisplay() as $field) { list($field, $flag) = sfModelGeneratorConfigurationField::splitFieldWithFlag($field); $this->configuration['export']['fields'][$field] = new sfModelGeneratorConfigurationField($field, array_merge(array('type' => 'Text', 'label' => sfInflector::humanize(sfInflector::underscore($field))), isset($config['default'][$field]) ? $config['default'][$field] : array(), isset($config['export'][$field]) ? $config['export'][$field] : array(), array('flag' => $flag))); } // export actions foreach ($this->configuration['export']['actions'] as $action => $parameters) { $this->configuration['export']['actions'][$action] = $this->fixActionParameters($action, $parameters); } $this->configuration['export']['display'] = array(); foreach ($this->getExportDisplay() as $name) { list($name, $flag) = sfModelGeneratorConfigurationField::splitFieldWithFlag($name); if (!isset($this->configuration['export']['fields'][$name])) { throw new InvalidArgumentException(sprintf('The field "%s" does not exist.', $name)); } $field = $this->configuration['export']['fields'][$name]; $field->setFlag($flag); $this->configuration['export']['display'][$name] = $field; } }
/** * Gets the fields that represents the form. * * If no form.display parameter is passed in the configuration, * all the fields from the form are returned (dynamically). * * @param sfForm $form The form with the fields * @param string $context The display context */ public function getFormFields(sfForm $form, $context) { $config = $this->getConfig(); $method = sprintf('get%sDisplay', ucfirst($context)); if (!($itemsLists = $this->{$method}())) { $itemsLists = $this->getFormDisplay(); } if ($itemsLists) { $fields = array(); // with itemsLists? if (!is_array(current($itemsLists))) { $itemsLists = array($itemsLists); } foreach ($itemsLists as $itemsList => $fieldsets) { $fields[$itemsList] = array(); // with fieldsets? if (!is_array(current($fieldsets))) { $fieldsets = array('NONE' => $fieldsets); } foreach ($fieldsets as $fieldset => $names) { $fields[$itemsList][$fieldset] = array(); foreach ($names as $name) { list($name, $flag) = sfModelGeneratorConfigurationField::splitFieldWithFlag($name); if (!isset($this->configuration[$context]['fields'][$name])) { $this->configuration[$context]['fields'][$name] = new sfModelGeneratorConfigurationField($name, array_merge(isset($config['default'][$name]) ? $config['default'][$name] : array(), isset($config['form'][$name]) ? $config['form'][$name] : array(), isset($config[$context][$name]) ? $config[$context][$name] : array(), array('is_real' => false, 'type' => 'Text', 'flag' => $flag))); } $field = $this->configuration[$context]['fields'][$name]; $field->setFlag($flag); $fields[$itemsList][$fieldset][$name] = $field; } } } return $fields; } $fields = array(); foreach ($form->getWidgetSchema()->getPositions() as $name) { $fields[$name] = new sfModelGeneratorConfigurationField($name, array_merge(isset($config['default'][$name]) ? $config['default'][$name] : array(), isset($config['form'][$name]) ? $config['form'][$name] : array(), isset($config[$context][$name]) ? $config[$context][$name] : array(), array('is_real' => false, 'type' => 'Text'))); } return array(array('NONE' => $fields)); }
protected function compile() { $config = array('default' => $this->getFieldsDefault(), 'list' => $this->getFieldsList(), 'filter' => $this->getFieldsFilter(), 'form' => $this->getFieldsForm(), 'new' => $this->getFieldsNew(), 'edit' => $this->getFieldsEdit()); // inheritance rules: // new|edit < form < default // list < default // filter < default $this->configuration = array('list' => array('fields' => array(), 'layout' => $this->getListLayout(), 'title' => $this->getListTitle(), 'actions' => $this->getListActions(), 'object_actions' => $this->getListObjectActions()), 'filter' => array('fields' => array()), 'form' => array('fields' => array()), 'new' => array('fields' => array(), 'title' => $this->getNewTitle(), 'actions' => $this->getNewActions() ? $this->getNewActions() : $this->getFormActions()), 'edit' => array('fields' => array(), 'title' => $this->getEditTitle(), 'actions' => $this->getEditActions() ? $this->getEditActions() : $this->getFormActions())); foreach (array_keys($config['default']) as $field) { $formConfig = array_merge($config['default'][$field], $config['form'][$field]); $this->configuration['list']['fields'][$field] = new sfModelGeneratorConfigurationField($field, array_merge($config['default'][$field], $config['list'][$field])); $this->configuration['filter']['fields'][$field] = new sfModelGeneratorConfigurationField($field, array_merge($config['default'][$field], $config['filter'][$field])); $this->configuration['form']['fields'][$field] = new sfModelGeneratorConfigurationField($field, $formConfig); $this->configuration['new']['fields'][$field] = new sfModelGeneratorConfigurationField($field, array_merge($formConfig, $config['new'][$field])); $this->configuration['edit']['fields'][$field] = new sfModelGeneratorConfigurationField($field, array_merge($formConfig, $config['edit'][$field])); } // form actions foreach (array('edit', 'new') as $context) { foreach ($this->configuration[$context]['actions'] as $action => &$parameters) { $this->fixActionParameters($action, $parameters); } } // list actions foreach ($this->configuration['list']['actions'] as $action => &$parameters) { $this->fixActionParameters($action, $parameters); } // list object actions foreach ($this->configuration['list']['object_actions'] as $action => &$parameters) { $this->fixActionParameters($action, $parameters); } // list field configuration $this->configuration['list']['display'] = array(); foreach ($this->getListDisplay() as $name) { list($name, $flag) = sfModelGeneratorConfigurationField::splitFieldWithFlag($name); if (!isset($this->configuration['list']['fields'][$name])) { $this->configuration['list']['fields'][$name] = new sfModelGeneratorConfigurationField($name, array_merge(array('is_real' => false, 'type' => 'Text'), isset($config['list'][$name]) ? $config['list'][$name] : array())); } $field = $this->configuration['list']['fields'][$name]; $field->setFlag($flag); $this->configuration['list']['display'][$name] = $field; } // list params configuration $this->configuration['list']['params'] = $this->getListParams(); preg_match_all('/%%([^%]+)%%/', $this->getListParams(), $matches, PREG_PATTERN_ORDER); foreach ($matches[1] as $name) { list($name, $flag) = sfModelGeneratorConfigurationField::splitFieldWithFlag($name); if (!isset($this->configuration['list']['fields'][$name])) { throw new InvalidArgumentException(sprintf('The field "%s" does not exist.', $name)); } $field = $this->configuration['list']['fields'][$name]; $field->setFlag($flag); $this->configuration['list']['params'] = str_replace('%%' . $flag . $name . '%%', '%%' . $name . '%%', $this->configuration['list']['params']); } // filter field configuration $this->configuration['filter']['display'] = array(); foreach ($this->getFilterDisplay() as $name) { list($name, $flag) = sfModelGeneratorConfigurationField::splitFieldWithFlag($name); if (!isset($this->configuration['filter']['fields'][$name])) { throw new InvalidArgumentException(sprintf('The field "%s" does not exist.', $name)); } $field = $this->configuration['filter']['fields'][$name]; $field->setFlag($flag); $this->configuration['filter']['display'][$name] = $field; } // form field configuration foreach (array('edit', 'new') as $context) { $this->configuration[$context]['display'] = array(); $method = sprintf('get%sDisplay', ucfirst($context)); if (!($fieldsets = $this->{$method}())) { $fieldsets = $this->getFormDisplay(); } foreach ($fieldsets as $fieldset => $names) { $this->configuration[$context]['display'][$fieldset] = array(); foreach ($names as $name) { list($name, $flag) = sfModelGeneratorConfigurationField::splitFieldWithFlag($name); if (!isset($this->configuration[$context]['fields'][$name])) { throw new InvalidArgumentException(sprintf('The field "%s" does not exist.', $name)); } $field = $this->configuration[$context]['fields'][$name]; $field->setFlag($flag); $this->configuration[$context]['display'][$fieldset][$name] = $field; } } } // action credentials $this->configuration['credentials'] = array('list' => array(), 'new' => array(), 'create' => array(), 'edit' => array(), 'update' => array(), 'delete' => array()); foreach ($this->getActionsDefault() as $action => $params) { if (0 === strpos($action, '_')) { $action = substr($action, 1); } $this->configuration['credentials'][$action] = isset($params['credentials']) ? $params['credentials'] : array(); } $this->configuration['credentials']['create'] = $this->configuration['credentials']['new']; $this->configuration['credentials']['update'] = $this->configuration['credentials']['edit']; }
public function getFormFields(sfForm $form, $context) { $config = $this->getConfig(); $overloaded = false; $specific_method = sprintf('get%sDisplay', ucfirst($context)); $general_method = 'getFormFieldsDisplay'; $method = method_exists($form, $specific_method) ? $specific_method : (method_exists($form, $general_method) ? $general_method : null); if (!is_null($method)) { $fieldsets = $form->{$method}(); $overloaded = true; } elseif (!($fieldsets = $this->{$specific_method}())) { $fieldsets = $this->getFormDisplay(); } if ($fieldsets && !$overloaded || isset($fieldsets) && $overloaded) { $fields = array(); // with fieldsets? if (!is_array(reset($fieldsets))) { $fieldsets = array('NONE' => $fieldsets); } foreach ($fieldsets as $fieldset => $names) { if (!$names) { continue; } $fields[$fieldset] = array(); foreach ($names as $name) { list($name, $flag) = sfModelGeneratorConfigurationField::splitFieldWithFlag($name); if (!isset($this->configuration[$context]['fields'][$name])) { $this->configuration[$context]['fields'][$name] = new sfModelGeneratorConfigurationField($name, array_merge(isset($config['default'][$name]) ? $config['default'][$name] : array(), isset($config['form'][$name]) ? $config['form'][$name] : array(), isset($config[$context][$name]) ? $config[$context][$name] : array(), array('is_real' => false, 'type' => 'Text', 'flag' => $flag))); } $field = $this->configuration[$context]['fields'][$name]; $field->setFlag($flag); $fields[$fieldset][$name] = $field; } } return $fields; } $fields = array(); foreach ($form->getWidgetSchema()->getPositions() as $name) { $fields[$name] = new sfModelGeneratorConfigurationField($name, array_merge(array('type' => 'Text'), isset($config['default'][$name]) ? $config['default'][$name] : array(), isset($config['form'][$name]) ? $config['form'][$name] : array(), isset($config[$context][$name]) ? $config[$context][$name] : array(), array('is_real' => false))); } return array('NONE' => $fields); }