Completed
Pull Request — 4.3 (#149)
by Dorian
13:16
created
src/Mouf/Database/TDBM/Commands/GenerateCommand.php 1 patch
Indentation   +32 added lines, -32 removed lines patch added patch discarded remove patch
@@ -12,48 +12,48 @@
 block discarded – undo
12 12
 class GenerateCommand extends Command
13 13
 {
14 14
 
15
-    /**
16
-     * @var ConfigurationInterface
17
-     */
18
-    private $configuration;
15
+	/**
16
+	 * @var ConfigurationInterface
17
+	 */
18
+	private $configuration;
19 19
 
20
-    public function __construct(ConfigurationInterface $configuration)
21
-    {
22
-        parent::__construct();
23
-        $this->configuration = $configuration;
24
-    }
20
+	public function __construct(ConfigurationInterface $configuration)
21
+	{
22
+		parent::__construct();
23
+		$this->configuration = $configuration;
24
+	}
25 25
 
26
-    protected function configure()
27
-    {
28
-        $this->setName('tdbm:generate')
29
-            ->setDescription('Generates DAOs and beans.')
30
-            ->setHelp('Use this command to generate or regenerate the DAOs and beans for your project.')
31
-        ;
32
-    }
26
+	protected function configure()
27
+	{
28
+		$this->setName('tdbm:generate')
29
+			->setDescription('Generates DAOs and beans.')
30
+			->setHelp('Use this command to generate or regenerate the DAOs and beans for your project.')
31
+		;
32
+	}
33 33
 
34
-    protected function execute(InputInterface $input, OutputInterface $output)
35
-    {
36
-        // TODO: externalize composer.json file for autoloading (no more parameters for generateAllDaosAndBeans)
34
+	protected function execute(InputInterface $input, OutputInterface $output)
35
+	{
36
+		// TODO: externalize composer.json file for autoloading (no more parameters for generateAllDaosAndBeans)
37 37
 
38
-        $alteredConf = new AlteredConfiguration($this->configuration);
38
+		$alteredConf = new AlteredConfiguration($this->configuration);
39 39
 
40 40
 
41
-        $loggers = [ new ConsoleLogger($output) ];
41
+		$loggers = [ new ConsoleLogger($output) ];
42 42
 
43
-        $logger = $alteredConf->getLogger();
44
-        if ($logger) {
45
-            $loggers[] = $logger;
46
-        }
43
+		$logger = $alteredConf->getLogger();
44
+		if ($logger) {
45
+			$loggers[] = $logger;
46
+		}
47 47
 
48
-        $multiLogger = new MultiLogger($loggers);
48
+		$multiLogger = new MultiLogger($loggers);
49 49
 
50
-        $alteredConf->setLogger($multiLogger);
50
+		$alteredConf->setLogger($multiLogger);
51 51
 
52
-        $multiLogger->notice('Starting regenerating DAOs and beans');
52
+		$multiLogger->notice('Starting regenerating DAOs and beans');
53 53
 
54
-        $tdbmService = new TDBMService($this->configuration);
55
-        $tdbmService->generateAllDaosAndBeans();
54
+		$tdbmService = new TDBMService($this->configuration);
55
+		$tdbmService->generateAllDaosAndBeans();
56 56
 
57
-        $multiLogger->notice('Finished regenerating DAOs and beans');
58
-    }
57
+		$multiLogger->notice('Finished regenerating DAOs and beans');
58
+	}
59 59
 }
Please login to merge, or discard this patch.
src/Mouf/Database/TDBM/Controllers/TdbmController.php 1 patch
Indentation   +130 added lines, -130 removed lines patch added patch discarded remove patch
@@ -19,134 +19,134 @@
 block discarded – undo
19 19
  */
20 20
 class TdbmController extends AbstractMoufInstanceController
21 21
 {
22
-    /**
23
-     * @var HtmlBlock
24
-     */
25
-    public $content;
26
-
27
-    protected $daoNamespace;
28
-    protected $beanNamespace;
29
-    protected $daoFactoryInstanceName;
30
-    protected $autoloadDetected;
31
-    ///protected $storeInUtc;
32
-    protected $useCustomComposer;
33
-    protected $composerFile;
34
-
35
-    /**
36
-     * Admin page used to display the DAO generation form.
37
-     *
38
-     * @Action
39
-     */
40
-    public function defaultAction($name, $selfedit = 'false')
41
-    {
42
-        $this->initController($name, $selfedit);
43
-
44
-        // Fill variables
45
-        $this->daoNamespace = self::getFromConfiguration($this->moufManager, $name, 'daoNamespace');
46
-        $this->beanNamespace = self::getFromConfiguration($this->moufManager, $name, 'beanNamespace');
47
-        $this->daoFactoryInstanceName = self::getFromConfiguration($this->moufManager, $name, 'daoFactoryInstanceName');
48
-        //$this->storeInUtc = self::getFromConfiguration($this->moufManager, $name, 'storeInUtc');
49
-        $pathFinder = self::getFromConfiguration($this->moufManager, $name, 'pathFinder');
50
-        if ($pathFinder !== null) {
51
-            $this->composerFile = $pathFinder->getConstructorArgumentProperty('composerFile')->getValue();
52
-        } else {
53
-            $this->composerFile = null;
54
-        }
55
-        $this->useCustomComposer = $this->composerFile ? true : false;
56
-
57
-        if ($this->daoNamespace == null && $this->beanNamespace == null) {
58
-            $classNameMapper = ClassNameMapper::createFromComposerFile(__DIR__.'/../../../../../../../../composer.json');
59
-
60
-            $autoloadNamespaces = $classNameMapper->getManagedNamespaces();
61
-            if ($autoloadNamespaces) {
62
-                $this->autoloadDetected = true;
63
-                $rootNamespace = $autoloadNamespaces[0];
64
-                $this->daoNamespace = $rootNamespace.'Dao';
65
-                $this->beanNamespace = $rootNamespace.'Dao\\Bean';
66
-            } else {
67
-                $this->autoloadDetected = false;
68
-                $this->daoNamespace = 'YourApplication\\Dao';
69
-                $this->beanNamespace = 'YourApplication\\Dao\\Bean';
70
-            }
71
-        } else {
72
-            $this->autoloadDetected = true;
73
-        }
74
-
75
-        $this->content->addFile(__DIR__.'/../../../../views/tdbmGenerate.php', $this);
76
-        $this->template->toHtml();
77
-    }
78
-
79
-    /**
80
-     * This action generates the DAOs and Beans for the TDBM service passed in parameter.
81
-     *
82
-     * @Action
83
-     *
84
-     * @param string $name
85
-     * @param bool   $selfedit
86
-     */
87
-    public function generate($name, $daonamespace, $beannamespace, $daofactoryinstancename, /*$storeInUtc = 0,*/ $selfedit = 'false', $useCustomComposer = false, $composerFile = '')
88
-    {
89
-        $this->initController($name, $selfedit);
90
-
91
-        self::generateDaos($this->moufManager, $name, $daonamespace, $beannamespace, $daofactoryinstancename, $selfedit, /*$storeInUtc,*/ $useCustomComposer, $composerFile);
92
-
93
-        // TODO: better: we should redirect to a screen that list the number of DAOs generated, etc...
94
-        header('Location: '.ROOT_URL.'ajaxinstance/?name='.urlencode($name).'&selfedit='.$selfedit);
95
-    }
96
-
97
-    /**
98
-     * This function generates the DAOs and Beans for the TDBM service passed in parameter.
99
-     *
100
-     * @param MoufManager $moufManager
101
-     * @param string      $name
102
-     * @param string      $daonamespace
103
-     * @param string      $beannamespace
104
-     * @param string      $selfedit
105
-     *
106
-     * @throws \Mouf\MoufException
107
-     */
108
-    public static function generateDaos(MoufManager $moufManager, $name, $daonamespace, $beannamespace, $daofactoryinstancename, $selfedit = 'false', /*$storeInUtc = null,*/ $useCustomComposer = null, $composerFile = null)
109
-    {
110
-        self::setInConfiguration($moufManager, $name, 'daoNamespace', $daonamespace);
111
-        self::setInConfiguration($moufManager, $name, 'beanNamespace', $beannamespace);
112
-        self::setInConfiguration($moufManager, $name, 'daoFactoryInstanceName', $daofactoryinstancename);
113
-        //self::setInConfiguration($moufManager, $name, 'storeInUtc', $storeInUtc);
114
-        if ($useCustomComposer) {
115
-            $pathFinder = $moufManager->createInstance(PathFinder::class);
116
-            $pathFinder->getConstructorArgumentProperty('composerFile')->setValue($composerFile);
117
-            self::setInConfiguration($moufManager, $name, 'pathFinder', $pathFinder);
118
-        } else {
119
-            self::setInConfiguration($moufManager, $name, 'pathFinder', null);
120
-        }
121
-        // Let's rewrite before calling the DAO generator
122
-        $moufManager->rewriteMouf();
123
-
124
-
125
-        $tdbmService = new InstanceProxy($name);
126
-        /* @var $tdbmService TDBMService */
127
-        $tdbmService->generateAllDaosAndBeans();
128
-    }
129
-
130
-    private static function getConfigurationDescriptor(MoufManager $moufManager, string $tdbmInstanceName)
131
-    {
132
-        return $moufManager->getInstanceDescriptor($tdbmInstanceName)->getConstructorArgumentProperty('configuration')->getValue();
133
-    }
134
-
135
-    private static function getFromConfiguration(MoufManager $moufManager, string $tdbmInstanceName, string $property)
136
-    {
137
-        $configuration = self::getConfigurationDescriptor($moufManager, $tdbmInstanceName);
138
-        if ($configuration === null) {
139
-            throw new \RuntimeException('Unable to find the configuration object linked to TDBMService.');
140
-        }
141
-        return $configuration->getProperty($property)->getValue();
142
-    }
143
-
144
-    private static function setInConfiguration(MoufManager $moufManager, string $tdbmInstanceName, string $property, ?string $value)
145
-    {
146
-        $configuration = self::getConfigurationDescriptor($moufManager, $tdbmInstanceName);
147
-        if ($configuration === null) {
148
-            throw new \RuntimeException('Unable to find the configuration object linked to TDBMService.');
149
-        }
150
-        $configuration->getProperty($property)->setValue($value);
151
-    }
22
+	/**
23
+	 * @var HtmlBlock
24
+	 */
25
+	public $content;
26
+
27
+	protected $daoNamespace;
28
+	protected $beanNamespace;
29
+	protected $daoFactoryInstanceName;
30
+	protected $autoloadDetected;
31
+	///protected $storeInUtc;
32
+	protected $useCustomComposer;
33
+	protected $composerFile;
34
+
35
+	/**
36
+	 * Admin page used to display the DAO generation form.
37
+	 *
38
+	 * @Action
39
+	 */
40
+	public function defaultAction($name, $selfedit = 'false')
41
+	{
42
+		$this->initController($name, $selfedit);
43
+
44
+		// Fill variables
45
+		$this->daoNamespace = self::getFromConfiguration($this->moufManager, $name, 'daoNamespace');
46
+		$this->beanNamespace = self::getFromConfiguration($this->moufManager, $name, 'beanNamespace');
47
+		$this->daoFactoryInstanceName = self::getFromConfiguration($this->moufManager, $name, 'daoFactoryInstanceName');
48
+		//$this->storeInUtc = self::getFromConfiguration($this->moufManager, $name, 'storeInUtc');
49
+		$pathFinder = self::getFromConfiguration($this->moufManager, $name, 'pathFinder');
50
+		if ($pathFinder !== null) {
51
+			$this->composerFile = $pathFinder->getConstructorArgumentProperty('composerFile')->getValue();
52
+		} else {
53
+			$this->composerFile = null;
54
+		}
55
+		$this->useCustomComposer = $this->composerFile ? true : false;
56
+
57
+		if ($this->daoNamespace == null && $this->beanNamespace == null) {
58
+			$classNameMapper = ClassNameMapper::createFromComposerFile(__DIR__.'/../../../../../../../../composer.json');
59
+
60
+			$autoloadNamespaces = $classNameMapper->getManagedNamespaces();
61
+			if ($autoloadNamespaces) {
62
+				$this->autoloadDetected = true;
63
+				$rootNamespace = $autoloadNamespaces[0];
64
+				$this->daoNamespace = $rootNamespace.'Dao';
65
+				$this->beanNamespace = $rootNamespace.'Dao\\Bean';
66
+			} else {
67
+				$this->autoloadDetected = false;
68
+				$this->daoNamespace = 'YourApplication\\Dao';
69
+				$this->beanNamespace = 'YourApplication\\Dao\\Bean';
70
+			}
71
+		} else {
72
+			$this->autoloadDetected = true;
73
+		}
74
+
75
+		$this->content->addFile(__DIR__.'/../../../../views/tdbmGenerate.php', $this);
76
+		$this->template->toHtml();
77
+	}
78
+
79
+	/**
80
+	 * This action generates the DAOs and Beans for the TDBM service passed in parameter.
81
+	 *
82
+	 * @Action
83
+	 *
84
+	 * @param string $name
85
+	 * @param bool   $selfedit
86
+	 */
87
+	public function generate($name, $daonamespace, $beannamespace, $daofactoryinstancename, /*$storeInUtc = 0,*/ $selfedit = 'false', $useCustomComposer = false, $composerFile = '')
88
+	{
89
+		$this->initController($name, $selfedit);
90
+
91
+		self::generateDaos($this->moufManager, $name, $daonamespace, $beannamespace, $daofactoryinstancename, $selfedit, /*$storeInUtc,*/ $useCustomComposer, $composerFile);
92
+
93
+		// TODO: better: we should redirect to a screen that list the number of DAOs generated, etc...
94
+		header('Location: '.ROOT_URL.'ajaxinstance/?name='.urlencode($name).'&selfedit='.$selfedit);
95
+	}
96
+
97
+	/**
98
+	 * This function generates the DAOs and Beans for the TDBM service passed in parameter.
99
+	 *
100
+	 * @param MoufManager $moufManager
101
+	 * @param string      $name
102
+	 * @param string      $daonamespace
103
+	 * @param string      $beannamespace
104
+	 * @param string      $selfedit
105
+	 *
106
+	 * @throws \Mouf\MoufException
107
+	 */
108
+	public static function generateDaos(MoufManager $moufManager, $name, $daonamespace, $beannamespace, $daofactoryinstancename, $selfedit = 'false', /*$storeInUtc = null,*/ $useCustomComposer = null, $composerFile = null)
109
+	{
110
+		self::setInConfiguration($moufManager, $name, 'daoNamespace', $daonamespace);
111
+		self::setInConfiguration($moufManager, $name, 'beanNamespace', $beannamespace);
112
+		self::setInConfiguration($moufManager, $name, 'daoFactoryInstanceName', $daofactoryinstancename);
113
+		//self::setInConfiguration($moufManager, $name, 'storeInUtc', $storeInUtc);
114
+		if ($useCustomComposer) {
115
+			$pathFinder = $moufManager->createInstance(PathFinder::class);
116
+			$pathFinder->getConstructorArgumentProperty('composerFile')->setValue($composerFile);
117
+			self::setInConfiguration($moufManager, $name, 'pathFinder', $pathFinder);
118
+		} else {
119
+			self::setInConfiguration($moufManager, $name, 'pathFinder', null);
120
+		}
121
+		// Let's rewrite before calling the DAO generator
122
+		$moufManager->rewriteMouf();
123
+
124
+
125
+		$tdbmService = new InstanceProxy($name);
126
+		/* @var $tdbmService TDBMService */
127
+		$tdbmService->generateAllDaosAndBeans();
128
+	}
129
+
130
+	private static function getConfigurationDescriptor(MoufManager $moufManager, string $tdbmInstanceName)
131
+	{
132
+		return $moufManager->getInstanceDescriptor($tdbmInstanceName)->getConstructorArgumentProperty('configuration')->getValue();
133
+	}
134
+
135
+	private static function getFromConfiguration(MoufManager $moufManager, string $tdbmInstanceName, string $property)
136
+	{
137
+		$configuration = self::getConfigurationDescriptor($moufManager, $tdbmInstanceName);
138
+		if ($configuration === null) {
139
+			throw new \RuntimeException('Unable to find the configuration object linked to TDBMService.');
140
+		}
141
+		return $configuration->getProperty($property)->getValue();
142
+	}
143
+
144
+	private static function setInConfiguration(MoufManager $moufManager, string $tdbmInstanceName, string $property, ?string $value)
145
+	{
146
+		$configuration = self::getConfigurationDescriptor($moufManager, $tdbmInstanceName);
147
+		if ($configuration === null) {
148
+			throw new \RuntimeException('Unable to find the configuration object linked to TDBMService.');
149
+		}
150
+		$configuration->getProperty($property)->setValue($value);
151
+	}
152 152
 }
Please login to merge, or discard this patch.
src/Mouf/Database/TDBM/Controllers/TdbmInstallController.php 1 patch
Indentation   +215 added lines, -215 removed lines patch added patch discarded remove patch
@@ -21,219 +21,219 @@
 block discarded – undo
21 21
  */
22 22
 class TdbmInstallController extends Controller
23 23
 {
24
-    /**
25
-     * @var HtmlBlock
26
-     */
27
-    public $content;
28
-
29
-    public $selfedit;
30
-
31
-    /**
32
-     * The active MoufManager to be edited/viewed.
33
-     *
34
-     * @var MoufManager
35
-     */
36
-    public $moufManager;
37
-
38
-    /**
39
-     * The template used by the main page for mouf.
40
-     *
41
-     * @Property
42
-     * @Compulsory
43
-     *
44
-     * @var TemplateInterface
45
-     */
46
-    public $template;
47
-
48
-    /**
49
-     * Displays the first install screen.
50
-     *
51
-     * @Action
52
-     * @Logged
53
-     *
54
-     * @param string $selfedit If true, the name of the component must be a component from the Mouf framework itself (internal use only)
55
-     */
56
-    public function defaultAction($selfedit = 'false')
57
-    {
58
-        $this->selfedit = $selfedit;
59
-
60
-        if ($selfedit == 'true') {
61
-            $this->moufManager = MoufManager::getMoufManager();
62
-        } else {
63
-            $this->moufManager = MoufManager::getMoufManagerHiddenInstance();
64
-        }
65
-
66
-        $this->content->addFile(dirname(__FILE__).'/../../../../views/installStep1.php', $this);
67
-        $this->template->toHtml();
68
-    }
69
-
70
-    /**
71
-     * Skips the install process.
72
-     *
73
-     * @Action
74
-     * @Logged
75
-     *
76
-     * @param string $selfedit If true, the name of the component must be a component from the Mouf framework itself (internal use only)
77
-     */
78
-    public function skip($selfedit = 'false')
79
-    {
80
-        InstallUtils::continueInstall($selfedit == 'true');
81
-    }
82
-
83
-    protected $daoNamespace;
84
-    protected $beanNamespace;
85
-    protected $autoloadDetected;
86
-    //protected $storeInUtc;
87
-    protected $useCustomComposer = false;
88
-    protected $composerFile;
89
-
90
-    /**
91
-     * Displays the second install screen.
92
-     *
93
-     * @Action
94
-     * @Logged
95
-     *
96
-     * @param string $selfedit If true, the name of the component must be a component from the Mouf framework itself (internal use only)
97
-     */
98
-    public function configure($selfedit = 'false')
99
-    {
100
-        $this->selfedit = $selfedit;
101
-
102
-        if ($selfedit == 'true') {
103
-            $this->moufManager = MoufManager::getMoufManager();
104
-        } else {
105
-            $this->moufManager = MoufManager::getMoufManagerHiddenInstance();
106
-        }
107
-
108
-        // Let's start by performing basic checks about the instances we assume to exist.
109
-        if (!$this->moufManager->instanceExists('dbalConnection')) {
110
-            $this->displayErrorMsg("The TDBM install process assumes your database connection instance is already created, and that the name of this instance is 'dbalConnection'. Could not find the 'dbalConnection' instance.");
111
-
112
-            return;
113
-        }
114
-
115
-        if ($this->moufManager->has('tdbmConfiguration')) {
116
-            $tdbmConfiguration = $this->moufManager->getInstanceDescriptor('tdbmConfiguration');
117
-
118
-            $this->beanNamespace = $tdbmConfiguration->getConstructorArgumentProperty('beanNamespace')->getValue();
119
-            $this->daoNamespace = $tdbmConfiguration->getConstructorArgumentProperty('daoNamespace')->getValue();
120
-        } else {
121
-            // Old TDBM 4.2 fallback
122
-            $this->daoNamespace = $this->moufManager->getVariable('tdbmDefaultDaoNamespace_tdbmService');
123
-            $this->beanNamespace = $this->moufManager->getVariable('tdbmDefaultBeanNamespace_tdbmService');
124
-        }
125
-
126
-        if ($this->daoNamespace == null && $this->beanNamespace == null) {
127
-            $classNameMapper = ClassNameMapper::createFromComposerFile(__DIR__.'/../../../../../../../../composer.json');
128
-
129
-            $autoloadNamespaces = $classNameMapper->getManagedNamespaces();
130
-            if ($autoloadNamespaces) {
131
-                $this->autoloadDetected = true;
132
-                $rootNamespace = $autoloadNamespaces[0];
133
-                $this->daoNamespace = $rootNamespace.'Dao';
134
-                $this->beanNamespace = $rootNamespace.'Model';
135
-            } else {
136
-                $this->autoloadDetected = false;
137
-                $this->daoNamespace = 'YourApplication\\Dao';
138
-                $this->beanNamespace = 'YourApplication\\Model';
139
-            }
140
-        } else {
141
-            $this->autoloadDetected = true;
142
-        }
143
-        $this->defaultPath = true;
144
-        $this->storePath = '';
145
-
146
-        $this->castDatesToDateTime = true;
147
-
148
-        $this->content->addFile(__DIR__.'/../../../../views/installStep2.php', $this);
149
-        $this->template->toHtml();
150
-    }
151
-
152
-    /**
153
-     * This action generates the TDBM instance, then the DAOs and Beans.
154
-     *
155
-     * @Action
156
-     *
157
-     * @param string $daonamespace
158
-     * @param string $beannamespace
159
-     * @param string $selfedit
160
-     *
161
-     * @throws \Mouf\MoufException
162
-     */
163
-    public function generate($daonamespace, $beannamespace, /*$storeInUtc = 0,*/ $selfedit = 'false', $defaultPath = false, $storePath = '')
164
-    {
165
-        $this->selfedit = $selfedit;
166
-
167
-        if ($selfedit == 'true') {
168
-            $this->moufManager = MoufManager::getMoufManager();
169
-        } else {
170
-            $this->moufManager = MoufManager::getMoufManagerHiddenInstance();
171
-        }
172
-
173
-        $doctrineCache = $this->moufManager->getInstanceDescriptor('defaultDoctrineCache');
174
-
175
-        $migratingFrom42 = false;
176
-        if ($this->moufManager->has('tdbmService') && !$this->moufManager->has('tdbmConfiguration')) {
177
-            $migratingFrom42 = true;
178
-        }
179
-
180
-        $namingStrategy = InstallUtils::getOrCreateInstance('namingStrategy', DefaultNamingStrategy::class, $this->moufManager);
181
-        if ($migratingFrom42) {
182
-            // Let's setup the naming strategy for compatibility
183
-            $namingStrategy->getSetterProperty('setBeanPrefix')->setValue('');
184
-            $namingStrategy->getSetterProperty('setBeanSuffix')->setValue('Bean');
185
-            $namingStrategy->getSetterProperty('setBaseBeanPrefix')->setValue('');
186
-            $namingStrategy->getSetterProperty('setBaseBeanSuffix')->setValue('BaseBean');
187
-            $namingStrategy->getSetterProperty('setDaoPrefix')->setValue('');
188
-            $namingStrategy->getSetterProperty('setDaoSuffix')->setValue('Dao');
189
-            $namingStrategy->getSetterProperty('setBaseDaoPrefix')->setValue('');
190
-            $namingStrategy->getSetterProperty('setBaseDaoSuffix')->setValue('BaseDao');
191
-        }
192
-
193
-        if (!$this->moufManager->instanceExists('tdbmConfiguration')) {
194
-            $moufListener = InstallUtils::getOrCreateInstance(MoufDiListener::class, MoufDiListener::class, $this->moufManager);
195
-
196
-            $tdbmConfiguration = $this->moufManager->createInstance(MoufConfiguration::class)->setName('tdbmConfiguration');
197
-            $tdbmConfiguration->getConstructorArgumentProperty('connection')->setValue($this->moufManager->getInstanceDescriptor('dbalConnection'));
198
-            $tdbmConfiguration->getConstructorArgumentProperty('cache')->setValue($doctrineCache);
199
-            $tdbmConfiguration->getConstructorArgumentProperty('namingStrategy')->setValue($namingStrategy);
200
-            $tdbmConfiguration->getProperty('daoFactoryInstanceName')->setValue('daoFactory');
201
-            $tdbmConfiguration->getConstructorArgumentProperty('generatorListeners')->setValue([$moufListener]);
202
-
203
-            // Let's also delete the tdbmService if migrating versions <= 4.2
204
-            if ($migratingFrom42) {
205
-                $this->moufManager->removeComponent('tdbmService');
206
-            }
207
-        } else {
208
-            $tdbmConfiguration = $this->moufManager->getInstanceDescriptor('tdbmConfiguration');
209
-        }
210
-
211
-        if (!$this->moufManager->instanceExists('tdbmService')) {
212
-            $tdbmService = $this->moufManager->createInstance('Mouf\\Database\\TDBM\\TDBMService')->setName('tdbmService');
213
-            $tdbmService->getConstructorArgumentProperty('configuration')->setValue($tdbmConfiguration);
214
-        }
215
-
216
-        // We declare our instance of the Symfony command as a Mouf instance
217
-        $generateCommand = InstallUtils::getOrCreateInstance('generateCommand', GenerateCommand::class, $this->moufManager);
218
-        $generateCommand->getConstructorArgumentProperty('configuration')->setValue($tdbmConfiguration);
219
-
220
-        // We register that instance descriptor using "ConsoleUtils"
221
-        $consoleUtils = new ConsoleUtils($this->moufManager);
222
-        $consoleUtils->registerCommand($generateCommand);
223
-
224
-        $this->moufManager->rewriteMouf();
225
-
226
-        TdbmController::generateDaos($this->moufManager, 'tdbmService', $daonamespace, $beannamespace, 'daoFactory', $selfedit, /*$storeInUtc,*/ $defaultPath, $storePath);
227
-
228
-        InstallUtils::continueInstall($selfedit == 'true');
229
-    }
230
-
231
-    protected $errorMsg;
232
-
233
-    private function displayErrorMsg($msg)
234
-    {
235
-        $this->errorMsg = $msg;
236
-        $this->content->addFile(__DIR__.'/../../../../views/installError.php', $this);
237
-        $this->template->toHtml();
238
-    }
24
+	/**
25
+	 * @var HtmlBlock
26
+	 */
27
+	public $content;
28
+
29
+	public $selfedit;
30
+
31
+	/**
32
+	 * The active MoufManager to be edited/viewed.
33
+	 *
34
+	 * @var MoufManager
35
+	 */
36
+	public $moufManager;
37
+
38
+	/**
39
+	 * The template used by the main page for mouf.
40
+	 *
41
+	 * @Property
42
+	 * @Compulsory
43
+	 *
44
+	 * @var TemplateInterface
45
+	 */
46
+	public $template;
47
+
48
+	/**
49
+	 * Displays the first install screen.
50
+	 *
51
+	 * @Action
52
+	 * @Logged
53
+	 *
54
+	 * @param string $selfedit If true, the name of the component must be a component from the Mouf framework itself (internal use only)
55
+	 */
56
+	public function defaultAction($selfedit = 'false')
57
+	{
58
+		$this->selfedit = $selfedit;
59
+
60
+		if ($selfedit == 'true') {
61
+			$this->moufManager = MoufManager::getMoufManager();
62
+		} else {
63
+			$this->moufManager = MoufManager::getMoufManagerHiddenInstance();
64
+		}
65
+
66
+		$this->content->addFile(dirname(__FILE__).'/../../../../views/installStep1.php', $this);
67
+		$this->template->toHtml();
68
+	}
69
+
70
+	/**
71
+	 * Skips the install process.
72
+	 *
73
+	 * @Action
74
+	 * @Logged
75
+	 *
76
+	 * @param string $selfedit If true, the name of the component must be a component from the Mouf framework itself (internal use only)
77
+	 */
78
+	public function skip($selfedit = 'false')
79
+	{
80
+		InstallUtils::continueInstall($selfedit == 'true');
81
+	}
82
+
83
+	protected $daoNamespace;
84
+	protected $beanNamespace;
85
+	protected $autoloadDetected;
86
+	//protected $storeInUtc;
87
+	protected $useCustomComposer = false;
88
+	protected $composerFile;
89
+
90
+	/**
91
+	 * Displays the second install screen.
92
+	 *
93
+	 * @Action
94
+	 * @Logged
95
+	 *
96
+	 * @param string $selfedit If true, the name of the component must be a component from the Mouf framework itself (internal use only)
97
+	 */
98
+	public function configure($selfedit = 'false')
99
+	{
100
+		$this->selfedit = $selfedit;
101
+
102
+		if ($selfedit == 'true') {
103
+			$this->moufManager = MoufManager::getMoufManager();
104
+		} else {
105
+			$this->moufManager = MoufManager::getMoufManagerHiddenInstance();
106
+		}
107
+
108
+		// Let's start by performing basic checks about the instances we assume to exist.
109
+		if (!$this->moufManager->instanceExists('dbalConnection')) {
110
+			$this->displayErrorMsg("The TDBM install process assumes your database connection instance is already created, and that the name of this instance is 'dbalConnection'. Could not find the 'dbalConnection' instance.");
111
+
112
+			return;
113
+		}
114
+
115
+		if ($this->moufManager->has('tdbmConfiguration')) {
116
+			$tdbmConfiguration = $this->moufManager->getInstanceDescriptor('tdbmConfiguration');
117
+
118
+			$this->beanNamespace = $tdbmConfiguration->getConstructorArgumentProperty('beanNamespace')->getValue();
119
+			$this->daoNamespace = $tdbmConfiguration->getConstructorArgumentProperty('daoNamespace')->getValue();
120
+		} else {
121
+			// Old TDBM 4.2 fallback
122
+			$this->daoNamespace = $this->moufManager->getVariable('tdbmDefaultDaoNamespace_tdbmService');
123
+			$this->beanNamespace = $this->moufManager->getVariable('tdbmDefaultBeanNamespace_tdbmService');
124
+		}
125
+
126
+		if ($this->daoNamespace == null && $this->beanNamespace == null) {
127
+			$classNameMapper = ClassNameMapper::createFromComposerFile(__DIR__.'/../../../../../../../../composer.json');
128
+
129
+			$autoloadNamespaces = $classNameMapper->getManagedNamespaces();
130
+			if ($autoloadNamespaces) {
131
+				$this->autoloadDetected = true;
132
+				$rootNamespace = $autoloadNamespaces[0];
133
+				$this->daoNamespace = $rootNamespace.'Dao';
134
+				$this->beanNamespace = $rootNamespace.'Model';
135
+			} else {
136
+				$this->autoloadDetected = false;
137
+				$this->daoNamespace = 'YourApplication\\Dao';
138
+				$this->beanNamespace = 'YourApplication\\Model';
139
+			}
140
+		} else {
141
+			$this->autoloadDetected = true;
142
+		}
143
+		$this->defaultPath = true;
144
+		$this->storePath = '';
145
+
146
+		$this->castDatesToDateTime = true;
147
+
148
+		$this->content->addFile(__DIR__.'/../../../../views/installStep2.php', $this);
149
+		$this->template->toHtml();
150
+	}
151
+
152
+	/**
153
+	 * This action generates the TDBM instance, then the DAOs and Beans.
154
+	 *
155
+	 * @Action
156
+	 *
157
+	 * @param string $daonamespace
158
+	 * @param string $beannamespace
159
+	 * @param string $selfedit
160
+	 *
161
+	 * @throws \Mouf\MoufException
162
+	 */
163
+	public function generate($daonamespace, $beannamespace, /*$storeInUtc = 0,*/ $selfedit = 'false', $defaultPath = false, $storePath = '')
164
+	{
165
+		$this->selfedit = $selfedit;
166
+
167
+		if ($selfedit == 'true') {
168
+			$this->moufManager = MoufManager::getMoufManager();
169
+		} else {
170
+			$this->moufManager = MoufManager::getMoufManagerHiddenInstance();
171
+		}
172
+
173
+		$doctrineCache = $this->moufManager->getInstanceDescriptor('defaultDoctrineCache');
174
+
175
+		$migratingFrom42 = false;
176
+		if ($this->moufManager->has('tdbmService') && !$this->moufManager->has('tdbmConfiguration')) {
177
+			$migratingFrom42 = true;
178
+		}
179
+
180
+		$namingStrategy = InstallUtils::getOrCreateInstance('namingStrategy', DefaultNamingStrategy::class, $this->moufManager);
181
+		if ($migratingFrom42) {
182
+			// Let's setup the naming strategy for compatibility
183
+			$namingStrategy->getSetterProperty('setBeanPrefix')->setValue('');
184
+			$namingStrategy->getSetterProperty('setBeanSuffix')->setValue('Bean');
185
+			$namingStrategy->getSetterProperty('setBaseBeanPrefix')->setValue('');
186
+			$namingStrategy->getSetterProperty('setBaseBeanSuffix')->setValue('BaseBean');
187
+			$namingStrategy->getSetterProperty('setDaoPrefix')->setValue('');
188
+			$namingStrategy->getSetterProperty('setDaoSuffix')->setValue('Dao');
189
+			$namingStrategy->getSetterProperty('setBaseDaoPrefix')->setValue('');
190
+			$namingStrategy->getSetterProperty('setBaseDaoSuffix')->setValue('BaseDao');
191
+		}
192
+
193
+		if (!$this->moufManager->instanceExists('tdbmConfiguration')) {
194
+			$moufListener = InstallUtils::getOrCreateInstance(MoufDiListener::class, MoufDiListener::class, $this->moufManager);
195
+
196
+			$tdbmConfiguration = $this->moufManager->createInstance(MoufConfiguration::class)->setName('tdbmConfiguration');
197
+			$tdbmConfiguration->getConstructorArgumentProperty('connection')->setValue($this->moufManager->getInstanceDescriptor('dbalConnection'));
198
+			$tdbmConfiguration->getConstructorArgumentProperty('cache')->setValue($doctrineCache);
199
+			$tdbmConfiguration->getConstructorArgumentProperty('namingStrategy')->setValue($namingStrategy);
200
+			$tdbmConfiguration->getProperty('daoFactoryInstanceName')->setValue('daoFactory');
201
+			$tdbmConfiguration->getConstructorArgumentProperty('generatorListeners')->setValue([$moufListener]);
202
+
203
+			// Let's also delete the tdbmService if migrating versions <= 4.2
204
+			if ($migratingFrom42) {
205
+				$this->moufManager->removeComponent('tdbmService');
206
+			}
207
+		} else {
208
+			$tdbmConfiguration = $this->moufManager->getInstanceDescriptor('tdbmConfiguration');
209
+		}
210
+
211
+		if (!$this->moufManager->instanceExists('tdbmService')) {
212
+			$tdbmService = $this->moufManager->createInstance('Mouf\\Database\\TDBM\\TDBMService')->setName('tdbmService');
213
+			$tdbmService->getConstructorArgumentProperty('configuration')->setValue($tdbmConfiguration);
214
+		}
215
+
216
+		// We declare our instance of the Symfony command as a Mouf instance
217
+		$generateCommand = InstallUtils::getOrCreateInstance('generateCommand', GenerateCommand::class, $this->moufManager);
218
+		$generateCommand->getConstructorArgumentProperty('configuration')->setValue($tdbmConfiguration);
219
+
220
+		// We register that instance descriptor using "ConsoleUtils"
221
+		$consoleUtils = new ConsoleUtils($this->moufManager);
222
+		$consoleUtils->registerCommand($generateCommand);
223
+
224
+		$this->moufManager->rewriteMouf();
225
+
226
+		TdbmController::generateDaos($this->moufManager, 'tdbmService', $daonamespace, $beannamespace, 'daoFactory', $selfedit, /*$storeInUtc,*/ $defaultPath, $storePath);
227
+
228
+		InstallUtils::continueInstall($selfedit == 'true');
229
+	}
230
+
231
+	protected $errorMsg;
232
+
233
+	private function displayErrorMsg($msg)
234
+	{
235
+		$this->errorMsg = $msg;
236
+		$this->content->addFile(__DIR__.'/../../../../views/installError.php', $this);
237
+		$this->template->toHtml();
238
+	}
239 239
 }
Please login to merge, or discard this patch.
src/Mouf/Database/TDBM/Utils/TDBMDaoGenerator.php 1 patch
Indentation   +356 added lines, -356 removed lines patch added patch discarded remove patch
@@ -17,132 +17,132 @@  discard block
 block discarded – undo
17 17
  */
18 18
 class TDBMDaoGenerator
19 19
 {
20
-    /**
21
-     * @var Schema
22
-     */
23
-    private $schema;
24
-
25
-    /**
26
-     * Name of composer file.
27
-     *
28
-     * @var string
29
-     */
30
-    private $composerFile;
31
-
32
-    /**
33
-     * @var TDBMSchemaAnalyzer
34
-     */
35
-    private $tdbmSchemaAnalyzer;
36
-
37
-    /**
38
-     * @var GeneratorListenerInterface
39
-     */
40
-    private $eventDispatcher;
41
-
42
-    /**
43
-     * @var NamingStrategyInterface
44
-     */
45
-    private $namingStrategy;
46
-    /**
47
-     * @var ConfigurationInterface
48
-     */
49
-    private $configuration;
50
-
51
-    /**
52
-     * Constructor.
53
-     *
54
-     * @param ConfigurationInterface $configuration
55
-     * @param TDBMSchemaAnalyzer $tdbmSchemaAnalyzer
56
-     */
57
-    public function __construct(ConfigurationInterface $configuration, TDBMSchemaAnalyzer $tdbmSchemaAnalyzer)
58
-    {
59
-        $this->configuration = $configuration;
60
-        $this->schema = $tdbmSchemaAnalyzer->getSchema();
61
-        $this->tdbmSchemaAnalyzer = $tdbmSchemaAnalyzer;
62
-        $this->namingStrategy = $configuration->getNamingStrategy();
63
-        $this->eventDispatcher = $configuration->getGeneratorEventDispatcher();
64
-    }
65
-
66
-    /**
67
-     * Generates all the daos and beans.
68
-     *
69
-     * @throws TDBMException
70
-     */
71
-    public function generateAllDaosAndBeans(): void
72
-    {
73
-        // TODO: check that no class name ends with "Base". Otherwise, there will be name clash.
74
-
75
-        $tableList = $this->schema->getTables();
76
-
77
-        // Remove all beans and daos from junction tables
78
-        $junctionTables = $this->configuration->getSchemaAnalyzer()->detectJunctionTables(true);
79
-        $junctionTableNames = array_map(function (Table $table) {
80
-            return $table->getName();
81
-        }, $junctionTables);
82
-
83
-        $tableList = array_filter($tableList, function (Table $table) use ($junctionTableNames) {
84
-            return !in_array($table->getName(), $junctionTableNames);
85
-        });
86
-
87
-        $beanDescriptors = [];
88
-
89
-        foreach ($tableList as $table) {
90
-            $beanDescriptors[] = $this->generateDaoAndBean($table);
91
-        }
92
-
93
-
94
-        $this->generateFactory($tableList);
95
-
96
-        // Let's call the list of listeners
97
-        $this->eventDispatcher->onGenerate($this->configuration, $beanDescriptors);
98
-    }
99
-
100
-    /**
101
-     * Generates in one method call the daos and the beans for one table.
102
-     *
103
-     * @param Table $table
104
-     *
105
-     * @return BeanDescriptor
106
-     * @throws TDBMException
107
-     */
108
-    private function generateDaoAndBean(Table $table) : BeanDescriptor
109
-    {
110
-        $tableName = $table->getName();
111
-        $daoName = $this->namingStrategy->getDaoClassName($tableName);
112
-        $beanName = $this->namingStrategy->getBeanClassName($tableName);
113
-        $baseBeanName = $this->namingStrategy->getBaseBeanClassName($tableName);
114
-        $baseDaoName = $this->namingStrategy->getBaseDaoClassName($tableName);
115
-
116
-        $beanDescriptor = new BeanDescriptor($table, $this->configuration->getSchemaAnalyzer(), $this->schema, $this->tdbmSchemaAnalyzer, $this->namingStrategy);
117
-        $this->generateBean($beanDescriptor, $beanName, $baseBeanName, $table);
118
-        $this->generateDao($beanDescriptor, $daoName, $baseDaoName, $beanName, $table);
119
-        return $beanDescriptor;
120
-    }
121
-
122
-    /**
123
-     * Writes the PHP bean file with all getters and setters from the table passed in parameter.
124
-     *
125
-     * @param BeanDescriptor  $beanDescriptor
126
-     * @param string          $className       The name of the class
127
-     * @param string          $baseClassName   The name of the base class which will be extended (name only, no directory)
128
-     * @param Table           $table           The table
129
-     *
130
-     * @throws TDBMException
131
-     */
132
-    public function generateBean(BeanDescriptor $beanDescriptor, $className, $baseClassName, Table $table)
133
-    {
134
-        $beannamespace = $this->configuration->getBeanNamespace();
135
-        $str = $beanDescriptor->generatePhpCode($beannamespace);
136
-
137
-        $possibleBaseFileName = $this->configuration->getPathFinder()->getPath($beannamespace.'\\Generated\\'.$baseClassName)->getPathname();
138
-
139
-        $this->dumpFile($possibleBaseFileName, $str);
140
-
141
-        $possibleFileName = $this->configuration->getPathFinder()->getPath($beannamespace.'\\'.$className)->getPathname();
142
-
143
-        if (!file_exists($possibleFileName)) {
144
-            $tableName = $table->getName();
145
-            $str = "<?php
20
+	/**
21
+	 * @var Schema
22
+	 */
23
+	private $schema;
24
+
25
+	/**
26
+	 * Name of composer file.
27
+	 *
28
+	 * @var string
29
+	 */
30
+	private $composerFile;
31
+
32
+	/**
33
+	 * @var TDBMSchemaAnalyzer
34
+	 */
35
+	private $tdbmSchemaAnalyzer;
36
+
37
+	/**
38
+	 * @var GeneratorListenerInterface
39
+	 */
40
+	private $eventDispatcher;
41
+
42
+	/**
43
+	 * @var NamingStrategyInterface
44
+	 */
45
+	private $namingStrategy;
46
+	/**
47
+	 * @var ConfigurationInterface
48
+	 */
49
+	private $configuration;
50
+
51
+	/**
52
+	 * Constructor.
53
+	 *
54
+	 * @param ConfigurationInterface $configuration
55
+	 * @param TDBMSchemaAnalyzer $tdbmSchemaAnalyzer
56
+	 */
57
+	public function __construct(ConfigurationInterface $configuration, TDBMSchemaAnalyzer $tdbmSchemaAnalyzer)
58
+	{
59
+		$this->configuration = $configuration;
60
+		$this->schema = $tdbmSchemaAnalyzer->getSchema();
61
+		$this->tdbmSchemaAnalyzer = $tdbmSchemaAnalyzer;
62
+		$this->namingStrategy = $configuration->getNamingStrategy();
63
+		$this->eventDispatcher = $configuration->getGeneratorEventDispatcher();
64
+	}
65
+
66
+	/**
67
+	 * Generates all the daos and beans.
68
+	 *
69
+	 * @throws TDBMException
70
+	 */
71
+	public function generateAllDaosAndBeans(): void
72
+	{
73
+		// TODO: check that no class name ends with "Base". Otherwise, there will be name clash.
74
+
75
+		$tableList = $this->schema->getTables();
76
+
77
+		// Remove all beans and daos from junction tables
78
+		$junctionTables = $this->configuration->getSchemaAnalyzer()->detectJunctionTables(true);
79
+		$junctionTableNames = array_map(function (Table $table) {
80
+			return $table->getName();
81
+		}, $junctionTables);
82
+
83
+		$tableList = array_filter($tableList, function (Table $table) use ($junctionTableNames) {
84
+			return !in_array($table->getName(), $junctionTableNames);
85
+		});
86
+
87
+		$beanDescriptors = [];
88
+
89
+		foreach ($tableList as $table) {
90
+			$beanDescriptors[] = $this->generateDaoAndBean($table);
91
+		}
92
+
93
+
94
+		$this->generateFactory($tableList);
95
+
96
+		// Let's call the list of listeners
97
+		$this->eventDispatcher->onGenerate($this->configuration, $beanDescriptors);
98
+	}
99
+
100
+	/**
101
+	 * Generates in one method call the daos and the beans for one table.
102
+	 *
103
+	 * @param Table $table
104
+	 *
105
+	 * @return BeanDescriptor
106
+	 * @throws TDBMException
107
+	 */
108
+	private function generateDaoAndBean(Table $table) : BeanDescriptor
109
+	{
110
+		$tableName = $table->getName();
111
+		$daoName = $this->namingStrategy->getDaoClassName($tableName);
112
+		$beanName = $this->namingStrategy->getBeanClassName($tableName);
113
+		$baseBeanName = $this->namingStrategy->getBaseBeanClassName($tableName);
114
+		$baseDaoName = $this->namingStrategy->getBaseDaoClassName($tableName);
115
+
116
+		$beanDescriptor = new BeanDescriptor($table, $this->configuration->getSchemaAnalyzer(), $this->schema, $this->tdbmSchemaAnalyzer, $this->namingStrategy);
117
+		$this->generateBean($beanDescriptor, $beanName, $baseBeanName, $table);
118
+		$this->generateDao($beanDescriptor, $daoName, $baseDaoName, $beanName, $table);
119
+		return $beanDescriptor;
120
+	}
121
+
122
+	/**
123
+	 * Writes the PHP bean file with all getters and setters from the table passed in parameter.
124
+	 *
125
+	 * @param BeanDescriptor  $beanDescriptor
126
+	 * @param string          $className       The name of the class
127
+	 * @param string          $baseClassName   The name of the base class which will be extended (name only, no directory)
128
+	 * @param Table           $table           The table
129
+	 *
130
+	 * @throws TDBMException
131
+	 */
132
+	public function generateBean(BeanDescriptor $beanDescriptor, $className, $baseClassName, Table $table)
133
+	{
134
+		$beannamespace = $this->configuration->getBeanNamespace();
135
+		$str = $beanDescriptor->generatePhpCode($beannamespace);
136
+
137
+		$possibleBaseFileName = $this->configuration->getPathFinder()->getPath($beannamespace.'\\Generated\\'.$baseClassName)->getPathname();
138
+
139
+		$this->dumpFile($possibleBaseFileName, $str);
140
+
141
+		$possibleFileName = $this->configuration->getPathFinder()->getPath($beannamespace.'\\'.$className)->getPathname();
142
+
143
+		if (!file_exists($possibleFileName)) {
144
+			$tableName = $table->getName();
145
+			$str = "<?php
146 146
 /*
147 147
  * This file has been automatically generated by TDBM.
148 148
  * You can edit this file as it will not be overwritten.
@@ -160,73 +160,73 @@  discard block
 block discarded – undo
160 160
 }
161 161
 ";
162 162
 
163
-            $this->dumpFile($possibleFileName, $str);
164
-        }
165
-    }
166
-
167
-    /**
168
-     * Tries to find a @defaultSort annotation in one of the columns.
169
-     *
170
-     * @param Table $table
171
-     *
172
-     * @return array First item: column name, Second item: column order (asc/desc)
173
-     */
174
-    private function getDefaultSortColumnFromAnnotation(Table $table)
175
-    {
176
-        $defaultSort = null;
177
-        $defaultSortDirection = null;
178
-        foreach ($table->getColumns() as $column) {
179
-            $comments = $column->getComment();
180
-            $matches = [];
181
-            if (preg_match('/@defaultSort(\((desc|asc)\))*/', $comments, $matches) != 0) {
182
-                $defaultSort = $column->getName();
183
-                if (count($matches) === 3) {
184
-                    $defaultSortDirection = $matches[2];
185
-                } else {
186
-                    $defaultSortDirection = 'ASC';
187
-                }
188
-            }
189
-        }
190
-
191
-        return [$defaultSort, $defaultSortDirection];
192
-    }
193
-
194
-    /**
195
-     * Writes the PHP bean DAO with simple functions to create/get/save objects.
196
-     *
197
-     * @param BeanDescriptor  $beanDescriptor
198
-     * @param string          $className       The name of the class
199
-     * @param string          $baseClassName
200
-     * @param string          $beanClassName
201
-     * @param Table           $table
202
-     *
203
-     * @throws TDBMException
204
-     */
205
-    private function generateDao(BeanDescriptor $beanDescriptor, string $className, string $baseClassName, string $beanClassName, Table $table)
206
-    {
207
-        $daonamespace = $this->configuration->getDaoNamespace();
208
-        $beannamespace = $this->configuration->getBeanNamespace();
209
-        $tableName = $table->getName();
210
-        $primaryKeyColumns = $table->getPrimaryKeyColumns();
211
-
212
-        list($defaultSort, $defaultSortDirection) = $this->getDefaultSortColumnFromAnnotation($table);
213
-
214
-        // FIXME: lowercase tables with _ in the name should work!
215
-        $tableCamel = self::toSingular(self::toCamelCase($tableName));
216
-
217
-        $beanClassWithoutNameSpace = $beanClassName;
218
-        $beanClassName = $beannamespace.'\\'.$beanClassName;
219
-
220
-        list($usedBeans, $findByDaoCode) = $beanDescriptor->generateFindByDaoCode($beannamespace, $beanClassWithoutNameSpace);
221
-
222
-        $usedBeans[] = $beanClassName;
223
-        // Let's suppress duplicates in used beans (if any)
224
-        $usedBeans = array_flip(array_flip($usedBeans));
225
-        $useStatements = array_map(function ($usedBean) {
226
-            return "use $usedBean;\n";
227
-        }, $usedBeans);
228
-
229
-        $str = "<?php
163
+			$this->dumpFile($possibleFileName, $str);
164
+		}
165
+	}
166
+
167
+	/**
168
+	 * Tries to find a @defaultSort annotation in one of the columns.
169
+	 *
170
+	 * @param Table $table
171
+	 *
172
+	 * @return array First item: column name, Second item: column order (asc/desc)
173
+	 */
174
+	private function getDefaultSortColumnFromAnnotation(Table $table)
175
+	{
176
+		$defaultSort = null;
177
+		$defaultSortDirection = null;
178
+		foreach ($table->getColumns() as $column) {
179
+			$comments = $column->getComment();
180
+			$matches = [];
181
+			if (preg_match('/@defaultSort(\((desc|asc)\))*/', $comments, $matches) != 0) {
182
+				$defaultSort = $column->getName();
183
+				if (count($matches) === 3) {
184
+					$defaultSortDirection = $matches[2];
185
+				} else {
186
+					$defaultSortDirection = 'ASC';
187
+				}
188
+			}
189
+		}
190
+
191
+		return [$defaultSort, $defaultSortDirection];
192
+	}
193
+
194
+	/**
195
+	 * Writes the PHP bean DAO with simple functions to create/get/save objects.
196
+	 *
197
+	 * @param BeanDescriptor  $beanDescriptor
198
+	 * @param string          $className       The name of the class
199
+	 * @param string          $baseClassName
200
+	 * @param string          $beanClassName
201
+	 * @param Table           $table
202
+	 *
203
+	 * @throws TDBMException
204
+	 */
205
+	private function generateDao(BeanDescriptor $beanDescriptor, string $className, string $baseClassName, string $beanClassName, Table $table)
206
+	{
207
+		$daonamespace = $this->configuration->getDaoNamespace();
208
+		$beannamespace = $this->configuration->getBeanNamespace();
209
+		$tableName = $table->getName();
210
+		$primaryKeyColumns = $table->getPrimaryKeyColumns();
211
+
212
+		list($defaultSort, $defaultSortDirection) = $this->getDefaultSortColumnFromAnnotation($table);
213
+
214
+		// FIXME: lowercase tables with _ in the name should work!
215
+		$tableCamel = self::toSingular(self::toCamelCase($tableName));
216
+
217
+		$beanClassWithoutNameSpace = $beanClassName;
218
+		$beanClassName = $beannamespace.'\\'.$beanClassName;
219
+
220
+		list($usedBeans, $findByDaoCode) = $beanDescriptor->generateFindByDaoCode($beannamespace, $beanClassWithoutNameSpace);
221
+
222
+		$usedBeans[] = $beanClassName;
223
+		// Let's suppress duplicates in used beans (if any)
224
+		$usedBeans = array_flip(array_flip($usedBeans));
225
+		$useStatements = array_map(function ($usedBean) {
226
+			return "use $usedBean;\n";
227
+		}, $usedBeans);
228
+
229
+		$str = "<?php
230 230
 
231 231
 /*
232 232
  * This file has been automatically generated by TDBM.
@@ -302,10 +302,10 @@  discard block
 block discarded – undo
302 302
     }
303 303
     ";
304 304
 
305
-        if (count($primaryKeyColumns) === 1) {
306
-            $primaryKeyColumn = $primaryKeyColumns[0];
307
-            $primaryKeyPhpType = self::dbalTypeToPhpType($table->getColumn($primaryKeyColumn)->getType());
308
-            $str .= "
305
+		if (count($primaryKeyColumns) === 1) {
306
+			$primaryKeyColumn = $primaryKeyColumns[0];
307
+			$primaryKeyPhpType = self::dbalTypeToPhpType($table->getColumn($primaryKeyColumn)->getType());
308
+			$str .= "
309 309
     /**
310 310
      * Get $beanClassWithoutNameSpace specified by its ID (its primary key)
311 311
      * If the primary key does not exist, an exception is thrown.
@@ -320,8 +320,8 @@  discard block
 block discarded – undo
320 320
         return \$this->tdbmService->findObjectByPk('$tableName', ['$primaryKeyColumn' => \$id], [], \$lazyLoading);
321 321
     }
322 322
     ";
323
-        }
324
-        $str .= "
323
+		}
324
+		$str .= "
325 325
     /**
326 326
      * Deletes the $beanClassWithoutNameSpace passed in parameter.
327 327
      *
@@ -421,19 +421,19 @@  discard block
 block discarded – undo
421 421
     }
422 422
 ";
423 423
 
424
-        $str .= $findByDaoCode;
425
-        $str .= '}
424
+		$str .= $findByDaoCode;
425
+		$str .= '}
426 426
 ';
427 427
 
428
-        $possibleBaseFileName = $this->configuration->getPathFinder()->getPath($daonamespace.'\\Generated\\'.$baseClassName)->getPathname();
428
+		$possibleBaseFileName = $this->configuration->getPathFinder()->getPath($daonamespace.'\\Generated\\'.$baseClassName)->getPathname();
429 429
 
430
-        $this->dumpFile($possibleBaseFileName, $str);
430
+		$this->dumpFile($possibleBaseFileName, $str);
431 431
 
432
-        $possibleFileName = $this->configuration->getPathFinder()->getPath($daonamespace.'\\'.$className)->getPathname();
432
+		$possibleFileName = $this->configuration->getPathFinder()->getPath($daonamespace.'\\'.$className)->getPathname();
433 433
 
434
-        // Now, let's generate the "editable" class
435
-        if (!file_exists($possibleFileName)) {
436
-            $str = "<?php
434
+		// Now, let's generate the "editable" class
435
+		if (!file_exists($possibleFileName)) {
436
+			$str = "<?php
437 437
 
438 438
 /*
439 439
  * This file has been automatically generated by TDBM.
@@ -451,24 +451,24 @@  discard block
 block discarded – undo
451 451
 {
452 452
 }
453 453
 ";
454
-            $this->dumpFile($possibleFileName, $str);
455
-        }
456
-    }
454
+			$this->dumpFile($possibleFileName, $str);
455
+		}
456
+	}
457 457
 
458
-    /**
459
-     * Generates the factory bean.
460
-     *
461
-     * @param Table[] $tableList
462
-     * @throws TDBMException
463
-     */
464
-    private function generateFactory(array $tableList) : void
465
-    {
466
-        $daoNamespace = $this->configuration->getDaoNamespace();
467
-        $daoFactoryClassName = $this->namingStrategy->getDaoFactoryClassName();
458
+	/**
459
+	 * Generates the factory bean.
460
+	 *
461
+	 * @param Table[] $tableList
462
+	 * @throws TDBMException
463
+	 */
464
+	private function generateFactory(array $tableList) : void
465
+	{
466
+		$daoNamespace = $this->configuration->getDaoNamespace();
467
+		$daoFactoryClassName = $this->namingStrategy->getDaoFactoryClassName();
468 468
 
469
-        // For each table, let's write a property.
469
+		// For each table, let's write a property.
470 470
 
471
-        $str = "<?php
471
+		$str = "<?php
472 472
 
473 473
 /*
474 474
  * This file has been automatically generated by TDBM.
@@ -478,13 +478,13 @@  discard block
 block discarded – undo
478 478
 namespace {$daoNamespace}\\Generated;
479 479
 
480 480
 ";
481
-        foreach ($tableList as $table) {
482
-            $tableName = $table->getName();
483
-            $daoClassName = $this->namingStrategy->getDaoClassName($tableName);
484
-            $str .= "use {$daoNamespace}\\".$daoClassName.";\n";
485
-        }
481
+		foreach ($tableList as $table) {
482
+			$tableName = $table->getName();
483
+			$daoClassName = $this->namingStrategy->getDaoClassName($tableName);
484
+			$str .= "use {$daoNamespace}\\".$daoClassName.";\n";
485
+		}
486 486
 
487
-        $str .= "
487
+		$str .= "
488 488
 /**
489 489
  * The $daoFactoryClassName provides an easy access to all DAOs generated by TDBM.
490 490
  *
@@ -493,12 +493,12 @@  discard block
 block discarded – undo
493 493
 {
494 494
 ";
495 495
 
496
-        foreach ($tableList as $table) {
497
-            $tableName = $table->getName();
498
-            $daoClassName = $this->namingStrategy->getDaoClassName($tableName);
499
-            $daoInstanceName = self::toVariableName($daoClassName);
496
+		foreach ($tableList as $table) {
497
+			$tableName = $table->getName();
498
+			$daoClassName = $this->namingStrategy->getDaoClassName($tableName);
499
+			$daoInstanceName = self::toVariableName($daoClassName);
500 500
 
501
-            $str .= '    /**
501
+			$str .= '    /**
502 502
      * @var '.$daoClassName.'
503 503
      */
504 504
     private $'.$daoInstanceName.';
@@ -522,131 +522,131 @@  discard block
 block discarded – undo
522 522
     {
523 523
         $this->'.$daoInstanceName.' = $'.$daoInstanceName.';
524 524
     }';
525
-        }
525
+		}
526 526
 
527
-        $str .= '
527
+		$str .= '
528 528
 }
529 529
 ';
530 530
 
531
-        $possibleFileName = $this->configuration->getPathFinder()->getPath($daoNamespace.'\\Generated\\'.$daoFactoryClassName)->getPathname();
532
-
533
-        $this->dumpFile($possibleFileName, $str);
534
-    }
535
-
536
-    /**
537
-     * Transforms a string to camelCase (except the first letter will be uppercase too).
538
-     * Underscores and spaces are removed and the first letter after the underscore is uppercased.
539
-     *
540
-     * @param $str string
541
-     *
542
-     * @return string
543
-     */
544
-    public static function toCamelCase($str)
545
-    {
546
-        $str = strtoupper(substr($str, 0, 1)).substr($str, 1);
547
-        while (true) {
548
-            if (strpos($str, '_') === false && strpos($str, ' ') === false) {
549
-                break;
550
-            }
551
-
552
-            $pos = strpos($str, '_');
553
-            if ($pos === false) {
554
-                $pos = strpos($str, ' ');
555
-            }
556
-            $before = substr($str, 0, $pos);
557
-            $after = substr($str, $pos + 1);
558
-            $str = $before.strtoupper(substr($after, 0, 1)).substr($after, 1);
559
-        }
560
-
561
-        return $str;
562
-    }
563
-
564
-    /**
565
-     * Tries to put string to the singular form (if it is plural).
566
-     * We assume the table names are in english.
567
-     *
568
-     * @param $str string
569
-     *
570
-     * @return string
571
-     */
572
-    public static function toSingular($str)
573
-    {
574
-        return Inflector::singularize($str);
575
-    }
576
-
577
-    /**
578
-     * Put the first letter of the string in lower case.
579
-     * Very useful to transform a class name into a variable name.
580
-     *
581
-     * @param $str string
582
-     *
583
-     * @return string
584
-     */
585
-    public static function toVariableName($str)
586
-    {
587
-        return strtolower(substr($str, 0, 1)).substr($str, 1);
588
-    }
589
-
590
-    /**
591
-     * Ensures the file passed in parameter can be written in its directory.
592
-     *
593
-     * @param string $fileName
594
-     *
595
-     * @throws TDBMException
596
-     */
597
-    private function ensureDirectoryExist(string $fileName)
598
-    {
599
-        $dirName = dirname($fileName);
600
-        if (!file_exists($dirName)) {
601
-            $old = umask(0);
602
-            $result = mkdir($dirName, 0775, true);
603
-            umask($old);
604
-            if ($result === false) {
605
-                throw new TDBMException("Unable to create directory: '".$dirName."'.");
606
-            }
607
-        }
608
-    }
609
-
610
-    private function dumpFile(string $fileName, string $content) : void
611
-    {
612
-        $this->ensureDirectoryExist($fileName);
613
-        $fileSystem = new Filesystem();
614
-        $fileSystem->dumpFile($fileName, $content);
615
-        @chmod($fileName, 0664);
616
-    }
617
-
618
-    /**
619
-     * Transforms a DBAL type into a PHP type (for PHPDoc purpose).
620
-     *
621
-     * @param Type $type The DBAL type
622
-     *
623
-     * @return string The PHP type
624
-     */
625
-    public static function dbalTypeToPhpType(Type $type)
626
-    {
627
-        $map = [
628
-            Type::TARRAY => 'array',
629
-            Type::SIMPLE_ARRAY => 'array',
630
-            'json' => 'array',  // 'json' is supported from Doctrine DBAL 2.6 only.
631
-            Type::JSON_ARRAY => 'array',
632
-            Type::BIGINT => 'string',
633
-            Type::BOOLEAN => 'bool',
634
-            Type::DATETIME => '\DateTimeInterface',
635
-            Type::DATETIMETZ => '\DateTimeInterface',
636
-            Type::DATE => '\DateTimeInterface',
637
-            Type::TIME => '\DateTimeInterface',
638
-            Type::DECIMAL => 'float',
639
-            Type::INTEGER => 'int',
640
-            Type::OBJECT => 'string',
641
-            Type::SMALLINT => 'int',
642
-            Type::STRING => 'string',
643
-            Type::TEXT => 'string',
644
-            Type::BINARY => 'string',
645
-            Type::BLOB => 'string',
646
-            Type::FLOAT => 'float',
647
-            Type::GUID => 'string',
648
-        ];
649
-
650
-        return isset($map[$type->getName()]) ? $map[$type->getName()] : $type->getName();
651
-    }
531
+		$possibleFileName = $this->configuration->getPathFinder()->getPath($daoNamespace.'\\Generated\\'.$daoFactoryClassName)->getPathname();
532
+
533
+		$this->dumpFile($possibleFileName, $str);
534
+	}
535
+
536
+	/**
537
+	 * Transforms a string to camelCase (except the first letter will be uppercase too).
538
+	 * Underscores and spaces are removed and the first letter after the underscore is uppercased.
539
+	 *
540
+	 * @param $str string
541
+	 *
542
+	 * @return string
543
+	 */
544
+	public static function toCamelCase($str)
545
+	{
546
+		$str = strtoupper(substr($str, 0, 1)).substr($str, 1);
547
+		while (true) {
548
+			if (strpos($str, '_') === false && strpos($str, ' ') === false) {
549
+				break;
550
+			}
551
+
552
+			$pos = strpos($str, '_');
553
+			if ($pos === false) {
554
+				$pos = strpos($str, ' ');
555
+			}
556
+			$before = substr($str, 0, $pos);
557
+			$after = substr($str, $pos + 1);
558
+			$str = $before.strtoupper(substr($after, 0, 1)).substr($after, 1);
559
+		}
560
+
561
+		return $str;
562
+	}
563
+
564
+	/**
565
+	 * Tries to put string to the singular form (if it is plural).
566
+	 * We assume the table names are in english.
567
+	 *
568
+	 * @param $str string
569
+	 *
570
+	 * @return string
571
+	 */
572
+	public static function toSingular($str)
573
+	{
574
+		return Inflector::singularize($str);
575
+	}
576
+
577
+	/**
578
+	 * Put the first letter of the string in lower case.
579
+	 * Very useful to transform a class name into a variable name.
580
+	 *
581
+	 * @param $str string
582
+	 *
583
+	 * @return string
584
+	 */
585
+	public static function toVariableName($str)
586
+	{
587
+		return strtolower(substr($str, 0, 1)).substr($str, 1);
588
+	}
589
+
590
+	/**
591
+	 * Ensures the file passed in parameter can be written in its directory.
592
+	 *
593
+	 * @param string $fileName
594
+	 *
595
+	 * @throws TDBMException
596
+	 */
597
+	private function ensureDirectoryExist(string $fileName)
598
+	{
599
+		$dirName = dirname($fileName);
600
+		if (!file_exists($dirName)) {
601
+			$old = umask(0);
602
+			$result = mkdir($dirName, 0775, true);
603
+			umask($old);
604
+			if ($result === false) {
605
+				throw new TDBMException("Unable to create directory: '".$dirName."'.");
606
+			}
607
+		}
608
+	}
609
+
610
+	private function dumpFile(string $fileName, string $content) : void
611
+	{
612
+		$this->ensureDirectoryExist($fileName);
613
+		$fileSystem = new Filesystem();
614
+		$fileSystem->dumpFile($fileName, $content);
615
+		@chmod($fileName, 0664);
616
+	}
617
+
618
+	/**
619
+	 * Transforms a DBAL type into a PHP type (for PHPDoc purpose).
620
+	 *
621
+	 * @param Type $type The DBAL type
622
+	 *
623
+	 * @return string The PHP type
624
+	 */
625
+	public static function dbalTypeToPhpType(Type $type)
626
+	{
627
+		$map = [
628
+			Type::TARRAY => 'array',
629
+			Type::SIMPLE_ARRAY => 'array',
630
+			'json' => 'array',  // 'json' is supported from Doctrine DBAL 2.6 only.
631
+			Type::JSON_ARRAY => 'array',
632
+			Type::BIGINT => 'string',
633
+			Type::BOOLEAN => 'bool',
634
+			Type::DATETIME => '\DateTimeInterface',
635
+			Type::DATETIMETZ => '\DateTimeInterface',
636
+			Type::DATE => '\DateTimeInterface',
637
+			Type::TIME => '\DateTimeInterface',
638
+			Type::DECIMAL => 'float',
639
+			Type::INTEGER => 'int',
640
+			Type::OBJECT => 'string',
641
+			Type::SMALLINT => 'int',
642
+			Type::STRING => 'string',
643
+			Type::TEXT => 'string',
644
+			Type::BINARY => 'string',
645
+			Type::BLOB => 'string',
646
+			Type::FLOAT => 'float',
647
+			Type::GUID => 'string',
648
+		];
649
+
650
+		return isset($map[$type->getName()]) ? $map[$type->getName()] : $type->getName();
651
+	}
652 652
 }
Please login to merge, or discard this patch.
src/Mouf/Database/TDBM/Utils/PathFinder/PathFinder.php 1 patch
Indentation   +54 added lines, -54 removed lines patch added patch discarded remove patch
@@ -5,58 +5,58 @@
 block discarded – undo
5 5
 
6 6
 class PathFinder implements PathFinderInterface
7 7
 {
8
-    /**
9
-     * @var string
10
-     */
11
-    private $composerFile;
12
-
13
-    /**
14
-     * @var string
15
-     */
16
-    private $rootPath;
17
-
18
-    /**
19
-     * @var bool
20
-     */
21
-    private $useAutoloadDev;
22
-
23
-    /**
24
-     * @var ClassNameMapper
25
-     */
26
-    private $classNameMapper;
27
-
28
-    public function __construct(string $composerFile = null, string $rootPath = null, bool $useAutoloadDev = false)
29
-    {
30
-        $this->composerFile = $composerFile;
31
-        $this->useAutoloadDev = $useAutoloadDev;
32
-        if ($rootPath === null) {
33
-            $this->rootPath = dirname(__DIR__, 9);
34
-        } else {
35
-            $this->rootPath = $rootPath;
36
-        }
37
-    }
38
-
39
-    private function getClassNameMapper() : ClassNameMapper
40
-    {
41
-        if ($this->classNameMapper === null) {
42
-            $this->classNameMapper = ClassNameMapper::createFromComposerFile($this->composerFile, $this->rootPath, $this->useAutoloadDev);
43
-        }
44
-        return $this->classNameMapper;
45
-    }
46
-
47
-    /**
48
-     * Returns the path of a class file given the fully qualified class name.
49
-     *
50
-     * @param string $className
51
-     * @return \SplFileInfo
52
-     * @throws NoPathFoundException
53
-     */
54
-    public function getPath(string $className): \SplFileInfo
55
-    {
56
-        $paths = $this->getClassNameMapper()->getPossibleFileNames($className);
57
-        if (empty($paths)) {
58
-            throw NoPathFoundException::create($className);
59
-        }
60
-        return new \SplFileInfo($this->rootPath.'/'.$paths[0]);
61
-    }
8
+	/**
9
+	 * @var string
10
+	 */
11
+	private $composerFile;
12
+
13
+	/**
14
+	 * @var string
15
+	 */
16
+	private $rootPath;
17
+
18
+	/**
19
+	 * @var bool
20
+	 */
21
+	private $useAutoloadDev;
22
+
23
+	/**
24
+	 * @var ClassNameMapper
25
+	 */
26
+	private $classNameMapper;
27
+
28
+	public function __construct(string $composerFile = null, string $rootPath = null, bool $useAutoloadDev = false)
29
+	{
30
+		$this->composerFile = $composerFile;
31
+		$this->useAutoloadDev = $useAutoloadDev;
32
+		if ($rootPath === null) {
33
+			$this->rootPath = dirname(__DIR__, 9);
34
+		} else {
35
+			$this->rootPath = $rootPath;
36
+		}
37
+	}
38
+
39
+	private function getClassNameMapper() : ClassNameMapper
40
+	{
41
+		if ($this->classNameMapper === null) {
42
+			$this->classNameMapper = ClassNameMapper::createFromComposerFile($this->composerFile, $this->rootPath, $this->useAutoloadDev);
43
+		}
44
+		return $this->classNameMapper;
45
+	}
46
+
47
+	/**
48
+	 * Returns the path of a class file given the fully qualified class name.
49
+	 *
50
+	 * @param string $className
51
+	 * @return \SplFileInfo
52
+	 * @throws NoPathFoundException
53
+	 */
54
+	public function getPath(string $className): \SplFileInfo
55
+	{
56
+		$paths = $this->getClassNameMapper()->getPossibleFileNames($className);
57
+		if (empty($paths)) {
58
+			throw NoPathFoundException::create($className);
59
+		}
60
+		return new \SplFileInfo($this->rootPath.'/'.$paths[0]);
61
+	}
62 62
 }
Please login to merge, or discard this patch.
src/Mouf/Database/TDBM/Utils/DefaultNamingStrategy.php 1 patch
Indentation   +189 added lines, -189 removed lines patch added patch discarded remove patch
@@ -7,193 +7,193 @@
 block discarded – undo
7 7
 
8 8
 class DefaultNamingStrategy implements NamingStrategyInterface
9 9
 {
10
-    private $beanPrefix = '';
11
-    private $beanSuffix = '';
12
-    private $baseBeanPrefix = 'Abstract';
13
-    private $baseBeanSuffix = '';
14
-    private $daoPrefix = '';
15
-    private $daoSuffix = 'Dao';
16
-    private $baseDaoPrefix = 'Abstract';
17
-    private $baseDaoSuffix = 'Dao';
18
-    private $exceptions = [];
19
-
20
-    /**
21
-     * Sets the string prefix to any bean class name.
22
-     *
23
-     * @param string $beanPrefix
24
-     */
25
-    public function setBeanPrefix(string $beanPrefix)
26
-    {
27
-        $this->beanPrefix = $beanPrefix;
28
-    }
29
-
30
-    /**
31
-     * Sets the string suffix to any bean class name.
32
-     *
33
-     * @param string $beanSuffix
34
-     */
35
-    public function setBeanSuffix(string $beanSuffix)
36
-    {
37
-        $this->beanSuffix = $beanSuffix;
38
-    }
39
-
40
-    /**
41
-     * Sets the string prefix to any base bean class name.
42
-     *
43
-     * @param string $baseBeanPrefix
44
-     */
45
-    public function setBaseBeanPrefix(string $baseBeanPrefix)
46
-    {
47
-        $this->baseBeanPrefix = $baseBeanPrefix;
48
-    }
49
-
50
-    /**
51
-     * Sets the string suffix to any base bean class name.
52
-     *
53
-     * @param string $baseBeanSuffix
54
-     */
55
-    public function setBaseBeanSuffix(string $baseBeanSuffix)
56
-    {
57
-        $this->baseBeanSuffix = $baseBeanSuffix;
58
-    }
59
-
60
-    /**
61
-     * Sets the string prefix to any DAO class name.
62
-     *
63
-     * @param string $daoPrefix
64
-     */
65
-    public function setDaoPrefix(string $daoPrefix)
66
-    {
67
-        $this->daoPrefix = $daoPrefix;
68
-    }
69
-
70
-    /**
71
-     * Sets the string suffix to any DAO class name.
72
-     *
73
-     * @param string $daoSuffix
74
-     */
75
-    public function setDaoSuffix(string $daoSuffix)
76
-    {
77
-        $this->daoSuffix = $daoSuffix;
78
-    }
79
-
80
-    /**
81
-     * Sets the string prefix to any base DAO class name.
82
-     *
83
-     * @param string $baseDaoPrefix
84
-     */
85
-    public function setBaseDaoPrefix(string $baseDaoPrefix)
86
-    {
87
-        $this->baseDaoPrefix = $baseDaoPrefix;
88
-    }
89
-
90
-    /**
91
-     * Sets the string suffix to any base DAO class name.
92
-     *
93
-     * @param string $baseDaoSuffix
94
-     */
95
-    public function setBaseDaoSuffix(string $baseDaoSuffix)
96
-    {
97
-        $this->baseDaoSuffix = $baseDaoSuffix;
98
-    }
99
-
100
-
101
-    /**
102
-     * Returns the bean class name from the table name (excluding the namespace).
103
-     *
104
-     * @param string $tableName
105
-     * @return string
106
-     */
107
-    public function getBeanClassName(string $tableName): string
108
-    {
109
-        return $this->beanPrefix.$this->toSingularCamelCase($tableName).$this->beanSuffix;
110
-    }
111
-
112
-    /**
113
-     * Returns the base bean class name from the table name (excluding the namespace).
114
-     *
115
-     * @param string $tableName
116
-     * @return string
117
-     */
118
-    public function getBaseBeanClassName(string $tableName): string
119
-    {
120
-        return $this->baseBeanPrefix.$this->toSingularCamelCase($tableName).$this->baseBeanSuffix;
121
-    }
122
-
123
-    /**
124
-     * Returns the name of the DAO class from the table name (excluding the namespace).
125
-     *
126
-     * @param string $tableName
127
-     * @return string
128
-     */
129
-    public function getDaoClassName(string $tableName): string
130
-    {
131
-        return $this->daoPrefix.$this->toSingularCamelCase($tableName).$this->daoSuffix;
132
-    }
133
-
134
-    /**
135
-     * Returns the name of the base DAO class from the table name (excluding the namespace).
136
-     *
137
-     * @param string $tableName
138
-     * @return string
139
-     */
140
-    public function getBaseDaoClassName(string $tableName): string
141
-    {
142
-        return $this->baseDaoPrefix.$this->toSingularCamelCase($tableName).$this->baseDaoSuffix;
143
-    }
144
-
145
-    /**
146
-     * Tries to put string to the singular form (if it is plural) and camel case form.
147
-     * We assume the table names are in english.
148
-     *
149
-     * @param $str string
150
-     *
151
-     * @return string
152
-     */
153
-    private function toSingularCamelCase(string $str): string
154
-    {
155
-        // Let's first check if this is not in the exceptions directory.
156
-        if (isset($this->exceptions[$str])) {
157
-            return $this->exceptions[$str];
158
-        }
159
-
160
-        $tokens = preg_split("/[_ ]+/", $str);
161
-        $tokens = array_map([Inflector::class, 'singularize'], $tokens);
162
-
163
-        $str = '';
164
-        foreach ($tokens as $token) {
165
-            $str .= ucfirst(Inflector::singularize($token));
166
-        }
167
-
168
-        return $str;
169
-    }
170
-
171
-    /**
172
-     * Returns the class name for the DAO factory.
173
-     *
174
-     * @return string
175
-     */
176
-    public function getDaoFactoryClassName(): string
177
-    {
178
-        return 'DaoFactory';
179
-    }
180
-
181
-    /**
182
-     * Sets exceptions in the naming of classes.
183
-     * The key is the name of the table, the value the "base" name of beans and DAOs.
184
-     *
185
-     * This is very useful for dealing with plural to singular translations in non english table names.
186
-     *
187
-     * For instance if you are dealing with a table containing horses in French ("chevaux" that has a singular "cheval"):
188
-     *
189
-     * [
190
-     *     "chevaux" => "Cheval"
191
-     * ]
192
-     *
193
-     * @param array<string,string> $exceptions
194
-     */
195
-    public function setExceptions(array $exceptions)
196
-    {
197
-        $this->exceptions = $exceptions;
198
-    }
10
+	private $beanPrefix = '';
11
+	private $beanSuffix = '';
12
+	private $baseBeanPrefix = 'Abstract';
13
+	private $baseBeanSuffix = '';
14
+	private $daoPrefix = '';
15
+	private $daoSuffix = 'Dao';
16
+	private $baseDaoPrefix = 'Abstract';
17
+	private $baseDaoSuffix = 'Dao';
18
+	private $exceptions = [];
19
+
20
+	/**
21
+	 * Sets the string prefix to any bean class name.
22
+	 *
23
+	 * @param string $beanPrefix
24
+	 */
25
+	public function setBeanPrefix(string $beanPrefix)
26
+	{
27
+		$this->beanPrefix = $beanPrefix;
28
+	}
29
+
30
+	/**
31
+	 * Sets the string suffix to any bean class name.
32
+	 *
33
+	 * @param string $beanSuffix
34
+	 */
35
+	public function setBeanSuffix(string $beanSuffix)
36
+	{
37
+		$this->beanSuffix = $beanSuffix;
38
+	}
39
+
40
+	/**
41
+	 * Sets the string prefix to any base bean class name.
42
+	 *
43
+	 * @param string $baseBeanPrefix
44
+	 */
45
+	public function setBaseBeanPrefix(string $baseBeanPrefix)
46
+	{
47
+		$this->baseBeanPrefix = $baseBeanPrefix;
48
+	}
49
+
50
+	/**
51
+	 * Sets the string suffix to any base bean class name.
52
+	 *
53
+	 * @param string $baseBeanSuffix
54
+	 */
55
+	public function setBaseBeanSuffix(string $baseBeanSuffix)
56
+	{
57
+		$this->baseBeanSuffix = $baseBeanSuffix;
58
+	}
59
+
60
+	/**
61
+	 * Sets the string prefix to any DAO class name.
62
+	 *
63
+	 * @param string $daoPrefix
64
+	 */
65
+	public function setDaoPrefix(string $daoPrefix)
66
+	{
67
+		$this->daoPrefix = $daoPrefix;
68
+	}
69
+
70
+	/**
71
+	 * Sets the string suffix to any DAO class name.
72
+	 *
73
+	 * @param string $daoSuffix
74
+	 */
75
+	public function setDaoSuffix(string $daoSuffix)
76
+	{
77
+		$this->daoSuffix = $daoSuffix;
78
+	}
79
+
80
+	/**
81
+	 * Sets the string prefix to any base DAO class name.
82
+	 *
83
+	 * @param string $baseDaoPrefix
84
+	 */
85
+	public function setBaseDaoPrefix(string $baseDaoPrefix)
86
+	{
87
+		$this->baseDaoPrefix = $baseDaoPrefix;
88
+	}
89
+
90
+	/**
91
+	 * Sets the string suffix to any base DAO class name.
92
+	 *
93
+	 * @param string $baseDaoSuffix
94
+	 */
95
+	public function setBaseDaoSuffix(string $baseDaoSuffix)
96
+	{
97
+		$this->baseDaoSuffix = $baseDaoSuffix;
98
+	}
99
+
100
+
101
+	/**
102
+	 * Returns the bean class name from the table name (excluding the namespace).
103
+	 *
104
+	 * @param string $tableName
105
+	 * @return string
106
+	 */
107
+	public function getBeanClassName(string $tableName): string
108
+	{
109
+		return $this->beanPrefix.$this->toSingularCamelCase($tableName).$this->beanSuffix;
110
+	}
111
+
112
+	/**
113
+	 * Returns the base bean class name from the table name (excluding the namespace).
114
+	 *
115
+	 * @param string $tableName
116
+	 * @return string
117
+	 */
118
+	public function getBaseBeanClassName(string $tableName): string
119
+	{
120
+		return $this->baseBeanPrefix.$this->toSingularCamelCase($tableName).$this->baseBeanSuffix;
121
+	}
122
+
123
+	/**
124
+	 * Returns the name of the DAO class from the table name (excluding the namespace).
125
+	 *
126
+	 * @param string $tableName
127
+	 * @return string
128
+	 */
129
+	public function getDaoClassName(string $tableName): string
130
+	{
131
+		return $this->daoPrefix.$this->toSingularCamelCase($tableName).$this->daoSuffix;
132
+	}
133
+
134
+	/**
135
+	 * Returns the name of the base DAO class from the table name (excluding the namespace).
136
+	 *
137
+	 * @param string $tableName
138
+	 * @return string
139
+	 */
140
+	public function getBaseDaoClassName(string $tableName): string
141
+	{
142
+		return $this->baseDaoPrefix.$this->toSingularCamelCase($tableName).$this->baseDaoSuffix;
143
+	}
144
+
145
+	/**
146
+	 * Tries to put string to the singular form (if it is plural) and camel case form.
147
+	 * We assume the table names are in english.
148
+	 *
149
+	 * @param $str string
150
+	 *
151
+	 * @return string
152
+	 */
153
+	private function toSingularCamelCase(string $str): string
154
+	{
155
+		// Let's first check if this is not in the exceptions directory.
156
+		if (isset($this->exceptions[$str])) {
157
+			return $this->exceptions[$str];
158
+		}
159
+
160
+		$tokens = preg_split("/[_ ]+/", $str);
161
+		$tokens = array_map([Inflector::class, 'singularize'], $tokens);
162
+
163
+		$str = '';
164
+		foreach ($tokens as $token) {
165
+			$str .= ucfirst(Inflector::singularize($token));
166
+		}
167
+
168
+		return $str;
169
+	}
170
+
171
+	/**
172
+	 * Returns the class name for the DAO factory.
173
+	 *
174
+	 * @return string
175
+	 */
176
+	public function getDaoFactoryClassName(): string
177
+	{
178
+		return 'DaoFactory';
179
+	}
180
+
181
+	/**
182
+	 * Sets exceptions in the naming of classes.
183
+	 * The key is the name of the table, the value the "base" name of beans and DAOs.
184
+	 *
185
+	 * This is very useful for dealing with plural to singular translations in non english table names.
186
+	 *
187
+	 * For instance if you are dealing with a table containing horses in French ("chevaux" that has a singular "cheval"):
188
+	 *
189
+	 * [
190
+	 *     "chevaux" => "Cheval"
191
+	 * ]
192
+	 *
193
+	 * @param array<string,string> $exceptions
194
+	 */
195
+	public function setExceptions(array $exceptions)
196
+	{
197
+		$this->exceptions = $exceptions;
198
+	}
199 199
 }
Please login to merge, or discard this patch.
src/Mouf/Database/TDBM/QueryFactory/FindObjectsFromSqlQueryFactory.php 1 patch
Indentation   +164 added lines, -164 removed lines patch added patch discarded remove patch
@@ -15,168 +15,168 @@
 block discarded – undo
15 15
  */
16 16
 class FindObjectsFromSqlQueryFactory extends AbstractQueryFactory
17 17
 {
18
-    private $mainTable;
19
-    private $from;
20
-    private $filterString;
21
-    private $cache;
22
-    private $cachePrefix;
23
-
24
-    public function __construct(string $mainTable, string $from, $filterString, $orderBy, TDBMService $tdbmService, Schema $schema, OrderByAnalyzer $orderByAnalyzer, SchemaAnalyzer $schemaAnalyzer, Cache $cache, string $cachePrefix)
25
-    {
26
-        parent::__construct($tdbmService, $schema, $orderByAnalyzer, $orderBy);
27
-        $this->mainTable = $mainTable;
28
-        $this->from = $from;
29
-        $this->filterString = $filterString;
30
-        $this->schemaAnalyzer = $schemaAnalyzer;
31
-        $this->cache = $cache;
32
-        $this->cachePrefix = $cachePrefix;
33
-    }
34
-
35
-    protected function compute()
36
-    {
37
-        $connection = $this->tdbmService->getConnection();
38
-
39
-        $columnsList = null;
40
-
41
-        $allFetchedTables = $this->tdbmService->_getRelatedTablesByInheritance($this->mainTable);
42
-
43
-        list($columnDescList, $columnsList, $orderString) = $this->getColumnsList($this->mainTable, [], $this->orderBy);
44
-
45
-        $sql = 'SELECT DISTINCT '.implode(', ', $columnsList).' FROM '.$this->from;
46
-
47
-        // Let's compute the COUNT.
48
-        $pkColumnNames = $this->schema->getTable($this->mainTable)->getPrimaryKeyColumns();
49
-        $pkColumnNames = array_map(function ($pkColumn) {
50
-            return $this->tdbmService->getConnection()->quoteIdentifier($this->mainTable).'.'.$this->tdbmService->getConnection()->quoteIdentifier($pkColumn);
51
-        }, $pkColumnNames);
52
-
53
-        $countSql = 'SELECT COUNT(DISTINCT '.implode(', ', $pkColumnNames).') FROM '.$this->from;
54
-
55
-        // Add joins on inherited tables if necessary
56
-        if (count($allFetchedTables) > 1) {
57
-            $joinSql = '';
58
-            $parentFks = $this->getParentRelationshipForeignKeys($this->mainTable);
59
-            foreach ($parentFks as $fk) {
60
-                $joinSql .= sprintf(' JOIN %s ON (%s.%s = %s.%s)',
61
-                    $connection->quoteIdentifier($fk->getForeignTableName()),
62
-                    $connection->quoteIdentifier($fk->getLocalTableName()),
63
-                    $connection->quoteIdentifier($fk->getLocalColumns()[0]),
64
-                    $connection->quoteIdentifier($fk->getForeignTableName()),
65
-                    $connection->quoteIdentifier($fk->getForeignColumns()[0])
66
-                );
67
-            }
68
-
69
-            $childrenFks = $this->getChildrenRelationshipForeignKeys($this->mainTable);
70
-            foreach ($childrenFks as $fk) {
71
-                $joinSql .= sprintf(' LEFT JOIN %s ON (%s.%s = %s.%s)',
72
-                    $connection->quoteIdentifier($fk->getLocalTableName()),
73
-                    $connection->quoteIdentifier($fk->getForeignTableName()),
74
-                    $connection->quoteIdentifier($fk->getForeignColumns()[0]),
75
-                    $connection->quoteIdentifier($fk->getLocalTableName()),
76
-                    $connection->quoteIdentifier($fk->getLocalColumns()[0])
77
-                );
78
-            }
79
-
80
-            $sql .= $joinSql;
81
-        }
82
-
83
-        if (!empty($this->filterString)) {
84
-            $sql .= ' WHERE '.$this->filterString;
85
-            $countSql .= ' WHERE '.$this->filterString;
86
-        }
87
-
88
-        if (!empty($orderString)) {
89
-            $sql .= ' ORDER BY '.$orderString;
90
-        }
91
-
92
-        if (stripos($countSql, 'GROUP BY') !== false) {
93
-            throw new TDBMException('Unsupported use of GROUP BY in SQL request.');
94
-        }
95
-
96
-        $this->magicSql = $sql;
97
-        $this->magicSqlCount = $countSql;
98
-        $this->columnDescList = $columnDescList;
99
-    }
100
-
101
-    /**
102
-     * @param string $tableName
103
-     *
104
-     * @return ForeignKeyConstraint[]
105
-     */
106
-    private function getParentRelationshipForeignKeys($tableName)
107
-    {
108
-        return $this->fromCache($this->cachePrefix.'_parentrelationshipfks_'.$tableName, function () use ($tableName) {
109
-            return $this->getParentRelationshipForeignKeysWithoutCache($tableName);
110
-        });
111
-    }
112
-
113
-    /**
114
-     * @param string $tableName
115
-     *
116
-     * @return ForeignKeyConstraint[]
117
-     */
118
-    private function getParentRelationshipForeignKeysWithoutCache($tableName)
119
-    {
120
-        $parentFks = [];
121
-        $currentTable = $tableName;
122
-        while ($currentFk = $this->schemaAnalyzer->getParentRelationship($currentTable)) {
123
-            $currentTable = $currentFk->getForeignTableName();
124
-            $parentFks[] = $currentFk;
125
-        }
126
-
127
-        return $parentFks;
128
-    }
129
-
130
-    /**
131
-     * @param string $tableName
132
-     *
133
-     * @return ForeignKeyConstraint[]
134
-     */
135
-    private function getChildrenRelationshipForeignKeys(string $tableName) : array
136
-    {
137
-        return $this->fromCache($this->cachePrefix.'_childrenrelationshipfks_'.$tableName, function () use ($tableName) {
138
-            return $this->getChildrenRelationshipForeignKeysWithoutCache($tableName);
139
-        });
140
-    }
141
-
142
-    /**
143
-     * @param string $tableName
144
-     *
145
-     * @return ForeignKeyConstraint[]
146
-     */
147
-    private function getChildrenRelationshipForeignKeysWithoutCache(string $tableName) : array
148
-    {
149
-        $children = $this->schemaAnalyzer->getChildrenRelationships($tableName);
150
-
151
-        if (!empty($children)) {
152
-            $fksTables = array_map(function (ForeignKeyConstraint $fk) {
153
-                return $this->getChildrenRelationshipForeignKeys($fk->getLocalTableName());
154
-            }, $children);
155
-
156
-            $fks = array_merge($children, call_user_func_array('array_merge', $fksTables));
157
-
158
-            return $fks;
159
-        } else {
160
-            return [];
161
-        }
162
-    }
163
-
164
-    /**
165
-     * Returns an item from cache or computes it using $closure and puts it in cache.
166
-     *
167
-     * @param string   $key
168
-     * @param callable $closure
169
-     *
170
-     * @return mixed
171
-     */
172
-    protected function fromCache(string $key, callable $closure)
173
-    {
174
-        $item = $this->cache->fetch($key);
175
-        if ($item === false) {
176
-            $item = $closure();
177
-            $this->cache->save($key, $item);
178
-        }
179
-
180
-        return $item;
181
-    }
18
+	private $mainTable;
19
+	private $from;
20
+	private $filterString;
21
+	private $cache;
22
+	private $cachePrefix;
23
+
24
+	public function __construct(string $mainTable, string $from, $filterString, $orderBy, TDBMService $tdbmService, Schema $schema, OrderByAnalyzer $orderByAnalyzer, SchemaAnalyzer $schemaAnalyzer, Cache $cache, string $cachePrefix)
25
+	{
26
+		parent::__construct($tdbmService, $schema, $orderByAnalyzer, $orderBy);
27
+		$this->mainTable = $mainTable;
28
+		$this->from = $from;
29
+		$this->filterString = $filterString;
30
+		$this->schemaAnalyzer = $schemaAnalyzer;
31
+		$this->cache = $cache;
32
+		$this->cachePrefix = $cachePrefix;
33
+	}
34
+
35
+	protected function compute()
36
+	{
37
+		$connection = $this->tdbmService->getConnection();
38
+
39
+		$columnsList = null;
40
+
41
+		$allFetchedTables = $this->tdbmService->_getRelatedTablesByInheritance($this->mainTable);
42
+
43
+		list($columnDescList, $columnsList, $orderString) = $this->getColumnsList($this->mainTable, [], $this->orderBy);
44
+
45
+		$sql = 'SELECT DISTINCT '.implode(', ', $columnsList).' FROM '.$this->from;
46
+
47
+		// Let's compute the COUNT.
48
+		$pkColumnNames = $this->schema->getTable($this->mainTable)->getPrimaryKeyColumns();
49
+		$pkColumnNames = array_map(function ($pkColumn) {
50
+			return $this->tdbmService->getConnection()->quoteIdentifier($this->mainTable).'.'.$this->tdbmService->getConnection()->quoteIdentifier($pkColumn);
51
+		}, $pkColumnNames);
52
+
53
+		$countSql = 'SELECT COUNT(DISTINCT '.implode(', ', $pkColumnNames).') FROM '.$this->from;
54
+
55
+		// Add joins on inherited tables if necessary
56
+		if (count($allFetchedTables) > 1) {
57
+			$joinSql = '';
58
+			$parentFks = $this->getParentRelationshipForeignKeys($this->mainTable);
59
+			foreach ($parentFks as $fk) {
60
+				$joinSql .= sprintf(' JOIN %s ON (%s.%s = %s.%s)',
61
+					$connection->quoteIdentifier($fk->getForeignTableName()),
62
+					$connection->quoteIdentifier($fk->getLocalTableName()),
63
+					$connection->quoteIdentifier($fk->getLocalColumns()[0]),
64
+					$connection->quoteIdentifier($fk->getForeignTableName()),
65
+					$connection->quoteIdentifier($fk->getForeignColumns()[0])
66
+				);
67
+			}
68
+
69
+			$childrenFks = $this->getChildrenRelationshipForeignKeys($this->mainTable);
70
+			foreach ($childrenFks as $fk) {
71
+				$joinSql .= sprintf(' LEFT JOIN %s ON (%s.%s = %s.%s)',
72
+					$connection->quoteIdentifier($fk->getLocalTableName()),
73
+					$connection->quoteIdentifier($fk->getForeignTableName()),
74
+					$connection->quoteIdentifier($fk->getForeignColumns()[0]),
75
+					$connection->quoteIdentifier($fk->getLocalTableName()),
76
+					$connection->quoteIdentifier($fk->getLocalColumns()[0])
77
+				);
78
+			}
79
+
80
+			$sql .= $joinSql;
81
+		}
82
+
83
+		if (!empty($this->filterString)) {
84
+			$sql .= ' WHERE '.$this->filterString;
85
+			$countSql .= ' WHERE '.$this->filterString;
86
+		}
87
+
88
+		if (!empty($orderString)) {
89
+			$sql .= ' ORDER BY '.$orderString;
90
+		}
91
+
92
+		if (stripos($countSql, 'GROUP BY') !== false) {
93
+			throw new TDBMException('Unsupported use of GROUP BY in SQL request.');
94
+		}
95
+
96
+		$this->magicSql = $sql;
97
+		$this->magicSqlCount = $countSql;
98
+		$this->columnDescList = $columnDescList;
99
+	}
100
+
101
+	/**
102
+	 * @param string $tableName
103
+	 *
104
+	 * @return ForeignKeyConstraint[]
105
+	 */
106
+	private function getParentRelationshipForeignKeys($tableName)
107
+	{
108
+		return $this->fromCache($this->cachePrefix.'_parentrelationshipfks_'.$tableName, function () use ($tableName) {
109
+			return $this->getParentRelationshipForeignKeysWithoutCache($tableName);
110
+		});
111
+	}
112
+
113
+	/**
114
+	 * @param string $tableName
115
+	 *
116
+	 * @return ForeignKeyConstraint[]
117
+	 */
118
+	private function getParentRelationshipForeignKeysWithoutCache($tableName)
119
+	{
120
+		$parentFks = [];
121
+		$currentTable = $tableName;
122
+		while ($currentFk = $this->schemaAnalyzer->getParentRelationship($currentTable)) {
123
+			$currentTable = $currentFk->getForeignTableName();
124
+			$parentFks[] = $currentFk;
125
+		}
126
+
127
+		return $parentFks;
128
+	}
129
+
130
+	/**
131
+	 * @param string $tableName
132
+	 *
133
+	 * @return ForeignKeyConstraint[]
134
+	 */
135
+	private function getChildrenRelationshipForeignKeys(string $tableName) : array
136
+	{
137
+		return $this->fromCache($this->cachePrefix.'_childrenrelationshipfks_'.$tableName, function () use ($tableName) {
138
+			return $this->getChildrenRelationshipForeignKeysWithoutCache($tableName);
139
+		});
140
+	}
141
+
142
+	/**
143
+	 * @param string $tableName
144
+	 *
145
+	 * @return ForeignKeyConstraint[]
146
+	 */
147
+	private function getChildrenRelationshipForeignKeysWithoutCache(string $tableName) : array
148
+	{
149
+		$children = $this->schemaAnalyzer->getChildrenRelationships($tableName);
150
+
151
+		if (!empty($children)) {
152
+			$fksTables = array_map(function (ForeignKeyConstraint $fk) {
153
+				return $this->getChildrenRelationshipForeignKeys($fk->getLocalTableName());
154
+			}, $children);
155
+
156
+			$fks = array_merge($children, call_user_func_array('array_merge', $fksTables));
157
+
158
+			return $fks;
159
+		} else {
160
+			return [];
161
+		}
162
+	}
163
+
164
+	/**
165
+	 * Returns an item from cache or computes it using $closure and puts it in cache.
166
+	 *
167
+	 * @param string   $key
168
+	 * @param callable $closure
169
+	 *
170
+	 * @return mixed
171
+	 */
172
+	protected function fromCache(string $key, callable $closure)
173
+	{
174
+		$item = $this->cache->fetch($key);
175
+		if ($item === false) {
176
+			$item = $closure();
177
+			$this->cache->save($key, $item);
178
+		}
179
+
180
+		return $item;
181
+	}
182 182
 }
Please login to merge, or discard this patch.
src/Mouf/Database/TDBM/InnerResultIterator.php 1 patch
Indentation   +267 added lines, -267 removed lines patch added patch discarded remove patch
@@ -29,271 +29,271 @@
 block discarded – undo
29 29
  */
30 30
 class InnerResultIterator implements \Iterator, \Countable, \ArrayAccess
31 31
 {
32
-    /**
33
-     * @var Statement
34
-     */
35
-    protected $statement;
36
-
37
-    protected $fetchStarted = false;
38
-    private $objectStorage;
39
-    private $className;
40
-
41
-    private $tdbmService;
42
-    private $magicSql;
43
-    private $parameters;
44
-    private $limit;
45
-    private $offset;
46
-    private $columnDescriptors;
47
-    private $magicQuery;
48
-
49
-    /**
50
-     * The key of the current retrieved object.
51
-     *
52
-     * @var int
53
-     */
54
-    protected $key = -1;
55
-
56
-    protected $current = null;
57
-
58
-    private $databasePlatform;
59
-
60
-    /**
61
-     * @var LoggerInterface
62
-     */
63
-    private $logger;
64
-
65
-    public function __construct($magicSql, array $parameters, $limit, $offset, array $columnDescriptors, $objectStorage, $className, TDBMService $tdbmService, MagicQuery $magicQuery, LoggerInterface $logger)
66
-    {
67
-        $this->magicSql = $magicSql;
68
-        $this->objectStorage = $objectStorage;
69
-        $this->className = $className;
70
-        $this->tdbmService = $tdbmService;
71
-        $this->parameters = $parameters;
72
-        $this->limit = $limit;
73
-        $this->offset = $offset;
74
-        $this->columnDescriptors = $columnDescriptors;
75
-        $this->magicQuery = $magicQuery;
76
-        $this->databasePlatform = $this->tdbmService->getConnection()->getDatabasePlatform();
77
-        $this->logger = $logger;
78
-    }
79
-
80
-    protected function executeQuery()
81
-    {
82
-        $sql = $this->magicQuery->build($this->magicSql, $this->parameters);
83
-        $sql = $this->tdbmService->getConnection()->getDatabasePlatform()->modifyLimitQuery($sql, $this->limit, $this->offset);
84
-
85
-        $this->logger->debug('Running SQL request: '.$sql);
86
-
87
-        $this->statement = $this->tdbmService->getConnection()->executeQuery($sql, $this->parameters);
88
-
89
-        $this->fetchStarted = true;
90
-    }
91
-
92
-    /**
93
-     * Counts found records (this is the number of records fetched, taking into account the LIMIT and OFFSET settings).
94
-     *
95
-     * @return int
96
-     */
97
-    public function count()
98
-    {
99
-        if (!$this->fetchStarted) {
100
-            $this->executeQuery();
101
-        }
102
-
103
-        return $this->statement->rowCount();
104
-    }
105
-
106
-    /**
107
-     * Fetches record at current cursor.
108
-     *
109
-     * @return AbstractTDBMObject|null
110
-     */
111
-    public function current()
112
-    {
113
-        return $this->current;
114
-    }
115
-
116
-    /**
117
-     * Returns the current result's key.
118
-     *
119
-     * @return int
120
-     */
121
-    public function key()
122
-    {
123
-        return $this->key;
124
-    }
125
-
126
-    /**
127
-     * Advances the cursor to the next result.
128
-     * Casts the database result into one (or several) beans.
129
-     */
130
-    public function next()
131
-    {
132
-        $row = $this->statement->fetch(\PDO::FETCH_LAZY);
133
-        if ($row) {
134
-
135
-            // array<tablegroup, array<table, array<column, value>>>
136
-            $beansData = [];
137
-            foreach ($row as $key => $value) {
138
-                if (!isset($this->columnDescriptors[$key])) {
139
-                    continue;
140
-                }
141
-
142
-                $columnDescriptor = $this->columnDescriptors[$key];
143
-
144
-                if ($columnDescriptor['tableGroup'] === null) {
145
-                    // A column can have no tableGroup (if it comes from an ORDER BY expression)
146
-                    continue;
147
-                }
148
-
149
-                // Let's cast the value according to its type
150
-                $value = $columnDescriptor['type']->convertToPHPValue($value, $this->databasePlatform);
151
-
152
-                $beansData[$columnDescriptor['tableGroup']][$columnDescriptor['table']][$columnDescriptor['column']] = $value;
153
-            }
154
-
155
-            $reflectionClassCache = [];
156
-            $firstBean = true;
157
-            foreach ($beansData as $beanData) {
158
-
159
-                // Let's find the bean class name associated to the bean.
160
-
161
-                list($actualClassName, $mainBeanTableName, $tablesUsed) = $this->tdbmService->_getClassNameFromBeanData($beanData);
162
-
163
-                if ($this->className !== null) {
164
-                    $actualClassName = $this->className;
165
-                }
166
-
167
-                // Let's filter out the beanData that is not used (because it belongs to a part of the hierarchy that is not fetched:
168
-                foreach ($beanData as $tableName => $descriptors) {
169
-                    if (!in_array($tableName, $tablesUsed)) {
170
-                        unset($beanData[$tableName]);
171
-                    }
172
-                }
173
-
174
-                // Must we create the bean? Let's see in the cache if we have a mapping DbRow?
175
-                // Let's get the first object mapping a row:
176
-                // We do this loop only for the first table
177
-
178
-                $primaryKeys = $this->tdbmService->_getPrimaryKeysFromObjectData($mainBeanTableName, $beanData[$mainBeanTableName]);
179
-                $hash = $this->tdbmService->getObjectHash($primaryKeys);
180
-
181
-                if ($this->objectStorage->has($mainBeanTableName, $hash)) {
182
-                    $dbRow = $this->objectStorage->get($mainBeanTableName, $hash);
183
-                    $bean = $dbRow->getTDBMObject();
184
-                } else {
185
-                    // Let's construct the bean
186
-                    if (!isset($reflectionClassCache[$actualClassName])) {
187
-                        $reflectionClassCache[$actualClassName] = new \ReflectionClass($actualClassName);
188
-                    }
189
-                    // Let's bypass the constructor when creating the bean!
190
-                    $bean = $reflectionClassCache[$actualClassName]->newInstanceWithoutConstructor();
191
-                    $bean->_constructFromData($beanData, $this->tdbmService);
192
-                }
193
-
194
-                // The first bean is the one containing the main table.
195
-                if ($firstBean) {
196
-                    $firstBean = false;
197
-                    $this->current = $bean;
198
-                }
199
-            }
200
-
201
-            ++$this->key;
202
-        } else {
203
-            $this->current = null;
204
-        }
205
-    }
206
-
207
-    /**
208
-     * Moves the cursor to the beginning of the result set.
209
-     */
210
-    public function rewind()
211
-    {
212
-        $this->executeQuery();
213
-        $this->key = -1;
214
-        $this->next();
215
-    }
216
-    /**
217
-     * Checks if the cursor is reading a valid result.
218
-     *
219
-     * @return bool
220
-     */
221
-    public function valid()
222
-    {
223
-        return $this->current !== null;
224
-    }
225
-
226
-    /**
227
-     * Whether a offset exists.
228
-     *
229
-     * @link http://php.net/manual/en/arrayaccess.offsetexists.php
230
-     *
231
-     * @param mixed $offset <p>
232
-     *                      An offset to check for.
233
-     *                      </p>
234
-     *
235
-     * @return bool true on success or false on failure.
236
-     *              </p>
237
-     *              <p>
238
-     *              The return value will be casted to boolean if non-boolean was returned
239
-     *
240
-     * @since 5.0.0
241
-     */
242
-    public function offsetExists($offset)
243
-    {
244
-        throw new TDBMInvalidOperationException('You cannot access this result set via index because it was fetched in CURSOR mode. Use ARRAY_MODE instead.');
245
-    }
246
-
247
-    /**
248
-     * Offset to retrieve.
249
-     *
250
-     * @link http://php.net/manual/en/arrayaccess.offsetget.php
251
-     *
252
-     * @param mixed $offset <p>
253
-     *                      The offset to retrieve.
254
-     *                      </p>
255
-     *
256
-     * @return mixed Can return all value types
257
-     *
258
-     * @since 5.0.0
259
-     */
260
-    public function offsetGet($offset)
261
-    {
262
-        throw new TDBMInvalidOperationException('You cannot access this result set via index because it was fetched in CURSOR mode. Use ARRAY_MODE instead.');
263
-    }
264
-
265
-    /**
266
-     * Offset to set.
267
-     *
268
-     * @link http://php.net/manual/en/arrayaccess.offsetset.php
269
-     *
270
-     * @param mixed $offset <p>
271
-     *                      The offset to assign the value to.
272
-     *                      </p>
273
-     * @param mixed $value  <p>
274
-     *                      The value to set.
275
-     *                      </p>
276
-     *
277
-     * @since 5.0.0
278
-     */
279
-    public function offsetSet($offset, $value)
280
-    {
281
-        throw new TDBMInvalidOperationException('You can set values in a TDBM result set.');
282
-    }
283
-
284
-    /**
285
-     * Offset to unset.
286
-     *
287
-     * @link http://php.net/manual/en/arrayaccess.offsetunset.php
288
-     *
289
-     * @param mixed $offset <p>
290
-     *                      The offset to unset.
291
-     *                      </p>
292
-     *
293
-     * @since 5.0.0
294
-     */
295
-    public function offsetUnset($offset)
296
-    {
297
-        throw new TDBMInvalidOperationException('You can unset values in a TDBM result set.');
298
-    }
32
+	/**
33
+	 * @var Statement
34
+	 */
35
+	protected $statement;
36
+
37
+	protected $fetchStarted = false;
38
+	private $objectStorage;
39
+	private $className;
40
+
41
+	private $tdbmService;
42
+	private $magicSql;
43
+	private $parameters;
44
+	private $limit;
45
+	private $offset;
46
+	private $columnDescriptors;
47
+	private $magicQuery;
48
+
49
+	/**
50
+	 * The key of the current retrieved object.
51
+	 *
52
+	 * @var int
53
+	 */
54
+	protected $key = -1;
55
+
56
+	protected $current = null;
57
+
58
+	private $databasePlatform;
59
+
60
+	/**
61
+	 * @var LoggerInterface
62
+	 */
63
+	private $logger;
64
+
65
+	public function __construct($magicSql, array $parameters, $limit, $offset, array $columnDescriptors, $objectStorage, $className, TDBMService $tdbmService, MagicQuery $magicQuery, LoggerInterface $logger)
66
+	{
67
+		$this->magicSql = $magicSql;
68
+		$this->objectStorage = $objectStorage;
69
+		$this->className = $className;
70
+		$this->tdbmService = $tdbmService;
71
+		$this->parameters = $parameters;
72
+		$this->limit = $limit;
73
+		$this->offset = $offset;
74
+		$this->columnDescriptors = $columnDescriptors;
75
+		$this->magicQuery = $magicQuery;
76
+		$this->databasePlatform = $this->tdbmService->getConnection()->getDatabasePlatform();
77
+		$this->logger = $logger;
78
+	}
79
+
80
+	protected function executeQuery()
81
+	{
82
+		$sql = $this->magicQuery->build($this->magicSql, $this->parameters);
83
+		$sql = $this->tdbmService->getConnection()->getDatabasePlatform()->modifyLimitQuery($sql, $this->limit, $this->offset);
84
+
85
+		$this->logger->debug('Running SQL request: '.$sql);
86
+
87
+		$this->statement = $this->tdbmService->getConnection()->executeQuery($sql, $this->parameters);
88
+
89
+		$this->fetchStarted = true;
90
+	}
91
+
92
+	/**
93
+	 * Counts found records (this is the number of records fetched, taking into account the LIMIT and OFFSET settings).
94
+	 *
95
+	 * @return int
96
+	 */
97
+	public function count()
98
+	{
99
+		if (!$this->fetchStarted) {
100
+			$this->executeQuery();
101
+		}
102
+
103
+		return $this->statement->rowCount();
104
+	}
105
+
106
+	/**
107
+	 * Fetches record at current cursor.
108
+	 *
109
+	 * @return AbstractTDBMObject|null
110
+	 */
111
+	public function current()
112
+	{
113
+		return $this->current;
114
+	}
115
+
116
+	/**
117
+	 * Returns the current result's key.
118
+	 *
119
+	 * @return int
120
+	 */
121
+	public function key()
122
+	{
123
+		return $this->key;
124
+	}
125
+
126
+	/**
127
+	 * Advances the cursor to the next result.
128
+	 * Casts the database result into one (or several) beans.
129
+	 */
130
+	public function next()
131
+	{
132
+		$row = $this->statement->fetch(\PDO::FETCH_LAZY);
133
+		if ($row) {
134
+
135
+			// array<tablegroup, array<table, array<column, value>>>
136
+			$beansData = [];
137
+			foreach ($row as $key => $value) {
138
+				if (!isset($this->columnDescriptors[$key])) {
139
+					continue;
140
+				}
141
+
142
+				$columnDescriptor = $this->columnDescriptors[$key];
143
+
144
+				if ($columnDescriptor['tableGroup'] === null) {
145
+					// A column can have no tableGroup (if it comes from an ORDER BY expression)
146
+					continue;
147
+				}
148
+
149
+				// Let's cast the value according to its type
150
+				$value = $columnDescriptor['type']->convertToPHPValue($value, $this->databasePlatform);
151
+
152
+				$beansData[$columnDescriptor['tableGroup']][$columnDescriptor['table']][$columnDescriptor['column']] = $value;
153
+			}
154
+
155
+			$reflectionClassCache = [];
156
+			$firstBean = true;
157
+			foreach ($beansData as $beanData) {
158
+
159
+				// Let's find the bean class name associated to the bean.
160
+
161
+				list($actualClassName, $mainBeanTableName, $tablesUsed) = $this->tdbmService->_getClassNameFromBeanData($beanData);
162
+
163
+				if ($this->className !== null) {
164
+					$actualClassName = $this->className;
165
+				}
166
+
167
+				// Let's filter out the beanData that is not used (because it belongs to a part of the hierarchy that is not fetched:
168
+				foreach ($beanData as $tableName => $descriptors) {
169
+					if (!in_array($tableName, $tablesUsed)) {
170
+						unset($beanData[$tableName]);
171
+					}
172
+				}
173
+
174
+				// Must we create the bean? Let's see in the cache if we have a mapping DbRow?
175
+				// Let's get the first object mapping a row:
176
+				// We do this loop only for the first table
177
+
178
+				$primaryKeys = $this->tdbmService->_getPrimaryKeysFromObjectData($mainBeanTableName, $beanData[$mainBeanTableName]);
179
+				$hash = $this->tdbmService->getObjectHash($primaryKeys);
180
+
181
+				if ($this->objectStorage->has($mainBeanTableName, $hash)) {
182
+					$dbRow = $this->objectStorage->get($mainBeanTableName, $hash);
183
+					$bean = $dbRow->getTDBMObject();
184
+				} else {
185
+					// Let's construct the bean
186
+					if (!isset($reflectionClassCache[$actualClassName])) {
187
+						$reflectionClassCache[$actualClassName] = new \ReflectionClass($actualClassName);
188
+					}
189
+					// Let's bypass the constructor when creating the bean!
190
+					$bean = $reflectionClassCache[$actualClassName]->newInstanceWithoutConstructor();
191
+					$bean->_constructFromData($beanData, $this->tdbmService);
192
+				}
193
+
194
+				// The first bean is the one containing the main table.
195
+				if ($firstBean) {
196
+					$firstBean = false;
197
+					$this->current = $bean;
198
+				}
199
+			}
200
+
201
+			++$this->key;
202
+		} else {
203
+			$this->current = null;
204
+		}
205
+	}
206
+
207
+	/**
208
+	 * Moves the cursor to the beginning of the result set.
209
+	 */
210
+	public function rewind()
211
+	{
212
+		$this->executeQuery();
213
+		$this->key = -1;
214
+		$this->next();
215
+	}
216
+	/**
217
+	 * Checks if the cursor is reading a valid result.
218
+	 *
219
+	 * @return bool
220
+	 */
221
+	public function valid()
222
+	{
223
+		return $this->current !== null;
224
+	}
225
+
226
+	/**
227
+	 * Whether a offset exists.
228
+	 *
229
+	 * @link http://php.net/manual/en/arrayaccess.offsetexists.php
230
+	 *
231
+	 * @param mixed $offset <p>
232
+	 *                      An offset to check for.
233
+	 *                      </p>
234
+	 *
235
+	 * @return bool true on success or false on failure.
236
+	 *              </p>
237
+	 *              <p>
238
+	 *              The return value will be casted to boolean if non-boolean was returned
239
+	 *
240
+	 * @since 5.0.0
241
+	 */
242
+	public function offsetExists($offset)
243
+	{
244
+		throw new TDBMInvalidOperationException('You cannot access this result set via index because it was fetched in CURSOR mode. Use ARRAY_MODE instead.');
245
+	}
246
+
247
+	/**
248
+	 * Offset to retrieve.
249
+	 *
250
+	 * @link http://php.net/manual/en/arrayaccess.offsetget.php
251
+	 *
252
+	 * @param mixed $offset <p>
253
+	 *                      The offset to retrieve.
254
+	 *                      </p>
255
+	 *
256
+	 * @return mixed Can return all value types
257
+	 *
258
+	 * @since 5.0.0
259
+	 */
260
+	public function offsetGet($offset)
261
+	{
262
+		throw new TDBMInvalidOperationException('You cannot access this result set via index because it was fetched in CURSOR mode. Use ARRAY_MODE instead.');
263
+	}
264
+
265
+	/**
266
+	 * Offset to set.
267
+	 *
268
+	 * @link http://php.net/manual/en/arrayaccess.offsetset.php
269
+	 *
270
+	 * @param mixed $offset <p>
271
+	 *                      The offset to assign the value to.
272
+	 *                      </p>
273
+	 * @param mixed $value  <p>
274
+	 *                      The value to set.
275
+	 *                      </p>
276
+	 *
277
+	 * @since 5.0.0
278
+	 */
279
+	public function offsetSet($offset, $value)
280
+	{
281
+		throw new TDBMInvalidOperationException('You can set values in a TDBM result set.');
282
+	}
283
+
284
+	/**
285
+	 * Offset to unset.
286
+	 *
287
+	 * @link http://php.net/manual/en/arrayaccess.offsetunset.php
288
+	 *
289
+	 * @param mixed $offset <p>
290
+	 *                      The offset to unset.
291
+	 *                      </p>
292
+	 *
293
+	 * @since 5.0.0
294
+	 */
295
+	public function offsetUnset($offset)
296
+	{
297
+		throw new TDBMInvalidOperationException('You can unset values in a TDBM result set.');
298
+	}
299 299
 }
Please login to merge, or discard this patch.
src/Mouf/Database/TDBM/QueryFactory/FindObjectsFromRawSqlQueryFactory.php 1 patch
Indentation   +223 added lines, -223 removed lines patch added patch discarded remove patch
@@ -16,252 +16,252 @@
 block discarded – undo
16 16
  */
17 17
 class FindObjectsFromRawSqlQueryFactory implements QueryFactory
18 18
 {
19
-    /**
20
-     * @var array[]
21
-     */
22
-    protected $columnDescriptors;
23
-    /**
24
-     * @var Schema
25
-     */
26
-    private $schema;
27
-    /**
28
-     * @var string
29
-     */
30
-    private $sql;
31
-    /**
32
-     * @var string
33
-     */
34
-    private $sqlCount;
35
-    /**
36
-     * @var string
37
-     */
38
-    private $processedSql;
39
-    /**
40
-     * @var string
41
-     */
42
-    private $processedSqlCount;
43
-    /**
44
-     * @var TDBMService
45
-     */
46
-    private $tdbmService;
47
-    /**
48
-     * @var string
49
-     */
50
-    private $mainTable;
19
+	/**
20
+	 * @var array[]
21
+	 */
22
+	protected $columnDescriptors;
23
+	/**
24
+	 * @var Schema
25
+	 */
26
+	private $schema;
27
+	/**
28
+	 * @var string
29
+	 */
30
+	private $sql;
31
+	/**
32
+	 * @var string
33
+	 */
34
+	private $sqlCount;
35
+	/**
36
+	 * @var string
37
+	 */
38
+	private $processedSql;
39
+	/**
40
+	 * @var string
41
+	 */
42
+	private $processedSqlCount;
43
+	/**
44
+	 * @var TDBMService
45
+	 */
46
+	private $tdbmService;
47
+	/**
48
+	 * @var string
49
+	 */
50
+	private $mainTable;
51 51
 
52
-    /**
53
-     * FindObjectsFromRawSqlQueryFactory constructor.
54
-     * @param TDBMService $tdbmService
55
-     * @param Schema $schema
56
-     * @param string $mainTable
57
-     * @param string $sql
58
-     * @param string $sqlCount
59
-     */
60
-    public function __construct(TDBMService $tdbmService, Schema $schema, string $mainTable, string $sql, string $sqlCount = null)
61
-    {
62
-        $this->sql = $sql;
63
-        $this->sqlCount = $sqlCount;
64
-        $this->tdbmService = $tdbmService;
65
-        $this->schema = $schema;
66
-        $this->mainTable = $mainTable;
52
+	/**
53
+	 * FindObjectsFromRawSqlQueryFactory constructor.
54
+	 * @param TDBMService $tdbmService
55
+	 * @param Schema $schema
56
+	 * @param string $mainTable
57
+	 * @param string $sql
58
+	 * @param string $sqlCount
59
+	 */
60
+	public function __construct(TDBMService $tdbmService, Schema $schema, string $mainTable, string $sql, string $sqlCount = null)
61
+	{
62
+		$this->sql = $sql;
63
+		$this->sqlCount = $sqlCount;
64
+		$this->tdbmService = $tdbmService;
65
+		$this->schema = $schema;
66
+		$this->mainTable = $mainTable;
67 67
 
68
-        $this->compute();
69
-    }
68
+		$this->compute();
69
+	}
70 70
 
71
-    public function sort($orderBy)
72
-    {
73
-        throw new TDBMException('sort not supported for raw sql queries');
74
-    }
71
+	public function sort($orderBy)
72
+	{
73
+		throw new TDBMException('sort not supported for raw sql queries');
74
+	}
75 75
 
76
-    public function getMagicSql(): string
77
-    {
78
-        return $this->processedSql;
79
-    }
76
+	public function getMagicSql(): string
77
+	{
78
+		return $this->processedSql;
79
+	}
80 80
 
81
-    public function getMagicSqlCount(): string
82
-    {
83
-        return $this->processedSqlCount;
84
-    }
81
+	public function getMagicSqlCount(): string
82
+	{
83
+		return $this->processedSqlCount;
84
+	}
85 85
 
86
-    public function getColumnDescriptors(): array
87
-    {
88
-        return $this->columnDescriptors;
89
-    }
86
+	public function getColumnDescriptors(): array
87
+	{
88
+		return $this->columnDescriptors;
89
+	}
90 90
 
91
-    protected function compute()
92
-    {
93
-        $parser = new PHPSQLParser();
94
-        $generator = new PHPSQLCreator();
95
-        $parsedSql = $parser->parse($this->sql);
91
+	protected function compute()
92
+	{
93
+		$parser = new PHPSQLParser();
94
+		$generator = new PHPSQLCreator();
95
+		$parsedSql = $parser->parse($this->sql);
96 96
 
97
-        // 1: let's reformat the SELECT and construct our columns
98
-        list($select, $columnDescriptors) = $this->formatSelect($parsedSql['SELECT']);
99
-        $parsedSql['SELECT'] = $select;
100
-        $this->processedSql = $generator->create($parsedSql);
101
-        $this->columnDescriptors = $columnDescriptors;
97
+		// 1: let's reformat the SELECT and construct our columns
98
+		list($select, $columnDescriptors) = $this->formatSelect($parsedSql['SELECT']);
99
+		$parsedSql['SELECT'] = $select;
100
+		$this->processedSql = $generator->create($parsedSql);
101
+		$this->columnDescriptors = $columnDescriptors;
102 102
 
103
-        // 2: let's compute the count query if needed
104
-        if ($this->sqlCount === null) {
105
-            $parsedSqlCount = $this->generateParsedSqlCount($parsedSql);
106
-            $this->processedSqlCount = $generator->create($parsedSqlCount);
107
-        } else {
108
-            $this->processedSqlCount = $this->sqlCount;
109
-        }
110
-    }
103
+		// 2: let's compute the count query if needed
104
+		if ($this->sqlCount === null) {
105
+			$parsedSqlCount = $this->generateParsedSqlCount($parsedSql);
106
+			$this->processedSqlCount = $generator->create($parsedSqlCount);
107
+		} else {
108
+			$this->processedSqlCount = $this->sqlCount;
109
+		}
110
+	}
111 111
 
112
-    private function formatSelect($baseSelect)
113
-    {
114
-        $relatedTables = $this->tdbmService->_getRelatedTablesByInheritance($this->mainTable);
115
-        $tableGroup = $this->getTableGroupName($relatedTables);
112
+	private function formatSelect($baseSelect)
113
+	{
114
+		$relatedTables = $this->tdbmService->_getRelatedTablesByInheritance($this->mainTable);
115
+		$tableGroup = $this->getTableGroupName($relatedTables);
116 116
 
117
-        $connection = $this->tdbmService->getConnection();
118
-        $formattedSelect = [];
119
-        $columnDescritors = [];
120
-        $fetchedTables = [];
117
+		$connection = $this->tdbmService->getConnection();
118
+		$formattedSelect = [];
119
+		$columnDescritors = [];
120
+		$fetchedTables = [];
121 121
 
122
-        foreach ($baseSelect as $entry) {
123
-            if ($entry['expr_type'] !== 'colref') {
124
-                $formattedSelect[] = $entry;
125
-                continue;
126
-            }
122
+		foreach ($baseSelect as $entry) {
123
+			if ($entry['expr_type'] !== 'colref') {
124
+				$formattedSelect[] = $entry;
125
+				continue;
126
+			}
127 127
 
128
-            $noQuotes = $entry['no_quotes'];
129
-            if ($noQuotes['delim'] != '.' || count($noQuotes['parts']) !== 2) {
130
-                $formattedSelect[] = $entry;
131
-                continue;
132
-            }
128
+			$noQuotes = $entry['no_quotes'];
129
+			if ($noQuotes['delim'] != '.' || count($noQuotes['parts']) !== 2) {
130
+				$formattedSelect[] = $entry;
131
+				continue;
132
+			}
133 133
 
134
-            $tableName = $noQuotes['parts'][0];
135
-            if (!in_array($tableName, $relatedTables)) {
136
-                $formattedSelect[] = $entry;
137
-                continue;
138
-            }
134
+			$tableName = $noQuotes['parts'][0];
135
+			if (!in_array($tableName, $relatedTables)) {
136
+				$formattedSelect[] = $entry;
137
+				continue;
138
+			}
139 139
 
140
-            $columnName = $noQuotes['parts'][1];
141
-            if ($columnName !== '*') {
142
-                $formattedSelect[] = $entry;
143
-                continue;
144
-            }
140
+			$columnName = $noQuotes['parts'][1];
141
+			if ($columnName !== '*') {
142
+				$formattedSelect[] = $entry;
143
+				continue;
144
+			}
145 145
 
146
-            $table = $this->schema->getTable($tableName);
147
-            foreach ($table->getColumns() as $column) {
148
-                $columnName = $column->getName();
149
-                $alias = "{$tableName}____{$columnName}";
150
-                $formattedSelect[] = [
151
-                    'expr_type' => 'colref',
152
-                    'base_expr' => $connection->quoteIdentifier($tableName).'.'.$connection->quoteIdentifier($columnName),
153
-                    'no_quotes' => [
154
-                        'delim' => '.',
155
-                        'parts' => [
156
-                            $tableName,
157
-                            $columnName
158
-                        ]
159
-                    ],
160
-                    'alias' => [
161
-                        'as' => true,
162
-                        'name' => $alias,
163
-                    ]
164
-                ];
146
+			$table = $this->schema->getTable($tableName);
147
+			foreach ($table->getColumns() as $column) {
148
+				$columnName = $column->getName();
149
+				$alias = "{$tableName}____{$columnName}";
150
+				$formattedSelect[] = [
151
+					'expr_type' => 'colref',
152
+					'base_expr' => $connection->quoteIdentifier($tableName).'.'.$connection->quoteIdentifier($columnName),
153
+					'no_quotes' => [
154
+						'delim' => '.',
155
+						'parts' => [
156
+							$tableName,
157
+							$columnName
158
+						]
159
+					],
160
+					'alias' => [
161
+						'as' => true,
162
+						'name' => $alias,
163
+					]
164
+				];
165 165
 
166
-                $columnDescritors[$alias] = [
167
-                    'as' => $alias,
168
-                    'table' => $tableName,
169
-                    'column' => $columnName,
170
-                    'type' => $column->getType(),
171
-                    'tableGroup' => $tableGroup,
172
-                ];
173
-            }
174
-            $fetchedTables[] = $tableName;
175
-        }
166
+				$columnDescritors[$alias] = [
167
+					'as' => $alias,
168
+					'table' => $tableName,
169
+					'column' => $columnName,
170
+					'type' => $column->getType(),
171
+					'tableGroup' => $tableGroup,
172
+				];
173
+			}
174
+			$fetchedTables[] = $tableName;
175
+		}
176 176
 
177
-        $missingTables = array_diff($relatedTables, $fetchedTables);
178
-        if (!empty($missingTables)) {
179
-            throw new TDBMException('Missing tables '.implode(', ', $missingTables).' in SELECT statement');
180
-        }
177
+		$missingTables = array_diff($relatedTables, $fetchedTables);
178
+		if (!empty($missingTables)) {
179
+			throw new TDBMException('Missing tables '.implode(', ', $missingTables).' in SELECT statement');
180
+		}
181 181
 
182
-        for ($i = 0; $i < count($formattedSelect) - 1; $i++) {
183
-            $formattedSelect[$i]['delim'] = ',';
184
-        }
185
-        return [$formattedSelect, $columnDescritors];
186
-    }
182
+		for ($i = 0; $i < count($formattedSelect) - 1; $i++) {
183
+			$formattedSelect[$i]['delim'] = ',';
184
+		}
185
+		return [$formattedSelect, $columnDescritors];
186
+	}
187 187
 
188
-    private function generateParsedSqlCount($parsedSql)
189
-    {
190
-        if (isset($parsedSql['ORDER'])) {
191
-            unset($parsedSql['ORDER']);
192
-        }
188
+	private function generateParsedSqlCount($parsedSql)
189
+	{
190
+		if (isset($parsedSql['ORDER'])) {
191
+			unset($parsedSql['ORDER']);
192
+		}
193 193
 
194
-        if (!isset($parsedSql['GROUP'])) {
195
-            // most simple case:no GROUP BY in query
196
-            return $this->generateSimpleSqlCount($parsedSql);
197
-        } else if (!isset($parsedSql['HAVING'])) {
198
-            // GROUP BY without HAVING statement: let's COUNT the DISTINCT grouped columns
199
-            return $this->generateGroupedSqlCount($parsedSql);
200
-        } else {
201
-            // GROUP BY with a HAVING statement: we'll have to wrap the query
202
-            return $this->generateWrappedSqlCount($parsedSql);
203
-        }
204
-    }
194
+		if (!isset($parsedSql['GROUP'])) {
195
+			// most simple case:no GROUP BY in query
196
+			return $this->generateSimpleSqlCount($parsedSql);
197
+		} else if (!isset($parsedSql['HAVING'])) {
198
+			// GROUP BY without HAVING statement: let's COUNT the DISTINCT grouped columns
199
+			return $this->generateGroupedSqlCount($parsedSql);
200
+		} else {
201
+			// GROUP BY with a HAVING statement: we'll have to wrap the query
202
+			return $this->generateWrappedSqlCount($parsedSql);
203
+		}
204
+	}
205 205
 
206
-    private function generateSimpleSqlCount($parsedSql)
207
-    {
208
-        return [[
209
-            'expr_type' => 'aggregate_function',
210
-            'alias' => false,
211
-            'base_expr' => 'COUNT',
212
-            'sub_tree' => $parsedSql['SELECT'],
213
-            'delim' => false,
214
-        ]];;
215
-    }
206
+	private function generateSimpleSqlCount($parsedSql)
207
+	{
208
+		return [[
209
+			'expr_type' => 'aggregate_function',
210
+			'alias' => false,
211
+			'base_expr' => 'COUNT',
212
+			'sub_tree' => $parsedSql['SELECT'],
213
+			'delim' => false,
214
+		]];;
215
+	}
216 216
 
217
-    private function generateGroupedSqlCount($parsedSql)
218
-    {
219
-        $group = $parsedSql['GROUP'];
220
-        unset($parsedSql['GROUP']);
221
-        $parsedSql['SELECT'] = [[
222
-            'expr_type' => 'aggregate_function',
223
-            'alias' => false,
224
-            'base_expr' => 'COUNT',
225
-            'sub_tree' => array_merge([[
226
-                'expr_type' => 'reserved',
227
-                'base_expr' => 'DISTINCT',
228
-                'delim' => ','
229
-            ]], $group),
230
-            'delim' => false,
231
-        ]];
232
-        return $parsedSql;
233
-    }
217
+	private function generateGroupedSqlCount($parsedSql)
218
+	{
219
+		$group = $parsedSql['GROUP'];
220
+		unset($parsedSql['GROUP']);
221
+		$parsedSql['SELECT'] = [[
222
+			'expr_type' => 'aggregate_function',
223
+			'alias' => false,
224
+			'base_expr' => 'COUNT',
225
+			'sub_tree' => array_merge([[
226
+				'expr_type' => 'reserved',
227
+				'base_expr' => 'DISTINCT',
228
+				'delim' => ','
229
+			]], $group),
230
+			'delim' => false,
231
+		]];
232
+		return $parsedSql;
233
+	}
234 234
 
235
-    private function generateWrappedSqlCount($parsedSql)
236
-    {
237
-        return [
238
-            'SELECT' => [[
239
-                'expr_type' => 'aggregate_function',
240
-                'alias' => false,
241
-                'base_expr' => 'COUNT',
242
-                'sub_tree' => [
243
-                    [
244
-                        'expr_type' => 'colref',
245
-                        'base_expr' => '*',
246
-                        'sub_tree' => false
247
-                    ]
248
-                ],
249
-                'delim' => false,
250
-            ]],
251
-            'FROM' => [[
252
-                'expr_type' => 'subquery',
253
-                'alias' => [
254
-                    'as' => true,
255
-                    'name' => '____query'
256
-                ],
257
-                'sub_tree' => $parsedSql,
258
-            ]]
259
-        ];
260
-    }
235
+	private function generateWrappedSqlCount($parsedSql)
236
+	{
237
+		return [
238
+			'SELECT' => [[
239
+				'expr_type' => 'aggregate_function',
240
+				'alias' => false,
241
+				'base_expr' => 'COUNT',
242
+				'sub_tree' => [
243
+					[
244
+						'expr_type' => 'colref',
245
+						'base_expr' => '*',
246
+						'sub_tree' => false
247
+					]
248
+				],
249
+				'delim' => false,
250
+			]],
251
+			'FROM' => [[
252
+				'expr_type' => 'subquery',
253
+				'alias' => [
254
+					'as' => true,
255
+					'name' => '____query'
256
+				],
257
+				'sub_tree' => $parsedSql,
258
+			]]
259
+		];
260
+	}
261 261
 
262
-    protected function getTableGroupName(array $relatedTables)
263
-    {
264
-        sort($relatedTables);
265
-        return implode('_``_', $relatedTables);
266
-    }
262
+	protected function getTableGroupName(array $relatedTables)
263
+	{
264
+		sort($relatedTables);
265
+		return implode('_``_', $relatedTables);
266
+	}
267 267
 }
Please login to merge, or discard this patch.