全プロジェクト

タスク一覧

FS#66 - PostPluginOptionsUpdate で getOption() の戻り値が変更されない

割り当てられたプロジェクト:
オープン者 Katsumi (katsumi) - Saturday, 31 March 2007, 07:38 GMT+9
最終修正者 Katsumi (katsumi) - Wednesday, 31 October 2007, 04:13 GMT+9
タスク種別 Bug Report
カテゴリ Backend / Core
状態 クローズ
担当者 不在
OS All
重大度
優先度 通常
報告バージョン 3.3b2
対応予定バージョン 未決定
対応予定日 未決定
進捗 100%
投票 0
非公開 いいえ

詳細

このイベントより前に起こる別のイベント(PostAuthenticationなど)とともに使用すると、変更されたプラグインオプションの値が、getOption() の戻り値として反映されない。

詳しくは、
http://kandk.cafe.coocan.jp/nucleus/index.php?itemid=268
を参照してください。
このタスクが依存しているタスク

クローズ者  Kimitake (kimitake)
Friday, 08 February 2008, 17:50 GMT+9
クローズの理由:  Fixed
コメント記述者 Katsumi (katsumi) - Saturday, 31 March 2007, 10:08 GMT+9
一番簡単な対処方法は、MANAGER::notify() の

$this->_loadPlugin($listener);

の直後に、

if ($eventName==\'PostPluginOptionsUpdate\') $this->plugins[$listener]->_aOptionValues = array();

を入れることなのですが、notify() で PostPluginOptionsUpdate イベントを特別扱いしていることと、PLUGIN クラスのプロパティ、_aOptionValues に直接アクセスしていることで、美しくないコードになっています。将来的なバージョンアップの際のバグの温床になりかねません。
コメント記述者 Katsumi (katsumi) - Saturday, 31 March 2007, 10:11 GMT+9
あるいは、以下の方法でも対処できます。

1)MANAGER クラスに次の関数を追加

function &pidLoaded($pid) {
$plugin=false;
reset($this->plugins);
while (list($name) = each($this->plugins)) {
if ($pid==$this->plugins[$name]->getId()) $plugin= & $this->plugins[$name];
}
return $plugin;
}

2)PLUGIN クラスに次の関数を追加

function _delCachedOptionValues(){
$this->_aOptionValues = array();
}

3)PLUGIN::_applyPluginOptions() に次のコードを最後の部分に追加

if (is_object($o)) {
$plugin=& $manager->pidLoaded($o->opid);
if ($plugin) $plugin->_delCachedOptionValues();
}
コメント記述者 Katsumi (katsumi) - Saturday, 07 April 2007, 04:39 GMT+9
2番目の方法で、UTF-8, EUC とも修正しました。

読み込み中...