public function registerPlugin($meta, $event_yml, $source = 0)
{
$em = $this->app['orm.em'];
$em->getConnection()->beginTransaction();
try {
$p = new \Eccube\Entity\Plugin();
// インストール直後はプラグインは有効にしない
$p->setName($meta['name'])->setEnable(Constant::DISABLED)->setClassName(isset($meta['event']) ? $meta['event'] : '')->setVersion($meta['version'])->setDelflg(Constant::DISABLED)->setSource($source)->setCode($meta['code']);
$em->persist($p);
$em->flush();
if (is_array($event_yml)) {
foreach ($event_yml as $event => $handlers) {
foreach ($handlers as $handler) {
if (!$this->checkSymbolName($handler[0])) {
throw new PluginException('Handler name format error');
}
$peh = new \Eccube\Entity\PluginEventHandler();
$peh->setPlugin($p)->setEvent($event)->setdelFlg(Constant::DISABLED)->setHandler($handler[0])->setHandlerType($handler[1])->setPriority($this->app['eccube.repository.plugin_event_handler']->calcNewPriority($event, $handler[1]));
$em->persist($peh);
$em->flush();
}
}
}
$em->persist($p);
$this->callPluginManagerMethod($meta, 'install');
$em->flush();
$em->getConnection()->commit();
} catch (\Exception $e) {
$em->getConnection()->rollback();
throw new PluginException($e->getMessage());
}
return $p;
}