Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 5 |
CRAP | |
0.00% |
0 / 89 |
Step4Type | |
0.00% |
0 / 1 |
|
0.00% |
0 / 5 |
182 | |
0.00% |
0 / 89 |
__construct | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
buildForm | |
0.00% |
0 / 1 |
42 | |
0.00% |
0 / 49 |
|||
anonymous function | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 25 |
|||
getName | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 3 |
|||
validate | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 8 |
<?php | |
/* | |
* This file is part of EC-CUBE | |
* | |
* Copyright(c) 2000-2015 LOCKON CO.,LTD. All Rights Reserved. | |
* | |
* http://www.lockon.co.jp/ | |
* | |
* This program is free software; you can redistribute it and/or | |
* modify it under the terms of the GNU General Public License | |
* as published by the Free Software Foundation; either version 2 | |
* of the License, or (at your option) any later version. | |
* | |
* This program is distributed in the hope that it will be useful, | |
* but WITHOUT ANY WARRANTY; without even the implied warranty of | |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
* GNU General Public License for more details. | |
* | |
* You should have received a copy of the GNU General Public License | |
* along with this program; if not, write to the Free Software | |
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | |
*/ | |
namespace Eccube\Form\Type\Install; | |
use Symfony\Component\Form\AbstractType; | |
use Symfony\Component\Form\Extension\Core\Type; | |
use Symfony\Component\Form\FormBuilderInterface; | |
use Symfony\Component\Form\FormError; | |
use Symfony\Component\Form\FormEvents; | |
use Symfony\Component\Validator\Constraints as Assert; | |
use Symfony\Component\Validator\Context\ExecutionContext; | |
class Step4Type extends AbstractType | |
{ | |
public $app; | |
public function __construct(\Silex\Application $app) | |
{ | |
$this->app = $app; | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function buildForm(FormBuilderInterface $builder, array $options) | |
{ | |
$database = array(); | |
if (extension_loaded('pdo_pgsql')) { | |
$database['pdo_pgsql'] = 'PostgreSQL'; | |
} | |
if (extension_loaded('pdo_mysql')) { | |
$database['pdo_mysql'] = 'MySQL'; | |
} | |
if (extension_loaded('pdo_sqlite')) { | |
$database['pdo_sqlite'] = 'SQLite(開発者用)'; | |
} | |
$builder | |
->add('database', 'choice', array( | |
'label' => 'データベースの種類', | |
'choices' => $database, | |
'expanded' => false, | |
'multiple' => false, | |
'constraints' => array( | |
new Assert\NotBlank(), | |
), | |
)) | |
->add('database_host', 'text', array( | |
'label' => 'データベースのホスト名', | |
'constraints' => array( | |
new Assert\Callback(array($this, 'validate')), | |
), | |
)) | |
->add('database_port', 'text', array( | |
'label' => 'ポート番号', | |
'required' => false, | |
)) | |
->add('database_name', 'text', array( | |
'label' => 'データベース名', | |
'constraints' => array( | |
new Assert\Callback(array($this, 'validate')), | |
), | |
)) | |
->add('database_user', 'text', array( | |
'label' => 'ユーザ名', | |
'constraints' => array( | |
new Assert\Callback(array($this, 'validate')), | |
), | |
)) | |
->add('database_password', 'password', array( | |
'label' => 'パスワード', | |
'constraints' => array( | |
new Assert\Callback(array($this, 'validate')), | |
), | |
)) | |
->addEventListener(FormEvents::POST_SUBMIT, function ($event) { | |
$form = $event->getForm(); | |
$data = $form->getData(); | |
try { | |
$config = new \Doctrine\DBAL\Configuration(); | |
if ($data['database'] == 'pdo_sqlite') { | |
$connectionParams = array( | |
'driver' => $data['database'], | |
'path' => __DIR__.'/../../../../../app/config/eccube/eccube.db' | |
); | |
} else { | |
$connectionParams = array( | |
'dbname' => $data['database_name'], | |
'user' => $data['database_user'], | |
'password' => $data['database_password'], | |
'host' => $data['database_host'], | |
'driver' => $data['database'], | |
'port' => $data['database_port'], | |
); | |
} | |
// todo MySQL, PostgreSQLのバージョンチェックも欲しい.DBALで接続すればエラーになる? | |
$conn = \Doctrine\DBAL\DriverManager::getConnection($connectionParams, $config); | |
$conn->connect(); | |
} catch (\Exception $e) { | |
$form['database']->addError(new FormError('データベースに接続できませんでした。' . $e->getMessage())); | |
} | |
}); | |
} | |
/** | |
* {@inheritdoc} | |
*/ | |
public function getName() | |
{ | |
return 'install_step4'; | |
} | |
public function validate($data, ExecutionContext $context, $param = null) | |
{ | |
$parameters = $this->app['request']->get('install_step4'); | |
if ($parameters['database'] != 'pdo_sqlite'){ | |
$context->validateValue($data, array( | |
new Assert\NotBlank() | |
)); | |
} | |
} | |
} |