public function install(Application $app, Request $request)
{
$form = $app['form.factory']->createBuilder('plugin_local_install')->getForm();
$errors = array();
if ('POST' === $request->getMethod()) {
$form->handleRequest($request);
if ($form->isValid()) {
$tmpDir = null;
try {
$service = $app['eccube.service.plugin'];
$formFile = $form['plugin_archive']->getData();
$tmpDir = $service->createTempDir();
$tmpFile = sha1(Str::random(32)) . '.' . $formFile->getClientOriginalExtension();
// 拡張子を付けないとpharが動かないので付ける
$formFile->move($tmpDir, $tmpFile);
$service->install($tmpDir . '/' . $tmpFile);
$fs = new Filesystem();
$fs->remove($tmpDir);
$app->addSuccess('admin.plugin.install.complete', 'admin');
return $app->redirect($app->url('admin_store_plugin'));
} catch (PluginException $e) {
if (!empty($tmpDir) && file_exists($tmpDir)) {
$fs = new Filesystem();
$fs->remove($tmpDir);
}
$app['monolog']->error("plugin install failed.", array('original-message' => $e->getMessage()));
$errors[] = $e;
}
} else {
foreach ($form->getErrors(true) as $error) {
$errors[] = $error;
}
}
}
return $app->render('Store/plugin_install.twig', array('form' => $form->createView(), 'errors' => $errors));
}