• R/O
  • SSH
  • HTTPS

jeanscms: コミット


コミットメタ情報

リビジョン183 (tree)
日時2010-03-31 08:23:28
作者kmorimatsu

ログメッセージ

1) Revised plugin option routines
2) <%skin%> - <%endskin%> as in-line skin implementation.

変更サマリ

差分

--- jeanscms/trunk/jeans/libs/plugin.php (revision 182)
+++ jeanscms/trunk/jeans/libs/plugin.php (revision 183)
@@ -53,14 +53,8 @@
5353 // Initialize $cache. See instance() method.
5454 if (is_object($mode) && !isset($cache)) $cache=$mode;
5555 switch($mode){
56- case 'group':
57- return $cache->group($id);
58- case 'item':
59- return $cache->item($id);
60- case 'comment':
61- return $cache->comment($id);
62- case 'member':
63- return $cache->member($id);
56+ case 'group': case 'subgroup': case 'item': case 'comment': case 'member': case 'guest':
57+ return $cache->$mode($id);
6458 case 'global':
6559 default:
6660 return $cache;
@@ -136,7 +130,7 @@
136130 }
137131 private function option($mode,$id){
138132 if (!isset($this->objects[$mode])) {
139- $this->objects[$mode]=new self($this->class,$mode,$this);
133+ $this->objects[$mode]=new self($this->class,$mode,$id);
140134 }
141135 return $this->objects[$mode];
142136 }
@@ -143,6 +137,9 @@
143137 public function group($id){
144138 return $this->option('group',$id);
145139 }
140+ public function subgroup($id){
141+ return $this->option('subgroup',$id);
142+ }
146143 public function item($id){
147144 return $this->option('item',$id);
148145 }
@@ -152,11 +149,14 @@
152149 public function member($id){
153150 return $this->option('member',$id);
154151 }
152+ public function guest($id){
153+ return $this->option('guest',$id);
154+ }
155155 /*
156156 * Option-creating and deleting methods follow.
157157 */
158158 public function create($name,$desc=false,$type='text',$defvalue='',$extra='',$sequence=0){
159- $name=strtolower($name);
159+ $name=$this->class.'_'.strtolower($name);
160160 if ($desc===false) $desc=$name;
161161 // Update DB
162162 $query='INSERT OR REPLACE INTO jeans_config_desc (<%key:row%>) VALUES (<%row%>);';
@@ -169,7 +169,7 @@
169169 if (!isset($this->values[$name])) $this->values[$name]=$defvalue;
170170 }
171171 public function delete($name){
172- $name=strtolower($name);
172+ $name=$this->class.'_'.strtolower($name);
173173 $query='DELETE FROM jeans_config_desc WHERE name=<%name%> AND configtype=<%mode%> AND owner=<%class%>';
174174 $array=array('name'=>$name,'mode'=>$this->mode,'class'=>$this->class,'xmlname'=>$this->class.'_'.$name);
175175 sql::register_shutdown_query($query,$array);
@@ -177,9 +177,8 @@
177177 case 'global':
178178 $query='DELETE FROM jeans_config WHERE name=<%name%> AND type=<%mode%> AND owner=<%class%>';
179179 break;
180- case 'group': case 'item': case 'comment': case 'member':
181- $table=array('table'=>'jeans_'.$this->mode);
182- $query=sql::fill_query('UPDATE <%table%> SET xml=UpdatwXML(xml,<%xmlname%>,NULL)',$table);
180+ default:
181+ $query=sql::fill_query('UPDATE <%0%> SET xml=UpdatwXML(xml,<%xmlname%>,NULL)',$this->table_name());
183182 break;
184183 }
185184 sql::register_shutdown_query($query,$array);
@@ -223,11 +222,17 @@
223222 }
224223 private function load(){
225224 if ($this->mode=='global') return $this->load_global();
226- $query=sql::fill_query('SELECT xml FROM <%0%> WHERE id=<%id%> LIMIT 1',$this->mode);
227- $row=sel::query($query,$this->id)->fetch();
225+ $query=sql::fill_query('SELECT xml FROM <%0%> WHERE id=<%id%> LIMIT 1',$this->table_name());
226+ $row=sql::query($query,array('id'=>$this->id))->fetch();
228227 if ($row) {
229- sql::convert_xml($row,'group',$this->class);
230- $this->values=array_merge($this->values,$row);
228+ // Receive values from XML.
229+ sql::convert_xml($row,$this->mode,$this->class);
230+ // Remove prefix.
231+ $values=array();
232+ $start=strlen($this->class)+1;
233+ foreach ($row as $key=>$value) $values[substr($key,$start)]=$value;
234+ // Set values.
235+ $this->values=array_merge($this->values,$values);
231236 }
232237 }
233238 private function save(){
@@ -238,7 +243,7 @@
238243 $row[]=$class.'_'.$key;
239244 $row[]=$value;
240245 }
241- $query=sql::fill_query('UPDATE <%0%> SET xml=UpdatwXML(xml,<%row%>) WHERE id=<%id%>',$this->mode);
246+ $query=sql::fill_query('UPDATE <%0%> SET xml=UpdatwXML(xml,<%row%>) WHERE id=<%id%>',$this->table_name());
242247 $array=array('id'=>$this->id,'row'=>$row);
243248 sql::register_shutdown_query($query,$array);
244249 }
@@ -303,4 +308,18 @@
303308 if (isset($cache[$class][$type])) return $cache[$class][$type];
304309 else return false;
305310 }
311+ private function table_name($mode=false){
312+ if (!$mode) $mode=$this->mode;
313+ switch($mode){
314+ case 'member': case 'guest':
315+ return 'jeans_member';
316+ case 'group': case 'subgroup':
317+ return 'jeans_group';
318+ case 'item': case 'comment':
319+ return 'jeans_'.$mode;
320+ case 'grobal':
321+ default:
322+ return 'jeans_config';
323+ }
324+ }
306325 }
\ No newline at end of file
--- jeanscms/trunk/jeans/libs/admin/admin_memberinfo.php (revision 182)
+++ jeanscms/trunk/jeans/libs/admin/admin_memberinfo.php (revision 183)
@@ -59,7 +59,7 @@
5959 'value'=>self::data('language'),
6060 'type'=>'select',
6161 'extra'=>'languagelist');
62- $res=sql::query('SELECT * FROM jeans_config_desc WHERE configtype="member" ORDER BY sequence ASC');
62+ $res=sql::query('SELECT * FROM jeans_config_desc WHERE configtype="member" ORDER BY owner,sequence ASC');
6363 while ($row=$res->fetch()) {
6464 // TODO: Remove properties that cannot be edited by non-admin member
6565 $row['value']=self::data($row['name']);
--- jeanscms/trunk/jeans/libs/admin/admin_item.php (revision 182)
+++ jeanscms/trunk/jeans/libs/admin/admin_item.php (revision 183)
@@ -25,11 +25,28 @@
2525 $array=array('itemid'=>$itemid);
2626 $row=sql::query($query,$array)->fetch();
2727 }
28- $post=self::item_from_post();
28+ $post=self::item_from_post('item');
2929 if (isset($post['time'])) $post['time']=gmdate('Y-m-d H:i:s', strtotime($post['time']));
3030 if ($post) $row=array_merge($row,$post);
3131 view::show_using_array($data,array($row),$skin);
3232 }
33+ static public function tag_edititemformextra(&$data,$skin){
34+ // TODO: here.
35+ // TODO: get data from XML in table using $_GET['itemid']
36+ if (!empty($_GET['itemid'])) {
37+ $org=sql::query('SELECT xml FROM jeans_item WHERE id=<%0%>',$_GET['itemid'])->fetch();
38+ if ($org) sql::convert_xml($org,'item');
39+ else $org=array();
40+ }
41+ $res=sql::query('SELECT * FROM jeans_config_desc WHERE configtype="item" ORDER BY owner,sequence ASC');
42+ $rows=array();
43+ while($row=$res->fetch()){
44+ if (isset($data[$row['name']])) $row['value']=$data[$row['name']];
45+ elseif (isset($org[$row['name']])) $row['value']=$org[$row['name']];
46+ $rows[]=$row;
47+ }
48+ view::show_using_array($data,$rows,$skin);
49+ }
3350 static public function tag_list(&$data,$skin,$limit=10){
3451 $gid=isset($_GET['gid'])?(int)$_GET['gid']:0;
3552 $offset=isset($_GET['offset'])?(int)$_GET['offset']:0;
--- jeanscms/trunk/jeans/libs/view.php (revision 182)
+++ jeanscms/trunk/jeans/libs/view.php (revision 183)
@@ -40,19 +40,26 @@
4040 /* Main skin parse routine follows */
4141 static public function parse_skin($skin=false,$parent_skin=false,$data=false,$template=false) {
4242 static $parsed=false;
43- // Refresh current skin
44- // Note that $data also keeps information of used skin.
45- if ($skin) {
46- $skin=self::skin_path($skin,$parent_skin);
47- self::$current_skin=$skin;
48- } else $skin=self::$current_skin;
43+ // Initialize $data and set template
4944 if ($data===false) $data=self::$globals;
50- $data['skin']=$skin;
5145 if (is_array($template)) {
5246 $data=array_merge($data,$template);
5347 } else if ($template!==false) {
5448 $data['template']=$template;
5549 }
50+ // Refresh current skin
51+ // Note that $data also keeps information of used skin.
52+ if ($skin) {
53+ if (isset($data['libs']['view']['lambda'][$skin]) && is_callable($data['libs']['view']['lambda'][$skin])) {
54+ // <%skin%> tag implementation
55+ $data['libs']['view']['lambda'][$skin]($data);
56+ return;
57+ } else {
58+ $skin=self::skin_path($skin,$parent_skin);
59+ self::$current_skin=$skin;
60+ }
61+ } else $skin=self::$current_skin;
62+ $data['skin']=$skin;
5663 // init_skinfile_parse event.
5764 $cached=false;
5865 core::event('init_skinfile_parse',array('data'=>&$data,'skin'=>$skin,'cached'=>&$cached,'child'=>$parsed),'view');
@@ -190,7 +197,7 @@
190197 case 'else':
191198 return "<?php $cr } else { ?>";
192199 case 'endif':
193- return "<?php $cr } ?>";
200+ return "<?php $cr } /* endif */ ?>";
194201 case 'select':
195202 $switch='';
196203 foreach($argarray as $value) $switch.="[{$value}]";
@@ -202,7 +209,16 @@
202209 case 'caseelse': case 'case.else':
203210 return "<?php $cr break;/**/ default: ?>";
204211 case 'endselect':
205- return "<?php $cr } ?>";
212+ return "<?php $cr } /* endselect */ ?>";
213+ case 'skin':
214+ // TODO: Following routine will be revised after shifting to PHP 5.3
215+ static $funcnum=0;
216+ $funcnum++;
217+ $funcname="lambda_{$funcnum}".preg_replace('/[^a-z0-9]/','_',self::$current_skin);
218+ return "<?php $cr \$data['libs']['view']['lambda'][$argarray[0]]='$funcname'; ".
219+ "if (!function_exists('$funcname')) { function $funcname(&\$data){ ?>";
220+ case 'endskin':
221+ return "<?php $cr }; } /* endskin */ ?>";
206222 default:
207223 $method=self::compile_cb_method($matches[2]);
208224 if ($method) return "$cr<?php $method($args); ?>";
旧リポジトリブラウザで表示