Nucleus の PostPluginOptionsUpdate にバグ
2007年3月30日
PostPluginOptionsUpdate イベントにバグを見つけた。これは、プラグインオプションを変更したあとに起こるイベントである。このイベントを単独で使用するときにはバグは発生しないが、このイベントより前に起こる別のイベント(PostAuthenticationなど)とともに使用すると、変更されたプラグインオプションの値が、getOption() の戻り値として反映されない。
このバグは、Nucleus 3.24 でも、3月30日現在の CVS 最新版(3.3 ベータ 3)でも同等に見られる。
検証コード:
この検証コードでは、getOption() の別のバグを修正するための記述(最後の3行)も入っている。プラグインオプションを変更しても、PostPluginOptionsUpdateでは反映されないことが分かる。このバグを回避するには、PostPluginOptionsUpdateの冒頭で
を実行すればよい。コアの ADMIN.php をざっと見てみたが、このバグ修正はちょっと複雑かもしれない。3.3 のリリースに間に合うかどうかは、分からない。
追記:
このバグは、Nucleus 3.3 で解消されます。
このバグは、Nucleus 3.24 でも、3月30日現在の CVS 最新版(3.3 ベータ 3)でも同等に見られる。
検証コード:
<?php
class NP_ppOptionsUpdate extends NucleusPlugin {
function getName() { return quickQuery('SELECT pfile as result FROM '.sql_table('plugin').' WHERE pid='.(int)$this->getID()); }
function getMinNucleusVersion() { return 220; }
function getAuthor() { return 'Katsumi'; }
function getVersion() { return '0.1'; }
function getURL() {return 'http://hp.vector.co.jp/authors/VA016157/';}
function getDescription() { return $this->getName().' plugin'; }
function supportsFeature($what) { return (int)($what=='SqlTablePrefix'); }
function getEventList() { return array('PostPluginOptionsUpdate','PostAuthentication'); }
function install() {
$this->createOption('test','test','yesno','yes');
}
function event_PostPluginOptionsUpdate(&$data) {
if ($data['plugid']==$this->getId() && $data['context']=='global') {
//$this->_aOptionValues = array();
echo '
<script type="text/javascript">
/*<![CDATA[*/
alert("'.htmlspecialchars($this->getOption('test')).'");
/*]]>*/
</script>';
}
}
function event_PostAuthentication(&$data){
$this->getOption('test');
}
function getOption($name){
return $this->_getOption('global', 0, $name);
}
}
?>この検証コードでは、getOption() の別のバグを修正するための記述(最後の3行)も入っている。プラグインオプションを変更しても、PostPluginOptionsUpdateでは反映されないことが分かる。このバグを回避するには、PostPluginOptionsUpdateの冒頭で
$this->_aOptionValues = array();
を実行すればよい。コアの ADMIN.php をざっと見てみたが、このバグ修正はちょっと複雑かもしれない。3.3 のリリースに間に合うかどうかは、分からない。
追記:
このバグは、Nucleus 3.3 で解消されます。