--- /dev/null
+<?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