Browse Source

Merge remote-tracking branch 'wilky/455-sortable-datetime'

gedi 12 years ago
parent
commit
4a68552b1b

+ 3 - 1
lib/Gedmo/Sortable/SortableListener.php

@@ -356,7 +356,9 @@ class SortableListener extends MappedEventSubscriber
     {
     {
         $data = $config['useObjectClass'];
         $data = $config['useObjectClass'];
         foreach ($groups as $group => $val) {
         foreach ($groups as $group => $val) {
-            if (is_object($val)) {
+            if($val instanceof \DateTime) {
+                $val = $val->format('c');
+            } elseif (is_object($val)) {
                 $val = spl_object_hash($val);
                 $val = spl_object_hash($val);
             }
             }
             $data .= $group.$val;
             $data .= $group.$val;

+ 79 - 0
tests/Gedmo/Sortable/Fixture/Event.php

@@ -0,0 +1,79 @@
+<?php
+
+namespace Sortable\Fixture;
+
+use Gedmo\Mapping\Annotation as Gedmo;
+use Doctrine\ORM\Mapping as ORM;
+
+/**
+ * @ORM\Entity(repositoryClass="Gedmo\Sortable\Entity\Repository\SortableRepository")
+ */
+class Event
+{
+    /**
+     * @var int
+     *
+     * @ORM\Id
+     * @ORM\GeneratedValue
+     * @ORM\Column(type="integer")
+     */
+    private $id;
+
+    /**
+     * @var \DateTime
+     *
+     * @Gedmo\SortableGroup
+     * @ORM\Column(type="datetime")
+     */
+    private $dateTime;
+
+    /**
+     * @var string
+     *
+     * @ORM\Column(type="string", length=255)
+     */
+    private $name;
+
+    /**
+     * @var int
+     *
+     * @Gedmo\SortablePosition
+     * @ORM\Column(type="integer")
+     */
+    private $position;
+
+    public function getId()
+    {
+        return $this->id;
+    }
+
+    public function setDateTime(\DateTime $date)
+    {
+        $this->dateTime = $date;
+    }
+
+    public function getDateTime()
+    {
+        return $this->dateTime;
+    }
+
+    public function setName($name)
+    {
+        $this->name = $name;
+    }
+
+    public function getName()
+    {
+        return $this->name;
+    }
+
+    public function setPosition($position)
+    {
+        $this->position = $position;
+    }
+
+    public function getPosition()
+    {
+        return $this->position;
+    }
+}

+ 42 - 0
tests/Gedmo/Sortable/SortableTest.php

@@ -10,6 +10,7 @@ use Sortable\Fixture\Category;
 use Sortable\Fixture\SimpleListItem;
 use Sortable\Fixture\SimpleListItem;
 use Sortable\Fixture\Author;
 use Sortable\Fixture\Author;
 use Sortable\Fixture\Paper;
 use Sortable\Fixture\Paper;
+use Sortable\Fixture\Event;
 
 
 /**
 /**
  * These are tests for sluggable behavior
  * These are tests for sluggable behavior
@@ -27,6 +28,7 @@ class SortableTest extends BaseTestCaseORM
     const SIMPLE_LIST_ITEM = 'Sortable\\Fixture\\SimpleListItem';
     const SIMPLE_LIST_ITEM = 'Sortable\\Fixture\\SimpleListItem';
     const AUTHOR = 'Sortable\\Fixture\\Author';
     const AUTHOR = 'Sortable\\Fixture\\Author';
     const PAPER = 'Sortable\\Fixture\\Paper';
     const PAPER = 'Sortable\\Fixture\\Paper';
+    const EVENT = 'Sortable\\Fixture\\Event';
 
 
     private $nodeId;
     private $nodeId;
 
 
@@ -275,6 +277,45 @@ class SortableTest extends BaseTestCaseORM
         $this->assertEquals("Category2", $items[1]->getCategory()->getName());
         $this->assertEquals("Category2", $items[1]->getCategory()->getName());
     }
     }
 
 
+    /**
+     * @test
+     */
+    public function shouldGroupByDateTimeValue()
+    {
+        $event1 = new Event();
+        $event1->setDateTime(new \DateTime("2012-09-15 00:00:00"));
+        $event1->setName("Event1");
+        $this->em->persist($event1);
+        $event2 = new Event();
+        $event2->setDateTime(new \DateTime("2012-09-15 00:00:00"));
+        $event2->setName("Event2");
+        $this->em->persist($event2);
+        $event3 = new Event();
+        $event3->setDateTime(new \DateTime("2012-09-16 00:00:00"));
+        $event3->setName("Event3");
+        $this->em->persist($event3);
+
+        $this->em->flush();
+
+        $event4 = new Event();
+        $event4->setDateTime(new \DateTime("2012-09-15 00:00:00"));
+        $event4->setName("Event4");
+        $this->em->persist($event4);
+
+        $event5 = new Event();
+        $event5->setDateTime(new \DateTime("2012-09-16 00:00:00"));
+        $event5->setName("Event5");
+        $this->em->persist($event5);
+
+        $this->em->flush();
+
+        $this->assertEquals(0, $event1->getPosition());
+        $this->assertEquals(1, $event2->getPosition());
+        $this->assertEquals(0, $event3->getPosition());
+        $this->assertEquals(2, $event4->getPosition());
+        $this->assertEquals(1, $event5->getPosition());
+    }
+
     /**
     /**
      * @test
      * @test
      */
      */
@@ -365,6 +406,7 @@ class SortableTest extends BaseTestCaseORM
             self::SIMPLE_LIST_ITEM,
             self::SIMPLE_LIST_ITEM,
             self::AUTHOR,
             self::AUTHOR,
             self::PAPER,
             self::PAPER,
+            self::EVENT,
         );
         );
     }
     }