<%Dewplayer(javascript)%> 肉少なめ | Item - プラグインのインストールをキャンセルしたい

プラグインのインストールをキャンセルしたい

Title :
プラグインのインストールをキャンセルしたい
Posted on :
2009-05-03
Author :
NKJG
Category :
Nucleusメモ
Hatena Star :

本文

Nucleusのプラグインをインストールを途中でキャンセルとかしたい。コアの機能では要求するNucleusのバージョンは設定できるけど、PHPのバージョンは設定できないし。

管理画面からインストールされる場合

管理画面からインストールされる場合の処理を見ると、プラグインのインストール手順は以下のような感じ。

  1. プラグイン名のチェック(正しいファイル名かどうか・同名のプラグインがすでにインストールされているかどうか)
  2. 新しいプラグインの順序(porder)の決定
  3. PreAddPluginイベント
  4. pluginテーブルに書き込み、プラグインIDをゲット
  5. managerが持つインストール済みプラグインのキャッシュを削除
  6. プラグインのインスタンスをmanagerから取得してみる(ファイルを読むのはここ・新しいプラグインのinit()が呼ばれている)
  7. 要求されるNucleusのバージョンやパッチ・レベルの確認
  8. 依存しているプラグインの確認
  9. プラグインのinstall()メソッドを呼ぶ
  10. PostAddPluginイベント
  11. イベントデータの更新 (その後、一覧画面にリダイレクト)

Nucleusのバージョン確認や依存するプラグインの確認でインストール不可と判断された場合(ファイルの読み込みには成功している場合)、ADMINクラスのインスタンスのdeleteOnePlugin()が呼ばれ、その後同じくADMINクラスのインスタンスのerror()でエラー・メッセージを表示している。

プラグインから自身のインストールをキャンセルするには、install()メソッド中でそれを真似すればよさそう。ADMINクラスのインスタンスはグローバル変数の$adminなので、単純に

  function install() {
    global $admin;
    $admin->deleteOnePlugin($this->getID());
    $admin->error('You is a big fool man.'); // エラーメッセージ
  }

で多分大丈夫。

インストールスクリプトからインストールされる場合

ADMINクラスのインスタンスが使われないため、別の実装が必要。……というか、きちんと対応するのは無理くさい。pluginテーブルから情報を消すので精一杯。