/** * {@inheritdoc} */ public function addFilter(DatagridInterface $datagrid, $type = null, FieldDescriptionInterface $fieldDescription, AdminInterface $admin) { // Try to wrap all types to search types if ($type == null) { $guessType = $this->guesser->guessType($admin->getClass(), $fieldDescription->getName(), $admin->getModelManager()); $type = $guessType->getType(); $fieldDescription->setType($type); $options = $guessType->getOptions(); foreach ($options as $name => $value) { if (is_array($value)) { $fieldDescription->setOption($name, array_merge($value, $fieldDescription->getOption($name, array()))); } else { $fieldDescription->setOption($name, $fieldDescription->getOption($name, $value)); } } } else { $fieldDescription->setType($type); } $this->fixFieldDescription($admin, $fieldDescription); $admin->addFilterFieldDescription($fieldDescription->getName(), $fieldDescription); $fieldDescription->mergeOption('field_options', array('required' => false)); $filter = $this->filterFactory->create($fieldDescription->getName(), $type, $fieldDescription->getOptions()); if (false !== $filter->getLabel() && !$filter->getLabel()) { $filter->setLabel($admin->getLabelTranslatorStrategy()->getLabel($fieldDescription->getName(), 'filter', 'label')); } $datagrid->addFilter($filter); }
/** * @param \Sonata\AdminBundle\Admin\FieldDescriptionCollection $list * @param null $type * @param \Sonata\AdminBundle\Admin\FieldDescriptionInterface $fieldDescription * @param \Sonata\AdminBundle\Admin\AdminInterface $admin */ public function addField(FieldDescriptionCollection $list, $type = null, FieldDescriptionInterface $fieldDescription, AdminInterface $admin) { if ($type == null) { $guessType = $this->guesser->guessType($admin->getClass(), $fieldDescription->getName(), $admin->getModelManager()); $fieldDescription->setType($guessType->getType()); } else { $fieldDescription->setType($type); } $this->fixFieldDescription($admin, $fieldDescription); $admin->addShowFieldDescription($fieldDescription->getName(), $fieldDescription); $list->add($fieldDescription); }
/** * {@inheritdoc} */ public function fixFieldDescription(AdminInterface $admin, FieldDescriptionInterface $fieldDescription) { if (null === $fieldDescription->getTemplate()) { $fieldDescription->setTemplate('YnloAdminBundle::CRUD/list__details.html.twig'); } if (null === $fieldDescription->getType()) { $fieldDescription->setType('_details'); } if (null === $fieldDescription->getOption('name')) { $fieldDescription->setOption('name', 'Details'); } if (null === $fieldDescription->getOption('header_style')) { $fieldDescription->setOption('header_style', 'width:20px'); } if (null === $fieldDescription->getOption('details_template')) { throw new \LogicException('The option "details_template" is required'); } //encode the template $template = base64_encode($fieldDescription->getOption('details_template')); $fieldDescription->setOption('details_template_encoded', $template); if (null === $fieldDescription->getOption('ajax')) { $fieldDescription->setOption('ajax', false); } if (null === $fieldDescription->getOption('code')) { $fieldDescription->setOption('code', '_details'); } //hide default label if ($fieldDescription->getOption('label') == '_details' || $fieldDescription->getOption('label') == 'Details') { $fieldDescription->setOption('label', ' '); } }
/** * {@inheritdoc} */ public function buildActionFieldDescription(FieldDescriptionInterface $fieldDescription) { if (null === $fieldDescription->getTemplate()) { $fieldDescription->setTemplate('NetworkingInitCmsBundle:CRUD:list__action.html.twig'); } if (null === $fieldDescription->getType()) { $fieldDescription->setType('action'); } if (null === $fieldDescription->getOption('name')) { $fieldDescription->setOption('name', 'Action'); } if (null === $fieldDescription->getOption('code')) { $fieldDescription->setOption('code', 'Action'); } if (null !== $fieldDescription->getOption('actions')) { $actions = $fieldDescription->getOption('actions'); foreach ($actions as $k => $action) { if (!isset($action['template'])) { $actions[$k]['template'] = sprintf('NetworkingInitCmsBundle:CRUD:list__action_%s.html.twig', $k); } } $fieldDescription->setOption('actions', $actions); } return $fieldDescription; }
/** * @param \Sonata\AdminBundle\Datagrid\DatagridInterface $datagrid * @param null $type * @param \Sonata\AdminBundle\Admin\FieldDescriptionInterface $fieldDescription * @param \Sonata\AdminBundle\Admin\AdminInterface $admin */ public function addFilter(DatagridInterface $datagrid, $type, FieldDescriptionInterface $fieldDescription, AdminInterface $admin) { if ($type == null) { $guessType = $this->guesser->guessType($admin->getClass(), $fieldDescription->getName(), $admin->getModelManager()); $type = $guessType->getType(); $fieldDescription->setType($type); $options = $guessType->getOptions(); foreach ($options as $name => $value) { if (is_array($value)) { $fieldDescription->setOption($name, array_merge($value, $fieldDescription->getOption($name, array()))); } else { $fieldDescription->setOption($name, $fieldDescription->getOption($name, $value)); } } } else { $fieldDescription->setType($type); } $this->fixFieldDescription($admin, $fieldDescription); $admin->addFilterFieldDescription($fieldDescription->getName(), $fieldDescription); $fieldDescription->mergeOption('field_options', array('required' => false)); if ($type === 'doctrine_orm_model_autocomplete') { $fieldDescription->mergeOption('field_options', array('class' => $fieldDescription->getTargetEntity(), 'model_manager' => $fieldDescription->getAdmin()->getModelManager(), 'admin_code' => $admin->getCode(), 'context' => 'filter')); } $filter = $this->filterFactory->create($fieldDescription->getName(), $type, $fieldDescription->getOptions()); if (false !== $filter->getLabel() && !$filter->getLabel()) { $filter->setLabel($admin->getLabelTranslatorStrategy()->getLabel($fieldDescription->getName(), 'filter', 'label')); } $datagrid->addFilter($filter); }
/** * {@inheritdoc} */ public function fixFieldDescription(AdminInterface $admin, FieldDescriptionInterface $fieldDescription) { if (null === $fieldDescription->getTemplate()) { $fieldDescription->setTemplate('SonataAdminBundle:CRUD:list__action.html.twig'); } if (null === $fieldDescription->getType()) { $fieldDescription->setType('action'); } if (null === $fieldDescription->getOption('name')) { $fieldDescription->setOption('name', 'Action'); } if (null === $fieldDescription->getOption('code')) { $fieldDescription->setOption('code', 'Action'); } if (null === $fieldDescription->getOption('header_style') && $fieldDescription->getOption('dropdown')) { $fieldDescription->setOption('header_style', 'width:40px'); } if (null !== $fieldDescription->getOption('actions')) { $actions = $fieldDescription->getOption('actions'); foreach ($actions as $k => &$action) { //only set the template if really exists //set to default any template that not exists if (!isset($action['template'])) { if ($fieldDescription->getOption('dropdown')) { $template = sprintf('SonataAdminBundle:CRUD:list__action_dropdown_%s.html.twig', $k); } else { $template = sprintf('SonataAdminBundle:CRUD:list__action_%s.html.twig', $k); } try { $this->twig->loadTemplate($template); } catch (\Twig_Error_Loader $e) { if ($fieldDescription->getOption('dropdown')) { $template = 'YnloAdminBundle::CRUD/list__action_dropdown_default.html.twig'; } else { $template = 'YnloAdminBundle::CRUD/list__action_default.html.twig'; } } $action['template'] = $template; } //set default role if (!isset($action['role'])) { $role = strtoupper($k); $action['role'] = $role === 'SHOW' ? 'VIEW' : $role; } //set default visibility if (!isset($action['visible'])) { $action['visible'] = true; } } $fieldDescription->setOption('actions', $actions); } //hide default label if (in_array($fieldDescription->getOption('label'), ['_action', 'Action'])) { $fieldDescription->setOption('label', ' '); } return $fieldDescription; }
/** * {@inheritDoc} */ public function addField(FieldDescriptionCollection $list, $type = null, FieldDescriptionInterface $fieldDescription, AdminInterface $admin) { if ($type == null) { $guessType = $this->guesser->guessType($admin->getClass(), $fieldDescription->getName(), $admin->getModelManager()); $fieldDescription->setType($guessType->getType()); } else { $fieldDescription->setType($type); } $this->fixFieldDescription($admin, $fieldDescription); $admin->addShowFieldDescription($fieldDescription->getName(), $fieldDescription); switch ($fieldDescription->getMappingType()) { case ClassMetadata::MANY_TO_ONE: case ClassMetadata::MANY_TO_MANY: return; default: $list->add($fieldDescription); } }
/** * @throws \RuntimeException * @param \Sonata\AdminBundle\Admin\AdminInterface $admin * @param \Sonata\AdminBundle\Admin\FieldDescription $fieldDescription * @return void */ public function fixFieldDescription(AdminInterface $admin, FieldDescriptionInterface $fieldDescription) { // set default values $fieldDescription->setAdmin($admin); if ($admin->getModelManager()->hasMetadata($admin->getClass())) { $metadata = $admin->getModelManager()->getMetadata($admin->getClass()); // set the default field mapping if (isset($metadata->fieldMappings[$fieldDescription->getName()])) { $fieldDescription->setFieldMapping($metadata->fieldMappings[$fieldDescription->getName()]); } // set the default association mapping if (isset($metadata->associationMappings[$fieldDescription->getName()])) { $fieldDescription->setAssociationMapping($metadata->associationMappings[$fieldDescription->getName()]); } } if (!$fieldDescription->getType()) { throw new \RuntimeException(sprintf('Please define a type for field `%s` in `%s`', $fieldDescription->getName(), get_class($admin))); } $fieldDescription->setOption('code', $fieldDescription->getOption('code', $fieldDescription->getName())); $fieldDescription->setOption('label', $fieldDescription->getOption('label', $fieldDescription->getName())); $fieldDescription->setOption('filter_value', $fieldDescription->getOption('filter_value', null)); $fieldDescription->setOption('filter_options', $fieldDescription->getOption('filter_options', null)); $fieldDescription->setOption('filter_field_options', $fieldDescription->getOption('filter_field_options', null)); $fieldDescription->setOption('name', $fieldDescription->getOption('name', $fieldDescription->getName())); // set the default type if none is set if (!$fieldDescription->getType()) { $fieldDescription->setType('string'); } if (!$fieldDescription->getTemplate()) { $fieldDescription->setTemplate(sprintf('SonataAdminBundle:CRUD:filter_%s.html.twig', $fieldDescription->getType())); if ($fieldDescription->getType() == ClassMetadataInfo::MANY_TO_ONE) { $fieldDescription->setTemplate('SonataAdminBundle:CRUD:filter_many_to_one.html.twig'); } if ($fieldDescription->getType() == ClassMetadataInfo::MANY_TO_MANY) { $fieldDescription->setTemplate('SonataAdminBundle:CRUD:filter_many_to_many.html.twig'); } } }
/** * @param \Sonata\AdminBundle\Datagrid\DatagridInterface $datagrid * @param null $type * @param \Sonata\AdminBundle\Admin\FieldDescriptionInterface $fieldDescription * @param \Sonata\AdminBundle\Admin\AdminInterface $admin * @return \Sonata\AdminBundle\Filter\FilterInterface */ public function addFilter(DatagridInterface $datagrid, $type = null, FieldDescriptionInterface $fieldDescription, AdminInterface $admin) { if ($type == null) { $guessType = $this->guesser->guessType($admin->getClass(), $fieldDescription->getName()); $type = $guessType->getType(); $fieldDescription->setType($type); $options = $guessType->getOptions(); foreach ($options as $name => $value) { if (is_array($value)) { $fieldDescription->setOption($name, array_merge($value, $fieldDescription->getOption($name, array()))); } else { $fieldDescription->setOption($name, $fieldDescription->getOption($name, $value)); } } } else { $fieldDescription->setType($type); } $this->fixFieldDescription($admin, $fieldDescription); $admin->addFilterFieldDescription($fieldDescription->getName(), $fieldDescription); $fieldDescription->mergeOption('field_options', array('required' => false)); $filter = $this->filterFactory->create($fieldDescription->getName(), $type, $fieldDescription->getOptions()); $datagrid->addFilter($filter); return $datagrid->addFilter($filter); }
/** * @param \Sonata\AdminBundle\Datagrid\DatagridInterface $datagrid * @param \Sonata\AdminBundle\Admin\FieldDescriptionInterface $fieldDescription * @return bool */ public function addFilter(DatagridInterface $datagrid, $type = null, FieldDescriptionInterface $fieldDescription, AdminInterface $admin) { if ($type == null) { $guessType = $this->guesser->guessType($admin->getClass(), $fieldDescription->getName()); $fieldDescription->setType($guessType->getType()); } else { $fieldDescription->setType($type); } $this->fixFieldDescription($admin, $fieldDescription); $admin->addFilterFieldDescription($fieldDescription->getName(), $fieldDescription); switch($fieldDescription->getMappingType()) { case ClassMetadataInfo::MANY_TO_ONE: $options = $fieldDescription->getOption('filter_field_options'); $filter = new \Sonata\AdminBundle\Filter\ORM\IntegerFilter($fieldDescription); break; case ClassMetadataInfo::MANY_TO_MANY: $options = $fieldDescription->getOption('filter_field_options'); $options['choices'] = $this->getChoices($fieldDescription); $fieldDescription->setOption('filter_field_options', $options); $filter = new \Sonata\AdminBundle\Filter\ORM\ChoiceFilter($fieldDescription); break; default: $class = $this->getFilterFieldClass($fieldDescription); $filter = new $class($fieldDescription); } return $datagrid->addFilter($filter); }
/** * The method defines the correct default settings for the provided FieldDescription * * @param \Sonata\AdminBundle\Admin\AdminInterface $admin * @param \Sonata\AdminBundle\Admin\FieldDescriptionInterface $fieldDescription * * @return void */ public function fixFieldDescription(AdminInterface $admin, FieldDescriptionInterface $fieldDescription) { $fieldDescription->setAdmin($admin); if ($admin->getModelManager()->hasMetadata($admin->getClass())) { list($metadata, $lastPropertyName, $parentAssociationMappings) = $admin->getModelManager()->getParentMetadataForProperty($admin->getClass(), $fieldDescription->getName()); $fieldDescription->setParentAssociationMappings($parentAssociationMappings); // set the default field mapping if (isset($metadata->fieldMappings[$lastPropertyName])) { $fieldDescription->setFieldMapping($metadata->fieldMappings[$lastPropertyName]); } // set the default association mapping if (isset($metadata->associationMappings[$lastPropertyName])) { $fieldDescription->setAssociationMapping($metadata->associationMappings[$lastPropertyName]); } } if (!$fieldDescription->getType()) { throw new \RuntimeException(sprintf('Please define a type for field `%s` in `%s`', $fieldDescription->getName(), get_class($admin))); } $fieldDescription->setOption('code', $fieldDescription->getOption('code', $fieldDescription->getName())); $fieldDescription->setOption('label', $fieldDescription->getOption('label', $fieldDescription->getName())); if (!$fieldDescription->getTemplate()) { if ($fieldDescription->getType() == 'id') { $fieldDescription->setType('string'); } if ($fieldDescription->getType() == 'int') { $fieldDescription->setType('integer'); } $template = $this->getTemplate($fieldDescription->getType()); if ($template === null) { if ($fieldDescription->getMappingType() == ClassMetadataInfo::ONE) { $template = 'SonataDoctrineMongoDBAdminBundle:CRUD:show_mongo_one.html.twig'; } elseif ($fieldDescription->getMappingType() == ClassMetadataInfo::MANY) { $template = 'SonataDoctrineMongoDBAdminBundle:CRUD:show_mongo_many.html.twig'; } } $fieldDescription->setTemplate($template); } if (in_array($fieldDescription->getMappingType(), array(ClassMetadataInfo::ONE, ClassMetadataInfo::MANY))) { $admin->attachAdminClass($fieldDescription); } }