Przeglądaj źródła

Fixed sortable option when using custom field types

Sylvain Deloux 11 lat temu
rodzic
commit
9674df74bd

+ 1 - 1
Admin/BaseFieldDescription.php

@@ -444,7 +444,7 @@ abstract class BaseFieldDescription implements FieldDescriptionInterface
      */
      */
     public function isSortable()
     public function isSortable()
     {
     {
-        return $this->getOption('sortable', false);
+        return false !== $this->getOption('sortable', false);
     }
     }
 
 
     /**
     /**

+ 3 - 1
Admin/FieldDescriptionInterface.php

@@ -286,7 +286,9 @@ interface FieldDescriptionInterface
      */
      */
     public function getTranslationDomain();
     public function getTranslationDomain();
 
 
-    /*
+    /**
+     * Return true if field is sortable.
+     *
      * @return boolean
      * @return boolean
      */
      */
     public function isSortable();
     public function isSortable();

+ 2 - 2
Resources/views/CRUD/base_list.html.twig

@@ -40,10 +40,10 @@ file that was distributed with this source code.
                                         {# Action buttons disabled in ajax view! #}
                                         {# Action buttons disabled in ajax view! #}
                                 {% else %}
                                 {% else %}
                                     {% set sortable = false %}
                                     {% set sortable = false %}
-                                    {% if field_description.options.sortable is defined and field_description.options.sortable%}
+                                    {% if field_description.options.sortable is defined and field_description.options.sortable %}
                                         {% set sortable             = true %}
                                         {% set sortable             = true %}
-                                        {% set current              = admin.datagrid.values._sort_by == field_description %}
                                         {% set sort_parameters      = admin.modelmanager.sortparameters(field_description, admin.datagrid) %}
                                         {% set sort_parameters      = admin.modelmanager.sortparameters(field_description, admin.datagrid) %}
+                                        {% set current              = admin.datagrid.values._sort_by == field_description or admin.datagrid.values._sort_by.fieldName == sort_parameters.filter._sort_by %}
                                         {% set sort_active_class    = current ? 'sonata-ba-list-field-order-active' : '' %}
                                         {% set sort_active_class    = current ? 'sonata-ba-list-field-order-active' : '' %}
                                         {% set sort_by              = current ? admin.datagrid.values._sort_order : field_description.options._sort_order %}
                                         {% set sort_by              = current ? admin.datagrid.values._sort_order : field_description.options._sort_order %}
                                     {% endif %}
                                     {% endif %}

+ 7 - 1
Tests/Admin/BaseFieldDescriptionTest.php

@@ -61,10 +61,16 @@ class BaseFieldDescriptionTest extends \PHPUnit_Framework_TestCase
 
 
         $description->setMappingType('int');
         $description->setMappingType('int');
         $this->assertEquals('int', $description->getMappingType());
         $this->assertEquals('int', $description->getMappingType());
-        
+
         $this->assertEquals('short_object_description_placeholder', $description->getOption('placeholder'));
         $this->assertEquals('short_object_description_placeholder', $description->getOption('placeholder'));
         $description->setOptions(array('placeholder' => false));
         $description->setOptions(array('placeholder' => false));
         $this->assertFalse($description->getOption('placeholder'));
         $this->assertFalse($description->getOption('placeholder'));
+
+        $description->setOption('sortable', false);
+        $this->assertFalse($description->isSortable());
+
+        $description->setOption('sortable', 'field_name');
+        $this->assertTrue($description->isSortable());
     }
     }
 
 
     public function testAdmin()
     public function testAdmin()