/** * {@inheritDoc} */ public function visitMetadata(DatagridConfiguration $config, MetadataObject $data) { $filtersState = $data->offsetGetByPath('[state][filters]', []); $initialFiltersState = $filtersState; $filtersMetaData = []; $filters = $this->getFiltersToApply($config); $values = $this->getValuesToApply($config); $initialValues = $this->getValuesToApply($config, false); foreach ($filters as $filter) { $value = isset($values[$filter->getName()]) ? $values[$filter->getName()] : false; $initialValue = isset($initialValues[$filter->getName()]) ? $initialValues[$filter->getName()] : false; $filtersState = $this->updateFiltersState($filter, $value, $filtersState); $initialFiltersState = $this->updateFiltersState($filter, $initialValue, $initialFiltersState); $metadata = $filter->getMetadata(); $filtersMetaData[] = array_merge($metadata, ['label' => $metadata[FilterUtility::TRANSLATABLE_KEY] ? $this->translator->trans($metadata['label']) : $metadata['label']]); } $data->offsetAddToArray('initialState', ['filters' => $initialFiltersState])->offsetAddToArray('state', ['filters' => $filtersState])->offsetAddToArray('filters', $filtersMetaData)->offsetAddToArray(MetadataObject::REQUIRED_MODULES_KEY, ['orofilter/js/datafilter-builder']); }
/** * {@inheritDoc} */ public function visitMetadata(DatagridConfiguration $config, MetadataObject $data) { $filtersState = $data->offsetGetByPath('[state][filters]', []); $filtersMetaData = []; $filters = $this->getFiltersToApply($config); $values = $this->getValuesToApply($config); foreach ($filters as $filter) { $value = isset($values[$filter->getName()]) ? $values[$filter->getName()] : false; if ($value !== false) { $form = $filter->getForm(); if (!$form->isSubmitted()) { $form->submit($value); } if ($form->isValid()) { $filtersState[$filter->getName()] = $value; } } $metadata = $filter->getMetadata(); $filtersMetaData[] = array_merge($metadata, ['label' => $this->translator->trans($metadata['label'])]); } $data->offsetAddToArray('state', ['filters' => $filtersState])->offsetAddToArray('filters', $filtersMetaData)->offsetAddToArray(MetadataObject::REQUIRED_MODULES_KEY, ['oro/datafilter-builder']); }
/** * {@inheritdoc} */ public function visitMetadata(DatagridConfiguration $config, MetadataObject $data) { $multisort = $config->offsetGetByPath(Configuration::MULTISORT_PATH, false); $sorters = $this->getSorters($config); $proceed = []; foreach ($data->offsetGetOr('columns', []) as $key => $column) { if (isset($column['name']) && isset($sorters[$column['name']])) { $data->offsetSetByPath(sprintf('[columns][%s][sortable]', $key), true); $proceed[] = $column['name']; } } $extraSorters = array_diff(array_keys($sorters), $proceed); if (count($extraSorters)) { throw new \LogicException(sprintf('Could not found column(s) "%s" for sorting', implode(', ', $extraSorters))); } $data->offsetAddToArray(MetadataObject::OPTIONS_KEY, ['multipleSorting' => $multisort]); $sortersState = $data->offsetGetByPath('[state][sorters]', []); $sorters = $this->getSortersToApply($config); foreach ($sorters as $column => $definition) { list($direction) = $definition; $sortersState[$column] = $this->normalizeDirection($direction); } $data->offsetAddToArray('state', ['sorters' => $sortersState]); }
/** * @param DatagridConfiguration $config * @param MetadataObject $data * @param bool $readParameters * @return array */ protected function getSortersState(DatagridConfiguration $config, MetadataObject $data, $readParameters = true) { $sortersState = $data->offsetGetByPath('[state][sorters]', []); $sorters = $this->getSortersToApply($config, $readParameters); foreach ($sorters as $column => $definition) { list($direction) = $definition; $sortersState[$column] = $this->normalizeDirection($direction); } return $sortersState; }