Exemplo n.º 1
0
 /**
  * @param \FSi\Component\DataGrid\Column\ColumnTypeInterface $column
  */
 public function initOptions(ColumnTypeInterface $column)
 {
     $column->getOptionsResolver()->setNormalizer('actions', function (Options $options, $values) {
         foreach ($values as $action => $actionValues) {
             $values[$action] = $this->setRouteLocale($actionValues, $this->localeManager);
         }
         return $values;
     });
 }
Exemplo n.º 2
0
 /**
  * @param \FSi\Component\DataGrid\Column\ColumnTypeInterface $column
  * @param string $action
  * @param array $actionOptions
  */
 private function validateActionOptions(ColumnTypeInterface $column, $action, array $actionOptions)
 {
     if (!isset($actionOptions['element'])) {
         return false;
     }
     if (!$this->manager->hasElement($actionOptions['element'])) {
         throw new RuntimeException(sprintf('Unknown element "%s" specified in action "%s" of datagrid "%s"', $actionOptions['element'], $action, $column->getDataGrid()->getName()));
     }
     return true;
 }
 public function buildCellView(ColumnTypeInterface $column, CellViewInterface $view)
 {
     $translatable = false;
     $notTranslated = false;
     foreach ($column->getOption('field_mapping') as $propertyPath) {
         if ($this->isPropertyPathTranslatable($view, $propertyPath)) {
             $translatable = true;
             if ($this->isPropertyPathTranslated($view, $propertyPath)) {
                 $notTranslated = true;
             }
         }
     }
     $view->setAttribute('translatable', $translatable);
     $view->setAttribute('not_translated', $notTranslated);
 }
 /**
  * {@inheritdoc}
  */
 public function initOptions(ColumnTypeInterface $column)
 {
     $column->getOptionsResolver()->setDefaults(array('label' => $column->getName(), 'display_order' => null, 'field_mapping' => array($column->getName())));
     $column->getOptionsResolver()->setAllowedTypes('label', 'string');
     $column->getOptionsResolver()->setAllowedTypes('field_mapping', 'array');
     $column->getOptionsResolver()->setAllowedTypes('display_order', array('integer', 'null'));
 }
 /**
  * {@inheritDoc}
  */
 public function initOptions(ColumnTypeInterface $column)
 {
     $column->getOptionsResolver()->setDefaults(array('true_value' => $this->translator->trans('datagrid.boolean.yes', array(), 'DataGridBundle'), 'false_value' => $this->translator->trans('datagrid.boolean.no', array(), 'DataGridBundle')));
     $translator = $this->translator;
     $column->getOptionsResolver()->setNormalizer('form_options', function (Options $options, $value) use($translator) {
         if ($options['editable'] && count($options['field_mapping']) == 1) {
             $field = $options['field_mapping'][0];
             return array_merge(array($field => array('choices' => array(0 => $translator->trans('datagrid.boolean.no', array(), 'DataGridBundle'), 1 => $translator->trans('datagrid.boolean.yes', array(), 'DataGridBundle')))), $value);
         }
         return $value;
     });
     $column->getOptionsResolver()->setNormalizer('form_type', function (Options $options, $value) {
         if ($options['editable'] && count($options['field_mapping']) == 1) {
             $field = $options['field_mapping'][0];
             return array_merge(array($field => 'choice'), $value);
         }
         return $value;
     });
 }
 /**
  * {@inheritdoc}
  */
 public function initOptions(ColumnTypeInterface $column)
 {
     $column->getOptionsResolver()->setDefaults(array('glue_multiple' => ' ', 'value_glue' => ' ', 'value_format' => '%s', 'empty_value' => null));
     $column->getOptionsResolver()->setAllowedTypes('glue_multiple', array('string'));
     $column->getOptionsResolver()->setAllowedTypes('value_glue', array('string', 'null'));
     $column->getOptionsResolver()->setAllowedTypes('value_format', array('string', 'null'));
     $column->getOptionsResolver()->setAllowedTypes('empty_value', array('array', 'string', 'null'));
 }
 /**
  * @param \FSi\Component\DataGrid\Column\ColumnTypeInterface $column
  * @throws \InvalidArgumentException
  */
 private function validateEmptyValueOption(ColumnTypeInterface $column)
 {
     $emptyValue = $column->getOption('empty_value');
     $mappingFields = $column->getOption('field_mapping');
     if (is_string($emptyValue)) {
         return;
     }
     if (!is_array($emptyValue)) {
         throw new \InvalidArgumentException(sprintf('Option "empty_value" in column: "%s" must be a array.', $column->getName()));
     }
     foreach ($emptyValue as $field => $value) {
         if (!in_array($field, $mappingFields)) {
             throw new \InvalidArgumentException(sprintf('Mapping field "%s" does\'t exists in column: "%s".', $field, $column->getName()));
         }
         if (!is_string($value)) {
             throw new \InvalidArgumentException(sprintf('Option "empty_value" for field "%s" in column: "%s" must be a valid string.', $field, $column->getName()));
         }
     }
 }
Exemplo n.º 8
0
 /**
  * @param ColumnTypeInterface $column
  * @param array $batchActions
  */
 private function buildBatchForm(ColumnTypeInterface $column, array $batchActions)
 {
     if (count($batchActions) > 1) {
         $this->formBuilder->add('action', 'choice', array('choices' => $batchActions, 'translation_domain' => $column->getOption('translation_domain')));
         $this->formBuilder->add('submit', 'submit', array('label' => 'crud.list.batch.confirm', 'translation_domain' => 'FSiAdminBundle'));
     }
 }
 function it_sets_translatable_and_not_translated_to_true_when_column_has_not_translated_nested_translatable_property_in_field_mapping(ColumnTypeInterface $column, CellViewInterface $view, ClassMetadata $translatableMetadata)
 {
     $column->getOption('field_mapping')->willReturn(array('nested_object.translatable_property'));
     $nested_object = (object) array('translatable_property' => 'value', 'non_translatable_property' => 'value', 'locale' => 'de');
     $data = (object) array('nested_object' => $nested_object);
     $view->getSource()->willReturn($data);
     $translatableMetadata->hasTranslatableProperties()->willReturn(true);
     $translatableMetadata->getTranslatableProperties()->willReturn(array('translations' => array('translatable_property' => 'translation_property')));
     $translatableMetadata->localeProperty = 'locale';
     $view->setAttribute('translatable', true)->shouldBeCalled();
     $view->setAttribute('not_translated', true)->shouldBeCalled();
     $this->buildCellView($column, $view);
 }
 /**
  * @param \FSi\Component\DataGrid\Column\ColumnTypeInterface $column
  * @throws \InvalidArgumentException
  */
 private function validateOptions(ColumnTypeInterface $column)
 {
     $actions = $column->getOption('actions');
     if (!is_array($actions)) {
         throw new \InvalidArgumentException('Option "actions" must be an array.');
     }
     if (!count($actions)) {
         throw new \InvalidArgumentException('Option actions can\'t be empty.');
     }
     foreach ($actions as $actionName => &$options) {
         if (!is_array($options)) {
             throw new \InvalidArgumentException(sprintf('Options for action "%s" must be an array.', $actionName));
         }
         foreach ($options as $optionName => $value) {
             if (!in_array($optionName, $this->actionOptionsAvailable)) {
                 throw new \InvalidArgumentException(sprintf('Unknown option "%s" in action "%s".', $optionName, $actionName));
             }
         }
         foreach ($this->actionOptionsRequired as $optionName) {
             if (!array_key_exists($optionName, $options)) {
                 throw new \InvalidArgumentException(sprintf('Action "%s" require option "%s".', $actionName, $optionName));
             }
         }
         foreach ($this->actionOptionsDefault as $optionName => $value) {
             if (!array_key_exists($optionName, $options)) {
                 $options[$optionName] = $value;
             }
         }
         if (isset($options['parameters_values'])) {
             if (!is_array($options['parameters_values'])) {
                 throw new \InvalidArgumentException(sprintf('Action "%s" require option "parameters_values" as array.', $actionName, $optionName));
             }
         }
         if (isset($options['parameters'])) {
             if (!is_array($options['parameters'])) {
                 throw new \InvalidArgumentException(sprintf('Action "%s" require option "parameters" as array.', $actionName, $optionName));
             }
             $mappingFields = $column->getOption('field_mapping');
             foreach ($options['parameters'] as $mappingField => $routerParameter) {
                 if (!in_array($mappingField, $mappingFields, true)) {
                     throw new \InvalidArgumentException(sprintf('Unknown mapping_field "%s". Maybe you should consider using option "parameters_values"?', $mappingField));
                 }
             }
         }
     }
     $column->setOption('actions', $actions);
 }
Exemplo n.º 11
0
 /**
  * Create Form Objects for column and rowset index.
  *
  * @param \FSi\Component\DataGrid\Column\ColumnTypeInterface $column
  * @param mixed $index
  * @param mixed $object
  * @return FormInterface
  */
 private function createForm(ColumnTypeInterface $column, $index, $object)
 {
     $formId = implode(array($column->getName(), $column->getId(), $index));
     if (array_key_exists($formId, $this->forms)) {
         return $this->forms[$formId];
     }
     //Create fields array. There are column types like entity where field_mapping
     //should not be used to build field array.
     $fields = array();
     switch ($column->getId()) {
         case 'entity':
             $field = array('name' => $column->getOption('relation_field'), 'type' => $this->isSymfony3() ? $this->getEntityTypeName() : 'entity', 'options' => array());
             $fields[$column->getOption('relation_field')] = $field;
             break;
         default:
             foreach ($column->getOption('field_mapping') as $fieldName) {
                 $field = array('name' => $fieldName, 'type' => null, 'options' => array());
                 $fields[$fieldName] = $field;
             }
     }
     //Pass fields form options from column into $fields array.
     $fieldsOptions = $column->getOption('form_options');
     foreach ($fieldsOptions as $fieldName => $fieldOptions) {
         if (array_key_exists($fieldName, $fields)) {
             if (is_array($fieldOptions)) {
                 $fields[$fieldName]['options'] = $fieldOptions;
             }
         }
     }
     //Pass fields form type from column into $fields array.
     $fieldsTypes = $column->getOption('form_type');
     foreach ($fieldsTypes as $fieldName => $fieldType) {
         if (array_key_exists($fieldName, $fields)) {
             if (is_string($fieldType)) {
                 $fields[$fieldName]['type'] = $fieldType;
             }
         }
     }
     //Build data array, the data array holds data that should be passed into
     //form elements.
     switch ($column->getId()) {
         case 'datetime':
             foreach ($fields as &$field) {
                 $value = $column->getDataMapper()->getData($field['name'], $object);
                 if (!isset($field['type'])) {
                     $field['type'] = $this->isSymfony3() ? $this->getDateTimeTypeName() : 'datetime';
                 }
                 if (is_numeric($value) && !isset($field['options']['input'])) {
                     $field['options']['input'] = 'timestamp';
                 }
                 if (is_string($value) && !isset($field['options']['input'])) {
                     $field['options']['input'] = 'string';
                 }
                 if ($value instanceof \DateTime && !isset($field['options']['input'])) {
                     $field['options']['input'] = 'datetime';
                 }
             }
             break;
     }
     if ($this->isSymfony3()) {
         $formBuilderOptions = array('entry_type' => $this->getRowTypeName(), 'csrf_protection' => false);
     } else {
         $formBuilderOptions = array('type' => new RowType($fields), 'csrf_protection' => false);
     }
     if ($this->isSymfony3()) {
         $formBuilderOptions['entry_options']['fields'] = $fields;
     }
     $formData = [];
     foreach (array_keys($fields) as $fieldName) {
         $formData[$fieldName] = $column->getDataMapper()->getData($fieldName, $object);
     }
     //Create form builder.
     $formBuilder = $this->formFactory->createNamedBuilder($column->getDataGrid()->getName(), $this->isSymfony3() ? $this->getCollectionTypeName() : 'collection', array($index => $formData), $formBuilderOptions);
     //Create Form.
     $this->forms[$formId] = $formBuilder->getForm();
     return $this->forms[$formId];
 }
Exemplo n.º 12
0
 /**
  * {@inheritdoc}
  */
 public function buildHeaderView(ColumnTypeInterface $column, HeaderViewInterface $view)
 {
     $view->setAttribute('header_attr', $column->getOption('header_attr'));
 }
Exemplo n.º 13
0
 /**
  * @param \FSi\Component\DataGrid\Column\ColumnTypeInterface $column
  * @param \FSi\Component\DataGrid\Column\HeaderViewInterface $view
  */
 function it_passes_attributes_to_header_view($column, $view)
 {
     $column->getOption('header_attr')->willReturn(array('header attributes'));
     $view->setAttribute('header_attr', array('header attributes'))->shouldBeCalled();
     $this->buildHeaderView($column, $view);
 }
Exemplo n.º 14
0
 /**
  * @param \Symfony\Component\HttpFoundation\ParameterBag $queryAttributes
  * @param \Symfony\Component\Routing\RouterInterface $router
  * @param \Symfony\Component\Form\Test\FormBuilderInterface $formBuilder
  * @param \Symfony\Component\Form\FormView $formView
  * @param \FSi\Component\DataGrid\Column\ColumnTypeInterface $column
  * @param \FSi\Component\DataGrid\Column\HeaderViewInterface $view
  */
 function it_allows_to_pass_route_name_and_additional_parameters_to_batch_action($queryAttributes, $router, $formBuilder, $formView, $column, $view)
 {
     $column->getOption('actions')->willReturn(array('action_name' => array('route_name' => 'fsi_admin_custom_batch', 'additional_parameters' => array('element' => 'some_batch_element_id', 'param' => 'value'))));
     $column->getOption('translation_domain')->willReturn('FSiAdminBundle');
     $queryAttributes->has('redirect_uri')->willReturn(true);
     $queryAttributes->get('redirect_uri')->willReturn('some_redirect_uri');
     $router->generate('fsi_admin_custom_batch', array('element' => 'some_batch_element_id', 'param' => 'value', 'redirect_uri' => 'some_redirect_uri'))->willReturn('path_to_batch_action');
     $formBuilder->add('action', 'choice', array('choices' => array(0 => 'crud.list.batch.empty_choice', 'path_to_batch_action' => 'action_name'), 'translation_domain' => 'FSiAdminBundle'))->willReturn();
     $formBuilder->add('submit', 'submit', array('label' => 'crud.list.batch.confirm', 'translation_domain' => 'FSiAdminBundle'))->willReturn();
     $view->setAttribute('batch_form', $formView)->shouldBeCalled();
     $this->buildHeaderView($column, $view);
 }
 /**
  * {@inheritDoc}
  */
 public function initOptions(ColumnTypeInterface $column)
 {
     $column->getOptionsResolver()->setDefaults(array('translation_domain' => 'messages'));
     $column->getOptionsResolver()->setAllowedTypes('translation_domain', array('string', 'null'));
 }