/** * The method defines the correct default settings for the provided FieldDescription * * {@inheritDoc} * * @throws \RuntimeException if the $fieldDescription does not have a type. */ public function fixFieldDescription(AdminInterface $admin, FieldDescriptionInterface $fieldDescription) { $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())); if (!$fieldDescription->getTemplate()) { $fieldDescription->setTemplate(sprintf('SonataAdminBundle:CRUD:show_%s.html.twig', $fieldDescription->getType())); if ($fieldDescription->getMappingType() == ClassMetadata::MANY_TO_ONE) { $fieldDescription->setTemplate('SonataAdminBundle:CRUD:show_orm_many_to_one.html.twig'); } if ($fieldDescription->getMappingType() == ClassMetadata::MANY_TO_MANY) { $fieldDescription->setTemplate('SonataAdminBundle:CRUD:show_orm_many_to_many.html.twig'); } } if ($fieldDescription->getMappingType() == ClassMetadata::MANY_TO_ONE) { $admin->attachAdminClass($fieldDescription); } if ($fieldDescription->getMappingType() == ClassMetadata::MANY_TO_MANY) { $admin->attachAdminClass($fieldDescription); } }
/** * {@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; }
/** * {@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 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; }
/** * @param FieldDescriptionInterface $fieldDescription * @param string $defaultTemplate * * @return \Twig_TemplateInterface */ protected function getTemplate(FieldDescriptionInterface $fieldDescription, $defaultTemplate) { $templateName = $fieldDescription->getTemplate() ?: $defaultTemplate; try { $template = $this->environment->loadTemplate($templateName); } catch (\Twig_Error_Loader $e) { $template = $this->environment->loadTemplate($defaultTemplate); } return $template; }
/** * @param \Sonata\AdminBundle\Admin\AdminInterface $admin * @param \Sonata\AdminBundle\Admin\FieldDescriptionInterface $fieldDescription */ public function fixFieldDescription(AdminInterface $admin, FieldDescriptionInterface $fieldDescription) { $fieldDescription->setAdmin($admin); if (!$fieldDescription->getType()) { throw new \RuntimeException(sprintf('Please define a type for field `%s` in `%s`', $fieldDescription->getName(), get_class($admin))); } // define the template to use if (!$fieldDescription->getTemplate()) { $fieldDescription->setTemplate($this->getTemplate($fieldDescription->getType())); } // define code and label $fieldDescription->setOption('code', $fieldDescription->getOption('code', $fieldDescription->getName())); $fieldDescription->setOption('label', $fieldDescription->getOption('label', $fieldDescription->getName())); }
/** * 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()) { $fieldDescription->setTemplate($this->getTemplate($fieldDescription->getType())); if (!$fieldDescription->getTemplate()) { switch ($fieldDescription->getMappingType()) { case ClassMetadataInfo::MANY_TO_ONE: $fieldDescription->setTemplate('SonataDoctrineORMAdminBundle:CRUD:show_orm_many_to_one.html.twig'); break; case ClassMetadataInfo::ONE_TO_ONE: $fieldDescription->setTemplate('SonataDoctrineORMAdminBundle:CRUD:show_orm_one_to_one.html.twig'); break; case ClassMetadataInfo::ONE_TO_MANY: $fieldDescription->setTemplate('SonataDoctrineORMAdminBundle:CRUD:show_orm_one_to_many.html.twig'); break; case ClassMetadataInfo::MANY_TO_MANY: $fieldDescription->setTemplate('SonataDoctrineORMAdminBundle:CRUD:show_orm_many_to_many.html.twig'); break; } } } switch ($fieldDescription->getMappingType()) { case ClassMetadataInfo::MANY_TO_ONE: case ClassMetadataInfo::ONE_TO_ONE: case ClassMetadataInfo::ONE_TO_MANY: case ClassMetadataInfo::MANY_TO_MANY: $admin->attachAdminClass($fieldDescription); break; } }
/** * @param FieldDescriptionInterface $fieldDescription * @param \Twig_Template $template * @param array $parameters * * @return string */ public function output(FieldDescriptionInterface $fieldDescription, \Twig_Template $template, array $parameters, \Twig_Environment $environment) { $content = $template->render($parameters); if ($environment->isDebug()) { $commentTemplate = <<<EOT <!-- START fieldName: %s template: %s compiled template: %s --> %s <!-- END - fieldName: %s --> EOT; return sprintf($commentTemplate, $fieldDescription->getFieldName(), $fieldDescription->getTemplate(), $template->getTemplateName(), $content, $fieldDescription->getFieldName()); } return $content; }
/** * @param FieldDescriptionInterface $fieldDescription * @param \Twig_Template $template * @param array $parameters * * @return string */ public function output(FieldDescriptionInterface $fieldDescription, \Twig_Template $template, array $parameters = array()) { $content = $template->render($parameters); if ($this->environment->isDebug()) { return sprintf("\n<!-- START \n fieldName: %s\n template: %s\n compiled template: %s\n -->\n%s\n<!-- END - fieldName: %s -->", $fieldDescription->getFieldName(), $fieldDescription->getTemplate(), $template->getTemplateName(), $content, $fieldDescription->getFieldName()); } return $content; }
/** * @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()]); } } $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())); if (!$fieldDescription->getTemplate()) { $fieldDescription->setTemplate(sprintf('SonataAdminBundle:CRUD:filter_%s.html.twig', $fieldDescription->getType())); if ($fieldDescription->getMappingType() == ClassMetadataInfo::MANY_TO_ONE) { $fieldDescription->setTemplate('SonataAdminBundle:CRUD:filter_many_to_one.html.twig'); } if ($fieldDescription->getMappingType() == ClassMetadataInfo::MANY_TO_MANY) { $fieldDescription->setTemplate('SonataAdminBundle:CRUD:filter_many_to_many.html.twig'); } } }
/** * 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); } }
/** * render a field element from the FieldDescription * * * @throws InvalidArgumentException * @param \Sonata\AdminBundle\Admin\FieldDescriptionInterface $fieldDescription * @param \Sumfony\Component\Form\FormView $formView * @param mixed $object * @param array $params * @return string */ public function renderFormElement(FieldDescriptionInterface $fieldDescription, FormView $formView, $object, $params = array()) { if (!$fieldDescription->getFieldName()) { return ''; } if (!$formView->offsetExists($fieldDescription->getFieldName())) { throw new \RuntimeException(sprintf('No child named %s', $fieldDescription->getFieldName())); } $children = $formView->offsetGet($fieldDescription->getFieldName()); if (in_array('hidden', $children->get('types'))) { return ''; } // find the correct edit parameter // edit : standard | inline // inline : natural | table $parentFieldDescription = $fieldDescription->getAdmin()->getParentFieldDescription(); if (!$parentFieldDescription) { $params['edit'] = $fieldDescription->getOption('edit', 'standard'); $params['inline'] = $fieldDescription->getOption('inline', 'natural'); $base_template = sprintf('SonataAdminBundle:CRUD:base_%s_edit_field.html.twig', 'standard'); } else { $params['edit'] = $parentFieldDescription->getOption('edit', 'standard'); $params['inline'] = $parentFieldDescription->getOption('inline', 'natural'); $base_template = sprintf('SonataAdminBundle:CRUD:base_%s_edit_field.html.twig', $params['edit']); } $template = $this->environment->loadTemplate($fieldDescription->getTemplate()); return $this->output($fieldDescription, $template->render(array_merge($params, array('admin' => $fieldDescription->getAdmin(), 'object' => $object, 'field_description' => $fieldDescription, 'value' => $this->getValueFromFieldDescription($object, $fieldDescription, $params), 'field_element' => $children, 'base_template' => $fieldDescription->getOption('base_template', $base_template))))); }
/** * {@inheritdoc} */ public function supportThisField(FieldDescriptionInterface $fieldDescription) { return 'enum' === $fieldDescription->getType() && null === $fieldDescription->getTemplate(); }
/** * The method defines the correct default settings for the provided FieldDescription * * @param \Sonata\AdminBundle\Admin\AdminInterface $admin * @param \Sonata\AdminBundle\Admin\FieldDescriptionInterface $fieldDescription * @param array $options * @return void */ public function fixFieldDescription(AdminInterface $admin, FieldDescriptionInterface $fieldDescription, array $options = array()) { $fieldDescription->mergeOptions($options); 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->setAdmin($admin); $fieldDescription->setOption('edit', $fieldDescription->getOption('edit', 'standard')); // fix template value for doctrine association fields if (!$fieldDescription->getTemplate()) { $fieldDescription->setTemplate(sprintf('SonataAdminBundle:CRUD:edit_%s.html.twig', $fieldDescription->getType())); } if ($fieldDescription->getType() == ClassMetadataInfo::ONE_TO_ONE) { $fieldDescription->setTemplate('SonataAdminBundle:CRUD:edit_orm_one_to_one.html.twig'); $admin->attachAdminClass($fieldDescription); } if ($fieldDescription->getType() == ClassMetadataInfo::MANY_TO_ONE) { $fieldDescription->setTemplate('SonataAdminBundle:CRUD:edit_orm_many_to_one.html.twig'); $admin->attachAdminClass($fieldDescription); } if ($fieldDescription->getType() == ClassMetadataInfo::MANY_TO_MANY) { $fieldDescription->setTemplate('SonataAdminBundle:CRUD:edit_orm_many_to_many.html.twig'); $admin->attachAdminClass($fieldDescription); } if ($fieldDescription->getType() == ClassMetadataInfo::ONE_TO_MANY) { $fieldDescription->setTemplate('SonataAdminBundle:CRUD:edit_orm_one_to_many.html.twig'); if ($fieldDescription->getOption('edit') == 'inline' && !$fieldDescription->getOption('widget_form_field')) { $fieldDescription->setOption('widget_form_field', 'Bundle\\Sonata\\AdminBundle\\Form\\EditableFieldGroup'); } $admin->attachAdminClass($fieldDescription); } // set correct default value if ($fieldDescription->getType() == 'datetime') { $options = $fieldDescription->getOption('form_field_options', array()); if (!isset($options['years'])) { $options['years'] = range(1900, 2100); } $fieldDescription->setOption('form_field', $options); } }
/** * Get template. * * @param FieldDescriptionInterface $fieldDescription * @param string $defaultTemplate * * @return \Twig_Template */ private function getTemplate(FieldDescriptionInterface $fieldDescription, $defaultTemplate, \Twig_Environment $environment) { $templateName = $fieldDescription->getTemplate() ?: $defaultTemplate; return $environment->loadTemplate($templateName); }