Files
Phraseanet/lib/Alchemy/Phrasea/Controller/SetupController.php
Benoît Burnichon 4880f2bf5a Add getAuthenticator usage
Replace $app['authentication']->getUser() by $app->getAuthenticatedUser()
replace twig app['authentication'].getUser() with corresponding method
2015-07-02 12:33:18 +02:00

193 lines
7.2 KiB
PHP

<?php
/*
* This file is part of Phraseanet
*
* (c) 2005-2015 Alchemy
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Alchemy\Phrasea\Controller;
use Alchemy\Phrasea\Application;
use Alchemy\Phrasea\Setup\RequirementCollectionInterface;
use Alchemy\Phrasea\Setup\Requirements\BinariesRequirements;
use Alchemy\Phrasea\Setup\Requirements\FilesystemRequirements;
use Alchemy\Phrasea\Setup\Requirements\LocalesRequirements;
use Alchemy\Phrasea\Setup\Requirements\PhpRequirements;
use Alchemy\Phrasea\Setup\Requirements\SystemRequirements;
use Doctrine\DBAL\Connection;
use Silex\Application as SilexApplication;
use Symfony\Component\HttpFoundation\Request;
class SetupController extends Controller
{
public function rootInstaller(Request $request)
{
$requirementsCollection = $this->getRequirementsCollection();
return $this->render('/setup/index.html.twig', [
'locale' => $this->app['locale'],
'available_locales' => Application::getAvailableLanguages(),
'current_servername' => $request->getScheme() . '://' . $request->getHttpHost() . '/',
'requirementsCollection' => $requirementsCollection,
]);
}
/**
* @return RequirementCollectionInterface[]
*/
private function getRequirementsCollection()
{
return [
new BinariesRequirements(),
new FilesystemRequirements(),
new LocalesRequirements(),
new PhpRequirements(),
new SystemRequirements(),
];
}
public function displayUpgradeInstructions()
{
return $this->render('/setup/upgrade-instructions.html.twig', [
'locale' => $this->app['locale'],
'available_locales' => Application::getAvailableLanguages(),
]);
}
public function getInstallForm(Request $request)
{
$warnings = [];
$requirementsCollection = $this->getRequirementsCollection();
foreach ($requirementsCollection as $requirements) {
foreach ($requirements->getRequirements() as $requirement) {
if (!$requirement->isFulfilled() && !$requirement->isOptional()) {
$warnings[] = $requirement->getTestMessage();
}
}
}
if ($request->getScheme() == 'http') {
$warnings[] = $this->app->trans('It is not recommended to install Phraseanet without HTTPS support');
}
return $this->render('/setup/step2.html.twig', [
'locale' => $this->app['locale'],
'available_locales' => Application::getAvailableLanguages(),
'available_templates' => ['en', 'fr'],
'warnings' => $warnings,
'error' => $request->query->get('error'),
'current_servername' => $request->getScheme() . '://' . $request->getHttpHost() . '/',
'discovered_binaries' => \setup::discover_binaries(),
'rootpath' => realpath(__DIR__ . '/../../../../'),
]);
}
public function doInstall(Request $request)
{
set_time_limit(360);
$servername = $request->getScheme() . '://' . $request->getHttpHost() . '/';
$dbConn = null;
$database_host = $request->request->get('hostname');
$database_port = $request->request->get('port');
$database_user = $request->request->get('user');
$database_password = $request->request->get('db_password');
$appbox_name = $request->request->get('ab_name');
$databox_name = $request->request->get('db_name');
try {
$abInfo = [
'host' => $database_host,
'port' => $database_port,
'user' => $database_user,
'password' => $database_password,
'dbname' => $appbox_name,
];
/** @var Connection $abConn */
$abConn = $this->app['dbal.provider']($abInfo);
$abConn->connect();
} catch (\Exception $e) {
return $this->app->redirectPath('install_step2', [
'error' => $this->app->trans('Appbox is unreachable'),
]);
}
try {
if ($databox_name) {
$dbInfo = [
'host' => $database_host,
'port' => $database_port,
'user' => $database_user,
'password' => $database_password,
'dbname' => $databox_name,
];
/** @var Connection $dbConn */
$dbConn = $this->app['dbal.provider']($dbInfo);
$dbConn->connect();
}
} catch (\Exception $e) {
return $this->app->redirectPath('install_step2', [
'error' => $this->app->trans('Databox is unreachable'),
]);
}
$this->app['dbs.options'] = array_merge(
$this->app['db.options.from_info']($dbInfo),
$this->app['db.options.from_info']($abInfo),
$this->app['dbs.options']
);
$this->app['orm.ems.options'] = array_merge(
$this->app['orm.em.options.from_info']($dbInfo),
$this->app['orm.em.options.from_info']($abInfo),
$this->app['orm.ems.options']
);
$email = $request->request->get('email');
$password = $request->request->get('password');
$template = $request->request->get('db_template');
$dataPath = $request->request->get('datapath_noweb');
try {
$installer = $this->app['phraseanet.installer'];
$installer->setPhraseaIndexerPath($request->request->get('binary_phraseanet_indexer'));
$binaryData = [];
foreach ([
'php_binary' => $request->request->get('binary_php'),
'swf_extract_binary' => $request->request->get('binary_swfextract'),
'pdf2swf_binary' => $request->request->get('binary_pdf2swf'),
'swf_render_binary' => $request->request->get('binary_swfrender'),
'unoconv_binary' => $request->request->get('binary_unoconv'),
'ffmpeg_binary' => $request->request->get('binary_ffmpeg'),
'mp4box_binary' => $request->request->get('binary_MP4Box'),
'pdftotext_binary' => $request->request->get('binary_xpdf'),
'recess_binary' => $request->request->get('binary_recess'),
] as $key => $path) {
$binaryData[$key] = $path;
}
$user = $installer->install($email, $password, $abConn, $servername, $dataPath, $dbConn, $template, $binaryData);
$this->app->getAuthenticator()->openAccount($user);
return $this->app->redirectPath('admin', [
'section' => 'taskmanager',
'notice' => 'install_success',
]);
} catch (\Exception $e) {
return $this->app->redirectPath('install_step2', [
'error' => $this->app->trans('an error occured : %message%', ['%message%' => $e->getMessage()]),
]);
}
}
}