pluginoptionクラス
2008年2月9日
プラグインオプションの値は、plugionoptionクラスのオブジェクトに保持させることにした。
pluginクラス内にて、
もしくは、
のように使う。
pluginoptionクラスは、pluginクラスと同じ、plugin.phpファイルに記述してある。これは、プラグインオプションなしでプラグインクラスを使用するケースはほとんど無いと考えられるため。
pluginクラス内にて、
$this->option=new pluginoption($this->id);
もしくは、
public function blogoption($bid){ $obj=new pluginoption($this->id,'blog',$bid); return $obj; }
のように使う。
pluginoptionクラスは、pluginクラスと同じ、plugin.phpファイルに記述してある。これは、プラグインオプションなしでプラグインクラスを使用するケースはほとんど無いと考えられるため。
final class pluginoption { static private $data=array(); static private $num=0; private $_jeans_oids,$_jeans_cid; // option-ids, context-id public function __construct($pid,$type='global',$cid=0){ $this->_jeans_cid=$cid; $this->_jeans_oids=$oids=self::_jeans_oid($pid,$type); foreach($oids as &$row){ $oname=$row['oname']; $this->$oname=$row['odef']; // Set default value } sql::unbuffered_query( 'SELECT oid,ovalue FROM jeans_plugin_option '. 'WHERE ocontextid=<%1%> AND oid IN (<%2:key%>)', array($cid,$oids)); while($row=sql::fetch_assoc()){ $oname=$oids[$row['oid']]['oname']; $this->$oname=$row['ovalue']; // Set value from SQL table $data[$row['oid']][$cid]=$row['ovalue']; // Keep a copy } self::$num++; } public function __destruct(){ $cid=$this->_jeans_cid; $oids=$this->_jeans_oids; foreach($oids as $oid=>&$row){ $oname=$row['oname']; if (self::$data[$oid][$cid]==$this->$oname) unset(self::$data[$oid][$cid]); } if (--self::$num) return; // Save plugin options here. sql::query('BEGIN'); foreach(self::$data as $oid=>&$options){ foreach($options as $cid=>&$value){ sql::query( 'DELETE FROM jeans_plugion_option '. 'WHERE oid=<%1%> AND ocontextid=<%2%>', array($oid,$cid)); sql::query( 'INSERT INTO jeans_plugion_option (oid,ocontextid,ovalue) '. 'VALUES (<%1%>,<%2%>,<%3%>)', array($oid,$cid,$value)); } } sql::query('COMMIT'); } private static function _jeans_oid($pid,$type){ static $data; if (!isset($data)) { sql::unbuffered_query('SELECT oid, opid, oname, ocontext, odef FROM jeans_plugin_option_desc'); while($row=sql::fetch_assoc()) $data[$row['opid']][$row['ocontext']][$row['oid']]=$row; } return $data[$pid][$type]; } }