|
@@ -0,0 +1,72 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace Base\OAuthBundle\EventListener;
|
|
|
+
|
|
|
+use Doctrine\ORM\Events;
|
|
|
+use Doctrine\ORM\Event\LoadClassMetadataEventArgs;
|
|
|
+use Doctrine\Common\EventSubscriber;
|
|
|
+
|
|
|
+class DynamicRelationSubscriber implements EventSubscriber
|
|
|
+{
|
|
|
+ /**
|
|
|
+ * {@inheritDoc}
|
|
|
+ */
|
|
|
+ public function getSubscribedEvents()
|
|
|
+ {
|
|
|
+ return array(
|
|
|
+ Events::loadClassMetadata,
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * @param LoadClassMetadataEventArgs $eventArgs
|
|
|
+ */
|
|
|
+ public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs)
|
|
|
+ {
|
|
|
+ // the $metadata is the whole mapping info for this class
|
|
|
+ $metadata = $eventArgs->getClassMetadata();
|
|
|
+ $classes = array(
|
|
|
+ 'Base\OAuthBundle\Entity\AccessToken',
|
|
|
+ 'Base\OAuthBundle\Entity\AuthCode',
|
|
|
+ 'Base\OAuthBundle\Entity\RefreshToken'
|
|
|
+ );
|
|
|
+
|
|
|
+ if (!in_array($metadata->getName(), $classes)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ $namingStrategy = $eventArgs
|
|
|
+ ->getEntityManager()
|
|
|
+ ->getConfiguration()
|
|
|
+ ->getNamingStrategy()
|
|
|
+ ;
|
|
|
+
|
|
|
+ $userClass = 'Base\UserBundle\Entity\User';
|
|
|
+ $OAuthUserClass = '\Base\OAuthBundle\Security\Core\User\CustomOAuthUser';
|
|
|
+
|
|
|
+ $metadata->mapManyToMany(array(
|
|
|
+ 'targetEntity' => class_exists($userClass) ? $userClass : $OAuthUserClass,
|
|
|
+ 'fieldName' => 'user',
|
|
|
+ 'cascade' => array('persist'),
|
|
|
+ 'joinTable' => array(
|
|
|
+ 'name' => strtolower($namingStrategy->classToTableName($metadata->getName())) . '_user',
|
|
|
+ 'joinColumns' => array(
|
|
|
+ array(
|
|
|
+ 'name' => $namingStrategy->joinKeyColumnName($metadata->getName()),
|
|
|
+ 'referencedColumnName' => $namingStrategy->referenceColumnName(),
|
|
|
+ 'onDelete' => 'CASCADE',
|
|
|
+ 'onUpdate' => 'CASCADE',
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+ 'inverseJoinColumns' => array(
|
|
|
+ array(
|
|
|
+ 'name' => 'user_id',
|
|
|
+ 'referencedColumnName' => $namingStrategy->referenceColumnName(),
|
|
|
+ 'onDelete' => 'CASCADE',
|
|
|
+ 'onUpdate' => 'CASCADE',
|
|
|
+ ),
|
|
|
+ )
|
|
|
+ )
|
|
|
+ ));
|
|
|
+ }
|
|
|
+}
|