Ticket #2181 (closed 改善提案: 修正済)

Opened 8 years ago

Last modified 7 years ago

開発合宿:プラグインのインストーラ

Reported by: adachi Owned by: somebody
Priority: Milestone: EC-CUBE2.13.0
Component: フロント Version: 2.12.3
Keywords: Cc:
修正済み: yes

Description (last modified by adachi) (diff)

プラグインインストーラ

以下は、現状プラグイン任せなので、エラーがおきやすい

・インストール ・アンインストール ・有効 ・無効

インストール用ユーティリティを用意し、プラグイン作成者に使ってもらう

※テーブル作成、ファイルコピー、ブロック追加など

フロー

* フロー

LC_Page_Admin_OwnersStore::installPlugin
  - トランザクション開始 (SC_QUery::begin())
  - プラグインアーカイブの一時ディレクトリを初期化
  - 必須拡張モジュールのチェック
  - アーカイブを一時ディレクトリに解凍
  - plugin_info.phpを読み込み
  - plugin_info.phpの内容チェック
  - プラグインコードから、既にプラグインがインストールされているかチェック
  - dtb_pluginへレコードを登録
  - 一時ディレクトリから, プラグイン保存ディレクトリへコピー
  - プラグインメインクラスをロード
  - プラグインHTMLディレクトリを作成
  - プラグインインストーラを生成
  - プラグインのinstallメソッドを実行 PLUGIN::install($arrPlugin, $objInstaller);
  - ★インストーラがインストール処理を実行 (SC_Plugin_Installer::execPlugin())
  - トランザクション終了(SC_Query::commit())
  - 一時ディレクトリ削除

* インストール処理のフロー
SC_Plugin_Installer::execPlugin()
 - SQLの構文チェック
 - SQLエラーがある場合はreturn;
 - SQLの実行
 - INSERT実行
 - UPDATE実行
 - ディレクトリコピー
 - ファイルコピー

利用イメージ

* インストーラで利用できるメソッド

- sql($sql, $params)
  SQLを実行

- insert($table, $entity);
  INSERT

- update($table, $entity, $where, $params)
  UPDATE

- addColumn($table_name, $col_name, $col_type)
  カラム追加

- dropColumn($table_name, $col_name)
  カラム削除

- copyFile($src, $dist)
  html/plugin_code以下にコピー

- copyDirectory($src, $dist)
  html/plugin_code以下にコピー

* プラグイン側の利用イメージ
install($arrPlugin, $objPluginInstaller) {
    // カラム追加
    $objPluginInstaller->addColumn("dtb_products" ,"plg_plugin_code_hoge",  "text");

    // テーブル追加
    $objPluginInstaller->sql(
        "create table plg_plugin_code_hogehugatable (
             hoge_id int not null primary key
             hoge_name text)");

    // ※ファイルのコピーは原則html/plugin/[plugin_code]/に置いてもらい、分散させないように
    // data/downloads/plugin/plugin_code/media/hoge.cssをhtml/plugin/plugin_code/media/huga.cssへコピー
    $objPluginInstaller->copyFile("media/hoge.css", "media/huga.css");

    // data/downloads/plugin/plugin_code/js/以下をhtml/plugin/plugin_code/js/へコピー
    $objPluginInstaller->copyDirectory("js", "js");

    // INSERT処理
    $sqlval = array();
    $sqlval['dummy'] = "test";
    $objPluginInstaller->insert('plg_plugin_code_hogehugatable ', $sqlval);

}

uninstall($arrPlugin, $objPluginInstaller) {
    // カラム削除
    $objPluginInstaller->dropColumn("dtb_products", "plg_plugin_code");

    // テーブル削除
    $objPluginInstaller->sql("drop table plg_plugin_code_hoge");

    // ファイル削除
    html以下はアンインストール時にまるっと削除される
}

その他

インストール時のログは、ログ管理から閲覧可能(プラグインログ)

残課題

- アンインストール/有効/無効/削除も対応
- 全体の流れが追いにくくなったのでリファクタリング
- ユーティリティ関数追加
- プラグイン仕様書の更新
etc

Attachments

plugin_info2.tar.gz Download (3.7 KB) - added by h_yoshimoto 8 years ago.
エラー出るプラグイン
CategoryContents_error.tar.gz Download (3.7 KB) - added by h_yoshimoto 8 years ago.
エラー出るプラグインをアップデート

Change History

Changed 8 years ago by h_yoshimoto

エラー出るプラグイン

comment:1 Changed 8 years ago by adachi

使い方:

install($arrPlugin, $objPluginInstaller) {
    // カラム追加
    $objPluginInstaller->sql("alter table dtb_products add column plg_plugin_code_hoge text");
    // テーブル追加
    $objPluginInstaller->sql(
        "create table plg_plugin_code_hogehugatable (
             hoge_id int not null primary key
             hoge_name text)");
    // data/downloads/plugin/plugin_code/media/hoge.cssをhtml/plugin/plugin_code/media/huga.cssへコピー
    $objPluginInstaller->copyFile("media/hoge.css", "media/huga.css");

    // data/downloads/plugin/plugin_code/js/以下をhtml/plugin/plugin_code/js/へコピー
    $objPluginInstaller->copyDirectory("js", "js");
}

comment:2 Changed 8 years ago by adachi

  • Description modified (diff)

Changed 8 years ago by h_yoshimoto

エラー出るプラグインをアップデート

comment:3 Changed 8 years ago by adachi

  • Description modified (diff)

comment:4 Changed 8 years ago by adachi

  • Description modified (diff)

comment:5 Changed 8 years ago by h_yoshimoto

  • Description modified (diff)

comment:6 Changed 8 years ago by adachi

  • Description modified (diff)

comment:7 Changed 8 years ago by adachi

  • Description modified (diff)

comment:8 Changed 8 years ago by h_yoshimoto

  • Milestone changed from EC-CUBE2.13.0 to EC-CUBE2.13 開発合宿

comment:9 Changed 7 years ago by adachi

  • Description modified (diff)

comment:10 Changed 7 years ago by h_yoshimoto

  • Milestone changed from EC-CUBE2.13 開発合宿 to EC-CUBE2.13.0

comment:11 Changed 7 years ago by h_yoshimoto

  • Status changed from new to closed
  • 修正済み set
  • Resolution set to 修正済
Note: See TracTickets for help on using tickets.