Completed
Pull Request — 3.4 (#46)
by David
22:22 queued 03:02
created

TdbmInstallController::configure()   C

Complexity

Conditions 7
Paths 10

Size

Total Lines 46
Code Lines 31

Duplication

Lines 17
Ratio 36.96 %

Importance

Changes 7
Bugs 1 Features 0
Metric Value
c 7
b 1
f 0
dl 17
loc 46
rs 6.7272
cc 7
eloc 31
nc 10
nop 1
1
<?php
2
namespace Mouf\Database\TDBM\Controllers;
3
4
use Mouf\Composer\ClassNameMapper;
5
use Mouf\MoufUtils;
6
7
use Mouf\Actions\InstallUtils;
8
9
use Mouf\MoufManager;
10
11
use Mouf\Html\HtmlElement\HtmlBlock;
12
use Mouf\Mvc\Splash\Controllers\Controller;
13
14
/**
15
 * The controller used in the TDBM install process.
16
 * 
17
 * @Component
18
 */
19
class TdbmInstallController extends Controller {
20
	
21
	/**
22
	 *
23
	 * @var HtmlBlock
24
	 */
25
	public $content;
26
	
27
	public $selfedit;
28
	
29
	/**
30
	 * The active MoufManager to be edited/viewed
31
	 *
32
	 * @var MoufManager
33
	 */
34
	public $moufManager;
35
	
36
	/**
37
	 * The template used by the main page for mouf.
38
	 *
39
	 * @Property
40
	 * @Compulsory
41
	 * @var TemplateInterface
42
	 */
43
	public $template;
44
	
45
	/**
46
	 * Displays the first install screen.
47
	 * 
48
	 * @Action
49
	 * @Logged
50
	 * @param string $selfedit If true, the name of the component must be a component from the Mouf framework itself (internal use only) 
51
	 */
52
	public function defaultAction($selfedit = "false") {
53
		$this->selfedit = $selfedit;
54
		
55
		if ($selfedit == "true") {
56
			$this->moufManager = MoufManager::getMoufManager();
57
		} else {
58
			$this->moufManager = MoufManager::getMoufManagerHiddenInstance();
59
		}
60
				
61
		$this->content->addFile(dirname(__FILE__)."/../../../../views/installStep1.php", $this);
62
		$this->template->toHtml();
63
	}
64
65
	/**
66
	 * Skips the install process.
67
	 * 
68
	 * @Action
69
	 * @Logged
70
	 * @param string $selfedit If true, the name of the component must be a component from the Mouf framework itself (internal use only)
71
	 */
72
	public function skip($selfedit = "false") {
73
		InstallUtils::continueInstall($selfedit == "true");
74
	}
75
76
	protected $daoNamespace;
77
	protected $beanNamespace;
78
	protected $autoloadDetected;
79
	protected $storeInUtc;
80
	
81
	/**
82
	 * Displays the second install screen.
83
	 * 
84
	 * @Action
85
	 * @Logged
86
	 * @param string $selfedit If true, the name of the component must be a component from the Mouf framework itself (internal use only) 
87
	 */
88
	public function configure($selfedit = "false") {
89
		$this->selfedit = $selfedit;
90
		
91
		if ($selfedit == "true") {
92
			$this->moufManager = MoufManager::getMoufManager();
93
		} else {
94
			$this->moufManager = MoufManager::getMoufManagerHiddenInstance();
95
		}
96
		
97
		// Let's start by performing basic checks about the instances we assume to exist.
98
		if (!$this->moufManager->instanceExists("dbalConnection")) {
99
			$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.");
100
			return;
101
		}
102
		
103
		if (!$this->moufManager->instanceExists("noCacheService")) {
104
			$this->displayErrorMsg("The TDBM install process assumes that a cache instance named 'noCacheService' exists. Could not find the 'noCacheService' instance.");
105
			return;
106
		}
107
		
108
		$this->daoNamespace = $this->moufManager->getVariable("tdbmDefaultDaoNamespace_tdbmService");
109
		$this->beanNamespace = $this->moufManager->getVariable("tdbmDefaultBeanNamespace_tdbmService");
110
		
111 View Code Duplication
		if ($this->daoNamespace == null && $this->beanNamespace == null) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
112
            $classNameMapper = ClassNameMapper::createFromComposerFile(__DIR__.'/../../../../../../../../composer.json');
113
114
            $autoloadNamespaces = $classNameMapper->getManagedNamespaces();
115
			if ($autoloadNamespaces) {
0 ignored issues
show
Bug Best Practice introduced by
The expression $autoloadNamespaces of type array<integer|string> is implicitly converted to a boolean; are you sure this is intended? If so, consider using ! empty($expr) instead to make it clear that you intend to check for an array without elements.

This check marks implicit conversions of arrays to boolean values in a comparison. While in PHP an empty array is considered to be equal (but not identical) to false, this is not always apparent.

Consider making the comparison explicit by using empty(..) or ! empty(...) instead.

Loading history...
116
				$this->autoloadDetected = true;
117
                $rootNamespace = $autoloadNamespaces[0];
118
				$this->daoNamespace = $rootNamespace."Dao";
119
				$this->beanNamespace = $rootNamespace."Dao\\Bean";
120
			} else {
121
				$this->autoloadDetected = false;
122
				$this->daoNamespace = "YourApplication\\Dao";
123
				$this->beanNamespace = "YourApplication\\Dao\\Bean";
124
			}			
125
		} else {
126
			$this->autoloadDetected = true;
127
		}
128
129
		$this->castDatesToDateTime = true;
130
								
131
		$this->content->addFile(dirname(__FILE__)."/../../../../views/installStep2.php", $this);
132
		$this->template->toHtml();
133
	}
134
135
	/**
136
	 * This action generates the TDBM instance, then the DAOs and Beans.
137
	 *
138
	 * @Action
139
	 * @param string $daonamespace
140
	 * @param string $beannamespace
141
	 * @param int $keepSupport
0 ignored issues
show
Bug introduced by
There is no parameter named $keepSupport. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
142
	 * @param int $storeInUtc
143
	 * @param int $castDatesToDateTime
0 ignored issues
show
Bug introduced by
There is no parameter named $castDatesToDateTime. Was it maybe removed?

This check looks for PHPDoc comments describing methods or function parameters that do not exist on the corresponding method or function.

Consider the following example. The parameter $italy is not defined by the method finale(...).

/**
 * @param array $germany
 * @param array $island
 * @param array $italy
 */
function finale($germany, $island) {
    return "2:1";
}

The most likely cause is that the parameter was removed, but the annotation was not.

Loading history...
144
	 * @param string $selfedit
145
	 * @throws \Mouf\MoufException
146
	 */
147
    public function generate($daonamespace, $beannamespace, $storeInUtc = 0, $selfedit="false") {
148
		$this->selfedit = $selfedit;
149
		
150
		if ($selfedit == "true") {
151
			$this->moufManager = MoufManager::getMoufManager();
152
		} else {
153
			$this->moufManager = MoufManager::getMoufManagerHiddenInstance();
154
		}
155
156
		if (!$this->moufManager->instanceExists("doctrineApcCache")) {
157
			$doctrineApcCache = $this->moufManager->createInstance("Doctrine\\Common\\Cache\\ApcCache")->setName('doctrineApcCache');
158
			// TODO: set namespace
159
		} else {
160
			$doctrineApcCache = $this->moufManager->getInstanceDescriptor('doctrineApcCache');
161
		}
162
163
		if (!$this->moufManager->instanceExists("tdbmService")) {
164
			$tdbmService = $this->moufManager->createInstance("Mouf\\Database\\TDBM\\TDBMService")->setName('tdbmService');
165
			$tdbmService->getConstructorArgumentProperty('connection')->setValue($this->moufManager->getInstanceDescriptor('dbalConnection'));
166
			$tdbmService->getConstructorArgumentProperty('cache')->setValue($doctrineApcCache);
167
		}
168
		
169
		$this->moufManager->rewriteMouf();
170
		
171
		TdbmController::generateDaos($this->moufManager, "tdbmService", $daonamespace, $beannamespace, "DaoFactory", "daoFactory", $selfedit, $storeInUtc);
172
				
173
		InstallUtils::continueInstall($selfedit == "true");
174
	}
175
	
176
	protected $errorMsg;
177
	
178
	private function displayErrorMsg($msg) {
179
		$this->errorMsg = $msg;
180
		$this->content->addFile(dirname(__FILE__)."/../../../../views/installError.php", $this);
181
		$this->template->toHtml();
182
	}
183
}