Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
0.00% |
0 / 1 |
|
0.00% |
0 / 16 |
CRAP | |
0.00% |
0 / 466 |
| PluginController | |
0.00% |
0 / 1 |
|
0.00% |
0 / 16 |
7832 | |
0.00% |
0 / 466 |
| index | |
0.00% |
0 / 1 |
210 | |
0.00% |
0 / 69 |
|||
| update | |
0.00% |
0 / 1 |
56 | |
0.00% |
0 / 39 |
|||
| enable | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 14 |
|||
| disable | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 14 |
|||
| uninstall | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 11 |
|||
| handler | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 10 |
|||
| handler_up | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 5 |
|||
| handler_down | |
0.00% |
0 / 1 |
2 | |
0.00% |
0 / 5 |
|||
| install | |
0.00% |
0 / 1 |
56 | |
0.00% |
0 / 41 |
|||
| ownersInstall | |
0.00% |
0 / 1 |
272 | |
0.00% |
0 / 79 |
|||
| upgrade | |
0.00% |
0 / 1 |
110 | |
0.00% |
0 / 57 |
|||
| authenticationSetting | |
0.00% |
0 / 1 |
12 | |
0.00% |
0 / 26 |
|||
| download | |
0.00% |
0 / 1 |
42 | |
0.00% |
0 / 32 |
|||
| getRequestApi | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 26 |
|||
| getResponseErrorMessage | |
0.00% |
0 / 1 |
6 | |
0.00% |
0 / 10 |
|||
| getUnregisteredPlugins | |
0.00% |
0 / 1 |
90 | |
0.00% |
0 / 28 |
|||
| <?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\Controller\Admin\Store; | |
| use Eccube\Application; | |
| use Eccube\Common\Constant; | |
| use Eccube\Controller\AbstractController; | |
| use Eccube\Exception\PluginException; | |
| use Eccube\Util\Str; | |
| use Symfony\Component\Filesystem\Filesystem; | |
| use Symfony\Component\Finder\Finder; | |
| use Symfony\Component\HttpFoundation\Request; | |
| use Symfony\Component\HttpKernel\Exception\NotFoundHttpException; | |
| use Symfony\Component\Routing\Exception\RouteNotFoundException; | |
| use Symfony\Component\Validator\Constraints as Assert; | |
| use Symfony\Component\Form\FormError; | |
| use Monolog\Logger; | |
| class PluginController extends AbstractController | |
| { | |
| /** | |
| * @var string 証明書ファイル | |
| */ | |
| private $certFileName = 'cacert.pem'; | |
| /** | |
| * インストール済プラグイン画面 | |
| * | |
| * @param Application $app | |
| * @param Request $request | |
| */ | |
| public function index(Application $app, Request $request) | |
| { | |
| $pluginForms = array(); | |
| $configPages = array(); | |
| $Plugins = $app['eccube.repository.plugin']->findBy(array(), array('name' => 'ASC')); | |
| // ファイル設置プラグインの取得. | |
| $unregisterdPlugins = $this->getUnregisteredPlugins($Plugins, $app); | |
| $unregisterdPluginsConfigPages = array(); | |
| foreach ($unregisterdPlugins as $unregisterdPlugin) { | |
| try { | |
| $code = $unregisterdPlugin['code']; | |
| // プラグイン用設定画面があれば表示(プラグイン用のサービスプロバイダーに定義されているか) | |
| $unregisterdPluginsConfigPages[$code] = $app->url('plugin_'.$code.'_config'); | |
| } catch (RouteNotFoundException $e) { | |
| // プラグインで設定画面のルートが定義されていない場合は無視 | |
| } | |
| } | |
| $officialPlugins = array(); | |
| $unofficialPlugins = array(); | |
| foreach ($Plugins as $Plugin) { | |
| $form = $app['form.factory'] | |
| ->createNamedBuilder('form'.$Plugin->getId(), 'plugin_management', null, array( | |
| 'plugin_id' => $Plugin->getId(), | |
| )) | |
| ->getForm(); | |
| $pluginForms[$Plugin->getId()] = $form->createView(); | |
| try { | |
| // プラグイン用設定画面があれば表示(プラグイン用のサービスプロバイダーに定義されているか) | |
| $configPages[$Plugin->getCode()] = $app->url('plugin_'.$Plugin->getCode().'_config'); | |
| } catch (\Exception $e) { | |
| // プラグインで設定画面のルートが定義されていない場合は無視 | |
| } | |
| if ($Plugin->getSource() == 0) { | |
| // 商品IDが設定されていない場合、非公式プラグイン | |
| $unofficialPlugins[] = $Plugin; | |
| } else { | |
| $officialPlugins[] = $Plugin; | |
| } | |
| } | |
| // オーナーズストアからダウンロード可能プラグイン情報を取得 | |
| $BaseInfo = $app['eccube.repository.base_info']->get(); | |
| $authKey = $BaseInfo->getAuthenticationKey(); | |
| if (!is_null($authKey)) { | |
| // オーナーズストア通信 | |
| $url = $app['config']['owners_store_url'].'?method=list'; | |
| list($json, $info) = $this->getRequestApi($request, $authKey, $url, $app); | |
| if ($json) { | |
| // 接続成功時 | |
| $data = json_decode($json, true); | |
| if (isset($data['success'])) { | |
| $success = $data['success']; | |
| if ($success == '1') { | |
| // 既にインストールされているかどうか確認 | |
| foreach ($data['item'] as $item) { | |
| foreach ($officialPlugins as $plugin) { | |
| if ($plugin->getSource() == $item['product_id']) { | |
| // 商品IDが同一の情報を設定 | |
| $plugin->setNewVersion($item['version']); | |
| $plugin->setLastUpdateDate($item['last_update_date']); | |
| $plugin->setProductUrl($item['product_url']); | |
| $plugin->setEccubeVersion($item['eccube_version']); | |
| if ($plugin->getVersion() != $item['version']) { | |
| // バージョンが異なる | |
| $plugin->setUpdateStatus(3); | |
| break; | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| } | |
| return $app->render('Store/plugin.twig', array( | |
| 'plugin_forms' => $pluginForms, | |
| 'officialPlugins' => $officialPlugins, | |
| 'unofficialPlugins' => $unofficialPlugins, | |
| 'configPages' => $configPages, | |
| 'unregisterdPlugins' => $unregisterdPlugins, | |
| 'unregisterdPluginsConfigPages' => $unregisterdPluginsConfigPages, | |
| )); | |
| } | |
| /** | |
| * インストール済プラグインからのアップデート | |
| * | |
| * @param Application $app | |
| * @param Request $request | |
| * @param $id | |
| */ | |
| public function update(Application $app, Request $request, $id) | |
| { | |
| $Plugin = $app['eccube.repository.plugin']->find($id); | |
| $form = $app['form.factory'] | |
| ->createNamedBuilder('form'.$id, 'plugin_management', null, array( | |
| 'plugin_id' => null, // placeHolder | |
| )) | |
| ->getForm(); | |
| $message = ''; | |
| if ('POST' === $request->getMethod()) { | |
| $form->handleRequest($request); | |
| if ($form->isValid()) { | |
| $tmpDir = null; | |
| try { | |
| $formFile = $form['plugin_archive']->getData(); | |
| $tmpDir = $app['eccube.service.plugin']->createTempDir(); | |
| $tmpFile = sha1(Str::random(32)).'.'.$formFile->getClientOriginalExtension(); | |
| $formFile->move($tmpDir, $tmpFile); | |
| $app['eccube.service.plugin']->update($Plugin, $tmpDir.'/'.$tmpFile); | |
| $fs = new Filesystem(); | |
| $fs->remove($tmpDir); | |
| $app->addSuccess('admin.plugin.update.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); | |
| } | |
| $message = $e->getMessage(); | |
| } | |
| } else { | |
| $errors = $form->getErrors(true); | |
| foreach ($errors as $error) { | |
| $message = $error->getMessage(); | |
| } | |
| } | |
| } | |
| $app->addError($message, 'admin'); | |
| return $app->redirect($app->url('admin_store_plugin')); | |
| } | |
| /** | |
| * 対象のプラグインを有効にします。 | |
| * | |
| * @param Application $app | |
| * @param $id | |
| */ | |
| public function enable(Application $app, $id) | |
| { | |
| $this->isTokenValid($app); | |
| $Plugin = $app['eccube.repository.plugin']->find($id); | |
| if (!$Plugin) { | |
| throw new NotFoundHttpException(); | |
| } | |
| if ($Plugin->getEnable() == Constant::ENABLED) { | |
| $app->addError('admin.plugin.already.enable', 'admin'); | |
| } else { | |
| $app['eccube.service.plugin']->enable($Plugin); | |
| $app->addSuccess('admin.plugin.enable.complete', 'admin'); | |
| } | |
| return $app->redirect($app->url('admin_store_plugin')); | |
| } | |
| /** | |
| * 対象のプラグインを無効にします。 | |
| * | |
| * @param Application $app | |
| * @param $id | |
| */ | |
| public function disable(Application $app, $id) | |
| { | |
| $this->isTokenValid($app); | |
| $Plugin = $app['eccube.repository.plugin']->find($id); | |
| if (!$Plugin) { | |
| throw new NotFoundHttpException(); | |
| } | |
| if ($Plugin->getEnable() == Constant::ENABLED) { | |
| $app['eccube.service.plugin']->disable($Plugin); | |
| $app->addSuccess('admin.plugin.disable.complete', 'admin'); | |
| } else { | |
| $app->addError('admin.plugin.already.disable', 'admin'); | |
| } | |
| return $app->redirect($app->url('admin_store_plugin')); | |
| } | |
| /** | |
| * 対象のプラグインを削除します。 | |
| * | |
| * @param Application $app | |
| * @param $id | |
| */ | |
| public function uninstall(Application $app, $id) | |
| { | |
| $this->isTokenValid($app); | |
| $Plugin = $app['eccube.repository.plugin']->find($id); | |
| if (!$Plugin) { | |
| $app->deleteMessage(); | |
| return $app->redirect($app->url('admin_store_plugin')); | |
| } | |
| $app['eccube.service.plugin']->uninstall($Plugin); | |
| $app->addSuccess('admin.plugin.uninstall.complete', 'admin'); | |
| return $app->redirect($app->url('admin_store_plugin')); | |
| } | |
| public function handler(Application $app) | |
| { | |
| $handlers = $app['eccube.repository.plugin_event_handler']->getHandlers(); | |
| // 一次元配列からイベント毎の二次元配列に変換する | |
| $HandlersPerEvent = array(); | |
| foreach ($handlers as $handler) { | |
| $HandlersPerEvent[$handler->getEvent()][$handler->getHandlerType()][] = $handler; | |
| } | |
| return $app->render('Store/plugin_handler.twig', array( | |
| 'handlersPerEvent' => $HandlersPerEvent | |
| )); | |
| } | |
| public function handler_up(Application $app, $handlerId) | |
| { | |
| $repo = $app['eccube.repository.plugin_event_handler']; | |
| $repo->upPriority($repo->find($handlerId)); | |
| return $app->redirect($app->url('admin_store_plugin_handler')); | |
| } | |
| public function handler_down(Application $app, $handlerId) | |
| { | |
| $repo = $app['eccube.repository.plugin_event_handler']; | |
| $repo->upPriority($repo->find($handlerId), false); | |
| return $app->redirect($app->url('admin_store_plugin_handler')); | |
| } | |
| /** | |
| * プラグインファイルアップロード画面 | |
| * | |
| * @param Application $app | |
| * @param Request $request | |
| */ | |
| 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, | |
| )); | |
| } | |
| /** | |
| * オーナーズストアプラグインインストール画面 | |
| * | |
| * @param Application $app | |
| * @param Request $request | |
| * @return \Symfony\Component\HttpFoundation\Response | |
| */ | |
| public function ownersInstall(Application $app, Request $request) | |
| { | |
| // オーナーズストアからダウンロード可能プラグイン情報を取得 | |
| $BaseInfo = $app['eccube.repository.base_info']->get(); | |
| $authKey = $BaseInfo->getAuthenticationKey(); | |
| $authResult = true; | |
| $success = 0; | |
| $items = array(); | |
| $promotionItems = array(); | |
| $message = ''; | |
| if (!is_null($authKey)) { | |
| // オーナーズストア通信 | |
| $url = $app['config']['owners_store_url'].'?method=list'; | |
| list($json, $info) = $this->getRequestApi($request, $authKey, $url, $app); | |
| if ($json === false) { | |
| // 接続失敗時 | |
| $success = 0; | |
| $message = $this->getResponseErrorMessage($info); | |
| } else { | |
| // 接続成功時 | |
| $data = json_decode($json, true); | |
| if (isset($data['success'])) { | |
| $success = $data['success']; | |
| if ($success == '1') { | |
| $items = array(); | |
| // 既にインストールされているかどうか確認 | |
| $Plugins = $app['eccube.repository.plugin']->findAll(); | |
| $status = false; | |
| // update_status 1 : 未インストール、2 : インストール済、 3 : 更新あり、4 : 有料購入 | |
| foreach ($data['item'] as $item) { | |
| foreach ($Plugins as $plugin) { | |
| if ($plugin->getSource() == $item['product_id']) { | |
| if ($plugin->getVersion() == $item['version']) { | |
| // バージョンが同じ | |
| $item['update_status'] = 2; | |
| } else { | |
| // バージョンが異なる | |
| $item['update_status'] = 3; | |
| } | |
| $items[] = $item; | |
| $status = true; | |
| break; | |
| } | |
| } | |
| if (!$status) { | |
| // 未インストール | |
| $item['update_status'] = 1; | |
| $items[] = $item; | |
| } | |
| $status = false; | |
| } | |
| // EC-CUBEのバージョンチェック | |
| // 参照渡しをして値を追加 | |
| foreach ($items as &$item) { | |
| if (in_array(Constant::VERSION, $item['eccube_version'])) { | |
| // 対象バージョン | |
| $item['version_check'] = 1; | |
| } else { | |
| // 未対象バージョン | |
| $item['version_check'] = 0; | |
| } | |
| if ($item['price'] != '0' && $item['purchased'] == '0') { | |
| // 有料商品で未購入 | |
| $item['update_status'] = 4; | |
| } | |
| } | |
| unset($item); | |
| // promotionアイテム | |
| $i = 0; | |
| foreach ($items as $item) { | |
| if ($item['promotion'] == 1) { | |
| $promotionItems[] = $item; | |
| unset($items[$i]); | |
| } | |
| $i++; | |
| } | |
| } else { | |
| $message = $data['error_code'].' : '.$data['error_message']; | |
| } | |
| } else { | |
| $success = 0; | |
| $message = "EC-CUBEオーナーズストアにエラーが発生しています。"; | |
| } | |
| } | |
| } else { | |
| $authResult = false; | |
| } | |
| return $app->render('Store/plugin_owners_install.twig', array( | |
| 'authResult' => $authResult, | |
| 'success' => $success, | |
| 'items' => $items, | |
| 'promotionItems' => $promotionItems, | |
| 'message' => $message, | |
| )); | |
| } | |
| /** | |
| * オーナーズブラグインインストール、アップデート | |
| * | |
| * @param Application $app | |
| * @param Request $request | |
| * @param $action | |
| * @param $id | |
| * @param $version | |
| */ | |
| public function upgrade(Application $app, Request $request, $action, $id, $version) | |
| { | |
| $BaseInfo = $app['eccube.repository.base_info']->get(); | |
| $authKey = $BaseInfo->getAuthenticationKey(); | |
| $message = ''; | |
| if (!is_null($authKey)) { | |
| // オーナーズストア通信 | |
| $url = $app['config']['owners_store_url'].'?method=download&product_id='.$id; | |
| list($json, $info) = $this->getRequestApi($request, $authKey, $url, $app); | |
| if ($json === false) { | |
| // 接続失敗時 | |
| $message = $this->getResponseErrorMessage($info); | |
| } else { | |
| // 接続成功時 | |
| $data = json_decode($json, true); | |
| if (isset($data['success'])) { | |
| $success = $data['success']; | |
| if ($success == '1') { | |
| $tmpDir = null; | |
| try { | |
| $service = $app['eccube.service.plugin']; | |
| $item = $data['item']; | |
| $file = base64_decode($item['data']); | |
| $extension = pathinfo($item['file_name'], PATHINFO_EXTENSION); | |
| $tmpDir = $service->createTempDir(); | |
| $tmpFile = sha1(Str::random(32)).'.'.$extension; | |
| // ファイル作成 | |
| $fs = new Filesystem(); | |
| $fs->dumpFile($tmpDir.'/'.$tmpFile, $file); | |
| if ($action == 'install') { | |
| $service->install($tmpDir.'/'.$tmpFile, $id); | |
| $app->addSuccess('admin.plugin.install.complete', 'admin'); | |
| } else if ($action == 'update') { | |
| $Plugin = $app['eccube.repository.plugin']->findOneBy(array('source' => $id)); | |
| $service->update($Plugin, $tmpDir.'/'.$tmpFile); | |
| $app->addSuccess('admin.plugin.update.complete', 'admin'); | |
| } | |
| $fs = new Filesystem(); | |
| $fs->remove($tmpDir); | |
| // ダウンロード完了通知処理(正常終了時) | |
| $url = $app['config']['owners_store_url'].'?method=commit&product_id='.$id.'&status=1&version='.$version; | |
| $this->getRequestApi($request, $authKey, $url, $app); | |
| return $app->redirect($app->url('admin_store_plugin')); | |
| } catch (PluginException $e) { | |
| if (!empty($tmpDir) && file_exists($tmpDir)) { | |
| $fs = new Filesystem(); | |
| $fs->remove($tmpDir); | |
| } | |
| $message = $e->getMessage(); | |
| } | |
| } else { | |
| $message = $data['error_code'].' : '.$data['error_message']; | |
| } | |
| } else { | |
| $message = "EC-CUBEオーナーズストアにエラーが発生しています。"; | |
| } | |
| } | |
| } | |
| // ダウンロード完了通知処理(エラー発生時) | |
| $url = $app['config']['owners_store_url'].'?method=commit&product_id='.$id.'&status=0&version='.$version.'&message='.urlencode($message); | |
| $this->getRequestApi($request, $authKey, $url, $app); | |
| $app->addError($message, 'admin'); | |
| return $app->redirect($app->url('admin_store_plugin_owners_install')); | |
| } | |
| /** | |
| * 認証キー設定画面 | |
| * | |
| * @param Application $app | |
| * @param Request $request | |
| */ | |
| public function authenticationSetting(Application $app, Request $request) | |
| { | |
| $form = $app->form()->getForm(); | |
| $BaseInfo = $app['eccube.repository.base_info']->get(); | |
| // 認証キーの取得 | |
| $form->add( | |
| 'authentication_key', 'text', array( | |
| 'label' => '認証キー', | |
| 'constraints' => array( | |
| new Assert\Regex(array( | |
| 'pattern' => "/^[0-9a-zA-Z]+$/", | |
| )), | |
| ), | |
| 'data' => $BaseInfo->getAuthenticationKey(), | |
| )); | |
| if ('POST' === $request->getMethod()) { | |
| $form->handleRequest($request); | |
| if ($form->isValid()) { | |
| $data = $form->getData(); | |
| // 認証キーの登録 | |
| $BaseInfo->setAuthenticationKey($data['authentication_key']); | |
| $app['orm.em']->flush($BaseInfo); | |
| $app->addSuccess('admin.plugin.authentication.setting.complete', 'admin'); | |
| } | |
| } | |
| return $app->render('Store/authentication_setting.twig', array( | |
| 'form' => $form->createView(), | |
| )); | |
| } | |
| /** | |
| * 認証キーダウンロード | |
| * | |
| * @param Application $app | |
| * @param Request $request | |
| * @return \Symfony\Component\HttpFoundation\RedirectResponse | |
| */ | |
| public function download(Application $app, Request $request) | |
| { | |
| $this->isTokenValid($app); | |
| $url = $app['config']['cacert_pem_url']; | |
| $curl = curl_init($url); | |
| $fileName = $app['config']['root_dir'].'/app/config/eccube/'.$this->certFileName; | |
| $fp = fopen($fileName, 'w'); | |
| if ($fp === false) { | |
| $app->addError('admin.plugin.download.pem.error', 'admin'); | |
| $app->log('Cannot fopen to '.$fileName, array(), Logger::ERROR); | |
| return $app->redirect($app->url('admin_store_authentication_setting')); | |
| } | |
| curl_setopt($curl, CURLOPT_FILE, $fp); | |
| curl_setopt($curl, CURLOPT_HEADER, 0); | |
| $results = curl_exec($curl); | |
| $error = curl_error($curl); | |
| curl_close($curl); | |
| // curl で取得できない場合は file_get_contents で取得を試みる | |
| if ($results === false) { | |
| $file = file_get_contents($url); | |
| if ($file !== false) { | |
| fwrite($fp, $file); | |
| } | |
| } | |
| fclose($fp); | |
| $f = new Filesystem(); | |
| if ($f->exists($fileName) && filesize($fileName) > 0) { | |
| $app->addSuccess('admin.plugin.download.pem.complete', 'admin'); | |
| } else { | |
| $app->addError('admin.plugin.download.pem.error', 'admin'); | |
| $app->log('curl_error: '.$error, array(), Logger::ERROR); | |
| } | |
| return $app->redirect($app->url('admin_store_authentication_setting')); | |
| } | |
| /** | |
| * APIリクエスト処理 | |
| * | |
| * @param Request $request | |
| * @param $authKey | |
| * @param string $url | |
| * @param Application $app | |
| * @return array | |
| */ | |
| private function getRequestApi(Request $request, $authKey, $url, $app) | |
| { | |
| $curl = curl_init($url); | |
| $options = array( // オプション配列 | |
| //HEADER | |
| CURLOPT_HTTPHEADER => array( | |
| 'Authorization: '.base64_encode($authKey), | |
| 'x-eccube-store-url: '.base64_encode($request->getSchemeAndHttpHost().$request->getBasePath()), | |
| 'x-eccube-store-version: '.base64_encode(Constant::VERSION), | |
| ), | |
| CURLOPT_HTTPGET => true, | |
| CURLOPT_SSL_VERIFYPEER => true, | |
| CURLOPT_RETURNTRANSFER => true, | |
| CURLOPT_FAILONERROR => true, | |
| ); | |
| curl_setopt_array($curl, $options); /// オプション値を設定 | |
| $certFile = $app['config']['root_dir'].'/app/config/eccube/'.$this->certFileName; | |
| if (file_exists($certFile)) { | |
| // php5.6でサーバ上に適切な証明書がなければhttps通信エラーが発生するため、 | |
| // http://curl.haxx.se/ca/cacert.pem を利用して通信する | |
| curl_setopt($curl, CURLOPT_CAINFO, $certFile); | |
| } | |
| $result = curl_exec($curl); | |
| $info = curl_getinfo($curl); | |
| $message = curl_error($curl); | |
| $info['message'] = $message; | |
| curl_close($curl); | |
| $app->log('http get_info', $info); | |
| return array($result, $info); | |
| } | |
| /** | |
| * レスポンスのチェック | |
| * | |
| * @param $info | |
| * @return string | |
| */ | |
| private function getResponseErrorMessage($info) | |
| { | |
| if (!empty($info)) { | |
| $statusCode = $info['http_code']; | |
| $message = $info['message']; | |
| $message = $statusCode.' : '.$message; | |
| } else { | |
| $message = "タイムアウトエラーまたはURLの指定に誤りがあります。"; | |
| } | |
| return $message; | |
| } | |
| /** | |
| * フォルダ設置のみのプラグインを取得する. | |
| * | |
| * @param array $plugins | |
| * @param Application $app | |
| * @return array | |
| */ | |
| protected function getUnregisteredPlugins(array $plugins, \Eccube\Application $app) | |
| { | |
| $finder = new Finder(); | |
| $pluginCodes = array(); | |
| // DB登録済みプラグインコードのみ取得 | |
| foreach ($plugins as $key => $plugin) { | |
| $pluginCodes[] = $plugin->getCode(); | |
| } | |
| // DB登録済みプラグインコードPluginディレクトリから排他 | |
| $dirs = $finder->in($app['config']['plugin_realdir'])->depth(0)->directories(); | |
| // プラグイン基本チェック | |
| $unregisteredPlugins = array(); | |
| foreach ($dirs as $dir) { | |
| $pluginCode = $dir->getBasename(); | |
| if (in_array($pluginCode, $pluginCodes, true)) { | |
| continue; | |
| } | |
| try { | |
| $app['eccube.service.plugin']->checkPluginArchiveContent($dir->getRealPath()); | |
| } catch (\Eccube\Exception\PluginException $e) { | |
| //config.yamlに不備があった際は全てスキップ | |
| $app['monolog']->warning($e->getMessage()); | |
| continue; | |
| } | |
| $config = $app['eccube.service.plugin']->readYml($dir->getRealPath().'/config.yml'); | |
| $unregisteredPlugins[$pluginCode]['name'] = isset($config['name']) ? $config['name'] : null; | |
| $unregisteredPlugins[$pluginCode]['event'] = isset($config['event']) ? $config['event'] : null; | |
| $unregisteredPlugins[$pluginCode]['version'] = isset($config['version']) ? $config['version'] : null; | |
| $unregisteredPlugins[$pluginCode]['enable'] = Constant::DISABLED; | |
| $unregisteredPlugins[$pluginCode]['code'] = isset($config['code']) ? $config['code'] : null; | |
| } | |
| return $unregisteredPlugins; | |
| } | |
| } |