Failed Conditions
Push — master ( dbea68...9459a9 )
by Kentaro
01:14
created

Application::initMailer()   C

Complexity

Conditions 8
Paths 18

Size

Total Lines 29
Code Lines 17

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 9
CRAP Score 14.6701

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 29
ccs 9
cts 17
cp 0.5294
rs 5.3846
cc 8
eloc 17
nc 18
nop 0
crap 14.6701
1
<?php
2
/*
3
 * This file is part of EC-CUBE
4
 *
5
 * Copyright(c) 2000-2015 LOCKON CO.,LTD. All Rights Reserved.
6
 *
7
 * http://www.lockon.co.jp/
8
 *
9
 * This program is free software; you can redistribute it and/or
10
 * modify it under the terms of the GNU General Public License
11
 * as published by the Free Software Foundation; either version 2
12
 * of the License, or (at your option) any later version.
13
 *
14
 * This program is distributed in the hope that it will be useful,
15
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17
 * GNU General Public License for more details.
18
 *
19
 * You should have received a copy of the GNU General Public License
20
 * along with this program; if not, write to the Free Software
21
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
22
 */
23
24
namespace Eccube;
25
26
use Eccube\Application\ApplicationTrait;
27
use Eccube\Common\Constant;
28
use Eccube\EventListener\TransactionListener;
29
use Monolog\Logger;
30
use Symfony\Component\EventDispatcher\EventDispatcher;
31
use Symfony\Component\Finder\Finder;
32
use Symfony\Component\HttpFoundation\Request;
33
use Symfony\Component\HttpFoundation\Response;
34
use Symfony\Component\HttpKernel\Event\FilterResponseEvent;
35
use Symfony\Component\HttpKernel\Event\GetResponseEvent;
36
use Symfony\Component\HttpKernel\Event\PostResponseEvent;
37
use Symfony\Component\HttpKernel\KernelEvents;
38
use Symfony\Component\Yaml\Yaml;
39
40
class Application extends ApplicationTrait
0 ignored issues
show
introduced by
Missing class doc comment
Loading history...
41
{
42
    protected static $instance;
43
44
    protected $initialized = false;
45
    protected $initializedPlugin = false;
46
    protected $testMode = false;
47
48 998
    public static function getInstance(array $values = array())
0 ignored issues
show
introduced by
Missing function doc comment
Loading history...
49
    {
50 998
        if (!is_object(self::$instance)) {
51 932
            self::$instance = new Application($values);
52
        }
53
54 998
        return self::$instance;
55
    }
56
57 933
    public static function clearInstance()
0 ignored issues
show
introduced by
Missing function doc comment
Loading history...
58
    {
59 933
        self::$instance = null;
60
    }
61
62
    final public function __clone()
0 ignored issues
show
introduced by
Missing function doc comment
Loading history...
63
    {
64
        throw new \Exception('Clone is not allowed against '.get_class($this));
65
    }
66
67 946
    public function __construct(array $values = array())
0 ignored issues
show
introduced by
Missing function doc comment
Loading history...
68
    {
69 946
        parent::__construct($values);
70
71 946
        if (is_null(self::$instance)) {
72 933
            self::$instance = $this;
73
        }
74
75
        // load config
76 946
        $this->initConfig();
77
78
        // init monolog
79 946
        $this->initLogger();
80
    }
81
82 946
    public function initConfig()
0 ignored issues
show
introduced by
Missing function doc comment
Loading history...
83
    {
84
        // load config
85
        $this['config'] = $this->share(function() {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after FUNCTION keyword; 0 found
Loading history...
86 939
            $ymlPath = __DIR__.'/../../app/config/eccube';
87 939
            $distPath = __DIR__.'/../../src/Eccube/Resource/config';
88
89 939
            $config = array();
90 939
            $config_yml = $ymlPath.'/config.yml';
91 939
            if (file_exists($config_yml)) {
92 939
                $config = Yaml::parse(file_get_contents($config_yml));
93
            }
94
95 939
            $config_dist = array();
96 939
            $config_yml_dist = $distPath.'/config.yml.dist';
97 939
            if (file_exists($config_yml_dist)) {
98 939
                $config_dist = Yaml::parse(file_get_contents($config_yml_dist));
99
            }
100
101 939
            $config_path = array();
102 939
            $path_yml = $ymlPath.'/path.yml';
103 939
            if (file_exists($path_yml)) {
104 939
                $config_path = Yaml::parse(file_get_contents($path_yml));
105
            }
106
107 939
            $config_constant = array();
108 939
            $constant_yml = $ymlPath.'/constant.yml';
109 939
            if (file_exists($constant_yml)) {
110
                $config_constant = Yaml::parse(file_get_contents($constant_yml));
111
                $config_constant = empty($config_constant) ? array() : $config_constant;
112
            }
113
114 939
            $config_constant_dist = array();
115 939
            $constant_yml_dist = $distPath.'/constant.yml.dist';
116 939
            if (file_exists($constant_yml_dist)) {
117 939
                $config_constant_dist = Yaml::parse(file_get_contents($constant_yml_dist));
118
            }
119
120 939
            $configAll = array_replace_recursive($config_constant_dist, $config_dist, $config_constant, $config_path, $config);
121
122 939
            $database = array();
123 939
            $yml = $ymlPath.'/database.yml';
124 939
            if (file_exists($yml)) {
125 939
                $database = Yaml::parse(file_get_contents($yml));
126
            }
127
128 939
            $mail = array();
129 939
            $yml = $ymlPath.'/mail.yml';
130 939
            if (file_exists($yml)) {
131 939
                $mail = Yaml::parse(file_get_contents($yml));
132
            }
133 939
            $configAll = array_replace_recursive($configAll, $database, $mail);
134
135 939
            $config_log = array();
136 939
            $yml = $ymlPath.'/log.yml';
137 939
            if (file_exists($yml)) {
138
                $config_log = Yaml::parse(file_get_contents($yml));
139
            }
140 939
            $config_log_dist = array();
141 939
            $log_yml_dist = $distPath.'/log.yml.dist';
142 939
            if (file_exists($log_yml_dist)) {
143 939
                $config_log_dist = Yaml::parse(file_get_contents($log_yml_dist));
144
            }
145
146 939
            $configAll = array_replace_recursive($configAll, $config_log_dist, $config_log);
147
148 939
            $config_nav = array();
149 939
            $yml = $ymlPath.'/nav.yml';
150 939
            if (file_exists($yml)) {
151
                $config_nav = array('nav' => Yaml::parse(file_get_contents($yml)));
152
            }
153 939
            $config_nav_dist = array();
154 939
            $nav_yml_dist = $distPath.'/nav.yml.dist';
155 939
            if (file_exists($nav_yml_dist)) {
156 939
                $config_nav_dist = array('nav' => Yaml::parse(file_get_contents($nav_yml_dist)));
157
            }
158
159 939
            $configAll = array_replace_recursive($configAll, $config_nav_dist, $config_nav);
160
161 939
            return $configAll;
162 946
        });
163
    }
164
165 946
    public function initLogger()
0 ignored issues
show
introduced by
Missing function doc comment
Loading history...
166
    {
167 946
        $app = $this;
168 946
        $this->register(new ServiceProvider\EccubeMonologServiceProvider($app));
0 ignored issues
show
Unused Code introduced by
The call to EccubeMonologServiceProvider::__construct() has too many arguments starting with $app.

This check compares calls to functions or methods with their respective definitions. If the call has more arguments than are defined, it raises an issue.

If a function is defined several times with a different number of parameters, the check may pick up the wrong definition and report false positives. One codebase where this has been known to happen is Wordpress.

In this case you can add the @ignore PhpDoc annotation to the duplicate definition and it will be ignored.

Loading history...
169 946
        $this['monolog.logfile'] = __DIR__.'/../../app/log/site.log';
170 946
        $this['monolog.name'] = 'eccube';
171
    }
172
173 936
    public function initialize()
0 ignored issues
show
introduced by
Missing function doc comment
Loading history...
174
    {
175 936
        if ($this->initialized) {
176
            return;
177
        }
178
179
        // init locale
180 936
        $this->initLocale();
181
182
        // init session
183 936
        $this->initSession();
184
185
        // init twig
186 936
        $this->initRendering();
187
188
        // init provider
189 936
        $this->register(new \Silex\Provider\HttpFragmentServiceProvider());
190 936
        $this->register(new \Silex\Provider\UrlGeneratorServiceProvider());
191 936
        $this->register(new \Silex\Provider\FormServiceProvider());
192 936
        $this->register(new \Silex\Provider\SerializerServiceProvider());
193 936
        $this->register(new \Eccube\ServiceProvider\ValidatorServiceProvider());
194
195 936
        $app = $this;
196
        $this->error(function(\Exception $e, $code) use ($app) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after FUNCTION keyword; 0 found
Loading history...
197 10
            if ($app['debug']) {
198 10
                return;
199
            }
200
201
            switch ($code) {
202
                case 403:
203
                    $title = 'アクセスできません。';
204
                    $message = 'お探しのページはアクセスができない状況にあるか、移動もしくは削除された可能性があります。';
205
                    break;
206
                case 404:
207
                    $title = 'ページがみつかりません。';
208
                    $message = 'URLに間違いがないかご確認ください。';
209
                    break;
210
                default:
211
                    $title = 'システムエラーが発生しました。';
212
                    $message = '大変お手数ですが、サイト管理者までご連絡ください。';
213
                    break;
214
            }
215
216
            return $app->render('error.twig', array(
217
                'error_title' => $title,
218
                'error_message' => $message,
219
            ));
220 936
        });
221
222
        // init mailer
223 936
        $this->initMailer();
224
225
        // init doctrine orm
226 936
        $this->initDoctrine();
227
228
        // Set up the DBAL connection now to check for a proper connection to the database.
229 936
        $this->checkDatabaseConnection();
230
231
        // init security
232 936
        $this->initSecurity();
233
234
        // init ec-cube service provider
235 936
        $this->register(new ServiceProvider\EccubeServiceProvider());
236
237
        // mount controllers
238 936
        $this->register(new \Silex\Provider\ServiceControllerServiceProvider());
239 936
        $this->mount('', new ControllerProvider\FrontControllerProvider());
240 936
        $this->mount('/'.trim($this['config']['admin_route'], '/').'/', new ControllerProvider\AdminControllerProvider());
241 936
        Request::enableHttpMethodParameterOverride(); // PUTやDELETEできるようにする
242
243
        // add transaction listener
244 936
        $this['dispatcher']->addSubscriber(new TransactionListener($this));
245
246 936
        $this->initialized = true;
247
    }
248
249 936
    public function initLocale()
0 ignored issues
show
introduced by
Missing function doc comment
Loading history...
250
    {
251
252
        // timezone
253 936
        if (!empty($this['config']['timezone'])) {
254 936
            date_default_timezone_set($this['config']['timezone']);
255
        }
256
257 936
        $this->register(new \Silex\Provider\TranslationServiceProvider(), array(
258 936
            'locale' => $this['config']['locale'],
259
        ));
260
        $this['translator'] = $this->share($this->extend('translator', function($translator, \Silex\Application $app) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after FUNCTION keyword; 0 found
Loading history...
261 605
            $translator->addLoader('yaml', new \Symfony\Component\Translation\Loader\YamlFileLoader());
262
263 605
            $r = new \ReflectionClass('Symfony\Component\Validator\Validator');
264 605
            $file = dirname($r->getFilename()).'/Resources/translations/validators.'.$app['locale'].'.xlf';
265 605
            if (file_exists($file)) {
266 605
                $translator->addResource('xliff', $file, $app['locale'], 'validators');
267
            }
268
269 605
            $file = __DIR__.'/Resource/locale/validator.'.$app['locale'].'.yml';
270 605
            if (file_exists($file)) {
271 605
                $translator->addResource('yaml', $file, $app['locale'], 'validators');
272
            }
273
274 605
            $file = __DIR__.'/Resource/locale/message.'.$app['locale'].'.yml';
275 605
            if (file_exists($file)) {
276 605
                $translator->addResource('yaml', $file, $app['locale']);
277
            }
278
279 605
            return $translator;
280 936
        }));
281
    }
282
283 936
    public function initSession()
0 ignored issues
show
introduced by
Missing function doc comment
Loading history...
284
    {
285 936
        $this->register(new \Silex\Provider\SessionServiceProvider(), array(
286 936
            'session.storage.save_path' => $this['config']['root_dir'].'/app/cache/eccube/session',
287
            'session.storage.options' => array(
288 936
                'name' => 'eccube',
289 936
                'cookie_path' => $this['config']['root_urlpath'] ?: '/',
290 936
                'cookie_secure' => $this['config']['force_ssl'],
291 936
                'cookie_lifetime' => $this['config']['cookie_lifetime'],
292
                'cookie_httponly' => true,
293
                // cookie_domainは指定しない
294
                // http://blog.tokumaru.org/2011/10/cookiedomain.html
295
            ),
296
        ));
297
    }
298
299 936
    public function initRendering()
0 ignored issues
show
introduced by
Missing function doc comment
Loading history...
300
    {
301 936
        $this->register(new \Silex\Provider\TwigServiceProvider(), array(
302 936
            'twig.form.templates' => array('Form/form_layout.twig'),
303
        ));
304
        $this['twig'] = $this->share($this->extend('twig', function(\Twig_Environment $twig, \Silex\Application $app) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after FUNCTION keyword; 0 found
Loading history...
305 364
            $twig->addExtension(new \Eccube\Twig\Extension\EccubeExtension($app));
306 364
            $twig->addExtension(new \Twig_Extension_StringLoader());
307
308 364
            return $twig;
309 936
        }));
310
311
        $this->before(function(Request $request, \Silex\Application $app) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after FUNCTION keyword; 0 found
Loading history...
312
            // フロント or 管理画面ごとにtwigの探索パスを切り替える.
313
            $app['twig'] = $app->share($app->extend('twig', function(\Twig_Environment $twig, \Silex\Application $app) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after FUNCTION keyword; 0 found
Loading history...
314 351
                $paths = array();
315
316
                // 互換性がないのでprofiler とproduction 時のcacheを分離する
317
318 351
                $app['admin'] = false;
319 351
                $app['front'] = false;
320
321 351
                if (isset($app['profiler'])) {
322
                    $cacheBaseDir = __DIR__.'/../../app/cache/twig/profiler/';
323
                } else {
324 351
                    $cacheBaseDir = __DIR__.'/../../app/cache/twig/production/';
325
                }
326 351
                $pathinfo = rawurldecode($app['request']->getPathInfo());
327 351
                if (strpos($pathinfo, '/'.trim($app['config']['admin_route'], '/').'/') === 0) {
328 187
                    if (file_exists(__DIR__.'/../../app/template/admin')) {
329 187
                        $paths[] = __DIR__.'/../../app/template/admin';
330
                    }
331 187
                    $paths[] = $app['config']['template_admin_realdir'];
332 187
                    $paths[] = __DIR__.'/../../app/Plugin';
333 187
                    $cache = $cacheBaseDir.'admin';
334 187
                    $app['admin'] = true;
335
                } else {
336 165
                    if (file_exists($app['config']['template_realdir'])) {
337 165
                        $paths[] = $app['config']['template_realdir'];
338
                    }
339 165
                    $paths[] = $app['config']['template_default_realdir'];
340 165
                    $paths[] = __DIR__.'/../../app/Plugin';
341 165
                    $cache = $cacheBaseDir.$app['config']['template_code'];
342 165
                    $app['front'] = true;
343
                }
344 351
                $twig->setCache($cache);
345 351
                $app['twig.loader']->addLoader(new \Twig_Loader_Filesystem($paths));
346
347 351
                return $twig;
348 353
            }));
349
350
            // 管理画面のIP制限チェック.
351 353
            $pathinfo = rawurldecode($app['request']->getPathInfo());
352 353
            if (strpos($pathinfo, '/'.trim($app['config']['admin_route'], '/').'/') === 0) {
353
                // IP制限チェック
354 187
                $allowHost = $app['config']['admin_allow_host'];
355 187
                if (count($allowHost) > 0) {
356
                    if (array_search($app['request']->getClientIp(), $allowHost) === false) {
357
                        throw new \Exception();
358
                    }
359
                }
360
            }
361 936
        }, self::EARLY_EVENT);
362
363
        // twigのグローバル変数を定義.
364 936
        $app = $this;
365
        $this->on(\Symfony\Component\HttpKernel\KernelEvents::CONTROLLER, function(\Symfony\Component\HttpKernel\Event\FilterControllerEvent $event) use ($app) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after FUNCTION keyword; 0 found
Loading history...
366
            // ショップ基本情報
367 351
            $BaseInfo = $app['eccube.repository.base_info']->get();
368 351
            $app['twig']->addGlobal('BaseInfo', $BaseInfo);
369
370 351
            $pathinfo = rawurldecode($app['request']->getPathInfo());
371 351
            if (strpos($pathinfo, '/'.trim($app['config']['admin_route'], '/').'/') === 0) {
372
                // 管理画面
373
                // 管理画面メニュー
374 187
                $menus = array('', '', '');
375 187
                $app['twig']->addGlobal('menus', $menus);
376
377 187
                $Member = $app->user();
378 187
                if (is_object($Member)) {
379
                    // ログインしていれば管理者のロールを取得
380 181
                    $AuthorityRoles = $app['eccube.repository.authority_role']->findBy(array('Authority' => $Member->getAuthority()));
381
382 181
                    $roles = array();
383 181
                    foreach ($AuthorityRoles as $AuthorityRole) {
384
                        // 管理画面でメニュー制御するため相対パス全てをセット
385 181
                        $roles[] = $app['request']->getBaseUrl().'/'.$app['config']['admin_route'].$AuthorityRole->getDenyUrl();
386
                    }
387
388 187
                    $app['twig']->addGlobal('AuthorityRoles', $roles);
389
                }
390
0 ignored issues
show
Coding Style introduced by
Blank line found at end of control structure
Loading history...
391
            } else {
392
                // フロント画面
393 165
                $request = $event->getRequest();
394 165
                $route = $request->attributes->get('_route');
395
396
                // ユーザ作成画面
397 165
                if ($route === trim($app['config']['user_data_route'])) {
398 2
                    $params = $request->attributes->get('_route_params');
399 2
                    $route = $params['route'];
400
                    // プレビュー画面
401 163
                } elseif ($request->get('preview')) {
402
                    $route = 'preview';
403
                }
404
405
                try {
406 165
                    $DeviceType = $app['eccube.repository.master.device_type']
407 165
                        ->find(\Eccube\Entity\Master\DeviceType::DEVICE_TYPE_PC);
408 165
                    $PageLayout = $app['eccube.repository.page_layout']->getByUrl($DeviceType, $route);
409 135
                } catch (\Doctrine\ORM\NoResultException $e) {
410 135
                    $PageLayout = $app['eccube.repository.page_layout']->newPageLayout($DeviceType);
411
                }
412
413 165
                $app['twig']->addGlobal('PageLayout', $PageLayout);
414 165
                $app['twig']->addGlobal('title', $PageLayout->getName());
415
            }
416 936
        });
417
    }
418
419 936
    public function initMailer()
0 ignored issues
show
introduced by
Missing function doc comment
Loading history...
420
    {
421
422
        // メール送信時の文字エンコード指定(デフォルトはUTF-8)
0 ignored issues
show
Unused Code Comprehensibility introduced by
43% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
423 936
        if (isset($this['config']['mail']['charset_iso_2022_jp']) && is_bool($this['config']['mail']['charset_iso_2022_jp'])) {
424 936
            if ($this['config']['mail']['charset_iso_2022_jp'] === true) {
425
                \Swift::init(function() {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after FUNCTION keyword; 0 found
Loading history...
426
                    \Swift_DependencyContainer::getInstance()
427
                        ->register('mime.qpheaderencoder')
428
                        ->asAliasOf('mime.base64headerencoder');
429
                    \Swift_Preferences::getInstance()->setCharset('iso-2022-jp');
430
                });
431
            }
432
        }
433
434 936
        $this->register(new \Silex\Provider\SwiftmailerServiceProvider());
435 936
        $this['swiftmailer.options'] = $this['config']['mail'];
436
437 936
        if (isset($this['config']['mail']['spool']) && is_bool($this['config']['mail']['spool'])) {
438
            $this['swiftmailer.use_spool'] = $this['config']['mail']['spool'];
439
        }
440
        // デフォルトはsmtpを使用
441 936
        $transport = $this['config']['mail']['transport'];
442 936
        if ($transport == 'sendmail') {
443
            $this['swiftmailer.transport'] = \Swift_SendmailTransport::newInstance();
444 936
        } elseif ($transport == 'mail') {
445
            $this['swiftmailer.transport'] = \Swift_MailTransport::newInstance();
446
        }
447
    }
448
449 936
    public function initDoctrine()
0 ignored issues
show
introduced by
Missing function doc comment
Loading history...
450
    {
451 936
        $this->register(new \Silex\Provider\DoctrineServiceProvider(), array(
0 ignored issues
show
introduced by
Add a comma after each item in a multi-line array
Loading history...
452
            'dbs.options' => array(
0 ignored issues
show
introduced by
Add a comma after each item in a multi-line array
Loading history...
453 936
                'default' => $this['config']['database']
454
        )));
455 936
        $this->register(new \Saxulum\DoctrineOrmManagerRegistry\Silex\Provider\DoctrineOrmManagerRegistryProvider());
456
457
        // プラグインのmetadata定義を合わせて行う.
458 936
        $pluginBasePath = __DIR__.'/../../app/Plugin';
459 936
        $finder = Finder::create()
460 936
            ->in($pluginBasePath)
461 936
            ->directories()
462 936
            ->depth(0);
463
464 936
        $ormMappings = array();
465 936
        $ormMappings[] = array(
466
            'type' => 'yml',
467
            'namespace' => 'Eccube\Entity',
468
            'path' => array(
469
                __DIR__.'/Resource/doctrine',
470
                __DIR__.'/Resource/doctrine/master',
471
            ),
472
        );
473
474 936
        foreach ($finder as $dir) {
0 ignored issues
show
Coding Style introduced by
Blank line found at start of control structure
Loading history...
475
476 139
            $file = $dir->getRealPath().'/config.yml';
477
478 139
            if (file_exists($file)) {
479 139
                $config = Yaml::parse(file_get_contents($file));
480
            } else {
481
                $code = $dir->getBaseName();
482
                $this['monolog']->warning("skip {$code} orm.path loading. config.yml not found.", array('path' => $file));
483
                continue;
484
            }
485
486
            // Doctrine Extend
487 139
            if (isset($config['orm.path']) && is_array($config['orm.path'])) {
488
                $paths = array();
489
                foreach ($config['orm.path'] as $path) {
490
                    $paths[] = $pluginBasePath.'/'.$config['code'].$path;
491
                }
492
                $ormMappings[] = array(
493
                    'type' => 'yml',
494
                    'namespace' => 'Plugin\\'.$config['code'].'\\Entity',
495 936
                    'path' => $paths,
496
                );
497
            }
498
        }
499
500 936
        $this->register(new \Dflydev\Silex\Provider\DoctrineOrm\DoctrineOrmServiceProvider(), array(
501 936
            'orm.proxies_dir' => __DIR__.'/../../app/cache/doctrine',
502
            'orm.em.options' => array(
503 936
                'mappings' => $ormMappings,
504
            ),
505
        ));
506
    }
507
508 936
    public function initSecurity()
0 ignored issues
show
introduced by
Missing function doc comment
Loading history...
509
    {
510 936
        $this->register(new \Silex\Provider\SecurityServiceProvider());
511 936
        $this->register(new \Silex\Provider\RememberMeServiceProvider());
512
513 936
        $this['security.firewalls'] = array(
514
            'admin' => array(
515 936
                'pattern' => "^/{$this['config']['admin_route']}/",
516
                'form' => array(
517 936
                    'login_path' => "/{$this['config']['admin_route']}/login",
518 936
                    'check_path' => "/{$this['config']['admin_route']}/login_check",
519 936
                    'username_parameter' => 'login_id',
520 936
                    'password_parameter' => 'password',
521
                    'with_csrf' => true,
522
                    'use_forward' => true,
523
                ),
524
                'logout' => array(
525 936
                    'logout_path' => "/{$this['config']['admin_route']}/logout",
526 936
                    'target_url' => "/{$this['config']['admin_route']}/",
527
                ),
528 936
                'users' => $this['orm.em']->getRepository('Eccube\Entity\Member'),
529
                'anonymous' => true,
530 936
            ),
531
            'customer' => array(
532 936
                'pattern' => '^/',
533
                'form' => array(
534
                    'login_path' => '/mypage/login',
535
                    'check_path' => '/login_check',
536
                    'username_parameter' => 'login_email',
537
                    'password_parameter' => 'login_pass',
538
                    'with_csrf' => true,
539
                    'use_forward' => true,
540
                ),
541
                'logout' => array(
542
                    'logout_path' => '/logout',
543
                    'target_url' => '/',
544
                ),
545
                'remember_me' => array(
546 936
                    'key' => sha1($this['config']['auth_magic']),
547 936
                    'name' => 'eccube_rememberme',
548
                    // lifetimeはデフォルトの1年間にする
549
                    // 'lifetime' => $this['config']['cookie_lifetime'],
0 ignored issues
show
Unused Code Comprehensibility introduced by
77% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
550 936
                    'path' => $this['config']['root_urlpath'] ?: '/',
551 936
                    'secure' => $this['config']['force_ssl'],
552
                    'httponly' => true,
553
                    'always_remember_me' => false,
554 936
                    'remember_me_parameter' => 'login_memory',
555
                ),
556 936
                'users' => $this['orm.em']->getRepository('Eccube\Entity\Customer'),
557
                'anonymous' => true,
558
            ),
559
        );
560
561 936
        $this['security.access_rules'] = array(
562 936
            array("^/{$this['config']['admin_route']}/login", 'IS_AUTHENTICATED_ANONYMOUSLY'),
563 936
            array("^/{$this['config']['admin_route']}/", 'ROLE_ADMIN'),
564
            array('^/mypage/login', 'IS_AUTHENTICATED_ANONYMOUSLY'),
565
            array('^/mypage/withdraw_complete', 'IS_AUTHENTICATED_ANONYMOUSLY'),
566
            array('^/mypage/change', 'IS_AUTHENTICATED_FULLY'),
567
            array('^/mypage', 'ROLE_USER'),
568
        );
569
570
        $this['eccube.password_encoder'] = $this->share(function($app) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after FUNCTION keyword; 0 found
Loading history...
571 936
            return new \Eccube\Security\Core\Encoder\PasswordEncoder($app['config']);
572 936
        });
573
        $this['security.encoder_factory'] = $this->share(function($app) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after FUNCTION keyword; 0 found
Loading history...
574 936
            return new \Symfony\Component\Security\Core\Encoder\EncoderFactory(array(
575 936
                'Eccube\Entity\Customer' => $app['eccube.password_encoder'],
576 936
                'Eccube\Entity\Member' => $app['eccube.password_encoder'],
577
            ));
578 936
        });
579
        $this['eccube.event_listner.security'] = $this->share(function($app) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after FUNCTION keyword; 0 found
Loading history...
580 936
            return new \Eccube\EventListener\SecurityEventListener($app['orm.em']);
581 936
        });
582
        $this['user'] = function($app) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after FUNCTION keyword; 0 found
Loading history...
583 256
            $token = $app['security']->getToken();
584
585 256
            return ($token !== null) ? $token->getUser() : null;
586
        };
587
588
        // ログイン時のイベントを設定.
589 936
        $this['dispatcher']->addListener(\Symfony\Component\Security\Http\SecurityEvents::INTERACTIVE_LOGIN, array($this['eccube.event_listner.security'], 'onInteractiveLogin'));
590
591
        // Voterの設定
592 936
        $app = $this;
593
        $this['authority_voter'] = $this->share(function($app) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after FUNCTION keyword; 0 found
Loading history...
594 936
            return new \Eccube\Security\Voter\AuthorityVoter($app);
595 936
        });
596
597
        $app['security.voters'] = $app->extend('security.voters', function($voters) use ($app) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after FUNCTION keyword; 0 found
Loading history...
598 936
            $voters[] = $app['authority_voter'];
599
600 936
            return $voters;
601 936
        });
602
603
        $this['security.access_manager'] = $this->share(function($app) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after FUNCTION keyword; 0 found
Loading history...
604 936
            return new \Symfony\Component\Security\Core\Authorization\AccessDecisionManager($app['security.voters'], 'unanimous');
605 936
        });
606
607
    }
608
609 936
    public function initializePlugin()
0 ignored issues
show
introduced by
Missing function doc comment
Loading history...
610
    {
611 936
        if ($this->initializedPlugin) {
612
            return;
613
        }
614
615
        // setup event dispatcher
616 936
        $this->initPluginEventDispatcher();
617
618
        // load plugin
619 936
        $this->loadPlugin();
620
621 936
        $this->initializedPlugin = true;
622
    }
623
624 936
    public function initPluginEventDispatcher()
0 ignored issues
show
introduced by
Missing function doc comment
Loading history...
625
    {
626
        // EventDispatcher
627
        $this['eccube.event.dispatcher'] = $this->share(function() {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after FUNCTION keyword; 0 found
Loading history...
628 366
            return new EventDispatcher();
629 936
        });
630
631 936
        $app = $this;
632
633
        // hook point
634
        $this->on(KernelEvents::REQUEST, function (GetResponseEvent $event) use ($app) {
635 353
            if (!$event->isMasterRequest()) {
636 98
                return;
637
            }
638 353
            $hookpoint = 'eccube.event.app.before';
639 353
            $app['eccube.event.dispatcher']->dispatch($hookpoint, $event);
640 936
        }, self::EARLY_EVENT);
641
642 View Code Duplication
        $this->on(KernelEvents::REQUEST, function (GetResponseEvent $event) use ($app) {
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...
643 352
            if (!$event->isMasterRequest()) {
644 98
                return;
645
            }
646 350
            $route = $event->getRequest()->attributes->get('_route');
647 350
            $hookpoint = "eccube.event.controller.$route.before";
648 350
            $app['eccube.event.dispatcher']->dispatch($hookpoint, $event);
649 936
        });
650
651 View Code Duplication
        $this->on(KernelEvents::RESPONSE, function (FilterResponseEvent $event) use ($app) {
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...
652 347
            if (!$event->isMasterRequest()) {
653 98
                return;
654
            }
655 347
            $route = $event->getRequest()->attributes->get('_route');
656 347
            $hookpoint = "eccube.event.controller.$route.after";
657 347
            $app['eccube.event.dispatcher']->dispatch($hookpoint, $event);
658 936
        });
659
660
        $this->on(KernelEvents::RESPONSE, function (FilterResponseEvent $event) use ($app) {
661 347
            if (!$event->isMasterRequest()) {
662 98
                return;
663
            }
664 347
            $hookpoint = 'eccube.event.app.after';
665 347
            $app['eccube.event.dispatcher']->dispatch($hookpoint, $event);
666 936
        }, self::LATE_EVENT);
667
668
        $this->on(KernelEvents::TERMINATE, function (PostResponseEvent $event) use ($app) {
669 347
            $route = $event->getRequest()->attributes->get('_route');
670 347
            $hookpoint = "eccube.event.controller.$route.finish";
671 347
            $app['eccube.event.dispatcher']->dispatch($hookpoint, $event);
672 936
        });
673
674
        $this->on(\Symfony\Component\HttpKernel\KernelEvents::RESPONSE, function(\Symfony\Component\HttpKernel\Event\FilterResponseEvent $event) use ($app) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after FUNCTION keyword; 0 found
Loading history...
675 347
            $route = $event->getRequest()->attributes->get('_route');
676 347
            $app['eccube.event.dispatcher']->dispatch('eccube.event.render.'.$route.'.before', $event);
677 936
        });
678
679
        // Request Event
680 View Code Duplication
        $this->on(\Symfony\Component\HttpKernel\KernelEvents::REQUEST, function(\Symfony\Component\HttpKernel\Event\GetResponseEvent $event) use ($app) {
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...
Coding Style introduced by
Expected 1 space after FUNCTION keyword; 0 found
Loading history...
681
682 352
            if (\Symfony\Component\HttpKernel\HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
683 98
                return;
684
            }
685
686 352
            $route = $event->getRequest()->attributes->get('_route');
687
688 352
            if (is_null($route)) {
689
                return;
690
            }
691
692 352
            $app['monolog']->debug('KernelEvents::REQUEST '.$route);
693
694
            // 全体
695 352
            $app['eccube.event.dispatcher']->dispatch('eccube.event.app.request', $event);
696
697 352
            if (strpos($route, 'admin') === 0) {
698
                // 管理画面
699 187
                $app['eccube.event.dispatcher']->dispatch('eccube.event.admin.request', $event);
700
            } else {
701
                // フロント画面
702 166
                $app['eccube.event.dispatcher']->dispatch('eccube.event.front.request', $event);
703
            }
704
705
            // ルーティング単位
706 352
            $app['eccube.event.dispatcher']->dispatch("eccube.event.route.{$route}.request", $event);
707
708 936
        }, 30); // Routing(32)が解決しし, 認証判定(8)が実行される前のタイミング.
0 ignored issues
show
Unused Code Comprehensibility introduced by
50% of this comment could be valid code. Did you maybe forget this after debugging?

Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.

The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.

This check looks for comments that seem to be mostly valid code and reports them.

Loading history...
709
710
        // Controller Event
711 View Code Duplication
        $this->on(\Symfony\Component\HttpKernel\KernelEvents::CONTROLLER, function(\Symfony\Component\HttpKernel\Event\FilterControllerEvent $event) use ($app) {
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...
Coding Style introduced by
Expected 1 space after FUNCTION keyword; 0 found
Loading history...
712
713 351
            if (\Symfony\Component\HttpKernel\HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
714 98
                return;
715
            }
716
717
718 349
            $route = $event->getRequest()->attributes->get('_route');
719
720 349
            if (is_null($route)) {
721
                return;
722
            }
723
724 349
            $app['monolog']->debug('KernelEvents::CONTROLLER '.$route);
725
726
            // 全体
727 349
            $app['eccube.event.dispatcher']->dispatch('eccube.event.app.controller', $event);
728
729 349
            if (strpos($route, 'admin') === 0) {
730
                // 管理画面
731 185
                $app['eccube.event.dispatcher']->dispatch('eccube.event.admin.controller', $event);
732
            } else {
733
                // フロント画面
734 165
                $app['eccube.event.dispatcher']->dispatch('eccube.event.front.controller', $event);
735
            }
736
737
            // ルーティング単位
738 349
            $app['eccube.event.dispatcher']->dispatch("eccube.event.route.{$route}.controller", $event);
739 936
        });
740
741
        // Response Event
742 View Code Duplication
        $this->on(\Symfony\Component\HttpKernel\KernelEvents::RESPONSE, function(\Symfony\Component\HttpKernel\Event\FilterResponseEvent $event) use ($app) {
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...
Coding Style introduced by
Expected 1 space after FUNCTION keyword; 0 found
Loading history...
743
744 347
            if (\Symfony\Component\HttpKernel\HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
745 98
                return;
746
            }
747
748 347
            $route = $event->getRequest()->attributes->get('_route');
749
750 347
            if (is_null($route)) {
751 1
                return;
752
            }
753
754 346
            $app['monolog']->debug('KernelEvents::RESPONSE '.$route);
755
756
            // ルーティング単位
757 346
            $app['eccube.event.dispatcher']->dispatch("eccube.event.route.{$route}.response", $event);
758
759 346
            if (strpos($route, 'admin') === 0) {
760
                // 管理画面
761 187
                $app['eccube.event.dispatcher']->dispatch('eccube.event.admin.response', $event);
762
            } else {
763
                // フロント画面
764 160
                $app['eccube.event.dispatcher']->dispatch('eccube.event.front.response', $event);
765
            }
766
767
            // 全体
768 346
            $app['eccube.event.dispatcher']->dispatch('eccube.event.app.response', $event);
769 936
        });
770
771
        // Exception Event
772 View Code Duplication
        $this->on(\Symfony\Component\HttpKernel\KernelEvents::EXCEPTION, function(\Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent $event) use ($app) {
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...
Coding Style introduced by
Expected 1 space after FUNCTION keyword; 0 found
Loading history...
773
774 12
            if (\Symfony\Component\HttpKernel\HttpKernelInterface::MASTER_REQUEST !== $event->getRequestType()) {
775
                return;
776
            }
777
778 12
            $route = $event->getRequest()->attributes->get('_route');
779
780 12
            if (is_null($route)) {
781
                return;
782
            }
783
784 12
            $app['monolog']->debug('KernelEvents::EXCEPTION '.$route);
785
786
            // ルーティング単位
787 12
            $app['eccube.event.dispatcher']->dispatch("eccube.event.route.{$route}.exception", $event);
788
789 12
            if (strpos($route, 'admin') === 0) {
790
                // 管理画面
791 2
                $app['eccube.event.dispatcher']->dispatch('eccube.event.admin.exception', $event);
792
            } else {
793
                // フロント画面
794 10
                $app['eccube.event.dispatcher']->dispatch('eccube.event.front.exception', $event);
795
            }
796
797
            // 全体
798 12
            $app['eccube.event.dispatcher']->dispatch('eccube.event.app.exception', $event);
799 936
        });
800
801
        // Terminate Event
802 View Code Duplication
        $this->on(\Symfony\Component\HttpKernel\KernelEvents::TERMINATE, function(\Symfony\Component\HttpKernel\Event\PostResponseEvent $event) use ($app) {
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...
Coding Style introduced by
Expected 1 space after FUNCTION keyword; 0 found
Loading history...
803
804 347
            $route = $event->getRequest()->attributes->get('_route');
805
806 347
            if (is_null($route)) {
807 1
                return;
808
            }
809
810 346
            $app['monolog']->debug('KernelEvents::TERMINATE '.$route);
811
812
            // ルーティング単位
813 346
            $app['eccube.event.dispatcher']->dispatch("eccube.event.route.{$route}.terminate", $event);
814
815 346
            if (strpos($route, 'admin') === 0) {
816
                // 管理画面
817 187
                $app['eccube.event.dispatcher']->dispatch('eccube.event.admin.terminate', $event);
818
            } else {
819
                // フロント画面
820 160
                $app['eccube.event.dispatcher']->dispatch('eccube.event.front.terminate', $event);
821
            }
822
823
            // 全体
824 346
            $app['eccube.event.dispatcher']->dispatch('eccube.event.app.terminate', $event);
825 936
        });
826
    }
827
828 936
    public function loadPlugin()
0 ignored issues
show
introduced by
Missing function doc comment
Loading history...
829
    {
830
        // プラグインディレクトリを探索.
831 936
        $basePath = __DIR__.'/../../app/Plugin';
832 936
        $finder = Finder::create()
833 936
            ->in($basePath)
834 936
            ->directories()
835 936
            ->depth(0);
836
837 936
        $finder->sortByName();
838
839
        // ハンドラ優先順位をdbから持ってきてハッシュテーブルを作成
840 936
        $priorities = array();
841 936
        $handlers = $this['orm.em']
842 936
            ->getRepository('Eccube\Entity\PluginEventHandler')
843 936
            ->getHandlers();
844 936
        foreach ($handlers as $handler) {
845
            if ($handler->getPlugin()->getEnable() && !$handler->getPlugin()->getDelFlg()) {
0 ignored issues
show
Coding Style introduced by
Blank line found at start of control structure
Loading history...
846
847
                $priority = $handler->getPriority();
848
            } else {
849
                // Pluginがdisable、削除済みの場合、EventHandlerのPriorityを全て0とみなす
850
                $priority = \Eccube\Entity\PluginEventHandler::EVENT_PRIORITY_DISABLED;
851
            }
852 936
            $priorities[$handler->getPlugin()->getClassName()][$handler->getEvent()][$handler->getHandler()] = $priority;
853
        }
854
855
        // プラグインをロードする.
856
        // config.yml/event.ymlの定義に沿ってインスタンスの生成を行い, イベント設定を行う.
857 936
        foreach ($finder as $dir) {
858
            //config.ymlのないディレクトリは無視する
859 140
            $path = $dir->getRealPath();
860 140
            $code = $dir->getBaseName();
861
            try {
862 140
                $this['eccube.service.plugin']->checkPluginArchiveContent($path);
863
            } catch (\Eccube\Exception\PluginException $e) {
864
                $this['monolog']->warning("skip {$code} config loading. config.yml not foud or invalid.", array(
0 ignored issues
show
introduced by
Add a comma after each item in a multi-line array
Loading history...
865
                    'path' =>  $path,
866
                    'original-message' => $e->getMessage()
867
                ));
868
                continue;
869
            }
870 140
            $config = $this['eccube.service.plugin']->readYml($dir->getRealPath().'/config.yml');
871
872 140
            $plugin = $this['orm.em']
873 140
                ->getRepository('Eccube\Entity\Plugin')
874 140
                ->findOneBy(array('code' => $config['code']));
875
876
            // const
877 140
            if (isset($config['const'])) {
878 1
                $this['config'] = $this->share($this->extend('config', function($eccubeConfig) use ($config) {
0 ignored issues
show
Coding Style introduced by
Expected 1 space after FUNCTION keyword; 0 found
Loading history...
879 1
                    $eccubeConfig[$config['code']] = array(
880 1
                        'const' => $config['const'],
881
                    );
882
883 1
                    return $eccubeConfig;
884 1
                }));
885
            }
886
887 140
            if ($plugin && $plugin->getEnable() == Constant::DISABLED) {
888
                // プラグインが無効化されていれば読み込まない
889 1
                continue;
890
            }
891
892
            // Type: Event
893 139
            if (isset($config['event'])) {
894 139
                $class = '\\Plugin\\'.$config['code'].'\\'.$config['event'];
895 139
                $eventExists = true;
896
897 139 View Code Duplication
                if (!class_exists($class)) {
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...
898
                    $this['monolog']->warning("skip {$code} loading. event class not foud.", array(
899
                        'class' =>  $class,
900
                    ));
901
                    $eventExists = false;
902
                }
903
904 139
                if ($eventExists && file_exists($dir->getRealPath().'/event.yml')) {
0 ignored issues
show
Coding Style introduced by
Blank line found at start of control structure
Loading history...
905
906 139
                    $subscriber = new $class($this);
907
908 139
                    foreach (Yaml::parse(file_get_contents($dir->getRealPath().'/event.yml')) as $event => $handlers) {
909 139
                        foreach ($handlers as $handler) {
910 139
                            if (!isset($priorities[$config['event']][$event][$handler[0]])) { // ハンドラテーブルに登録されていない(ソースにしか記述されていない)ハンドラは一番後ろにする
911 139
                                $priority = \Eccube\Entity\PluginEventHandler::EVENT_PRIORITY_LATEST;
912
                            } else {
913
                                $priority = $priorities[$config['event']][$event][$handler[0]];
914
                            }
915
                            // 優先度が0のプラグインは登録しない
916 139
                            if (\Eccube\Entity\PluginEventHandler::EVENT_PRIORITY_DISABLED != $priority) {
917 139
                                $this['eccube.event.dispatcher']->addListener($event, array($subscriber, $handler[0]), $priority);
918
                            }
919
                        }
920
                    }
921
                }
922
            }
923
            // Type: ServiceProvider
924 139
            if (isset($config['service'])) {
925
                foreach ($config['service'] as $service) {
926
                    $class = '\\Plugin\\'.$config['code'].'\\ServiceProvider\\'.$service;
927 View Code Duplication
                    if (!class_exists($class)) {
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...
928
                        $this['monolog']->warning("skip {$code} loading. service provider class not foud.", array(
929
                            'class' =>  $class,
930
                        ));
931
                        continue;
932
                    }
933 936
                    $this->register(new $class($this));
934
                }
935
            }
936
        }
937
    }
938
939
    /**
940
     * PHPUnit を実行中かどうかを設定する.
941
     *
942
     * @param boolean $testMode PHPUnit を実行中の場合 true
943
     */
944 923
    public function setTestMode($testMode) {
945 923
        $this->testMode = $testMode;
946
    }
947
948
    /**
949
     * PHPUnit を実行中かどうか.
950
     *
951
     * @return boolean PHPUnit を実行中の場合 true
952
     */
953 353
    public function isTestMode()
954
    {
955 353
        return $this->testMode;
956
    }
957
958
    /**
959
     *
960
     * データベースの接続を確認
961
     * 成功 : trueを返却
962
     * 失敗 : \Doctrine\DBAL\DBALExceptionエラーが発生( 接続に失敗した場合 )、エラー画面を表示しdie()
963
     * 備考 : app['debug']がtrueの際は処理を行わない
964
     * @return boolean true
965
     *
966
     */
967 936
    protected function checkDatabaseConnection()
968
    {
969 936
        if ($this['debug']) {
970 933
            return;
971
        }
972
        try {
973 3
            $this['db']->connect();
974
        } catch (\Doctrine\DBAL\DBALException $e) {
975
            $this['monolog']->error($e->getMessage());
976
            $this['twig.path'] = array(__DIR__.'/Resource/template/exception');
977
            $html = $this['twig']->render('error.twig', array(
978
                'error_title' => 'データーベース接続エラー',
979
                'error_message' => 'データーベースを確認してください',
980
            ));
981
            $response = new Response();
982
            $response->setContent($html);
983
            $response->setStatusCode('500');
984
            $response->headers->set('Content-Type', 'text/html');
985
            $response->send();
986
            die();
0 ignored issues
show
Coding Style Compatibility introduced by
The method checkDatabaseConnection() contains an exit expression.

An exit expression should only be used in rare cases. For example, if you write a short command line script.

In most cases however, using an exit expression makes the code untestable and often causes incompatibilities with other libraries. Thus, unless you are absolutely sure it is required here, we recommend to refactor your code to avoid its usage.

Loading history...
987
        }
988 3
        return true;
0 ignored issues
show
introduced by
Missing blank line before return statement
Loading history...
989
    }
990
}
991