Parcourir la source

Refactor the DatagridBuilder::add to match FormBuilder::add signature

Thomas Rabaix il y a 14 ans
Parent
commit
f6d265c80d

+ 0 - 4
Admin/Admin.php

@@ -590,10 +590,6 @@ abstract class Admin implements AdminInterface, DomainObjectInterface
 
         // build the datagrid filter
         $this->configureDatagridFilters($mapper);
-
-        foreach ($this->getFilterFieldDescriptions() as $fieldDescription) {
-            $mapper->add($fieldDescription);
-        }
     }
 
     /**

+ 6 - 4
Builder/DatagridBuilderInterface.php

@@ -18,7 +18,6 @@ use Sonata\AdminBundle\Datagrid\DatagridInterface;
 
 interface DatagridBuilderInterface
 {
-
     /**
      *
      * @param \Sonata\AdminBundle\Admin\AdminInterface $admin
@@ -31,7 +30,7 @@ interface DatagridBuilderInterface
      * Returns the class associated to a FieldDescription if any defined
      *
      * @throws RuntimeException
-     * @param \Sonata\AdminBundle\Datagrid\DatagridInterface $fieldDescription
+     * @param \Sonata\AdminBundle\Admin\FieldDescriptionInterface $fieldDescription
      * @return bool|string
      */
     function getFilterFieldClass(FieldDescriptionInterface $fieldDescription);
@@ -43,11 +42,14 @@ interface DatagridBuilderInterface
     function getChoices(FieldDescriptionInterface $fieldDescription);
 
     /**
+     * @abstract
      * @param \Sonata\AdminBundle\Datagrid\DatagridInterface $datagrid
+     * @param $type
      * @param \Sonata\AdminBundle\Admin\FieldDescriptionInterface $fieldDescription
-     * @return bool
+     * @param \Sonata\AdminBundle\Admin\AdminInterface $admin
+     * @return void
      */
-    function addFilter(DatagridInterface $datagrid, FieldDescriptionInterface $fieldDescription);
+    function addFilter(DatagridInterface $datagrid, $type = null, FieldDescriptionInterface $fieldDescription, AdminInterface $admin);
 
     /**
      * @param \Sonata\AdminBundle\Admin\AdminInterface $admin

+ 8 - 3
Builder/ORM/DatagridBuilder.php

@@ -162,12 +162,17 @@ class DatagridBuilder implements DatagridBuilderInterface
      * @param \Sonata\AdminBundle\Admin\FieldDescriptionInterface $fieldDescription
      * @return bool
      */
-    public function addFilter(DatagridInterface $datagrid, FieldDescriptionInterface $fieldDescription)
+    public function addFilter(DatagridInterface $datagrid, $type = null, FieldDescriptionInterface $fieldDescription, AdminInterface $admin)
     {
-        if (!$fieldDescription->getType()) {
-            return false;
+        if ($type == null) {
+            throw new \RunTimeException('type guesser on DatagridBuilder is not yet implemented');
         }
 
+        $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');

+ 0 - 1
Builder/ORM/ListBuilder.php

@@ -45,7 +45,6 @@ class ListBuilder implements ListBuilderInterface
      *
      * @param \Sonata\AdminBundle\Admin\AdminInterface $admin
      * @param \Sonata\AdminBundle\Admin\FieldDescriptionInterface $fieldDescription
-     * @param array $options
      * @return void
      */
     public function fixFieldDescription(AdminInterface $admin, FieldDescriptionInterface $fieldDescription)

+ 3 - 12
Datagrid/DatagridMapper.php

@@ -41,7 +41,7 @@ class DatagridMapper
      * @param array $fieldDescriptionOptions
      * @return \Sonata\AdminBundle\Datagrid\DatagridMapper
      */
-    public function add($name, array $fieldDescriptionOptions = array())
+    public function add($name, $type = null, array $fieldDescriptionOptions = array())
     {
         if ($name instanceof FieldDescriptionInterface) {
             $fieldDescription = $name;
@@ -55,21 +55,12 @@ class DatagridMapper
                 $fieldDescriptionOptions
             );
 
-            $this->datagridBuilder->fixFieldDescription($this->admin, $fieldDescription, $fieldDescriptionOptions);
-            $this->admin->addFilterFieldDescription($name, $fieldDescription);
-
-        } else if (is_string($name) && $this->admin->hasFormFieldDescription($name)) {
-            $fieldDescription = $this->admin->getFormFieldDescription($name);
-
         } else {
             throw new \RuntimeException('invalid state');
         }
 
-        // add the field with the FormBuilder
-        $this->datagridBuilder->addFilter(
-            $this->datagrid,
-            $fieldDescription
-        );
+        // add the field with the DatagridBuilder
+        $this->datagridBuilder->addFilter($this->datagrid, $type, $fieldDescription, $this->admin);
 
         return $this;
     }