Nucleusのプラグインをインストールを途中でキャンセルとかしたい。コアの機能では要求するNucleusのバージョンは設定できるけど、PHPのバージョンは設定できないし。
管理画面からインストールされる場合
管理画面からインストールされる場合の処理を見ると、プラグインのインストール手順は以下のような感じ。
- プラグイン名のチェック(正しいファイル名かどうか・同名のプラグインがすでにインストールされているかどうか)
- 新しいプラグインの順序(porder)の決定
- PreAddPluginイベント
- pluginテーブルに書き込み、プラグインIDをゲット
- managerが持つインストール済みプラグインのキャッシュを削除
- プラグインのインスタンスをmanagerから取得してみる(ファイルを読むのはここ・新しいプラグインのinit()が呼ばれている)
- 要求されるNucleusのバージョンやパッチ・レベルの確認
- 依存しているプラグインの確認
- プラグインのinstall()メソッドを呼ぶ
- PostAddPluginイベント
- イベントデータの更新 (その後、一覧画面にリダイレクト)
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テーブルから情報を消すので精一杯。