Forráskód Böngészése

[mapping] fixed issue with multilevel extensions in inheritance mapping, closes #239

gedi 13 éve
szülő
commit
4864a80079

+ 5 - 0
README.md

@@ -7,6 +7,11 @@
 **Note:** Use 2.1.x or 2.2.x tag in order to use extensions based on Doctrine2.x.x component versions. Currently
 **Note:** Use 2.1.x or 2.2.x tag in order to use extensions based on Doctrine2.x.x component versions. Currently
 master branch is based on 2.3.x versions and may not work with older components.
 master branch is based on 2.3.x versions and may not work with older components.
 
 
+**2012-01-23**
+
+- Fixed an issue with inheritance mapping in case of multiple class extension.
+For details take a [peek at tests](https://github.com/l3pp4rd/DoctrineExtensions/blob/master/tests/Gedmo/Tree/MultiInheritanceTest2.php)
+
 **2012-01-22**
 **2012-01-22**
 
 
 - Adapted extensions for recent 2.3.0-DEV version of doctrine2. Released a tag for 2.2.x component
 - Adapted extensions for recent 2.3.0-DEV version of doctrine2. Released a tag for 2.2.x component

+ 1 - 1
lib/Gedmo/Mapping/ExtensionMetadataFactory.php

@@ -82,7 +82,7 @@ final class ExtensionMetadataFactory
                 if ($cmf->hasMetadataFor($parentClass)) {
                 if ($cmf->hasMetadataFor($parentClass)) {
                     $class = $this->objectManager->getClassMetadata($parentClass);
                     $class = $this->objectManager->getClassMetadata($parentClass);
                     $this->driver->readExtendedMetadata($class, $config);
                     $this->driver->readExtendedMetadata($class, $config);
-                    if (!$class->isInheritanceTypeNone() && $config) {
+                    if (!$class->isInheritanceTypeNone() && !$class->parentClasses && $config) {
                         $useObjectName = $class->name;
                         $useObjectName = $class->name;
                     }
                     }
                 }
                 }

+ 2 - 2
tests/Gedmo/Tree/Fixture/Role.php

@@ -7,10 +7,10 @@ use Doctrine\ORM\Mapping as ORM;
 
 
 /**
 /**
  * @ORM\Entity(repositoryClass="Gedmo\Tree\Entity\Repository\NestedTreeRepository")
  * @ORM\Entity(repositoryClass="Gedmo\Tree\Entity\Repository\NestedTreeRepository")
- * @ORM\Table(name="`role`")
+ * @ORM\Table(name="role")
  * @ORM\InheritanceType("JOINED")
  * @ORM\InheritanceType("JOINED")
  * @ORM\DiscriminatorColumn(name="discr", type="string")
  * @ORM\DiscriminatorColumn(name="discr", type="string")
- * @ORM\DiscriminatorMap({"user" = "User", "usergroup" = "UserGroup"})
+ * @ORM\DiscriminatorMap({"user" = "User", "usergroup" = "UserGroup", "userldap" = "UserLDAP"})
  * @Gedmo\Tree(type="nested")
  * @Gedmo\Tree(type="nested")
  */
  */
 abstract class Role {
 abstract class Role {

+ 1 - 1
tests/Gedmo/Tree/Fixture/User.php

@@ -5,7 +5,7 @@ use Doctrine\ORM\Mapping as ORM;
 
 
 /**
 /**
  * @ORM\Entity(repositoryClass="Gedmo\Tree\Entity\Repository\NestedTreeRepository")
  * @ORM\Entity(repositoryClass="Gedmo\Tree\Entity\Repository\NestedTreeRepository")
- * @ORM\Table(name="`user`")
+ * @ORM\Table(name="user")
  */
  */
 class User extends Role {
 class User extends Role {
 
 

+ 1 - 1
tests/Gedmo/Tree/Fixture/UserGroup.php

@@ -7,7 +7,7 @@ use Doctrine\ORM\Mapping as ORM;
  * Group entity
  * Group entity
  *
  *
  * @ORM\Entity(repositoryClass="Gedmo\Tree\Entity\Repository\NestedTreeRepository")
  * @ORM\Entity(repositoryClass="Gedmo\Tree\Entity\Repository\NestedTreeRepository")
- * @ORM\Table(name="`user_group`")
+ * @ORM\Table(name="user_group")
  */
  */
 class UserGroup extends Role {
 class UserGroup extends Role {
 
 

+ 16 - 0
tests/Gedmo/Tree/Fixture/UserLDAP.php

@@ -0,0 +1,16 @@
+<?php
+namespace Tree\Fixture;
+
+use Doctrine\ORM\Mapping as ORM;
+
+/**
+ * @ORM\Entity(repositoryClass="Gedmo\Tree\Entity\Repository\NestedTreeRepository")
+ * @ORM\Table(name="user_ldap")
+ */
+class UserLDAP extends User
+{
+    public function __construct($ldapUserName)
+    {
+        parent::__construct('next@something.com', 'pass');
+    }
+}

+ 27 - 3
tests/Gedmo/Tree/MultiInheritanceTest2.php

@@ -21,19 +21,42 @@ class MultiInheritanceTest2 extends BaseTestCaseORM
     const USER = "Tree\\Fixture\\User";
     const USER = "Tree\\Fixture\\User";
     const GROUP = "Tree\\Fixture\\UserGroup";
     const GROUP = "Tree\\Fixture\\UserGroup";
     const ROLE = "Tree\\Fixture\\Role";
     const ROLE = "Tree\\Fixture\\Role";
+    const USERLDAP = "Tree\\Fixture\\UserLDAP";
 
 
     protected function setUp()
     protected function setUp()
     {
     {
         parent::setUp();
         parent::setUp();
 
 
         $evm = new EventManager;
         $evm = new EventManager;
-        $evm->addEventSubscriber(new TreeListener);
+        $this->tree = new TreeListener;
+        $evm->addEventSubscriber($this->tree);
 
 
         $this->getMockSqliteEntityManager($evm);
         $this->getMockSqliteEntityManager($evm);
         $this->populate();
         $this->populate();
     }
     }
 
 
-    public function testConsistence()
+    /**
+     * @test
+     */
+    public function shouldHandleMultilevelInheritance()
+    {
+        $admins = $this->em->getRepository(self::GROUP)->findOneByName('Admins');
+        $adminRight = $admins->getRight();
+        $userLdap = new \Tree\Fixture\UserLDAP('testname');
+        $userLdap->init();
+        $userLdap->setParent($admins);
+        $this->em->persist($userLdap);
+        $this->em->flush();
+        $this->em->clear();
+
+        $admins = $this->em->getRepository(self::GROUP)->findOneByName('Admins');
+        self::assertNotEquals($adminRight, $admins->getRight());
+    }
+
+    /**
+     * @test
+     */
+    public function shouldBeAbleToPopulateTree()
     {
     {
         $admins = $this->em->getRepository(self::GROUP)->findOneByName('Admins');
         $admins = $this->em->getRepository(self::GROUP)->findOneByName('Admins');
         $user3 = new \Tree\Fixture\User('user3@test.com', 'secret');
         $user3 = new \Tree\Fixture\User('user3@test.com', 'secret');
@@ -87,7 +110,8 @@ class MultiInheritanceTest2 extends BaseTestCaseORM
         return array(
         return array(
             self::USER,
             self::USER,
             self::GROUP,
             self::GROUP,
-            self::ROLE
+            self::ROLE,
+            self::USERLDAP
         );
         );
     }
     }