OSDN Git Service

NP_admin 0.1.9
[nucleus-jp/nucleus-plugins.git] / NP_admin / trunk / admin / skinvars.php
diff --git a/NP_admin/trunk/admin/skinvars.php b/NP_admin/trunk/admin/skinvars.php
new file mode 100644 (file)
index 0000000..9d753ad
--- /dev/null
@@ -0,0 +1,310 @@
+<?php\r
+class NP_admin_skinvars extends NP_admin_basic {\r
+       function var_admin(){\r
+               global $manager;\r
+               $action=$this->action;\r
+               $this->properties['action']=$action;\r
+               $this->svm->parse_parsedinclude('index',"actions/$action.inc");\r
+       }\r
+       function var_global($p1,$p2=''){\r
+               if (strlen($p1)) self::p($GLOBALS[$p1][$p2]);\r
+               else self::p($GLOBALS[$p1]);\r
+       }\r
+       var $msg='';\r
+       function var_message($prefix=false){\r
+               if ($prefix===false) $prefix=_MESSAGE.': ';\r
+               $msg=$this->msg;\r
+               if (strlen($msg)) {\r
+                       if (defined($msg)) $msg=constant($msg);\r
+                       self::p($prefix.$msg);\r
+               }\r
+       }\r
+       function var_setmessage($msg){\r
+               if (defined($msg)) $msg=constant($msg);\r
+               $this->msg=$msg;\r
+       }\r
+       function var_date($p1,$p2='',$mode='blogtime'){\r
+               global $blog;\r
+               if (!is_object($blog)) $mode='servertime';\r
+               if ($p2=='') {\r
+                       switch($mode){\r
+                               case 'servertime':\r
+                                       return self::p(date($p1));\r
+                               case 'blogtime':\r
+                               default:\r
+                                       return self::p(date($p1,$blog->getCorrectTime()));\r
+                       }\r
+               }\r
+               $row=&$this->rowdata;\r
+               $time=$row[$p2];\r
+               if (!is_numeric($time)) $time=strtotime($time);\r
+               self::p(date($p1,$time));\r
+       }\r
+       var $properties=array();\r
+       function var_set($key,$value=''){\r
+               $this->properties[$key]=$value;\r
+       }\r
+       function var_get($key){\r
+               self::p($this->properties[$key]);\r
+       }\r
+       var $ob=false;\r
+       function var_begin($key){\r
+               if (ob_start()) $this->ob=$key;\r
+       }\r
+       function var_end(){\r
+               $key=$this->ob;\r
+               $this->ob=false;\r
+               if ($key===false) return;\r
+               $data=ob_get_contents();\r
+               ob_end_clean();\r
+               $this->properties[$key]=$data;\r
+       }\r
+       function var_sprintf($text,$key){\r
+               $data=self::hsc($this->_contents($key),'noampamp');\r
+               if (defined($text)) echo sprintf(constant($text),$data);\r
+               else echo sprintf(self::hsc($text),$data);\r
+       }\r
+       function var_getvar($key,$default=''){\r
+               return $this->_requestvar('getVar',$key,$default);\r
+       }\r
+       function var_postvar($key,$default=''){\r
+               return $this->_requestvar('postVar',$key,$default);\r
+       }\r
+       function var_requestvar($key,$default=''){\r
+               return $this->_requestvar('requestVar',$key,$default);\r
+       }\r
+       function _requestvar($gpr,$key,$default=''){\r
+               //$gpr is either getVar, postVar, or requestVar\r
+               $value=call_user_func($gpr,$key);\r
+               if (strlen($value)==0) $value=$default;\r
+               self::p($value);\r
+       }\r
+       function var_inputhiddenfromget($key,$mode=''){\r
+               return $this->_inputhiddenfromrequest('getVar',$key,$mode);\r
+       }\r
+       function var_inputhiddenfrompost($key,$mode=''){\r
+               return $this->_inputhiddenfromrequest('postVar',$key,$mode);\r
+       }\r
+       function var_inputhiddenfromrequest($key,$mode=''){\r
+               return $this->_inputhiddenfromrequest('requestVar',$key,$mode);\r
+       }\r
+       function _inputhiddenfromrequest($gpr,$key,$mode=''){\r
+               //$gpr is either getVar, postVar, or requestVar\r
+               $amount=(int)call_user_func($gpr,'amount');\r
+               if ($amount==0) $amount=10;\r
+               switch($mode){\r
+                       case 'prev':\r
+                               $value=(int)call_user_func($gpr,'start')-$amount;\r
+                               if ($value<0) $value=0;\r
+                               break;\r
+                       case 'next':\r
+                               $value=(int)call_user_func($gpr,'start')+$amount;\r
+                               break;\r
+                       case '':\r
+                       default:\r
+                               $value=call_user_func($gpr,$key);\r
+               }\r
+               if (strlen($value)==0) return;\r
+               echo self::fill('<input type="hidden" name="<%key%>" value="<%value%>" />',\r
+                       array('key'=>$key,'value'=>$value));\r
+       }\r
+       var $rowdata=array();\r
+       function var_rowdata($name,$mode='hsc', $maxlength=10, $toadd=''){\r
+               $row=&$this->rowdata;\r
+               if (isset($row[$name])) $this->_showContents($row[$name],$mode,$maxlength,$toadd);\r
+       }\r
+       function var_ticket($mode='row'){\r
+               static $ticket;\r
+               global $manager;\r
+               if (!isset($ticket)) $ticket=$manager->getNewTicket();\r
+               switch($mode){\r
+                       case 'hidden':\r
+                               $manager->addTicketHidden();\r
+                               break;\r
+                       case 'row':\r
+                       default:\r
+                               self::p($ticket);\r
+                               break;\r
+               }\r
+       }\r
+       function var_bookmarklet($blogid=''){\r
+               global $blog;\r
+               if ($blogid) self::p(getBookmarklet($blogid));\r
+               else self::p(getBookmarklet($blog->getID()));\r
+       }\r
+       function var_blogsetting($type){\r
+               self::p($this->_blogsetting($type));\r
+       }\r
+       function _blogsetting($type){\r
+               global $blog;\r
+               if (method_exists($blog,"get$type")) return call_user_func(array(&$blog,"get$type"));\r
+               elseif (preg_match('/^notifyon/i',$type) && method_exists($blog,$type)) return call_user_func(array(&$blog,$type));\r
+               else return $blog->getSetting($type);\r
+       }\r
+       function var_help($id){\r
+               global $CONF;\r
+               ob_start();\r
+               help($id);\r
+               $html=ob_get_contents();\r
+               ob_end_clean();\r
+               echo str_replace('"documentation/','"'.self::hsc($CONF['AdminURL']).'documentation/',$html);\r
+       }\r
+       function var_insertPluginOptions($context){\r
+               switch($context){\r
+                       case 'blog':\r
+                               // skin var\r
+                               $contextid=requestVar('blogid');\r
+                               break;\r
+                       case 'member':\r
+                               // template var\r
+                               $contextid=$this->rowdata['mnumber'];\r
+                               break;\r
+                       case 'item':\r
+                               // skin var\r
+                               $contextid=intRequestVar('itemid');\r
+                               break;\r
+                       case 'global':\r
+                               break;\r
+                       default:\r
+                               exit('<td>insertPluginOptions: wrong context.</td></tr></table>');\r
+               }\r
+               $admin=$this->getAdminObject();\r
+               // I know it isn't good to call methods whose names start from '_',\r
+               // but, this is the better way than copying the whole code from the method,\r
+               // because of supporting the new version of nucleus.\r
+               // Let's think about this again later when 'private' is set to these methods.\r
+               $admin->_insertPluginOptions($context, $contextid);\r
+       }\r
+       function var_showerror($msg){\r
+               if (defined($msg)) $msg=constant($msg);\r
+               $this->msg=$msg;\r
+               $this->svm->parse_parsedinclude('index','actions/error.inc');\r
+       }\r
+       function var_insertJavaScriptInfo($authorid=''){\r
+//TODO: support passing authorid information when editing item.\r
+               global $blog;\r
+               $blog->insertJavaScriptInfo($authorid);\r
+       }\r
+       /*\r
+        * Stuffs for overriding skinvars.\r
+        * Note that NP_SkinVarManager is required to do this.\r
+        * Note that <%if(admin)%> is also overrided.\r
+        */\r
+       function event_RegisterSkinVars(&$data) {\r
+               $data['skinvars']['text']=array(&$this,'parse_text');\r
+               $data['skinvars']['conf']=array(&$this,'parse_conf');\r
+               $data['skinvars']['note']=array(&$this,'parse_note');\r
+               $data['skinvars']['callback']=array(&$this,'parse_callback');\r
+               $data['skinvars']['contents']=array(&$this,'parse_contents');\r
+               $data['ifvars']['admin']=array(&$this,'parse_ifadmin');\r
+               $data['ifvars']['blogadmin']=array(&$this,'parse_ifblogadmin');\r
+               $data['ifvars']['contents']=array(&$this,'parse_ifcontents');\r
+       }\r
+       function parse_text($skinType,$type) {\r
+               if (defined($type)) echo constant($type);\r
+               else echo htmlspecialchars($type,ENT_QUOTES,_CHARSET);\r
+       }\r
+       function parse_conf($skinType,$type) {\r
+               global $CONF;\r
+               echo htmlspecialchars($CONF[$type],ENT_QUOTES,_CHARSET);\r
+       }\r
+       function parse_note(){\r
+               // Don't do anything.\r
+       }\r
+       function parse_callback($skinType,$eventName, $type=''){\r
+               static $cbobj;\r
+               if (!isset($cbobj)) {\r
+                       require_once(dirname(__FILE__).'/callback.php');\r
+                       $cbobj=new NP_admin_callback($this);\r
+               }\r
+               return $cbobj->parse_callback($skinType,$eventName,$type);\r
+       }\r
+       function parse_contents($skinType,$key,$mode='hsc', $maxlength=10, $toadd=''){\r
+               $data=$this->_contents($key);\r
+               if ($data!==false) $this->_showContents($data,$mode,$maxlength,$toadd);\r
+       }\r
+       function _showContents($data,$mode='hsc', $maxlength=10, $toadd=''){\r
+               switch($mode){\r
+                       case 'row':\r
+                               echo $data;\r
+                               break;\r
+                       case 'strip_tags':\r
+                               self::p(strip_tags($data));\r
+                               break;\r
+                       case 'shorten':\r
+                               self::p(shorten(strip_tags($data),$maxlength,$toadd));\r
+                               break;\r
+                       case 'hsc':\r
+                       default:\r
+                               self::p($data);\r
+               }\r
+       }\r
+       function _contents($key){\r
+               if (isset($this->rowdata[$key])) return (string)$this->rowdata[$key];\r
+               if (isset($this->properties[$key])) return (string)$this->properties[$key];\r
+               return false;\r
+       }\r
+       function parse_ifblogadmin($p1='',$p2=''){\r
+               return $this->svm->handler->checkCondition('admin',$p1,$p2);\r
+       }\r
+       function parse_ifcontents($p1='',$p2=''){\r
+               if (preg_match('/^isset:(.*)$/',$p1,$m)) return ($this->_contents($m[1])!==false);\r
+               if (preg_match('/^(.*)=(.*)$/',$p1) && $p2=='') {\r
+                       $p1=$m[1];\r
+                       $p2=$m[2];\r
+               }\r
+               return ( $this->_contents($p1) == $p2 );\r
+       }\r
+       function parse_ifadmin($p1='',$p2=''){\r
+               if ($p1=='') $p1='admin';\r
+               // If there isn't the corresponding method, a fatal error occurs.\r
+               // Probably, this is better way than returning false to continue the process.\r
+               return call_user_func(array(&$this,"if_$p1"),$p2);\r
+       }\r
+       function if_admin($p2){\r
+               global $member;\r
+               return ( $member->isLoggedIn() && $member->isAdmin() );\r
+       }\r
+       function if_rowdata($p2){\r
+               $row=&$this->rowdata;\r
+               if (!preg_match('/^(.*)=(.*)$/',$p2,$m)) return isset($row[$p2]);\r
+               return $row[$m[1]]==$m[2];\r
+       }\r
+       function if_conf($p2){\r
+               global $CONF;\r
+               if (!preg_match('/^(.*)=(.*)$/',$p2,$m)) return isset($CONF[$p2]);\r
+               return $CONF[$m[1]]==$m[2];\r
+       }\r
+       function if_future($p2){\r
+               // template var\r
+               global $blog,$manager;\r
+               $row=&$this->rowdata;\r
+               $t=$row[$p2];\r
+               if (!is_numeric($t)) $t=strtotime($t);\r
+               if (isset($row['bnumber'])) $b=&$manager->getBlog($row['bnumber']);\r
+               else $b=&$blog;\r
+               return $t>$b->getCorrectTime(time());\r
+       }\r
+       function if_set($p2){\r
+               if (!preg_match('/^(.*)=(.*)$/',$p2,$m)) return isset($this->properties[$p2]);\r
+               return $this->properties[$m[1]]==$m[2];\r
+       }\r
+       function if_getvar($p2){\r
+               list($key,$value)=$this->keyAndValue($p2);\r
+               if ($value===false) return getVar($key)!='';\r
+               else return getVar($key)==$value;\r
+       }\r
+       function keyAndValue($p2){\r
+               $ret=array();\r
+               if (preg_match('/^(.*)=(.*)$/',$p2,$m)) return array($m[1],$m[2]);\r
+               else return array($p2,false);\r
+       }\r
+       function if_eventSubscribed($p2){\r
+               return 0<numberOfEventSubscriber($p2);\r
+       }\r
+       function if_compare($p2){\r
+               if (!preg_match('/^(.*)=(.*)$/',$p2,$m)) exit('Fetal error: if_compare');\r
+               return $this->properties[$m[1]]==$this->properties[$m[2]];\r
+       }\r
+\r
+}
\ No newline at end of file