33namespace LaravelDoctrine \Extensions ;
44
55use Doctrine \Common \Annotations \Reader ;
6+ use Doctrine \Common \Persistence \Mapping \Driver \MappingDriver ;
67use Doctrine \ORM \Configuration ;
8+ use Doctrine \ORM \Mapping \Driver \AnnotationDriver ;
79use Gedmo \DoctrineExtensions ;
810use Illuminate \Support \ServiceProvider ;
11+ use LaravelDoctrine \Fluent \Extensions \GedmoExtensions ;
12+ use LaravelDoctrine \Fluent \FluentDriver ;
913use LaravelDoctrine \ORM \DoctrineManager ;
14+ use Doctrine \Common \Persistence \Mapping \Driver \MappingDriverChain ;
1015
1116class GedmoExtensionsServiceProvider extends ServiceProvider
1217{
@@ -20,23 +25,84 @@ public function register()
2025
2126 $ this ->app ->make (DoctrineManager::class)->extendAll (function (Configuration $ configuration ) {
2227
23- $ chain = $ configuration ->getMetadataDriverImpl ();
24- $ reader = $ chain ->getReader ();
25-
26- if ($ reader instanceof Reader) {
27- if ($ this ->app ->make ('config ' )->get ('doctrine.gedmo.all_mappings ' , false )) {
28- DoctrineExtensions::registerMappingIntoDriverChainORM (
29- $ chain ,
30- $ reader
31- );
32- } else {
33- DoctrineExtensions::registerAbstractMappingIntoDriverChainORM (
34- $ chain ,
35- $ reader
36- );
37- }
28+ $ chain = $ configuration ->getMetadataDriverImpl ();
29+
30+ if ($ this ->hasAnnotationReader ($ chain )) {
31+ $ this ->registerGedmoForAnnotations ($ chain );
32+ }
33+
34+ if ($ this ->hasFluentDriver ($ chain )) {
35+ $ this ->registerGedmoForFluent ($ chain );
3836 }
3937 });
4038 });
4139 }
40+
41+ /**
42+ * @param MappingDriverChain $driver
43+ * @return bool
44+ */
45+ private function hasAnnotationReader (MappingDriverChain $ driver )
46+ {
47+ foreach ($ driver ->getDrivers () as $ driver ) {
48+ if ($ driver instanceof AnnotationDriver) {
49+ return true ;
50+ }
51+ }
52+
53+ return false ;
54+ }
55+
56+ /**
57+ * @param MappingDriverChain $driver
58+ * @return bool
59+ */
60+ private function hasFluentDriver (MappingDriverChain $ driver )
61+ {
62+ foreach ($ driver ->getDrivers () as $ driver ) {
63+ if ($ driver instanceof FluentDriver) {
64+ return true ;
65+ }
66+ }
67+
68+ return false ;
69+ }
70+
71+ /**
72+ * @param $chain
73+ */
74+ private function registerGedmoForAnnotations (MappingDriverChain $ chain )
75+ {
76+ if ($ this ->needsAllMappings ()) {
77+ DoctrineExtensions::registerMappingIntoDriverChainORM (
78+ $ chain ,
79+ $ chain ->getReader ()
80+ );
81+ } else {
82+ DoctrineExtensions::registerAbstractMappingIntoDriverChainORM (
83+ $ chain ,
84+ $ chain ->getReader ()
85+ );
86+ }
87+ }
88+
89+ /**
90+ * @param MappingDriverChain $chain
91+ */
92+ private function registerGedmoForFluent (MappingDriverChain $ chain )
93+ {
94+ if ($ this ->needsAllMappings ()) {
95+ GedmoExtensions::registerAll ($ chain );
96+ } else {
97+ GedmoExtensions::registerAbstract ($ chain );
98+ }
99+ }
100+
101+ /**
102+ * @return mixed
103+ */
104+ private function needsAllMappings ()
105+ {
106+ return $ this ->app ->make ('config ' )->get ('doctrine.gedmo.all_mappings ' , false ) === true ;
107+ }
42108}
0 commit comments