OSDN Git Service

FIX:$manager->notify()の第二引数に変数を渡すように修正。
[nucleus-jp/nucleus-next.git] / nucleus / libs / ACTIONS.php
index f4ea58f..54c1b98 100644 (file)
-<?php\r
-/**\r
- * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)\r
- * Copyright (C) 2002-2012 The Nucleus Group\r
- *\r
- * This program is free software; you can redistribute it and/or\r
- * modify it under the terms of the GNU General Public License\r
- * as published by the Free Software Foundation; either version 2\r
- * of the License, or (at your option) any later version.\r
- * (see nucleus/documentation/index.html#license for more info)\r
- */\r
-/**\r
- * This class contains the functions that get called by using\r
- * the special tags in the skins\r
- *\r
- * The allowed tags for a type of skinpart are defined by the\r
- * Skin::getAllowedActionsForType($type) method\r
- *\r
- * @license http://nucleuscms.org/license.txt GNU General Public License\r
- * @copyright Copyright (C) 2002-2012 The Nucleus Group\r
- * @version $Id: ACTIONS.php 1721 2012-03-31 10:18:25Z sakamocchi $\r
- */\r
-\r
-class Actions extends BaseActions\r
-{\r
-       // part of the skin currently being parsed ('index', 'item', 'archive',\r
-       // 'archivelist', 'member', 'search', 'error', 'imagepopup')\r
-       var $skintype;\r
-       \r
-       // contains an assoc array with parameters that need to be included when\r
-       // generating links to items/archives/... (e.g. catid)\r
-       var $linkparams;\r
-       \r
-       // reference to the skin object for which a part is being parsed\r
-       var $skin;\r
-       \r
-       // used when including templated forms from the include/ dir. The $formdata var\r
-       // contains the values to fill out in there (assoc array name -> value)\r
-       var $formdata;\r
-       \r
-       // filled out with the number of displayed items after calling one of the\r
-       // (other)blog/(other)searchresults skinvars.\r
-       var $amountfound;\r
-       \r
-       /**\r
-        * Actions::__construct()\r
-        * Constructor for a new Actions object\r
-        * \r
-        * @param       string  $type\r
-        * @return      void\r
-        */\r
-       public function __construct($type)\r
-       {\r
-               global $catid;\r
-               \r
-               // call constructor of superclass first\r
-               $this->BaseActions();\r
-               $this->skintype = $type;\r
-               \r
-               if ( $catid )\r
-               {\r
-                       $this->linkparams = array('catid' => $catid);\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::setSkin()\r
-        * Set the skin\r
-        * @param       object  $skin   an instance of Skin class\r
-        * @return      void\r
-        */\r
-       public function setSkin(&$skin)\r
-       {\r
-               $this->skin =& $skin;\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::setParser()\r
-        * Set the parser\r
-        * \r
-        * @param       object  $parser an instance of Parser class\r
-        * @return      void\r
-        */\r
-       public function setParser(&$parser)\r
-       {\r
-               $this->parser =& $parser;\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::doForm()\r
-        * Forms get parsedincluded now, using an extra <formdata> skinvar\r
-        *\r
-        * @param       string  $filename\r
-        * @return      void\r
-        */\r
-       public function doForm($filename)\r
-       {\r
-               global $DIR_NUCLEUS;\r
-               array_push($this->parser->actions,'formdata','text','callback','errordiv','ticket');\r
-               \r
-               $oldIncludeMode = Parser::getProperty('IncludeMode');\r
-               $oldIncludePrefix = Parser::getProperty('IncludePrefix');\r
-               Parser::setProperty('IncludeMode','normal');\r
-               Parser::setProperty('IncludePrefix','');\r
-               \r
-               $this->parse_parsedinclude($DIR_NUCLEUS . 'forms/' . $filename . '.template');\r
-               Parser::setProperty('IncludeMode',$oldIncludeMode);\r
-               Parser::setProperty('IncludePrefix',$oldIncludePrefix);\r
-               \r
-               array_pop($this->parser->actions);      // errordiv\r
-               array_pop($this->parser->actions);      // callback\r
-               array_pop($this->parser->actions);      // text\r
-               array_pop($this->parser->actions);      // formdata\r
-               array_pop($this->parser->actions);      // ticket\r
-               return;\r
-       }\r
-\r
-       /**\r
-        * Actions::checkCondition()\r
-        * Checks conditions for if statements\r
-        *\r
-        * @param       string  $field  type of <%if%>\r
-        * @param       string  $name   property of field\r
-        * @param       string  $value  value of property\r
-        * @return      boolean condition\r
-        */\r
-       public function checkCondition($field, $name='', $value = '')\r
-       {\r
-               global $catid, $blog, $member, $itemidnext, $itemidprev, $manager, $archiveprevexists, $archivenextexists;\r
-               \r
-               $condition = 0;\r
-               switch ( $field )\r
-               {\r
-                       case 'category':\r
-                               $condition = ($blog && $this->ifCategory($name,$value));\r
-                               break;\r
-                       case 'blogsetting':\r
-                               $condition = ($blog && ($blog->getSetting($name) == $value));\r
-                               break;\r
-                       case 'loggedin':\r
-                               $condition = $member->isLoggedIn();\r
-                               break;\r
-                       case 'onteam':\r
-                               $condition = $member->isLoggedIn() && $this->ifOnTeam($name);\r
-                               break;\r
-                       case 'admin':\r
-                               $condition = $member->isLoggedIn() && $this->ifAdmin($name);\r
-                               break;\r
-                       case 'superadmin':\r
-                               $condition = $member->isLoggedIn() && $member->isAdmin();\r
-                               break;\r
-                       case 'allowloginedit':\r
-                               $condition = $member->isLoggedIn() && ($CONF['AllowLoginEdit'] || $member->isAdmin());\r
-                               break;\r
-                       case 'nextitem':\r
-                               $condition = ($itemidnext != '');\r
-                               break;\r
-                       case 'previtem':\r
-                               $condition = ($itemidprev != '');\r
-                               break;\r
-                       case 'archiveprevexists':\r
-                               $condition = ($archiveprevexists == true);\r
-                               break;\r
-                       case 'archivenextexists':\r
-                               $condition = ($archivenextexists == true);\r
-                               break;\r
-                       case 'skintype':\r
-                               $condition = (($name == $this->skintype) || ($name == requestVar('action')));\r
-                               break;\r
-                       case 'hasplugin':\r
-                               $condition = $this->ifHasPlugin($name, $value);\r
-                               break;\r
-                       case 'adminaction':\r
-                               $condition = ($this->objAdmin->action == $name);\r
-                               break;\r
-                       case 'adminoldaction':\r
-                               $condition = ($this->objAdmin->action == $name);\r
-                               break;\r
-                       case 'addresschange':\r
-                               $condition = ($this->_ifAddresscange());\r
-                               break;\r
-                       case 'bechangepass':\r
-                               $condition = ($this->_beChangePassword());\r
-                               break;\r
-                       case 'skincandidates':\r
-                               $condition = ($this->_ifSkincandidates());\r
-                               break;\r
-                       case 'nameclashes':\r
-                               $condition = requestVar('nameclashes');\r
-                               break;\r
-                       case 'existsnewplugin':\r
-                               $condition = ($this->_existsNewPlugin());\r
-                               break;\r
-                       default:\r
-                               $condition = $manager->pluginInstalled("NP_{$field}") && $this->ifPlugin($field, $name, $value);\r
-                               break;\r
-               }\r
-               return $condition;\r
-       }\r
-       \r
-       /**\r
-        * Actions::_ifHasPlugin()\r
-        *      hasplugin,PlugName\r
-        *         -> checks if plugin exists\r
-        *      hasplugin,PlugName,OptionName\r
-        *         -> checks if the option OptionName from plugin PlugName is not set to 'no'\r
-        *      hasplugin,PlugName,OptionName=value\r
-        *         -> checks if the option OptionName from plugin PlugName is set to value\r
-        *\r
-        * @param       string  $name   name of plugin\r
-        * @param       string  $value  \r
-        * @return      \r
-        */\r
-       private function ifHasPlugin($name, $value)\r
-       {\r
-               global $manager;\r
-               $condition = false;\r
-               // (pluginInstalled method won't write a message in the actionlog on failure)\r
-               if ( $manager->pluginInstalled("NP_{$name}") )\r
-               {\r
-                       $plugin =& $manager->getPlugin("NP_{$name}");\r
-                       if ( $plugin != NULL )\r
-                       {\r
-                               if ( $value == "" )\r
-                               {\r
-                                       $condition = true;\r
-                               }\r
-                               else\r
-                               {\r
-                                       list($name2, $value2) = preg_split('#=#', $value, 2);\r
-                                       if ( $value2 == "" && $plugin->getOption($name2) != 'no' )\r
-                                       {\r
-                                               $condition = true;\r
-                                       }\r
-                                       else if ( $plugin->getOption($name2) == $value2 )\r
-                                       {\r
-                                               $condition = true;\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               return $condition;\r
-       }\r
-       \r
-       /**\r
-        * Actions::beChangePassword()\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       function beChangePassword()\r
-       {\r
-               return intRequestVar('bNeedsPasswordChange');\r
-       }\r
-       \r
-       /**\r
-        * Actions::ifSkincandidates()\r
-        * Checks if a plugin exists and call its doIf function\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       private function ifSkincandidates()\r
-       {\r
-               global $DIR_SKINS;\r
-               $candidates = SKINIMPORT::searchForCandidates($DIR_SKINS);\r
-               return (count($candidates) > 0);\r
-       }\r
-       \r
-       /**\r
-        * Actions::ifPlugin()\r
-        * Checks if a plugin exists and call its doIf function\r
-        * \r
-        * @param       string  $name   name of plugin\r
-        * @param       string  $key    name of plugin option\r
-        * @param       string  $value  value of plugin option\r
-        * @return      void\r
-        */\r
-       private function ifPlugin($name, $key = '', $value = '')\r
-       {\r
-               global $manager;\r
-               \r
-               $plugin =& $manager->getPlugin("NP_{$name}");\r
-               if ( !$plugin )\r
-               {\r
-                       return;\r
-               }\r
-               \r
-               $params = func_get_args();\r
-               array_shift($params);\r
-               \r
-               return call_user_func_array(array(&$plugin, 'doIf'), $params);\r
-       }\r
-       \r
-       /**\r
-        * Actions::ifCategory()\r
-        * Different checks for a category\r
-        * \r
-        * @param       string  $name   \r
-        * @param       string  $value  \r
-        * @return      boolean \r
-        */\r
-       private function ifCategory($name = '', $value='')\r
-       {\r
-               global $blog, $catid;\r
-               \r
-               // when no parameter is defined, just check if a category is selected\r
-               if ( ($name != 'catname' && $name != 'catid') || ($value == '') )\r
-               {\r
-                       return $blog->isValidCategory($catid);\r
-               }\r
-               \r
-               // check category name\r
-               if ( $name == 'catname' )\r
-               {\r
-                       $value = $blog->getCategoryIdFromName($value);\r
-                       if ( $value == $catid )\r
-                       {\r
-                               return $blog->isValidCategory($catid);\r
-                       }\r
-               }\r
-               \r
-               // check category id\r
-               if ( ($name == 'catid') && ($value == $catid) )\r
-               {\r
-                       return $blog->isValidCategory($catid);\r
-               }\r
-               return FALSE;\r
-       }\r
-       \r
-       /**\r
-        * Actions::ifOnTeam()\r
-        * Checks if a member is on the team of a blog and return his rights\r
-        * \r
-        * @param       string  $blogName       name of weblog\r
-        * @return      mixed\r
-        */\r
-       private function ifOnTeam($blogName = '')\r
-       {\r
-               global $blog, $member, $manager;\r
-               \r
-               // when no blog found\r
-               if ( ($blogName == '') && !is_object($blog) )\r
-               {\r
-                       return 0;\r
-               }\r
-               \r
-               // explicit blog selection\r
-               if ( $blogName != '' )\r
-               {\r
-                       $blogid = getBlogIDFromName($blogName);\r
-               }\r
-               \r
-               if ( ($blogName == '') || !$manager->existsBlogID($blogid) )\r
-               {\r
-                       // use current blog\r
-                       $blogid = $blog->getID();\r
-               }\r
-               \r
-               return $member->teamRights($blogid);\r
-       }\r
-\r
-       /**\r
-        * Actions::ifAdmin()\r
-        * Checks if a member is admin of a blog\r
-        * \r
-        * @param       string  $blogName       name of weblog\r
-        * @return      mixed\r
-        */\r
-       private function ifAdmin($blogName = '')\r
-       {\r
-               global $blog, $member, $manager;\r
-               \r
-               // when no blog found\r
-               if ( ($blogName == '') && (!is_object($blog)) )\r
-               {\r
-                       return 0;\r
-               }\r
-               \r
-               // explicit blog selection\r
-               if ( $blogName != '' )\r
-               {\r
-                       $blogid = getBlogIDFromName($blogName);\r
-               }\r
-               \r
-               if ( ($blogName == '') || !$manager->existsBlogID($blogid) )\r
-               {\r
-                       // use current blog\r
-                       $blogid = $blog->getID();\r
-               }\r
-               \r
-               return $member->isBlogAdmin($blogid);\r
-       }\r
-       \r
-       /**\r
-        * Actions::ifAddresscange()\r
-        * Check e-Mail address is changed\r
-        * \r
-        * @param       void\r
-        * @return      boolean\r
-        */\r
-       private function ifAddresscange()\r
-       {\r
-               $key = $this->objAdmin->sessionVar("{$CONF['CookiePrefix']}ackey");\r
-               if ( !$key )\r
-               {\r
-                       return FALSE;\r
-               }\r
-               $info = MEMBER::getActivationInfo($key);\r
-               if ( !$info )\r
-               {\r
-                       return FALSE;\r
-               }\r
-               $mem  = MEMBER::createFromId($info->vmember);\r
-               if ( !$mem )\r
-               {\r
-                       return FALSE;\r
-               }\r
-               if ( $info->vtype == 'addresschange' )\r
-               {\r
-                       return TRUE;\r
-               }\r
-               return FALSE;\r
-       }\r
-       \r
-       /**\r
-        * Actions::link()\r
-        * returns either\r
-        *      - a raw link (html/xml encoded) when no linktext is provided\r
-        *      - a (x)html <a href... link when a text is present (text htmlencoded)\r
-        * \r
-        * @param       string  $url            URL for href attribute of anchor element\r
-        * @param       string  $linktext       content of anchor element\r
-        * @return      \r
-        */\r
-       private function link($url, $linktext = '')\r
-       {\r
-               $u = Entity::hsc($url);\r
-               // fix URLs that already had encoded ampersands\r
-               $u = preg_replace("#&amp;amp;#", '&amp;', $u);\r
-               if ( $linktext != '' )\r
-               {\r
-                       $l = '<a href="' . $u .'">' . Entity::hsc($linktext) . '</a>';\r
-               }\r
-               else\r
-               {\r
-                       $l = $u;\r
-               }\r
-               return $l;\r
-       }\r
-       \r
-       /**\r
-        * Actions::searchlink()\r
-        * Outputs a next/prev link\r
-        *\r
-        * @param $maxresults\r
-        *              The maximum amount of items shown per page (e.g. 10)\r
-        * @param $startpos\r
-        *              Current start position (requestVar('startpos'))\r
-        * @param $direction\r
-        *              either 'prev' or 'next'\r
-        * @param $linktext\r
-        *              When present, the output will be a full <a href...> link. When empty,\r
-        *              only a raw link will be outputted\r
-        */\r
-       private function searchlink($maxresults, $startpos, $direction, $linktext = '', $recount = '')\r
-       {\r
-               global $CONF, $blog, $query, $amount;\r
-               // TODO: Move request uri to linkparams. this is ugly. sorry for that.\r
-               $startpos       = (integer) $startpos;\r
-               $parsed         = parse_url(serverVar('REQUEST_URI'));\r
-               $path           = $parsed['path'];\r
-               $parsed         = $parsed['query'];\r
-               $url            = '';\r
-               \r
-               if ( $direction == 'prev' )\r
-               {\r
-                       if ( intval($startpos) - intval($maxresults) >= 0 )\r
-                       {\r
-                               $startpos       = intval($startpos) - intval($maxresults);\r
-                               \r
-                               if ( $this->skintype == 'index' )\r
-                               {\r
-                                       $url = $path;\r
-                               }\r
-                               else if ( $this->skintype == 'search' )\r
-                               {\r
-                                       $url = $CONF['SearchURL'];\r
-                               }\r
-                               $url .= '?' . alterQueryStr($parsed,'startpos',$startpos);\r
-                       }\r
-               }\r
-               else if ( $direction == 'next' )\r
-               {\r
-                       global $navigationItems;\r
-                       if ( !isset($navigationItems) )\r
-                       {\r
-                               $navigationItems = 0;\r
-                       }\r
-                       \r
-                       if ( $recount )\r
-                       {\r
-                               $iAmountOnPage = 0;\r
-                       }\r
-                       else \r
-                       {\r
-                               $iAmountOnPage = $this->amountfound;\r
-                       }\r
-                       \r
-                       if ( intval($navigationItems) > 0 )\r
-                       {\r
-                               $iAmountOnPage = intval($navigationItems) - intval($startpos);\r
-                       }\r
-                       elseif ( $iAmountOnPage == 0 )\r
-                       {\r
-                               /*\r
-                                * [%nextlink%] or [%prevlink%] probably called before [%blog%] or [%searchresults%]\r
-                                * try a count query\r
-                                */\r
-                               if ( $this->skintype == 'index' )\r
-                               {\r
-                                       $sqlquery = $blog->getSqlBlog('', 'count');\r
-                                       $url = $path;\r
-                               }\r
-                               else if ( $this->skintype == 'search' )\r
-                               {\r
-                                       $unused_highlight = '';\r
-                                       $sqlquery = $blog->getSqlSearch($query, $amount, $unused_highlight, 'count');\r
-                                       $url = $CONF['SearchURL'];\r
-                               }\r
-                               if ( $sqlquery )\r
-                               {\r
-                                       $iAmountOnPage = intval(quickQuery($sqlquery)) - intval($startpos);\r
-                               }\r
-                       }\r
-                       \r
-                       $url = '';\r
-                       if ( intval($iAmountOnPage) >= intval($maxresults) )\r
-                       {\r
-                               $startpos        = intval($startpos) + intval($maxresults);\r
-                               $url            .= '?' . alterQueryStr($parsed, 'startpos', $startpos);\r
-                       }\r
-               }\r
-               \r
-               if ( $url != '' )\r
-               {\r
-                       echo $this->link($url, $linktext);\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::itemlink()\r
-        * Creates an item link and if no id is given a todaylink \r
-        * \r
-        * @param       integer $id     id for link\r
-        * @param       string  $linktext       text for link\r
-        * @return      void\r
-        */\r
-       public function itemlink($id, $linktext = '')\r
-       {\r
-               global $CONF;\r
-               if ( $id != 0 )\r
-               {\r
-                       echo $this->link(Link::createitemlink($id, $this->linkparams), $linktext);\r
-               }\r
-               else\r
-               {\r
-                       $this->parse_todaylink($linktext);\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions:setBlogCategory()\r
-        * Helper function that sets the category that a blog will need to use\r
-        *\r
-        * @param       string  $blog           An object of the blog class, passed by reference (we want to make changes to it)\r
-        * @param       string  $catname        The name of the category to use\r
-        * @return      void\r
-        */\r
-       private function setBlogCategory(&$blog, $catname)\r
-       {\r
-               global $catid;\r
-               if ( $catname != '' )\r
-               {\r
-                       $blog->setSelectedCategoryByName($catname);\r
-               }\r
-               else\r
-               {\r
-                       $blog->setSelectedCategory($catid);\r
-               }\r
-               return;\r
-       }\r
-\r
-       /**\r
-        * Actions::archivelink)\r
-        * Creates an archive link and if no id is given a todaylink \r
-        * \r
-        * @param       integer $id     id for link\r
-        * @param       string  $linktext       text for link\r
-        * @return      void\r
-        */\r
-       public function archivelink($id, $linktext = '')\r
-       {\r
-               global $CONF, $blog;\r
-               if ( $id != 0 )\r
-               {\r
-                       echo $this->link(Link::createarchivelink($blog->getID(), $id, $this->linkparams), $linktext);\r
-               }\r
-               else\r
-               {\r
-                       $this->parse_todaylink($linktext);\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::preBlogContent()\r
-        * Notifies the Manager that a PreBlogContent event occurs\r
-        * \r
-        * @param       string  $type   type of skin\r
-        * @param       object  $blog   an instance of Blog class\r
-        * @return      void\r
-        */\r
-       private function preBlogContent($type, &$blog)\r
-       {\r
-               global $manager;\r
-               $manager->notify('PreBlogContent',array('blog' => &$blog, 'type' => $type));\r
-               return;\r
-       }\r
-\r
-       /**\r
-        * Actions::postBlogContent()\r
-        * Notifies the Manager that a PostBlogContent event occurs\r
-        * \r
-        * @param       string  $type   type of skin\r
-        * @param       objecct $blog   an instance of Blog class\r
-        * @return      void\r
-        */\r
-       private function postBlogContent($type, &$blog)\r
-       {\r
-               global $manager;\r
-               $manager->notify('PostBlogContent', array('blog' => &$blog, 'type' => $type));\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_additemform()\r
-        * Parse skinvar additemform\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_additemform()\r
-       {\r
-               global $blog, $CONF;\r
-               $this->formdata = array(\r
-                       'adminurl'      => Entity::hsc($CONF['AdminURL']),\r
-                       'catid'         => $blog->getDefaultCategory()\r
-               );\r
-               $blog->InsertJavaScriptInfo();\r
-               $this->doForm('additemform');\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_addlink()\r
-        * Parse skinvar addlink\r
-        * A Link that allows to open a bookmarklet to add an item\r
-        */\r
-       public function parse_addlink()\r
-       {\r
-               global $CONF, $member, $blog;\r
-               if ( $member->isLoggedIn() && $member->isTeamMember($blog->blogid) )\r
-               {\r
-                       echo $CONF['AdminURL'].'bookmarklet.php?blogid='.$blog->blogid;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_addpopupcode()\r
-        * Parse skinvar addpopupcode\r
-        * Code that opens a bookmarklet in an popup window\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_addpopupcode()\r
-       {\r
-               echo "if (event &amp;&amp; event.preventDefault) event.preventDefault();winbm=window.open(this.href,'nucleusbm','scrollbars=yes,width=600,height=500,left=10,top=10,status=yes,resizable=yes');winbm.focus();return false;";\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Parse skinvar adminurl\r
-        * (shortcut for admin url)\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_adminurl()\r
-       {\r
-               $this->parse_sitevar('adminurl');\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_archive()\r
-        * Parse skinvar archive\r
-        * \r
-        * @param       string  $template       name of template\r
-        * @param       string  $category       name of category\r
-        * @return      \r
-        */\r
-       public function parse_archive($template, $category = '')\r
-       {\r
-               global $blog, $archive;\r
-               // can be used with either yyyy-mm or yyyy-mm-dd\r
-               sscanf($archive,'%d-%d-%d', $y, $m, $d);\r
-               $this->setBlogCategory($blog, $category);\r
-               $this->preBlogContent('achive',$blog);\r
-               $blog->showArchive($template, $y, $m, $d);\r
-               $this->postBlogContent('achive',$blog);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_archivedate()\r
-        * %archivedate(locale,date format)%\r
-        * \r
-        * @param       string  $locale\r
-        * @return      void\r
-        */\r
-       public function parse_archivedate($locale = '-def-')\r
-       {\r
-               global $archive;\r
-               \r
-               /* \r
-                * TODO: these lines are no meaning because there is no $template.\r
-                */\r
-               if ( $locale == '-def-' )\r
-               {\r
-                       setlocale(LC_TIME, $template['LOCALE']);\r
-               }\r
-               else\r
-               {\r
-                       setlocale(LC_TIME, $locale);\r
-               }\r
-               \r
-               // get archive date\r
-               sscanf($archive,'%d-%d-%d',$y,$m,$d);\r
-               \r
-               // get format\r
-               $args = func_get_args();\r
-               // format can be spread over multiple parameters\r
-               if ( sizeof($args) > 1 )\r
-               {\r
-                       // take away locale\r
-                       array_shift($args);\r
-                       // implode\r
-                       $format=implode(',',$args);\r
-               }\r
-               elseif ( $d == 0 && $m !=0 )\r
-               {\r
-                       $format = '%B %Y';\r
-               }\r
-               elseif ( $m == 0 )\r
-               {\r
-                       $format = '%Y';\r
-               }\r
-               else\r
-               {\r
-                       $format = '%d %B %Y';\r
-               }\r
-               echo i18n::formatted_timedate($format, mktime(0,0,0,$m?$m:1,$d?$d:1,$y));\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_archivedaylist()\r
-        * Parse skinvar archivedaylist\r
-        * \r
-        * @param       string  $template       name of template\r
-        * @param       string  $category       name of category\r
-        * @param       integer $limit          the number of items in a display\r
-        * @return      void\r
-        */\r
-       public function parse_archivedaylist($template, $category = 'all', $limit = 0)\r
-       {\r
-               global $blog;\r
-               if ( $category == 'all' )\r
-               {\r
-                       $category = '';\r
-               }\r
-               $this->preBlogContent('archivelist',$blog);\r
-               $this->setBlogCategory($blog, $category);\r
-               $blog->showArchiveList($template, 'day', $limit);\r
-               $this->postBlogContent('archivelist',$blog);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parsearchivelink()\r
-        * A link to the archives for the current blog (or for default blog)\r
-        * \r
-        * @param       string  $linktext       text for link\r
-        * @return      void\r
-        */\r
-       public function parsearchivelink($linktext = '')\r
-       {\r
-               global $blog, $CONF;\r
-               if ( $blog )\r
-               {\r
-                       echo $this->link(Link::create_archivelistlink($blog->getID(),$this->linkparams), $linktext);\r
-               }\r
-               else\r
-               {\r
-                       echo $this->link(Link::create_archivelistlink(), $linktext);\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_archivelist()\r
-        * \r
-        * @param       string  $template       name of template\r
-        * @param       string  $category       name of category\r
-        * @param       integer $limit          the number of items in a display\r
-        * @return      void\r
-        */\r
-       public function parse_archivelist($template, $category = 'all', $limit = 0)\r
-       {\r
-               global $blog;\r
-               if ( $category == 'all' )\r
-               {\r
-                       $category = '';\r
-               }\r
-               $this->preBlogContent('archivelist',$blog);\r
-               $this->setBlogCategory($blog, $category);\r
-               $blog->showArchiveList($template, 'month', $limit);\r
-               $this->postBlogContent('archivelist',$blog);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_archiveyearlist()\r
-        * \r
-        * @param       string  $template       name of template\r
-        * @param       string  $category       name of category\r
-        * @param       integer $limit          the number of items in a display\r
-        */\r
-       public function parse_archiveyearlist($template, $category = 'all', $limit = 0)\r
-       {\r
-               global $blog;\r
-               if ( $category == 'all' )\r
-               {\r
-                       $category = '';\r
-               }\r
-               $this->preBlogContent('archivelist',$blog);\r
-               $this->setBlogCategory($blog, $category);\r
-               $blog->showArchiveList($template, 'year', $limit);\r
-               $this->postBlogContent('archivelist',$blog);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_archivetype()\r
-        * Parse skinvar archivetype\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_archivetype()\r
-       {\r
-               global $archivetype;\r
-               echo $archivetype;\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_blog()\r
-        * Parse skinvar blog\r
-        * \r
-        * @param       string  $template       name of template\r
-        * @param       mixed   $amount         the number of items in a display, in case it includes the beginning\r
-        * @param       string  $category       name of category\r
-        * @return      void\r
-        */\r
-       public function parse_blog($template, $amount = 10, $category = '')\r
-       {\r
-               global $blog, $startpos;\r
-               \r
-               list($limit, $offset) = sscanf($amount, '%d(%d)');\r
-               $this->setBlogCategory($blog, $category);\r
-               $this->preBlogContent('blog',$blog);\r
-               $this->amountfound = $blog->readLog($template, $limit, $offset, $startpos);\r
-               $this->postBlogContent('blog',$blog);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_bloglist()\r
-        * Parse skinvar bloglist\r
-        * Shows a list of all blogs\r
-        * \r
-        * @param       string  $template       name of template\r
-        * @param       string  $bnametype      whether 'name' or 'shortname' is used for the link text\r
-        * @param       string  $orderby        order criteria\r
-        * @param       string  $direction      order ascending or descending             \r
-        * @return      void\r
-        */\r
-       public function parse_bloglist($template, $bnametype = '', $orderby='number', $direction='asc')\r
-       {\r
-               Blog::showBlogList($template, $bnametype, $orderby, $direction);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_blogsetting()\r
-        * Parse skinvar blogsetting\r
-        * \r
-        * @param       string  $which  key of weblog settings\r
-        * @return      void\r
-        */\r
-       public function parse_blogsetting($which)\r
-       {\r
-               global $blog;\r
-               switch( $which )\r
-               {\r
-                       case 'id':\r
-                               echo Entity::hsc($blog->getID());\r
-                               break;\r
-                       case 'url':\r
-                               echo Entity::hsc($blog->getURL());\r
-                               break;\r
-                       case 'name':\r
-                               echo Entity::hsc($blog->getName());\r
-                               break;\r
-                       case 'desc':\r
-                               echo Entity::hsc($blog->getDescription());\r
-                               break;\r
-                       case 'short':\r
-                               echo Entity::hsc($blog->getShortName());\r
-                               break;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_getblogsetting()\r
-        * Parse skinvar getblogsetting\r
-        */\r
-       function parse_getblogsetting($which)\r
-       {\r
-               global $blog;\r
-               if ( $blog )\r
-               {\r
-                       $b =& $blog;\r
-               }\r
-               elseif ( $bid = intRequestVar('blogid') )\r
-               {\r
-                       global $manager;\r
-                       $b = $manager->getBlog($bid);\r
-               }\r
-               else\r
-               {\r
-                       return;\r
-               }\r
-               \r
-               switch ( $which )\r
-               {\r
-                       case 'id':\r
-                               return Entity::hsc($b->getID());\r
-                               break;\r
-                       case 'url':\r
-                               return Entity::hsc($b->getURL());\r
-                               break;\r
-                       case 'name':\r
-                               return Entity::hsc($b->getName());\r
-                               break;\r
-                       case 'desc':\r
-                               return Entity::hsc($b->getDescription());\r
-                               break;\r
-                       case 'short':\r
-                               return Entity::hsc($b->getShortName());\r
-                               break;\r
-                       case 'notifyaddress':\r
-                               return Entity::hsc($b->getNotifyAddress());\r
-                               break;\r
-                       case 'maxcomments':\r
-                               return Entity::hsc($b->getMaxComments());\r
-                               break;\r
-                       case 'updatefile':\r
-                               return Entity::hsc($b->getUpdateFile());\r
-                               break;\r
-                       case 'timeoffset':\r
-                               return Entity::hsc($b->getTimeOffset());\r
-                               break;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_callback()\r
-        * Parse callback\r
-        * \r
-        * @param       string  $eventName      name of event\r
-        * @param       string  $type   type of skin\r
-        * @return      void\r
-        */\r
-       public function parse_callback($eventName, $type)\r
-       {\r
-               global $manager;\r
-               $manager->notify($eventName, array('type' => $type));\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_category()\r
-        * Parse skinvar category\r
-        * \r
-        * @param       string  $type   key of category settings\r
-        * @return      void\r
-        */\r
-       public function parse_category($type = 'name')\r
-       {\r
-               global $catid, $blog;\r
-               if ( !$blog->isValidCategory($catid) )\r
-               {\r
-                       return;\r
-               }\r
-               \r
-               switch ( $type )\r
-               {\r
-                       case 'name':\r
-                               echo $blog->getCategoryName($catid);\r
-                               break;\r
-                       case 'desc':\r
-                               echo $blog->getCategoryDesc($catid);\r
-                               break;\r
-                       case 'id':\r
-                               echo $catid;\r
-                               break;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_categorylist()\r
-        * Parse categorylist\r
-        * \r
-        * @param       string  $template       name of template\r
-        * @param       string  $blogname       name of weblog\r
-        * @return      void\r
-        */\r
-       public function parse_categorylist($template, $blogname = '')\r
-       {\r
-               global $blog, $manager;\r
-               \r
-               // when no blog found\r
-               if ( ($blogname == '') && (!is_object($blog)) )\r
-               {\r
-                       return 0;\r
-               }\r
-                       \r
-               if ( $blogname == '' )\r
-               {\r
-                       $this->preBlogContent('categorylist',$blog);\r
-                       $blog->showCategoryList($template);\r
-                       $this->postBlogContent('categorylist',$blog);\r
-               }\r
-               else\r
-               {\r
-                       $b =& $manager->getBlog(getBlogIDFromName($blogname));\r
-                       $this->preBlogContent('categorylist',$b);\r
-                       $b->showCategoryList($template);\r
-                       $this->postBlogContent('categorylist',$b);\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_charset()\r
-        * Parse skinvar charset\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_charset()\r
-       {\r
-               echo i18n::get_current_charset();\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_commentform()\r
-        * Parse skinvar commentform\r
-        * \r
-        * @param       string  $destinationurl URI for redirection\r
-        * @return      void\r
-        */\r
-       public function parse_commentform($destinationurl = '')\r
-       {\r
-               global $blog, $itemid, $member, $CONF, $manager, $DIR_LIBS, $errormessage;\r
-               \r
-               // warn when trying to provide a actionurl (used to be a parameter in Nucleus <2.0)\r
-               if ( stristr($destinationurl, 'action.php') )\r
-               {\r
-                       $args = func_get_args();\r
-                       $destinationurl = $args[1];\r
-                       ActionLog::add(WARNING,_ACTIONURL_NOTLONGER_PARAMATER);\r
-               }\r
-               \r
-               $actionurl = $CONF['ActionURL'];\r
-               \r
-               // if item is closed, show message and do nothing\r
-               $item =& $manager->getItem($itemid,0,0);\r
-               if ( $item['closed'] || !$blog->commentsEnabled() )\r
-               {\r
-                       $this->doForm('commentform-closed');\r
-                       return;\r
-               }\r
-               \r
-               if ( !$blog->isPublic() && !$member->isLoggedIn() )\r
-               {\r
-                       $this->doForm('commentform-closedtopublic');\r
-                       return;\r
-               }\r
-               \r
-               if ( !$destinationurl )\r
-               {\r
-                       // note: createLink returns an HTML encoded URL\r
-                       $destinationurl = Link::createlink(\r
-                               'item',\r
-                               array(\r
-                                       'itemid' => $itemid,\r
-                                       'title' => $item['title'],\r
-                                       'timestamp' => $item['timestamp'],\r
-                                       'extra' => $this->linkparams\r
-                               )\r
-                       );\r
-               }\r
-               else\r
-               {\r
-                       // HTML encode URL\r
-                       $destinationurl = Entity::hsc($destinationurl);\r
-               }\r
-               \r
-               // values to prefill\r
-               $user = cookieVar($CONF['CookiePrefix'] .'comment_user');\r
-               if ( !$user )\r
-               {\r
-                       $user = postVar('user');\r
-               }\r
-               \r
-               $userid = cookieVar($CONF['CookiePrefix'] .'comment_userid');\r
-               if ( !$userid )\r
-               {\r
-                       $userid = postVar('userid');\r
-               }\r
-               \r
-               $email = cookieVar($CONF['CookiePrefix'] .'comment_email');\r
-               if (!$email)\r
-               {\r
-                       $email = postVar('email');\r
-               }\r
-               \r
-               $body = postVar('body');\r
-               \r
-               $this->formdata = array(\r
-                       'destinationurl' => $destinationurl,    // url is already HTML encoded\r
-                       'actionurl' => Entity::hsc($actionurl),\r
-                       'itemid' => $itemid,\r
-                       'user' => Entity::hsc($user),\r
-                       'userid' => Entity::hsc($userid),\r
-                       'email' => Entity::hsc($email),\r
-                       'body' => Entity::hsc($body),\r
-                       'membername' => $member->getDisplayName(),\r
-                       'rememberchecked' => cookieVar($CONF['CookiePrefix'] .'comment_user')?'checked="checked"':''\r
-               );\r
-               \r
-               if ( !$member->isLoggedIn() )\r
-               {\r
-                       $this->doForm('commentform-notloggedin');\r
-               }\r
-               else\r
-               {\r
-                       $this->doForm('commentform-loggedin');\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_comments()\r
-        * Parse skinvar comments\r
-        * include comments for one item\r
-        * \r
-        * @param       string  $template       name of template\r
-        * @return      void\r
-        */\r
-       public function parse_comments($template)\r
-       {\r
-               global $itemid, $manager, $blog, $highlight;\r
-               $template =& $manager->getTemplate($template);\r
-               \r
-               // create parser object & action handler\r
-               $actions = new ItemActions($blog);\r
-               $parser = new Parser($actions->getDefinedActions(),$actions);\r
-               $actions->setTemplate($template);\r
-               $actions->setParser($parser);\r
-               $item = Item::getitem($itemid, 0, 0);\r
-               $actions->setCurrentItem($item);\r
-               \r
-               $comments = new Comments($itemid);\r
-               $comments->setItemActions($actions);\r
-               // shows ALL comments\r
-               $comments->showComments($template, -1, 1, $highlight);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_errordiv()\r
-        * Parse errordiv\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_errordiv()\r
-       {\r
-               global $errormessage;\r
-               if ( $errormessage )\r
-               {\r
-                       echo '<div class="error">' . Entity::hsc($errormessage) . "</div>\n";\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_errormessage()\r
-        * Parse skinvar errormessage\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_errormessage()\r
-       {\r
-               global $errormessage;\r
-               echo $errormessage;\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_formdata()\r
-        * Parse formdata\r
-        * \r
-        * @param       string  $what   key of format data\r
-        * @return      void\r
-        */\r
-       public function parse_formdata($what)\r
-       {\r
-               echo $this->formdata[$what];\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_ifcat()\r
-        * Parse ifcat\r
-        * \r
-        * @param       string  $text\r
-        * @return      void\r
-        */\r
-       public function parse_ifcat($text = '')\r
-       {\r
-               if ( $text == '' )\r
-               {\r
-                       // new behaviour\r
-                       $this->parse_if('category');\r
-               }\r
-               else\r
-               {\r
-                       // old behaviour\r
-                       global $catid, $blog;\r
-                       if ( $blog->isValidCategory($catid) )\r
-                       {\r
-                               echo $text;\r
-                       }\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_image()\r
-        * Parse skinvar image\r
-        * \r
-        * @param       string  $what   name of tag\r
-        * @return      void\r
-        */\r
-       public function parse_image($what = 'imgtag')\r
-       {\r
-               global $CONF;\r
-               \r
-               $imagetext      = Entity::hsc(requestVar('imagetext'));\r
-               $imagepopup = requestVar('imagepopup');\r
-               $width          = intRequestVar('width');\r
-               $height         = intRequestVar('height');\r
-               $fullurl        = Entity::hsc($CONF['MediaURL'] . $imagepopup);\r
-               \r
-               switch ( $what )\r
-               {\r
-                       case 'url':\r
-                               echo $fullurl;\r
-                               break;\r
-                       case 'width':\r
-                               echo $width;\r
-                               break;\r
-                       case 'height':\r
-                               echo $height;\r
-                               break;\r
-                       case 'caption':\r
-                       case 'text':\r
-                               echo $imagetext;\r
-                               break;\r
-                       case 'imgtag':\r
-                       default:\r
-                               echo "<img src=\"$fullurl\" width=\"$width\" height=\"$height\" alt=\"$imagetext\" title=\"$imagetext\" />";\r
-                               break;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_imagetext()\r
-        * Parse skinvar imagetext\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_imagetext()\r
-       {\r
-               echo Entity::hsc(requestVar('imagetext'));\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_skinfile()\r
-        * Inserts an url relative to the skindir (useful when doing import/export)\r
-        * e.g. <skinfile(default/myfile.sth)>\r
-        * \r
-        * @param       string  $filename       name of file\r
-        * @return      void\r
-        */\r
-       public function parse_skinfile($filename)\r
-       {\r
-               $base = NP_SkinableAdmin::getAdminSkinURL();\r
-               $pref = PARSER::getProperty('IncludePrefix');\r
-               echo "{$base}{$pref}{$filename}";\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_imagetext()\r
-        * Parse skinvar imagetext\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_imagetext()\r
-       {\r
-               $this->parse_image('imagetext');\r
-               return;\r
-       }\r
-\r
-       /**\r
-        * Actions::parse_itemlink()\r
-        * Parse skinvar itemlink\r
-        * \r
-        * @param       string  $linktext       text for content of anchor element\r
-        * @return      void\r
-        */\r
-       function parse_itemlink($linktext = '')\r
-       {\r
-               global $itemid;\r
-               $this->itemlink($itemid, $linktext);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_item()\r
-        * Parse skinvar item\r
-        * include one item (no comments)\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_item($template)\r
-       {\r
-               global $blog, $itemid, $highlight;\r
-               \r
-               // need this to select default category\r
-               $this->setBlogCategory($blog, '');\r
-               $this->preBlogContent('item',$blog);\r
-               $r = $blog->showOneitem($itemid, $template, $highlight);\r
-               if ( $r == 0 )\r
-               {\r
-                       echo _ERROR_NOSUCHITEM;\r
-               }\r
-               $this->postBlogContent('item',$blog);\r
-               return;\r
-       }\r
-\r
-       /**\r
-        * Actions::parse_itemid()\r
-        * Parse skinvar itemid\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_itemid()\r
-       {\r
-               global $itemid;\r
-               echo $itemid;\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parseitemlink()\r
-        * Parse skinvar itemlink\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parseitemlink($linktext = '')\r
-       {\r
-               global $itemid;\r
-               $this->itemlink($itemid, $linktext);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_itemtitle()\r
-        * Parse itemtitle\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_itemtitle($format = '')\r
-       {\r
-               global $manager, $itemid;\r
-               $item =& $manager->getItem($itemid,0,0);\r
-               \r
-               switch ( $format )\r
-               {\r
-                       case 'xml':\r
-                               echo Entity::hen($item['title']);\r
-                               break;\r
-                       case 'raw':\r
-                               echo $item['title'];\r
-                               break;\r
-                       case 'attribute':\r
-                       default:\r
-                               echo Entity::hsc(strip_tags($item['title']));\r
-                               break;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_loginform()\r
-        * Parse skinvar loginform\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_loginform()\r
-       {\r
-               global $member, $CONF;\r
-               if ( !$member->isLoggedIn() )\r
-               {\r
-                       $filename = 'loginform-notloggedin';\r
-                       $this->formdata = array();\r
-               }\r
-               else\r
-               {\r
-                       $filename = 'loginform-loggedin';\r
-                       $this->formdata = array(\r
-                               'membername' => $member->getDisplayName(),\r
-                       );\r
-               }\r
-               $this->doForm($filename);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_member()\r
-        * Parse skinvar member\r
-        * (includes a member info thingie)\r
-        * \r
-        * @param       string  $what   which memberdata is needed\r
-        * @return      void\r
-        */\r
-       public function parse_member($what)\r
-       {\r
-               global $memberinfo, $member, $CONF;\r
-               \r
-               // 1. only allow the member-details-page specific variables on member pages\r
-               if ( $this->skintype == 'member' )\r
-               {\r
-                       switch( $what )\r
-                       {\r
-                               case 'name':\r
-                                       echo Entity::hsc($memberinfo->getDisplayName());\r
-                                       break;\r
-                               case 'realname':\r
-                                       echo Entity::hsc($memberinfo->getRealName());\r
-                                       break;\r
-                               case 'notes':\r
-                                       echo Entity::hsc($memberinfo->getNotes());\r
-                                       break;\r
-                               case 'url':\r
-                                       echo Entity::hsc($memberinfo->getURL());\r
-                                       break;\r
-                               case 'email':\r
-                                       echo Entity::hsc($memberinfo->getEmail());\r
-                                       break;\r
-                               case 'id':\r
-                                       echo Entity::hsc($memberinfo->getID());\r
-                                       break;\r
-                       }\r
-               }\r
-               \r
-               // 2. the next bunch of options is available everywhere, as long as the user is logged in\r
-               if ( $member->isLoggedIn() )\r
-               {\r
-                       switch( $what )\r
-                       {\r
-                               case 'yourname':\r
-                                       echo $member->getDisplayName();\r
-                                       break;\r
-                               case 'yourrealname':\r
-                                       echo $member->getRealName();\r
-                                       break;\r
-                               case 'yournotes':\r
-                                       echo $member->getNotes();\r
-                                       break;\r
-                               case 'yoururl':\r
-                                       echo $member->getURL();\r
-                                       break;\r
-                               case 'youremail':\r
-                                       echo $member->getEmail();\r
-                                       break;\r
-                               case 'yourid':\r
-                                       echo $member->getID();\r
-                                       break;\r
-                               case 'yourprofileurl':\r
-                                       if ($CONF['URLMode'] == 'pathinfo')\r
-                                               echo Link::create_memberlink($member->getID());\r
-                                       else\r
-                                               echo $CONF['IndexURL'] . Link::create_memberlink($member->getID());\r
-                                       break;\r
-                       }\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Link::parse_membermailform()\r
-        * Parse skinvar membermailform\r
-        * \r
-        * @param       integer $rows   the height for textarea\r
-        * @param       integer $cols   the width for textarea\r
-        * @param       string  $desturl        URI to redirect\r
-        * @return      void\r
-        */\r
-       public function parse_membermailform($rows = 10, $cols = 40, $desturl = '')\r
-       {\r
-               global $member, $CONF, $memberid;\r
-               \r
-               if ( $desturl == '' )\r
-               {\r
-                       if ( $CONF['URLMode'] == 'pathinfo' )\r
-                       {\r
-                               $desturl = Link::create_memberlink($memberid);\r
-                       }\r
-                       else\r
-                       {\r
-                               $desturl = $CONF['IndexURL'] . Link::create_memberlink($memberid);\r
-                       }\r
-               }\r
-               \r
-               $message = postVar('message');\r
-               $frommail = postVar('frommail');\r
-               \r
-               $this->formdata = array(\r
-                       'url' => Entity::hsc($desturl),\r
-                       'actionurl' => Entity::hsc($CONF['ActionURL']),\r
-                       'memberid' => $memberid,\r
-                       'rows' => $rows,\r
-                       'cols' => $cols,\r
-                       'message' => Entity::hsc($message),\r
-                       'frommail' => Entity::hsc($frommail)\r
-               );\r
-               \r
-               if ( $member->isLoggedIn() )\r
-               {\r
-                       $this->doForm('membermailform-loggedin');\r
-               }\r
-               else if ( $CONF['NonmemberMail'] )\r
-               {\r
-                       $this->doForm('membermailform-notloggedin');\r
-               }\r
-               else\r
-               {\r
-                       $this->doForm('membermailform-disallowed');\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_nextarchive()\r
-        * Parse skinvar nextarchive\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_nextarchive()\r
-       {\r
-               global $archivenext;\r
-               echo $archivenext;\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Parse skinvar nextitem\r
-        * (include itemid of next item)\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_nextitem()\r
-       {\r
-               global $itemidnext;\r
-               if ( isset($itemidnext) )\r
-               {\r
-                       echo (int)$itemidnext;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_nextitemtitle()\r
-        * Parse skinvar nextitemtitle\r
-        * (include itemtitle of next item)\r
-        * \r
-        * @param       string  $format format of text\r
-        * @return      void\r
-        */\r
-       public function parse_nextitemtitle($format = '')\r
-       {\r
-               global $itemtitlenext;\r
-               \r
-               switch ( $format )\r
-               {\r
-                       case 'xml':\r
-                               echo Entity::hen($itemtitlenext);\r
-                               break;\r
-                       case 'raw':\r
-                               echo $itemtitlenext;\r
-                               break;\r
-                       case 'attribute':\r
-                       default:\r
-                               echo Entity::hsc($itemtitlenext);\r
-                               break;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_nextlink()\r
-        * Parse skinvar nextlink\r
-        * \r
-        * @param       string  $linktext       text for content of anchor element\r
-        * @param       integer $amount         the amount of items in a display\r
-        * @param       integer $recount        increment from this value\r
-        * @return      void\r
-        */\r
-       public function parse_nextlink($linktext = '', $amount = 10, $recount = '')\r
-       {\r
-               global $itemidnext, $archivenext, $startpos;\r
-               if ( $this->skintype == 'item' )\r
-               {\r
-                       $this->itemlink($itemidnext, $linktext);\r
-               }\r
-               else if ( $this->skintype == 'search' || $this->skintype == 'index' )\r
-               {\r
-                       $this->searchlink($amount, $startpos, 'next', $linktext, $recount);\r
-               }\r
-               else\r
-               {\r
-                       $this->archivelink($archivenext, $linktext);\r
-               }\r
-               return;\r
-       }\r
-\r
-       /**\r
-        * Actions::parse_nucleusbutton()\r
-        * Parse skinvar nucleusbutton\r
-        * \r
-        * @param       string  $imgurl URL  for image\r
-        * @param       integer $imgwidth       width of image\r
-        * @param       integer $imgheidht      height of image\r
-        */\r
-       public function parse_nucleusbutton($imgurl = '', $imgwidth = '85', $imgheight = '31')\r
-       {\r
-               global $CONF;\r
-               if ( $imgurl == '' )\r
-               {\r
-                       $imgurl = $CONF['AdminURL'] . 'nucleus.gif';\r
-               }\r
-               else if ( Parser::getProperty('IncludeMode') == 'skindir' )\r
-               {\r
-                       // when skindit IncludeMode is used: start from skindir\r
-                       $imgurl = $CONF['SkinsURL'] . Parser::getProperty('IncludePrefix') . $imgurl;\r
-               }\r
-               \r
-               $this->formdata = array(\r
-                       'imgurl' => $imgurl,\r
-                       'imgwidth' => $imgwidth,\r
-                       'imgheight' => $imgheight,\r
-               );\r
-               $this->doForm('nucleusbutton');\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_otherarchive()\r
-        * Parse skinvar otherarchive\r
-        * \r
-        * @param       string  $blogname       name of weblog\r
-        * @param       string  $template       name of template\r
-        * @param       string  $category       name of category\r
-        * @return      void\r
-        */     \r
-       public function parse_otherarchive($blogname, $template, $category = '')\r
-       {\r
-               global $archive, $manager;\r
-               sscanf($archive,'%d-%d-%d',$y,$m,$d);\r
-               $b =& $manager->getBlog(getBlogIDFromName($blogname));\r
-               $this->setBlogCategory($b, $category);\r
-               $this->preBlogContent('otherachive',$b);\r
-               $b->showArchive($template, $y, $m, $d);\r
-               $this->postBlogContent('otherachive',$b);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_otherarchivedaylist()\r
-        * Parse skinvar otherarchivedaylist\r
-        * \r
-        * @param       string  $blogname       name of weblog\r
-        * @param       string  $template       name of template\r
-        * @param       string  $category       name of category\r
-        * @param       integer $limit          the amount of items in a display\r
-        * @return      void\r
-        */\r
-       public function parse_otherarchivedaylist($blogname, $template, $category = 'all', $limit = 0)\r
-       {\r
-               global $manager;\r
-               if ( $category == 'all')\r
-               {\r
-                       $category = '';\r
-               }\r
-               $b =& $manager->getBlog(getBlogIDFromName($blogname));\r
-               $this->setBlogCategory($b, $category);\r
-               $this->preBlogContent('otherarchivelist',$b);\r
-               $b->showArchiveList($template, 'day', $limit);\r
-               $this->postBlogContent('otherarchivelist',$b);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_otherarchivelist()\r
-        * Parse skinvar otherarchivelist\r
-        * \r
-        * @param       string  $blogname       name of weblog\r
-        * @param       string  $template       name of template\r
-        * @param       string  $category       name of category\r
-        * @param       integer $limit          the amount of items in a display\r
-        * @return      void\r
-        */\r
-       public function parse_otherarchivelist($blogname, $template, $category = 'all', $limit = 0)\r
-       {\r
-               global $manager;\r
-               if ( $category == 'all' )\r
-               {\r
-                       $category = '';\r
-               }\r
-               $b =& $manager->getBlog(getBlogIDFromName($blogname));\r
-               $this->setBlogCategory($b, $category);\r
-               $this->preBlogContent('otherarchivelist',$b);\r
-               $b->showArchiveList($template, 'month', $limit);\r
-               $this->postBlogContent('otherarchivelist',$b);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_otherarchiveyearlist()\r
-        * Parse skinvar otherarchiveyearlist\r
-        * \r
-        * @param       string  $blogname       name of weblog\r
-        * @param       string  $template       name of template\r
-        * @param       string  $category       name of category\r
-        * @limit       integer $limit          the amount of items in a display\r
-        */\r
-       public function parse_otherarchiveyearlist($blogname, $template, $category = 'all', $limit = 0)\r
-       {\r
-               global $manager;\r
-               if ( $category == 'all' )\r
-               {\r
-                       $category = '';\r
-               }\r
-               $b =& $manager->getBlog(getBlogIDFromName($blogname));\r
-               $this->setBlogCategory($b, $category);\r
-               $this->preBlogContent('otherarchivelist',$b);\r
-               $b->showArchiveList($template, 'year', $limit);\r
-               $this->postBlogContent('otherarchivelist',$b);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_otherblog()\r
-        * Parse skinvar otherblog\r
-        * \r
-        * @param       string  $blogname       name of weblog\r
-        * @param       string  $template       name of template\r
-        * @param       mixed   $amount         the amount of items, in case it includes the beginning\r
-        * @param       string  $category       name of category\r
-        * @return      void\r
-        */\r
-       public function parse_otherblog($blogname, $template, $amount = 10, $category = '')\r
-       {\r
-               global $manager;\r
-               \r
-               list($limit, $offset) = sscanf($amount, '%d(%d)');\r
-               \r
-               $b =& $manager->getBlog(getBlogIDFromName($blogname));\r
-               $this->setBlogCategory($b, $category);\r
-               $this->preBlogContent('otherblog',$b);\r
-               $this->amountfound = $b->readLog($template, $limit, $offset);\r
-               $this->postBlogContent('otherblog',$b);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_othersearchresults()\r
-        * Parse skinvar othersearchresults\r
-        * \r
-        * @param       string  $blogname       name of weblog\r
-        * @param       string  $template       name of template\r
-        * @param       integer $maxresults     the amount of results\r
-        * @return      void\r
-        */\r
-       public function parse_othersearchresults($blogname, $template, $maxresults = 50)\r
-       {\r
-               global $query, $amount, $manager, $startpos;\r
-               $b =& $manager->getBlog(getBlogIDFromName($blogname));\r
-               // need this to select default category\r
-               $this->setBlogCategory($b, '');\r
-               $this->preBlogContent('othersearchresults',$b);\r
-               $b->search($query, $template, $amount, $maxresults, $startpos);\r
-               $this->postBlogContent('othersearchresults',$b);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_plugin()\r
-        * Executes a plugin skinvar\r
-        * extra parameters can be added\r
-        * \r
-        * @param       string  $pluginName     name of plugin (without the NP_)\r
-        * @return      void\r
-        */\r
-       public function parse_plugin($pluginName)\r
-       {\r
-               global $manager;\r
-               \r
-               $plugin =& $manager->getPlugin('NP_' . $pluginName);\r
-               if ( !$plugin )\r
-               {\r
-                       return;\r
-               }\r
-               \r
-               // get arguments\r
-               $params = func_get_args();\r
-               \r
-               // remove plugin name\r
-               array_shift($params);\r
-               \r
-               // add skin type on front\r
-               array_unshift($params, $this->skintype);\r
-               \r
-               call_user_func_array(array(&$plugin,'doSkinVar'), $params);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_prevarchive()\r
-        * Parse skinvar prevarchive\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_prevarchive()\r
-       {\r
-               global $archiveprev;\r
-               echo $archiveprev;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_preview()\r
-        * Parse skinvar preview\r
-        * \r
-        * @param       string  $template       name of tempalte\r
-        * @return      void\r
-        */\r
-       public function parse_preview($template)\r
-       {\r
-               global $blog, $CONF, $manager;\r
-               \r
-               $template =& $manager->getTemplate($template);\r
-               \r
-               $row['body'] = '<span id="prevbody"></span>';\r
-               $row['title'] = '<span id="prevtitle"></span>';\r
-               $row['more'] = '<span id="prevmore"></span>';\r
-               $row['itemlink'] = '';\r
-               $row['itemid'] = 0; $row['blogid'] = $blog->getID();\r
-               \r
-               echo Template::fill($template['ITEM_HEADER'],$row);\r
-               echo Template::fill($template['ITEM'],$row);\r
-               echo Template::fill($template['ITEM_FOOTER'],$row);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_previtem()\r
-        * Parse skinvar previtem\r
-        * (include itemid of prev item)\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_previtem()\r
-       {\r
-               global $itemidprev;\r
-               if ( isset($itemidprev) )\r
-               {\r
-                       echo (integer) $itemidprev;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_previtemtitle()\r
-        * Parse skinvar previtemtitle\r
-        * (include itemtitle of prev item)\r
-        * \r
-        * @param       String  $format string format\r
-        * @return      String  formatted string\r
-        */\r
-       public function parse_previtemtitle($format = '')\r
-       {\r
-               global $itemtitleprev;\r
-               \r
-               switch ( $format )\r
-               {\r
-                       case 'xml':\r
-                               echo Entity::hen($itemtitleprev);\r
-                               break;\r
-                       case 'raw':\r
-                               echo $itemtitleprev;\r
-                               break;\r
-                       case 'attribute':\r
-                       default:\r
-                               echo Entity::hsc($itemtitleprev);\r
-                               break;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_prevlink()\r
-        * Parse skinvar prevlink\r
-        * \r
-        * @param       string  $linktext       text as a content of anchor element\r
-        * @param       integer the amount of links\r
-        * @return      void\r
-        */\r
-       public function parse_prevlink($linktext = '', $amount = 10)\r
-       {\r
-               global $itemidprev, $archiveprev, $startpos;\r
-               \r
-               if ( $this->skintype == 'item' )\r
-               {\r
-                       $this->itemlink($itemidprev, $linktext);\r
-               }\r
-               else if ( $this->skintype == 'search' || $this->skintype == 'index' )\r
-               {\r
-                       $this->searchlink($amount, $startpos, 'prev', $linktext);\r
-               }\r
-               else\r
-               {\r
-                       $this->archivelink($archiveprev, $linktext);\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_query()\r
-        * Parse skinvar query\r
-        * (includes the search query)   \r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_query()\r
-       {\r
-               global $query;\r
-               echo Entity::hsc($query);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_referer()\r
-        * Parse skinvar referer\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_referer()\r
-       {\r
-               echo Entity::hsc(serverVar('HTTP_REFERER'));\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_searchform()\r
-        * Parse skinvar searchform\r
-        * \r
-        * @param       string  $blogname       name of weblog\r
-        * @return      void\r
-        */\r
-       public function parse_searchform($blogname = '')\r
-       {\r
-               global $CONF, $manager, $maxresults;\r
-               if ( $blogname )\r
-               {\r
-                       $blog =& $manager->getBlog(getBlogIDFromName($blogname));\r
-               }\r
-               else\r
-               {\r
-                       global $blog;\r
-               }\r
-               // use default blog when no blog is selected\r
-               $this->formdata = array(\r
-                       'id'    => $blog?$blog->getID():$CONF['DefaultBlog'],\r
-                       'query' => Entity::hsc(getVar('query')),\r
-               );\r
-               $this->doForm('searchform');\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_searchresults()\r
-        * Parse skinvar searchresults\r
-        * \r
-        * @param       string  $template       name of tempalte\r
-        * @param       integer $maxresults     searched items in a display\r
-        * @return      void;\r
-        */\r
-       public function parse_searchresults($template, $maxresults = 50 )\r
-       {\r
-               global $blog, $query, $amount, $startpos;\r
-               \r
-               $this->setBlogCategory($blog, '');      // need this to select default category\r
-               $this->preBlogContent('searchresults',$blog);\r
-               $this->amountfound = $blog->search($query, $template, $amount, $maxresults, $startpos);\r
-               $this->postBlogContent('searchresults',$blog);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_self()\r
-        * Parse skinvar self\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_self()\r
-       {\r
-               global $CONF;\r
-               echo $CONF['Self'];\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_sitevar()\r
-        * Parse skinvar sitevar\r
-        * (include a sitevar)\r
-        * \r
-        * @param       string  $which\r
-        * @return      void\r
-        */\r
-       public function parse_sitevar($which)\r
-       {\r
-               global $CONF;\r
-               switch ( $which )\r
-               {\r
-                       case 'url':\r
-                               echo $CONF['IndexURL'];\r
-                               break;\r
-                       case 'name':\r
-                               echo $CONF['SiteName'];\r
-                               break;\r
-                       case 'admin':\r
-                               echo $CONF['AdminEmail'];\r
-                               break;\r
-                       case 'adminurl':\r
-                               echo $CONF['AdminURL'];\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_skinname()\r
-        * Parse skinname\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_skinname()\r
-       {\r
-               echo $this->skin->getName();\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_skintype()\r
-        * Parse skintype (experimental)\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_skintype()\r
-       {\r
-               echo $this->skintype;\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_text()\r
-        * Parse text\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_text($which)\r
-       {\r
-               // constant($which) only available from 4.0.4 :(\r
-               if ( defined($which) )\r
-               {\r
-                       eval("echo $which;");\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_ticket()\r
-        * Parse ticket\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_ticket()\r
-       {\r
-               global $manager;\r
-               $manager->addTicketHidden();\r
-               return;\r
-       }\r
-\r
-       /**\r
-        * Actions::parse_todaylink()\r
-        * Parse skinvar todaylink\r
-        * A link to the today page (depending on selected blog, etc...)\r
-        *\r
-        * @param       string  $linktext       text for link\r
-        * @return      void\r
-        */\r
-       public function parse_todaylink($linktext = '')\r
-       {\r
-               global $blog, $CONF;\r
-               if ( $blog )\r
-               {\r
-                       echo $this->link(Link::create_blogidlink($blog->getID(),$this->linkparams), $linktext);\r
-               }\r
-               else\r
-               {\r
-                       echo $this->link($CONF['SiteUrl'], $linktext);\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Parse vars\r
-        * When commentform is not used, to include a hidden field with itemid   \r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_vars()\r
-       {\r
-               global $itemid;\r
-               echo '<input type="hidden" name="itemid" value="'.$itemid.'" />' . "\n";\r
-               return;\r
-       }\r
-\r
-       /**\r
-        * Actions::parse_version()\r
-        * Parse skinvar version\r
-        * (include nucleus versionnumber)       \r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_version()\r
-       {\r
-               global $nucleus;\r
-               echo 'Nucleus CMS ' . $nucleus['version'];\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_sticky()\r
-        * Parse skinvar sticky\r
-        * \r
-        * @param       integer $itemnumber     id of item\r
-        * @param       string  $template       name of template\r
-        * @return      void\r
-        */\r
-       public function parse_sticky($itemnumber = 0, $template = '')\r
-       {\r
-               global $manager;\r
-               \r
-               $itemnumber = intval($itemnumber);\r
-               $itemarray = array($itemnumber);\r
-               \r
-               $b =& $manager->getBlog(getBlogIDFromItemID($itemnumber));\r
-               $this->preBlogContent('sticky',$b);\r
-               $this->amountfound = $b->readLogFromList($itemarray, $template);\r
-               $this->postBlogContent('sticky',$b);\r
-               return;\r
-       }\r
-       \r
-       /* TODO: checking these new added methods */\r
-       \r
-       /**\r
-        * Actions::parse_adminbanlist()\r
-        * Parse skinvar adminbanlist\r
-        * \r
-        * @param       string  $templateName   name of template to use\r
-        * @return      void\r
-        */\r
-       public function parse_adminbanlist($templateName = '')\r
-       {\r
-               $blogid = intRequestVar('blogid');\r
-               $query = "SELECT * FROM %s WHERE blogid=%d ORDER BY iprange;";\r
-               $query = sprintf($query, sql_table('ban'), (integer) $blogid);\r
-               $template['content'] = 'banlist';\r
-               $amount = skinableShowlist($query, 'table', $template, $templateName);\r
-               if ( $amount == 0 )\r
-               {\r
-                       echo _BAN_NONE;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_adminbatchaction()\r
-        * Parse skinvar adminbatchaction\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_adminbatchaction()\r
-       {\r
-               echo Entity::hsc(requestVar('batchaction'));\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_adminbatchlist()\r
-        * Parse skinvar adminbatchlist\r
-        * \r
-        * @param       string  $templateName   name of template to use\r
-        * @return      void\r
-        */\r
-       public function parse_adminbatchlist($templateName = '')\r
-       {\r
-               global $manager;\r
-               $templates = array();\r
-               if ( !empty($templateName) )\r
-               {\r
-                       $templates = skinableTEMPLATE::read($templateName);\r
-               }\r
-               if ( isset($templates['ADMIN_BATCHLIST']) || !empty($templates['ADMIN_BATCHLIST']) )\r
-               {\r
-                       $template = $templates['ADMIN_BATCHLIST'];\r
-               }\r
-               else\r
-               {\r
-                       $template = '<li><%text(_BATCH_EXECUTING)%><b><%adminbatchaction%></b>'\r
-                                         . '<%batchlisttype%> <b><%batchid%></b>...'\r
-                                         . '<b><%batchlistmsg%></b></li>' . "\n";\r
-               }\r
-               \r
-               $selected = requestIntArray('batch');\r
-               $action   = requestVar('batchaction');\r
-               \r
-               switch ( $this->skintype )\r
-               {\r
-                       case 'batchitem':\r
-                               $batchlisttype = _BATCH_ONITEM;\r
-                               $deleteaction  = 'deleteOneItem';\r
-                               $moveaction     = 'moveOneItem';\r
-                               $destid         = intRequestVar('destcatid');\r
-                               break;\r
-                       case 'batchcomment':\r
-                               $batchlisttype = _BATCH_ONCOMMENT;\r
-                               $deleteaction  = 'deleteOneComment';\r
-                               break;\r
-                       case 'batchmember':\r
-                               $batchlisttype = _BATCH_ONMEMBER;\r
-                               $deleteaction  = 'deleteOneMember';\r
-                               $setadminsql   = sql_table('member') . ' SET madmin = 1 WHERE mnumber = ';\r
-                               $unsetchksql   = 'SELECT * FROM ' . sql_table('member') . ' WHERE madmin = 1 AND mcanlogin = 1';\r
-                               $unsetupsql     = sql_table('member') . ' SET madmin = 0 WHERE mnumber = ';\r
-                               $unseterrmsg   = _ERROR_ATLEASTONEADMIN;\r
-                               break;\r
-                       case 'batchteam':\r
-                               $blogid         = intRequestVar('blogid');\r
-                               $batchlisttype = _BATCH_ONTEAM;\r
-                               $deleteaction  = 'deleteOneTeamMember';\r
-                               $setadminsql   = sql_table('team') . ' SET tadmin = 1 WHERE tblog = ' . $blogid . ' AND tmember = ';\r
-                               $unsetchksql   = 'SELECT * FROM ' . sql_table('team') . ' WHERE tadmin = 1 AND tblog = ' . $blogid;\r
-                               $unseterrmsg   = _ERROR_ATLEASTONEBLOGADMIN;\r
-                               $unsetupsql     = sql_table('team') . ' SET tadmin = 0 WHERE tblog = ' . $blogid . ' AND tmember = ';\r
-                               break;\r
-                       case 'batchcategory':\r
-                               $batchlisttype = _BATCH_ONCATEGORY;\r
-                               $deleteaction  = 'deleteOneCategory';\r
-                               $moveaction     = 'moveOneCategory';\r
-                               $destid         = intRequestVar('destblogid');\r
-                               break;\r
-               }\r
-               \r
-               // walk over all selectedids and perform action\r
-               foreach ( $selected as $selectedid )\r
-               {\r
-                       $error    = '';\r
-                       $selectedid = intval($selectedid);\r
-                       switch ( $action )\r
-                       {\r
-                               case 'delete':\r
-                                       if ( $this->skintype != 'batchteam' )\r
-                                       {\r
-                                               $error = $this->objAdmin->$deleteaction($selectedid);\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               $error  = $this->objAdmin->deleteOneTeamMember($blogid, $selectedid);\r
-                                       }\r
-                                       break;\r
-                               case 'move':\r
-                                       $error = $this->objAdmin->$moveaction($selectedid, $destid);\r
-                                       break;\r
-                               case 'setadmin':\r
-                                       // always succeeds\r
-                                       sql_query('UPDATE ' . $setadminsql . $selectedid);\r
-                                       $error = '';\r
-                                       break;\r
-                               case 'unsetadmin':\r
-                                       // there should always remain at least one super-admin\r
-                                       $r = sql_query($unsetchksql);\r
-                                       if ( sql_num_rows($r) < 2 )\r
-                                       {\r
-                                               $error = $unseterrmsg;\r
-                                       }\r
-                                       else\r
-                                       {\r
-                                               sql_query('UPDATE ' . $unsetupsql . $selectedid);\r
-                                       }\r
-                                       break;\r
-                               default:\r
-                                       $error = _BATCH_UNKNOWN . Entity::hsc($action);\r
-                       }\r
-                       $data = array(\r
-                               'batchid'                       => $selectedid,\r
-                               'batchlisttype'         => Entity::hsc($batchlisttype),\r
-                               'adminbatchaction'      => Entity::hsc($action),\r
-                               'batchlistmsg'          => $error ? $error : _BATCH_SUCCESS,\r
-                       );\r
-                       $handler = new skinableACTIONS('template', $template, new ADMIN);\r
-                       $parser  = new skinablePARSER($handler);\r
-                       \r
-                       ob_start();\r
-                       $parser->parse($template);\r
-                       $template = ob_get_contents();\r
-                       ob_end_clean();\r
-                       \r
-                       echo TEMPLATE::fill($template, $data);\r
-                       return;\r
-               }\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_adminbloglink()\r
-        * Parse skinvar adminbloglink\r
-        * \r
-        * @param       string  $templateName   name of template to use\r
-        * @return      void\r
-        */\r
-       public function parse_adminbloglink($templateName = '')\r
-       {\r
-               global $manager;\r
-               $blogid =  intRequestVar('blogid');\r
-               $blog   =& $manager->getBlog($blogid);\r
-               $templates = array();\r
-               \r
-               if ( !empty($templateName) )\r
-               {\r
-                       $templates = skinableTEMPLATE::read($templateName);\r
-               }\r
-               \r
-               if ( isset($templates['ADMIN_BLOGLINK']) || !empty($templates['ADMIN_BLOGLINK']) )\r
-               {\r
-                       $template = $templates['ADMIN_BLOGLINK'];\r
-               }\r
-               else\r
-               {\r
-                       $template = '<a href="<%url%>" title="<%adminbloglinktitle%>"><%blogname%></a>';\r
-               }\r
-               \r
-               $data = array(\r
-                       'url'                                   => Entity::hsc($blog->getURL()),\r
-                       'adminbloglinktitle'    => _BLOGLIST_TT_VISIT,\r
-                       'blogname'                              => Entity::hsc($blog->getName())\r
-               );\r
-               \r
-               echo TEMPLATE::fill($template, $data);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_adminerrormesg()\r
-        * Parse skinvar adminerrormesg\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_adminerrormesg()\r
-       {\r
-               global $CONF;\r
-               $message = '';\r
-               \r
-               if ( requestVar('errormessage') )\r
-               {\r
-                       $message = requestVar('errormessage');\r
-               }\r
-               elseif ( cookieVar($CONF['CookiePrefix'] . 'errormessage') )\r
-               {\r
-                       $message = cookieVar($CONF['CookiePrefix'] . 'errormessage');\r
-               }\r
-               elseif ( $this->objAdmin->sessionVar($CONF['CookiePrefix'] . 'errormessage') )\r
-               {\r
-                       $message = $this->objAdmin->sessionVar($CONF['CookiePrefix'] . 'errormessage');\r
-               }\r
-               echo Entity::hsc($message);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_adminparsedinclude()\r
-        * Parse skinvar adminparsedinclude\r
-        * \r
-        * @param       string  $filename       name of file\r
-        * @return      void\r
-        */\r
-       public function parse_adminparsedinclude($filename)\r
-       {\r
-               // check current level\r
-               if ( $this->level > 3)\r
-               {\r
-                       // max. depth reached (avoid endless loop)\r
-                       return;\r
-               }\r
-               \r
-               $skin = new skinableSKIN($this->skin->id);\r
-               $file = $this->getIncludeFileName($filename);\r
-               if ( !$skin->isValid && !file_exists($file) )\r
-               {\r
-                       return;\r
-               }\r
-               $contents = $skin->getContent($filename);\r
-               if ( !$contents )\r
-               {\r
-                       if ( !file_exists($file) )\r
-                       {\r
-                               return;\r
-                       }\r
-                       $contents = file_get_contents($file);\r
-                       if ( empty($contents) )\r
-                       {\r
-                               return;\r
-                       }\r
-               }\r
-               $this->level = $this->level + 1;\r
-               // parse file contents\r
-               $this->parser->parse($contents);\r
-               \r
-               $this->level = $this->level - 1;\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_adminskineditallowedlist()\r
-        * Parse skinvar adminskineditallowedlist\r
-        * \r
-        * @param       string  $type                   template/blog\r
-        * @param       string  $templateName   name of template to use\r
-        * @return      void\r
-        */\r
-       public function parse_adminskineditallowedlist($type = 'template', $templateName = '')\r
-       {\r
-               switch ( $type )\r
-               {\r
-                       /* TODO: blog seems not to be used */\r
-                       case 'blog':\r
-                               $query = "SELECT bshortname, bname FROM %s";\r
-                               $query = sprintf($query, sql_table('blog'));\r
-                               $show  = array(\r
-                                       'content' => 'shortblognames'\r
-                               );\r
-                               break;\r
-                       case 'template':\r
-                               $query = "SELECT tdname as name, tddesc as description FROM %s;";\r
-                               $query = sprintf($query, sql_table('admintemplate_desc'));\r
-                               $show  = array(\r
-                                       'content' => 'shortnames'\r
-                               );\r
-                               break;\r
-               }\r
-               skinableShowlist($query, 'table', $show, $templateName);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_adminskinielist()\r
-        * Parse skinvar adminskinielist\r
-        * \r
-        * @param       string  $type                   skin/template\r
-        * @param       string  $templateName   name of template to use\r
-        * @return      void\r
-        */\r
-       public function parse_adminskinielist($type, $templateName = '')\r
-       {\r
-               $templates = array();\r
-               if ( $templateName )\r
-               {\r
-                       $templates = skinableTEMPLATE::read($templateName);\r
-               }\r
-               if ( isset($templates['SKINIE_EXPORT_LIST']) && !empty($templates['SKINIE_EXPORT_LIST']) )\r
-               {\r
-                       $template = $templates['SKINIE_EXPORT_LIST'];\r
-               }\r
-               else\r
-               {\r
-                       $template = '<td><input type="checkbox" name="<%typeid%>"  id="<%expid%>" /><label for="<%expid%>"><%expname%></label></td>' . "\n"\r
-                                         . "<td><%expdesc%></td>\n"\r
-                                         . "</tr><tr>\n";\r
-               }\r
-               switch ( $type )\r
-               {\r
-                       case 'skin':\r
-                               $query = "SELECT * FROM %s;";\r
-                               $query = sprintf($query, sql_table('adminskin_desc'));\r
-                               $res = sql_query($query);\r
-                               \r
-                               while ( $skinObj = sql_fetch_object($res) )\r
-                               {\r
-                                       $data = array(\r
-                                               'typeid'        => 'skin[' . $skinObj->sdnumber . ']',\r
-                                               'expid'         => 'skinexp' . $skinObj->sdnumber,\r
-                                               'expname'       => Entity::hsc($skinObj->sdname),\r
-                                               'expdesc'       => Entity::hsc($skinObj->sddesc),\r
-                                       );\r
-                                       echo TEMPLATE::fill($template, $data);\r
-                               }\r
-                               break;\r
-                       case 'template':\r
-                               $query = "SELECT * FROM %s;";\r
-                               $query = sprintf($query, sql_table('admintemplate_desc'));\r
-                               $res = sql_query($query);\r
-                               while ( $templateObj = sql_fetch_object($res) )\r
-                               {\r
-                                       $data = array(\r
-                                               'typeid'        => 'template[' . $templateObj->tdnumber . ']',\r
-                                               'expid'         => 'templateexp' . $templateObj->tdnumber,\r
-                                               'expname'       => Entity::hsc($templateObj->tdname),\r
-                                               'expdesc'       => Entity::hsc($templateObj->tddesc),\r
-                                       );\r
-                                       echo TEMPLATE::fill($template, $data);\r
-                               }\r
-                               break;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_adminskinoverview()\r
-        * Parse skinvar adminskinoverview\r
-        * \r
-        * @param       string  $templateName   name of template to use\r
-        * @return      void\r
-        */\r
-       public function parse_adminskinoverview($templateName = '')\r
-       {\r
-               $query = "SELECT * FROM %s ORDER BY sdname;";\r
-               $query = sprintf($query, sql_table('adminskin_desc'));\r
-               \r
-               $template['content']    = 'adminskinlist';\r
-               $template['tabindex']   = 10;\r
-               skinableShowlist($query, 'table', $template, $templateName);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_adminskinselectoptions()\r
-        * Parse skinvar adminskinselectoptions\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_adminskinselectoptions()\r
-       {\r
-               global $CONF;\r
-               $query = "SELECT sdname as text, sdnumber as value FROM %s;";\r
-               $query = sprintf($query, sql_table('adminskin_desc'));\r
-               \r
-               $template['name']        = 'adminskin';\r
-               $template['selected'] = $CONF['DefaultAdminSkin'];\r
-               $template['tabindex'] = 110;\r
-               skinableShowlist($query, 'select', $template, '');\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_adminspecialskinlist()\r
-        * Parse skinvar adminspecialskinlist\r
-        * \r
-        * @param       string  $templateName   name of template to use\r
-        */\r
-       public function parse_adminspecialskinlist($templateName = '')\r
-       {\r
-               $templates = array();\r
-               if ( $templateName )\r
-               {\r
-                       $templates = skinableTEMPLATE::read($templateName);\r
-               }\r
-               \r
-               $nType  = skinableSKIN::getAdminskinDefaultTypes();\r
-               $skinid = intRequestVar('skinid');\r
-               \r
-               $query = "SELECT stype FROM  %s WHERE stype NOT IN (%s) AND sdesc=%d;";\r
-               $query = sprintf($query, sql_table('adminskin'), "'" . implode("', '", $nType) . "'", (integer) $skinid);\r
-               \r
-               $res    = sql_query($query);\r
-               if ( $res && sql_num_rows($res) > 0 )\r
-               {\r
-                       $data = array();\r
-                       if ( isset($templates['ADMIN_SPECIALSKINLIST_HEAD']) && !empty($templates['ADMIN_SPECIALSKINLIST_HEAD']) )\r
-                       {\r
-                               $template['head'] = $templates['ADMIN_SPECIALSKINLIST_HEAD'];\r
-                       }\r
-                       else\r
-                       {\r
-                               $template['head'] = "<ul>\n";\r
-                       }\r
-                       echo TEMPLATE::fill($template['head'], $data);\r
-                       if ( isset($templates['ADMIN_SPECIALSKINLIST_BODY']) && !empty($templates['ADMIN_SPECIALSKINLIST_BODY']) )\r
-                       {\r
-                               $template['body'] = $templates['ADMIN_SPECIALSKINLIST_BODY'];\r
-                       }\r
-                       else\r
-                       {\r
-                               $template['body'] = '<li><a tabindex="<%tabindex%>" href="index.php?action=adminskinedittype&amp;skinid=<%skinid%>'\r
-                                                                 . '&amp;type=<%skintype%>"><%skintype%></a> (<a tabindex="<%tabindex%>" href="index.php?'\r
-                                                                 . 'action=adminskinremovetype&amp;skinid=<%skinid%>&amp;type=<%skintype%>">remove</a>)</li>';\r
-                       }\r
-                       $tabstart = 120;\r
-                       while ( $row = sql_fetch_assoc($res) )\r
-                       {\r
-                               $data = array(\r
-                                       'tabindex'      => $tabstart++,\r
-                                       'skinid'        => $skinid,\r
-                                       'skintype'      => Entity::hsc(strtolower($row['stype']))\r
-                               );\r
-                               echo TEMPLATE::fill($template['body'], $data);\r
-                       }\r
-                       \r
-                       $data = array();\r
-                       if ( isset($templates['ADMIN_SPECIALSKINLIST_FOOT']) && !empty($templates['ADMIN_SPECIALSKINLIST_FOOT']) )\r
-                       {\r
-                               $template['foot'] = $templates['ADMIN_SPECIALSKINLIST_FOOT'];\r
-                       }\r
-                       else\r
-                       {\r
-                               $template['foot'] = "<ul>\n";\r
-                       }\r
-                       echo TEMPLATE::fill($template['foot'], $data);\r
-                       return;\r
-               }\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_adminstyleseets()\r
-        * Parse skinvar adminstyleseets\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_adminstyleseets()\r
-       {\r
-               global $CONF;\r
-               $includePrefix = $this->skin->includePrefix;\r
-               \r
-               if ( strlen($includePrefix) > 0 )\r
-               {\r
-                       $styleURL = Entity::hsc($CONF['AdminURL']) . 'adminskins/' . $includePrefix . 'admin_' . $CONF['AdminCSS'] . '.css';\r
-               }\r
-               else\r
-               {\r
-                       $styleURL = Entity::hsc($CONF['AdminURL']) . 'styles/admin_' . $CONF['AdminCSS'] . '.css';\r
-               }\r
-               echo $styleURL;\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_adminstyleselectoptions()\r
-        * Parse skinvar adminstyleselectoptions\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_adminstyleselectoptions()\r
-       {\r
-               global $CONF, $manager, $DIR_NUCLEUS;\r
-               if ( strlen($this->skin->includePrefix) > 0 )\r
-               {\r
-                       $scndir = $DIR_NUCLEUS . 'adminskins/' . $this->skin->includePrefix;\r
-               }\r
-               else\r
-               {\r
-                       $scndir = $DIR_NUCLEUS . 'styles/';\r
-               }\r
-               $files = scandir($scndir);\r
-               \r
-               foreach ( $files as $file )\r
-               {\r
-                       if ( !preg_match("#^admin_(.*)\.css$#", $file, $matches) )\r
-                       {\r
-                               continue;\r
-                       }\r
-                       \r
-                       $name = $matches[1];\r
-                       $opts = '<option value="' . $name . '"';\r
-                       if ( $name != $CONF['AdminCSS'] )\r
-                       {\r
-                               $opts .= "<option value=\"{$name}\">{$name}</option>\n";\r
-                       }\r
-                       else\r
-                       {\r
-                               $opts .= "<option value=\"{$name}\" selected=\"selected\">{$name}</option>\n";\r
-                       }\r
-                       echo $opts;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_admintemplateoverview()\r
-        * Parse skinvar admintemplateoverview\r
-        * \r
-        * @param       string  $templateName   name of template to use\r
-        * @return      void\r
-        */\r
-       public function parse_admintemplateoverview($templateName = '')\r
-       {\r
-               $query  = "SELECT * FROM %s ORDER BY tdname;";\r
-               $query = sprintf($query, sql_table('admintemplate_desc'));\r
-               \r
-               $template['content']  = 'admintemplatelist';\r
-               $template['tabindex'] = 10;\r
-               \r
-               skinableShowlist($query, 'table', $template, $templateName);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_allowedadminskinactions()\r
-        * Parse skinvar allowedadminskinactions\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_allowedadminskinactions()\r
-       {\r
-               global $DIR_ADMINSKINS;\r
-               $skinType = strtolower(trim(requestVar('type')));\r
-               $actions  = skinableSKIN::getAllowedActionsForType($skinType);\r
-               sort($actions);\r
-               \r
-               while ( $current = array_shift($actions) )\r
-               {\r
-                       // skip deprecated vars\r
-                       if ($current == 'ifcat' || $current == 'imagetext' || $current == 'vars')\r
-                       {\r
-                               continue;\r
-                       }\r
-                       \r
-                       echo "<a href=\"{$DIR_ADMINSKINS}documentation/help.html#{$current}\" onclick=\"if (event &amp;&amp; event.preventDefault) event.preventDefault(); return help(this.href);\">{$current}</a>\n";\r
-                       \r
-                       if ( count($actions) != 0 )\r
-                       {\r
-                               echo ", ";\r
-                       }\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_allowedskinactions()\r
-        * Parse skinvar allowedskinactions\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_allowedskinactions()\r
-       {\r
-               $skinType = strtolower(trim(requestVar('type')));\r
-               $actions  = SKIN::getAllowedActionsForType($skinType);\r
-               sort($actions);\r
-               \r
-               while ( $current = array_shift($actions) )\r
-               {\r
-                       // skip deprecated vars\r
-                       if ( $current == 'ifcat' || $current == 'imagetext' || $current == 'vars' )\r
-                       {\r
-                               continue;\r
-                       }\r
-                       \r
-                       /* TODO: alternative function should be used or not?  */\r
-                       echo helplink("skinvar-{$current}") . "$current</a>\n";\r
-                       \r
-                       if ( count($actions) != 0 )\r
-                       {\r
-                               echo ", ";\r
-                       }\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Action::parse_banlistdeletedlist()\r
-        * Parse skinvar banlistdeletedlist\r
-        * \r
-        * @param       string  $templateName   name of template to use\r
-        * @return      void\r
-        */\r
-       public function parse_banlistdeletedlist($templateName = '')\r
-       {\r
-               global $manager;\r
-               $templates = array();\r
-               \r
-               if ( $templateName )\r
-               {\r
-                       $templates = skinableTEMPLATE::read($templateName);\r
-               }\r
-               if ( isset($templates['BANLIST_DELETED_LIST']) && !empty($templates['BANLIST_DELETED_LIST']) )\r
-               {\r
-                       $template = $templates['BANLIST_DELETED_LIST'];\r
-               }\r
-               else\r
-               {\r
-                       $template = "<li><%blogname%></li>\n";\r
-               }\r
-               $deleted = requestArray('delblogs');\r
-               foreach ( $deleted as $delblog )\r
-               {\r
-                       $blog =& $manager->getBlog($delblog);\r
-                       $data =  array(\r
-                               Entity::hsc($blog->getName())\r
-                       );\r
-                       TEMPLATE::fill($template, $data);\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_batchdeletelist()\r
-        * Parse skinvar batchdeletelist\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_batchdeletelist()\r
-       {\r
-               $selected = requestIntArray('batch');\r
-               $index  = 0;\r
-               \r
-               foreach ( $selected as $select )\r
-               {\r
-                       echo '<input type="hidden" name="batch[' . ($index++) . ']" value="' . intval($select) . "\" />\n";\r
-               }\r
-               // add hidden vars for team & comment\r
-               if ( requestVar('action') == 'batchteam' )\r
-               {\r
-                       echo '<input type="hidden" name="blogid" value="' . intRequestVar('blogid') . "\" />\n";\r
-               }\r
-               if ( requestVar('action') == 'batchcomment' )\r
-               {\r
-                       echo '<input type="hidden" name="itemid" value="' . intRequestVar('itemid') . "\" />\n";\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_batchdeletetype()\r
-        * Parse skinvar batchdeletetype\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       function parse_batchdeletetype()\r
-       {\r
-               echo Entity::hsc(requestVar('action'));\r
-               return;\r
-       }\r
-\r
-       /**\r
-        * Actions::parse_batchmovebtn()\r
-        * Parse skinvar batchmovebtn\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_batchmovebtn()\r
-       {\r
-               $actionType = requestVar('action');\r
-               switch ( $actionType )\r
-               {\r
-                       case 'batchitem':\r
-                               echo _MOVE_BTN;\r
-                               break;\r
-                       case 'batchcategory':\r
-                               echo _MOVECAT_BTN;\r
-                               break;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_batchmovelist()\r
-        * Parse skinvar batchmovelist\r
-        * \r
-        * @param       void\r
-        * @param       void\r
-        */\r
-       public function parse_batchmovelist()\r
-       {\r
-               $selected = requestIntArray('batch');\r
-               foreach ( $selected as $select )\r
-               {\r
-                       echo '<input type="hidden" name="batch[' . ($select++) . ']" value="' . intval($select) . "\" />\n";\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_batchmovetitle()\r
-        * Parse skinvar batchmovetitle\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_batchmovetitle()\r
-       {\r
-               $actionType = requestVar('action');\r
-               switch ( $actionType )\r
-               {\r
-                       case 'batchitem':\r
-                               echo _MOVE_TITLE;\r
-                               break;\r
-                       case 'batchcategory':\r
-                               echo _MOVECAT_TITLE;\r
-                               break;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_batchmovetype()\r
-        * Parse skinvar batchmovetype\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_batchmovetype()\r
-       {\r
-               echo Entity::hsc(requestVar('action'));\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_blogcatlist()\r
-        * Parse skinvar blogcatlist\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_blogcatlist()\r
-       {\r
-               global $manager;\r
-               $blogid = intRequestVar('blogid');\r
-               $query  = "SELECT * FROM %s WHERE cblog = %d ORDER BY cname;";\r
-               $query = sprintf($query, sql_table('category'), (integer) $blogid);\r
-               \r
-               $template['content']  = 'categorylist';\r
-               $template['tabindex'] = 200;\r
-               \r
-               $batch = new skinableBATCH('member');\r
-               $batch->showlist($query, 'table', $template);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_blognotifysetting()\r
-        * Parse skinvar blognotifysetting\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_blognotifysetting($type)\r
-       {\r
-               global $manager;\r
-               $blogid = intRequestVar('blogid');\r
-               $blog   = $manager->getBlog($blogid);\r
-               \r
-               switch ( $type )\r
-               {\r
-                       case 'comment':\r
-                               if ( !$blog->notifyOnComment() )\r
-                               {\r
-                                       return;\r
-                               }\r
-                               break;\r
-                       case 'vote':\r
-                               if ( !$blog->notifyOnVote() )\r
-                               {\r
-                                       return;\r
-                               }\r
-                               break;\r
-                       case 'newitem':\r
-                               if ( !$blog->notifyOnNewItem() )\r
-                               {\r
-                                       return;\r
-                               }\r
-                               break;\r
-               }\r
-               echo ' checked="checked"';\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_blogsetting()\r
-        * Parse skinvar blogsetting\r
-        * \r
-        * @param       string  $which  name of weblog setting\r
-        * @return      void\r
-        */\r
-       public function parse_blogsetting($which)\r
-       {\r
-               echo $this->parse_getblogsetting($which);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_blogsettingyesno()\r
-        * Parse skinvar blogsettingyesno\r
-        * \r
-        * @param       string  $type                   type of weblog setting\r
-        * @param       string  $templateName   name of template to use\r
-        * @return      void\r
-        */\r
-       public function parse_blogsettingyesno($type, $templateName = '')\r
-       {\r
-               global $manager;\r
-               \r
-               $blogid = intRequestVar('blogid');\r
-               $blog   = $manager->getBlog($blogid);\r
-               \r
-               switch ( $type )\r
-               {\r
-                       case 'convertbreaks':\r
-                               $checkedval = $blog->convertBreaks();\r
-                               $tabindex   = 55;\r
-                               break;\r
-                       case 'allowpastposting':\r
-                               $checkedval = $blog->allowPastPosting();\r
-                               $tabindex   = 57;\r
-                               break;\r
-                       case 'comments':\r
-                               $checkedval = $blog->commentsEnabled();\r
-                               $tabindex   = 60;\r
-                               break;\r
-                       case 'public':\r
-                               $checkedval = $blog->isPublic();\r
-                               $tabindex   = 70;\r
-                               break;\r
-                       case 'reqemail':\r
-                               $checkedval = $blog->emailRequired();\r
-                               $tabindex   = 72;\r
-                               break;\r
-                       case 'searchable':\r
-                               $checkedval = $blog->getSearchable();\r
-                               $tabindex   = 122;\r
-                               break;\r
-               }\r
-               $this->parse_inputyesno($type, $checkedval, $tabindex, 1, 0, _YES, _NO, 0, $templateName);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_blogteamlist()\r
-        * Parse skinvar blogteamlist\r
-        * \r
-        * @param       string  $templateName   name of template to use\r
-        * @return      void\r
-        */\r
-       public function parse_blogteamlist($templateName = '')\r
-       {\r
-               global $manager;\r
-               $blogid = intRequestVar('blogid');\r
-               $query  = "SELECT tblog, tmember, mname, mrealname, memail, tadmin "\r
-                       . "FROM %s, %s "\r
-                       . "WHERE tmember=mnumber AND tblog= %d";\r
-               $query = sprintf($query, sql_table('member'), sql_table('team'), (integer) $blogid);\r
-               \r
-               $template['content']  = 'teamlist';\r
-               $template['tabindex'] = 10;\r
-\r
-               $batch = new skinableBATCH('team');\r
-               $batch->showlist($query, 'table', $template, _LISTS_NOMORE, $templateName);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_blogteammembers()\r
-        * Parse skinvar blogteammembers\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_blogteammembers()\r
-       {\r
-               $blogid = intRequestVar('blogid');\r
-               $query  = "SELECT mname, mrealname "\r
-                               . "FROM %s, %s "\r
-                               . "WHERE mnumber=tmember AND tblog=%d;";\r
-               $query = sprintf($query, sql_table('member'), sql_table('team'), (integer) $blogid);\r
-               $res    = sql_query($query);\r
-               $memberNames = array();\r
-               while ($o = sql_fetch_object($res)) {\r
-                       $memberNames[] = Entity::hsc($o->mname) . ' (' . Entity::hsc($o->mrealname). ')';\r
-               }\r
-               echo implode(',', $memberNames);\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_blogtime()\r
-        * Parse skinvar blogtime\r
-        * \r
-        * @param       string  $type   type of time\r
-        * @param       string  $format format for time expression\r
-        * @param       integer $offset offset of time\r
-        * @return      void\r
-        */\r
-       public function parse_blogtime($type, $format = '%H:%M', $offset = 0)\r
-       {\r
-               global $manager;\r
-               \r
-               if ( $type != 'blogtime' )\r
-               {\r
-                       /* return server time */\r
-                       $timestamp = time() + $offset;\r
-               }\r
-               else\r
-               {\r
-                       $bid            = intRequestVar('blogid');\r
-                       $b                      = $manager->getBlog($bid);\r
-                       $timestamp      = $b->getCorrectTime() + $offset;\r
-               }\r
-               \r
-               echo i18n::formatted_datetime($format, $timestamp);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_bookmarkletadmin()\r
-        * Parse skinvar bookmarkletadmin\r
-        * \r
-        * @param       string  $type   type of anchor element for bookmarklet\r
-        * @return      void\r
-        */\r
-       public function parse_bookmarkletadmin($type)\r
-       {\r
-               global $manager;\r
-               \r
-               $blogid = intRequestVar('blogid');\r
-               \r
-               if ( $type != 'regfile' )\r
-               {\r
-                       echo Entity::hsc(getBookmarklet($blogid));\r
-               }\r
-               else\r
-               {\r
-                       $url = 'index.php?action=regfile&blogid=' . intval($blogid);\r
-                       $url = $manager->addTicketToUrl($url);\r
-                       /* TODO: Shift-JIS is not always correct, I think... */\r
-                       echo Entity::hsc($url, 'SJIS');\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_categorysetting()\r
-        * Parse skinvar categorysetting\r
-        * \r
-        * @param       string  $type   type in category setting\r
-        * @return      void\r
-        */\r
-       public function parse_categorysetting($type)\r
-       {\r
-               $catid  = intRequestVar('catid');\r
-               if ( $type == 'id' )\r
-               {\r
-                       echo $catid;\r
-                       return;\r
-               }\r
-               $blogid = intRequestVar('blogid');\r
-               $query  = "SELECT * FROM %s WHERE cblog = %d AND catid = %d;";\r
-               $query  = sprintf($query, sql_table('category'), (integer) $blogid, (integer) $catid);\r
-               $res    = sql_query($query);\r
-               $obj    = sql_fetch_object($res);\r
-               \r
-               if ( $type != desc )\r
-               {\r
-                       echo Entity::hsc($obj->cdesc);\r
-               }\r
-               else\r
-               {\r
-                       echo Entity::hsc($obj->cname);\r
-               }\r
-               \r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_codename()\r
-        * Parse templatevar codename\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        * \r
-        * TODO: is this need???\r
-        */\r
-       public function parse_codename()\r
-       {\r
-               global $nucleus;\r
-               echo $nucleus['codename'];\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_commentnavlist()\r
-        * Parse skinvar commentnavlist\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_commentnavlist()\r
-       {\r
-               global $CONF, $manager, $member;\r
-               \r
-               // start index\r
-               if ( postVar('start') )\r
-               {\r
-                       $start = intPostVar('start');\r
-               }\r
-               else\r
-               {\r
-                       $start = 0;\r
-               }\r
-               \r
-               // amount of items to show\r
-               if ( postVar('amount') )\r
-               {\r
-                       $amount = intPostVar('amount');\r
-               }\r
-               else\r
-               {\r
-                       $amount = (integer) $CONF['DefaultListSize'];\r
-                       if ( $amount < 1 )\r
-                       {\r
-                               $amount = 10;\r
-                       }\r
-               }\r
-               $query = 'SELECT cbody, cuser, cmail, cemail, mname, ctime, chost, cnumber, cip, citem '\r
-                      . 'FROM %s '\r
-                      . 'LEFT OUTER JOIN %s ON  mnumber=cmember '\r
-                      . 'WHERE ';\r
-               $query = sprintf($query, sql_table('comment'), sql_table('member'));\r
-               \r
-               if ( $this->skintype == 'itemcommentlist' )\r
-               {\r
-                       $itemid                                 = intRequestVar('itemid');\r
-                       $query                                  .= " citem={$itemid}";\r
-                       $template['canAddBan']  = $member->blogAdminRights(intRequestVar('blogid'));\r
-                       $bid                                    = 0;\r
-                       $nonComments                    = _NOCOMMENTS;\r
-               }\r
-               elseif ( $this->skintype == 'browseowncomments' )\r
-               {\r
-                       $itemid                                 = 0;\r
-                       $query                                  .= ' cmember=' . $member->getID();\r
-                       $template['canAddBan']  = 0;\r
-                       $bid                                    = 0;\r
-                       $nonComments                    = _NOCOMMENTS_YOUR;\r
-               }\r
-               elseif ( $this->skintype == 'blogcommentlist' )\r
-               {\r
-                       $itemid                                 = 0;\r
-                       $query                                  .= ' cblog=' . intRequestVar('blogid');\r
-                       $template['canAddBan']  = $member->blogAdminRights(intRequestVar('blogid'));\r
-                       $bid                                    = intRequestVar('blogid');\r
-                       $nonComments                    = _NOCOMMENTS_BLOG;\r
-               }\r
-               \r
-               $search = postVar('search');\r
-               if ( !empty($search) )\r
-               {\r
-                       $query .= ' and cbody LIKE "%' . sql_real_escape_string($search) . '%"';\r
-               }\r
-               \r
-               $query .= " ORDER BY ctime ASC LIMIT {$start},{$amount}";\r
-               \r
-               $template['content'] = 'commentlist';\r
-               \r
-               $navList = new skinableNAVLIST($this->skintype, $start, $amount, 0, 1000, $bid, $search, $itemid);\r
-               $navList->showBatchList('comment', $query, 'table', $template, $nonComments);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_configsettingsedit()\r
-        * Parse skinvar configsettingsedit\r
-        * \r
-        * @param       string  $type   type of global configuration\r
-        * @return      void\r
-        */\r
-       public function parse_configsettingsedit($type)\r
-       {\r
-               global $CONF;\r
-               switch ( $type )\r
-               {\r
-                       case 'DefaultListSize':\r
-                               if ( !array_key_exists('DefaultListSize', $CONF) )\r
-                               {\r
-                                       $query = "INSERT INTO %s VALUES (DefaultListSize, 10);";\r
-                                       $query = sprintf($query, sql_table('config'));\r
-                                       sql_query($query);\r
-                                       $CONF['DefaultListSize'] = 10;\r
-                               }\r
-                               elseif ( intval($CONF['DefaultListSize']) < 1 )\r
-                               {\r
-                                       $CONF['DefaultListSize'] = 10;\r
-                               }\r
-                               echo intval($CONF['DefaultListSize']);\r
-                               break;\r
-                       case 'SessionCookie':\r
-                               $value = $CONF['SessionCookie'];\r
-                               $txt1  = _SETTINGS_COOKIESESSION;\r
-                               $txt2  = _SETTINGS_COOKIEMONTH;\r
-                               $this->parse_inputyesno('SessionCookie', $value, 10190, 1, 0, $txt1, $txt2);\r
-                               break;\r
-                       case 'URLMode':\r
-                               $value = $CONF['URLMode'];\r
-                               $txt1  = _SETTINGS_URLMODE_NORMAL;\r
-                               $txt2  = _SETTINGS_URLMODE_PATHINFO;\r
-                               $this->parse_inputyesno('URLMode', $value, 10077, 'normal', 'pathinfo', $txt1, $txt2);\r
-                               break;\r
-                       default:\r
-                               if ( array_key_exists($type, $CONF) && is_string($CONF[$type]) )\r
-                               {\r
-                                       echo  Entity::hsc($CONF[$type]);\r
-                               }\r
-                               break;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_configsettingsyesno()\r
-        * Parse skinvar configsettingsyesno\r
-        * \r
-        * @param       string  $type           type of global setting\r
-        * @param       integer $tabindex       tabindex attribute of input element\r
-        * @return      void\r
-        */\r
-       function parse_configsettingsyesno($type, $tabindex)\r
-       {\r
-               global $CONF;\r
-               if ( array_key_exists($type, $CONF) )\r
-               {\r
-                       $this->parse_inputyesno($type, $CONF[$type], $tabindex);\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_customhelplink()\r
-        * Parse skinvar customhelplink\r
-        * \r
-        * @param       string  $topic          name of topic\r
-        * @param       string  $tplName        name of template\r
-        * @param       string  $url            string as URI\r
-        * @param       string  $iconURL        string as URI for icon\r
-        * @param       string  $alt            alternative text for image element\r
-        * @param       string  $title          title for anchor element\r
-        * @return      void\r
-        */\r
-       public function parse_customhelplink($topic, $tplName = '', $url = '', $iconURL = '', $alt = '', $title = '', $onclick = '')\r
-       {\r
-               $this->customHelp($topic, $url, $iconURL);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_date()\r
-        * Parse skinvar date\r
-        */\r
-       public function parse_date($format = 'c')\r
-       {\r
-               global $CONF, $manager;\r
-               echo i18n::formatted_datetime($format, time(), 'iso8601', $manager->getBlog((integer) $CONF['DefaultBlog']));\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_defaultadminskintypes()\r
-        * Parse skinvar defaultadminskintypes\r
-        * \r
-        * @param       string  $tabindex               index number for tabindex attribute of input element\r
-        * @param       string  $templateName   name of template\r
-        * @return      void\r
-        */\r
-       public function parse_defaultadminskintypes($tabindex, $templateName = '')\r
-       {\r
-               $templates = array();\r
-               if ( $templateName )\r
-               {\r
-                       $templates = skinableTEMPLATE::read($templateName);\r
-               }\r
-               \r
-               $types   = skinableSKIN::getAdminskinDefaultTypeFriendlyNames();\r
-               ksort($types);\r
-               \r
-               if ( array_key_exists('ADMINSKINTYPELIST_HEAD', $templates) && !empty($templates['ADMINSKINTYPELIST_HEAD']) )\r
-               {\r
-                       $template['head'] = $templates['ADMINSKINTYPELIST_HEAD'];\r
-               }\r
-               else\r
-               {\r
-                       $template['head'] = "<ul>\n";\r
-               }\r
-               \r
-               echo $template['head'];\r
-               \r
-               if ( array_key_exists('ADMINSKINTYPELIST_BODY', $templates) && !empty($templates['ADMINSKINTYPELIST_BODY']) )\r
-               {\r
-                       $template['body'] = $templates['ADMINSKINTYPELIST_BODY'];\r
-               }\r
-               else\r
-               {\r
-                       $template['body'] = '<li><a tabindex="<%tabindex%>" href="index.php?action=adminskinedittype&amp;skinid=<%skinid%>&amp;type=<%skintype%>">'\r
-                                         . "<%name%></a> <%help%></li>\n";\r
-               }\r
-               $handler = new skinableACTIONS('template', $template, new ADMIN);\r
-               $parser  = new PARSER(skinableACTIONS::getDefinedActions(), $handler);\r
-               \r
-               foreach ( $types as $type => $fName )\r
-               {\r
-                       $helplink = $this->customHelpHtml('skinpart' . $type, $templateName);\r
-                       $data = array(\r
-                               'tabindex'      => $tabindex,\r
-                               'skintype'      => $type,\r
-                               'name'          => $fName,\r
-                               'help'          => $helplink,\r
-                               'skinid'        => intrequestVar('skinid'),\r
-                       );\r
-                       $templateBody = skinableTEMPLATE::fill($template['body'], $data);\r
-                       $parser->parse($templateBody);\r
-                       $tabindex++;\r
-               }\r
-               if ( array_key_exists('ADMINSKINTYPELIST_FOOT', $templates) && !empty($templates['ADMINSKINTYPELIST_FOOT']) )\r
-               {\r
-                       $template['foot'] = $templates['ADMINSKINTYPELIST_FOOT'];\r
-               }\r
-               else\r
-               {\r
-                       $template['foot'] = "           </ul>\n";\r
-               }\r
-               echo $template['foot'];\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_defblogselect()\r
-        * Parse skinvar defblogselect\r
-        * \r
-        * @param       string  $templateName   name of template\r
-        * @return      void\r
-        */\r
-       public function parse_defblogselect($templateName = '')\r
-       {\r
-               global $CONF;\r
-               $query  = "SELECT bname as text, bnumber as value FROM %s;";\r
-               $query = sprintf($query, sql_table('blog'));\r
-               $template['name']        = 'DefaultBlog';\r
-               $template['selected'] = $CONF['DefaultBlog'];\r
-               $template['tabindex'] = 10;\r
-               skinableShowlist($query, 'select', $template, $templateName);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_defcatselect()\r
-        * Parse skinvar defcatselect\r
-        * \r
-        * @param       string  $templateName   name of template\r
-        * @return      void\r
-        */\r
-       public function parse_defcatselect($templateName = '')\r
-       {\r
-               global $manager;\r
-               $blogid = intRequestVar('blogid');\r
-               $blog   = $manager->getBlog($blogid);\r
-               $query  = "SELECT cname as text, catid as value FROM %s WHERE cblog=%d;";\r
-               $query = sprintf($query, sql_table('category'), (integer) $blog->getID());\r
-               $template['name']        = 'defcat';\r
-               $template['selected'] = $blog->getDefaultCategory();\r
-               $template['tabindex'] = 110;\r
-               skinableShowlist($query, 'select', $template, $templateName);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_defskinselect()\r
-        * Parse skinvar defskinselect\r
-        * \r
-        * @param       string  $type                   type of skin\r
-        * @param       string  $templateName   name of template\r
-        * @return      void\r
-        */\r
-       public function parse_defskinselect($type = 'blog', $templateName = '')\r
-       {\r
-               global $manager;\r
-               $query  = "SELECT sdname as text, sdnumber as value FROM %s;";\r
-               $query = sprintf($query, sql_table('skin_desc'));\r
-               \r
-               $blogid = intRequestVar('blogid');\r
-               \r
-               if ( !$blogid )\r
-               {\r
-                       global $CONF;\r
-                       $template['selected'] = $CONF['BaseSkin'];\r
-               }\r
-               else\r
-               {\r
-                       $blog                            = $manager->getBlog($blogid);\r
-                       $template['selected'] = $blog->getDefaultSkin();\r
-               }\r
-               \r
-               if ( $type != 'blog' )\r
-               {\r
-                       $nname = 'BaseSkin';\r
-               }\r
-               else\r
-               {\r
-                       $nname = 'defskin';\r
-               }\r
-               \r
-               $template['name']        = $nname;\r
-               $template['tabindex'] = 50;\r
-               skinableShowlist($query, 'select', $template, $templateName);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_deleteitembody()\r
-        * Parse skinvar deleteitembody\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_deleteitembody()\r
-       {\r
-               global $manager;\r
-               $itemid =  intRequestVar('itemid');\r
-               $item   =& $manager->getItem($itemid, 1, 1);\r
-               $body   =  strip_tags($item['body']);\r
-               echo Entity::hsc(shorten($body, 300, '...'));\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_deleteitemid()\r
-        * Parse skinvar deleteitemid\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_deleteitemid()\r
-       {\r
-               echo (integer) intRequestVar('itemid');\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_deleteitemtitle()\r
-        * Parse skinvar deleteitemtitle\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_deleteitemtitle()\r
-       {\r
-               global $manager;\r
-               $itemid = intRequestVar('itemid');\r
-               $item  =& $manager->getItem($itemid, 1, 1);\r
-               echo Entity::hsc(strip_tags($item['title']));\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_editadminskin()\r
-        * Parse skinvar editadminskin\r
-        * \r
-        * @param       string  $type   type of skin setting\r
-        * @return      void\r
-        */\r
-       public function parse_editadminskin($type = 'id')\r
-       {\r
-               $skinid = intRequestVar('skinid');\r
-               $skin   = new skinableSKIN($skinid);\r
-               switch ( $type )\r
-               {\r
-                       case 'id':\r
-                               echo intRequestVar('skinid');\r
-                               break;\r
-                       case 'name':\r
-                               echo Entity::hsc($skin->getName());\r
-                               break;\r
-                       case 'desc':\r
-                               echo Entity::hsc($skin->getDescription());\r
-                               break;\r
-                       case 'type':\r
-                               echo Entity::hsc($skin->getContentType());\r
-                               break;\r
-                       case 'prefix':\r
-                               echo Entity::hsc($skin->getIncludePrefix());\r
-                               break;\r
-                       case 'mode':\r
-                               $this->parse_inputyesno('inc_mode', $skin->getIncludeMode(), 120, 'skindir', 'normal', _PARSER_INCMODE_SKINDIR, _PARSER_INCMODE_NORMAL);\r
-                       default:\r
-                               break;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_editadminskintype()\r
-        * Parse skinvar editadminskintype\r
-        * \r
-        * @param       string  $type   name of skin type\r
-        * @return      void\r
-        */\r
-       public function parse_editadminskintype($type = 'id')\r
-       {\r
-               global $CONF, $manager, $member;\r
-               $skinid = intRequestVar('skinid');\r
-               $skin   = new skinableSKIN($skinid);\r
-               $fNames = skinableSKIN::getFriendlyNames();\r
-               $sType  = strtolower(trim(requestVar('type')));\r
-               \r
-               switch ( $type )\r
-               {\r
-                       case 'id':\r
-                               echo intRequestVar('skinid');\r
-                               break;\r
-                       case 'name':\r
-                               echo Entity::hsc($skin->getName());\r
-                               break;\r
-                       case 'desc':\r
-                               echo Entity::hsc($skin->getDescription());\r
-                               break;\r
-                       case 'type':\r
-                               echo Entity::hsc($skin->getContentType());\r
-                               break;\r
-                       case 'content':\r
-                               echo Entity::hsc($skin->getContent($sType));\r
-                               break;\r
-                       case 'skintype':\r
-                               $skinType = isset($fNames[$sType]) ? $fNames[$sType] : ucfirst($sType);\r
-                               echo Entity::hsc($skinType);\r
-                               break;\r
-                       case 'skintyperaw':\r
-                               echo Entity::hsc($sType);\r
-                               break;\r
-                       case 'prefix':\r
-                               echo Entity::hsc($skin->getIncludePrefix());\r
-                               break;\r
-                       case 'mode':\r
-                               $incMode = $skin->getIncludeMode() ? _PARSER_INCMODE_SKINDIR : _PARSER_INCMODE_NORMAL;\r
-                               echo Entity::hsc($incMode);\r
-                               break;\r
-                       default:\r
-                               break;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_editadmintemplateinfo()\r
-        * Parse skinvar editadmintemplateinfo\r
-        * \r
-        * @param       string  $type                   type of skin template\r
-        * @param       string  $description    description of template\r
-        * @param       string  $name                   name of stemplate\r
-        * @param       string  $tabindex               index number for tabindex attribute of input element\r
-        * @param       string  $big                    \r
-        * @param       string  $tplt                   \r
-        */\r
-       function parse_editadmintemplateinfo($type, $description = '', $name = '', $help = '', $tabindex = 0, $big = 0, $tplt = '')\r
-       {\r
-               global $manager;\r
-               $templateid                             =  intRequestVar('templateid');\r
-               $templatename                   =  skinableTEMPLATE::getNameFromId($templateid);\r
-               $templatedescription    =  skinableTEMPLATE::getDesc($templateid);\r
-               $template                               =& skinableTEMPLATE::read($templatename);\r
-               switch ( $type )\r
-               {\r
-                       case 'id':\r
-                               echo intval($templateid);\r
-                               break;\r
-                       case 'name':\r
-                               echo Entity::hsc($templatename);\r
-                               break;\r
-                       case 'desc':\r
-                               echo Entity::hsc($templatedescription);\r
-                               break;\r
-                       case 'extratemplate':\r
-                               $tabidx    = 600;\r
-                               $pluginfields = array();\r
-                               $manager->notify(\r
-                                       'AdminTemplateExtraFields',\r
-                                       array(\r
-                                               'fields' => &$pluginfields\r
-                                       )\r
-                               );\r
-                               $tmplt = array();\r
-                               if ( $description )\r
-                               {\r
-                                       $tmplt = skinableTEMPLATE::read($description);\r
-                               }\r
-                               if ( array_key_exists('TEMPLATE_EDIT_EXPLUGNAME', $tmplt) && !empty($tmplt['TEMPLATE_EDIT_EXPLUGNAME']) )\r
-                               {\r
-                                       $base = $tmplt['TEMPLATE_EDIT_EXPLUGNAME'];\r
-                               }\r
-                               else\r
-                               {\r
-                                       $base = "</tr>\n"\r
-                                             . "<tr>\n"\r
-                                             . "\t" . '<th colspan="2"><%explugtplname%>' . "</th>\n";\r
-                               }\r
-                               foreach ( $pluginfields as $pfkey => $pfvalue )\r
-                               {\r
-                                       $data = array(\r
-                                               'explugtplname' => Entity::hsc($pfkey)\r
-                                       );\r
-                                       echo TEMPLATE::fill($base, $data);\r
-                                       foreach ( $pfvalue as $pffield => $pfdesc )\r
-                                       {\r
-                                               $this->_templateEditRow($template, $pfdesc, $pffield, '', ++$tabidx, 0, $name);\r
-                                       }\r
-                               }\r
-                               break;\r
-                       default:\r
-                               $desc = defined($description) ? constant($description) : $description;\r
-                               $name = defined($name) ? constant($name) : $name;\r
-                               $this->_templateEditRow($template, $desc, $name, $help, $tabindex, $big, $tplt);\r
-                               break;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_editcomment()\r
-        * Parse skinvar editcomment\r
-        * \r
-        * @param       string  $type   type of comment setting\r
-        * @return      void\r
-        */\r
-       public function parse_editcomment($type = 'id')\r
-       {\r
-               global $manager;\r
-               $commentid      = intRequestVar('commentid');\r
-               $comment        = COMMENT::getComment($commentid);\r
-               \r
-               $manager->notify('PrepareCommentForEdit', array('comment' => &$comment));\r
-               \r
-               switch ( $type )\r
-               {\r
-                       case 'id':\r
-                               echo intRequestVar('commentid');\r
-                               break;\r
-                       case 'user':\r
-                               if (array_key_exists('member', $comment) && !empty($comment['member']) )\r
-                               {\r
-                                       echo $comment['member'] . " (" . _EDITC_MEMBER . ")";\r
-                               }\r
-                               else\r
-                               {\r
-                                       echo $comment['user'] . " (" . _EDITC_NONMEMBER . ")";\r
-                               }\r
-                               break;\r
-                       case 'date':\r
-                               echo date("Y-m-d @ H:i", $comment['timestamp']);\r
-                               break;\r
-                       case 'body':\r
-                               $comment['body'] = str_replace('<br />', '', $comment['body']);\r
-                               $comment['body'] = preg_replace("#<a href=['\"]([^'\"]+)['\"]( rel=\"nofollow\")?>[^<]*</a>#", "\\1", $comment['body']);\r
-                               echo $comment['body'];\r
-                       default:\r
-                               echo $comment[$type];\r
-                               break;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_editdesturl()\r
-        * Parse skinvar editdesturl\r
-        */\r
-       public function parse_editdesturl()\r
-       {\r
-               if ( requestVar('desturl') )\r
-               {\r
-                       echo Entity::hsc(requestVar('desturl'));\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_editmemberlist()\r
-        * Parse skinvar editmemberlist\r
-        * \r
-        * @param       string  $templateName   name of template\r
-        * @return      void\r
-        */\r
-       public function parse_editmemberlist($templateName = '')\r
-       {\r
-               global $manager;\r
-               // show list of members with actions\r
-               $query =  'SELECT * FROM '.sql_table('member');\r
-               $template['content']  = 'memberlist';\r
-               $template['tabindex'] = 10;\r
-               \r
-               $batch = new skinableBATCH('member');\r
-               $batch->showlist($query, 'table', $template, _LISTS_NOMORE, $templateName);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_editmemberlist()\r
-        * Parse skinvar editmemberlist\r
-        * \r
-        * @param       string  $templateName   name of template\r
-        * @return      void\r
-        */\r
-       public function parse_editmemberlist($templateName = '')\r
-       {\r
-               global $manager;\r
-               // show list of members with actions\r
-               $query =  'SELECT * FROM '. sql_table('member');\r
-               $template['content']  = 'memberlist';\r
-               $template['tabindex'] = 10;\r
-               \r
-               $batch = new skinableBATCH('member');\r
-               $batch->showlist($query, 'table', $template, _LISTS_NOMORE, $templateName);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_editpluginfo()\r
-        * Parse skinvar editpluginfo\r
-        * \r
-        * @param       string  $type   type of plugin info\r
-        * @return      void\r
-        */\r
-       public function parse_editpluginfo($type)\r
-       {\r
-               $pid = intRequestVar('plugid');\r
-               switch ( $type )\r
-               {\r
-                       case 'id':\r
-                               echo $pid;\r
-                               break;\r
-                       case 'name':\r
-                               echo Entity::hsc(getPluginNameFromPid($pid));\r
-                               break;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_editplugoptionslist()\r
-        * Parse skinvar editplugoptionslist\r
-        * \r
-        * @param       string  $templateName   name of template\r
-        * @return      void\r
-        */\r
-       public function parse_editplugoptionslist($templateName = '')\r
-       {\r
-               global $manager;\r
-               \r
-               $pid = intRequestVar('plugid');\r
-               $aOptions = array();\r
-               $aOIDs  = array();\r
-               \r
-               $query  = "SELECT * FROM %s WHERE ocontext='global' AND opid=%d ORDER BY oid ASC";\r
-               $query = sprintf($query, sql_table('plugin_option_desc'), (integer) $pid);\r
-               $resource = sql_query($query);\r
-               \r
-               while ( $o = sql_fetch_object($resource) )\r
-               {\r
-                       array_push($aOIDs, $o->oid);\r
-                       $aOptions[$o->oid] = array(\r
-                               \r
-                               'oid'                   => $o->oid,\r
-                               'value'                 => $o->odef,\r
-                               'name'                  => $o->oname,\r
-                               'description'   => $o->odesc,\r
-                               'type'                  => $o->otype,\r
-                               'typeinfo'              => $o->oextra,\r
-                               'contextid'             => 0\r
-                       );\r
-               }\r
-               \r
-               // fill out actual values\r
-               if ( count($aOIDs) > 0 )\r
-               {\r
-                       $query = 'SELECT oid, ovalue FROM %s WHERE oid in (%s)';\r
-                       $query = sprintf($query, sql_table('plugin_option'), implode(',', $aOIDs));\r
-                       \r
-                       $result = sql_query($query);\r
-                       \r
-                       while ( $o = sql_fetch_object($result) )\r
-                       {\r
-                               $aOptions[$o->oid]['value'] = $o->ovalue;\r
-                       }\r
-               }\r
-               \r
-               // call plugins\r
-               $manager->notify(\r
-                       'PrePluginOptionsEdit',\r
-                       array(\r
-                               'context'       =>  'global',\r
-                               'plugid'        =>  $pid,\r
-                               'options'       => &$aOptions\r
-                       )\r
-               );\r
-               \r
-               $template['content'] = 'plugoptionlist';\r
-               $amount                   = skinableShowlist($aOptions, 'table', $template, $templateName);\r
-               if ( $amount == 0 )\r
-               {\r
-                       echo '<p>' . _ERROR_NOPLUGOPTIONS . "</p>\n";\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_editskin()\r
-        * Parse skinvar editskin\r
-        * \r
-        * @param       string  $type   type of skin\r
-        * @return      void\r
-        */\r
-       public function parse_editskin($type = 'id')\r
-       {\r
-               $skinid = intRequestVar('skinid');\r
-               $skin   = new SKIN($skinid);\r
-               switch ( $type )\r
-               {\r
-                       case 'id':\r
-                               echo intRequestVar('skinid');\r
-                               break;\r
-                       case 'name':\r
-                               echo Entity::hsc($skin->getName());\r
-                               break;\r
-                       case 'desc':\r
-                               echo Entity::hsc($skin->getDescription());\r
-                               break;\r
-                       case 'type':\r
-                               echo Entity::hsc($skin->getContentType());\r
-                               break;\r
-                       case 'prefix':\r
-                               echo Entity::hsc($skin->getIncludePrefix());\r
-                               break;\r
-                       case 'mode':\r
-                               $this->parse_inputyesno('inc_mode', $skin->getIncludeMode(), 120, 'skindir', 'normal', _PARSER_INCMODE_SKINDIR, _PARSER_INCMODE_NORMAL);\r
-                       default:\r
-                               break;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_editskintype()\r
-        * Parse skinvar editskintype\r
-        * \r
-        * @param       string  $type   name of type for skin type\r
-        * @return      void\r
-        */\r
-       function parse_editskintype($type = 'id')\r
-       {\r
-               global $CONF, $manager, $member;\r
-               $skinid = intRequestVar('skinid');\r
-               $skin   = new SKIN($skinid);\r
-               $fNames = SKIN::getFriendlyNames();\r
-               $sType  = strtolower(trim(requestVar('type')));\r
-               \r
-               switch ( $type )\r
-               {\r
-                       case 'id':\r
-                               echo intRequestVar('skinid');\r
-                               break;\r
-                       case 'name':\r
-                               echo Entity::hsc($skin->getName());\r
-                               break;\r
-                       case 'desc':\r
-                               echo Entity::hsc($skin->getDescription());\r
-                               break;\r
-                       case 'type':\r
-                               echo Entity::hsc($skin->getContentType());\r
-                               break;\r
-                       case 'content':\r
-                               echo Entity::hsc($skin->getContent($sType));\r
-                               break;\r
-                       case 'skintype':\r
-                               $skinType = isset($fNames[$sType]) ? $fNames[$sType] : ucfirst($sType);\r
-                               echo Entity::hsc($skinType);\r
-                               break;\r
-                       case 'skintyperaw':\r
-                               echo Entity::hsc($sType);\r
-                               break;\r
-                       case 'prefix':\r
-                               echo Entity::hsc($skin->getIncludePrefix());\r
-                               break;\r
-                       case 'mode':\r
-                               $incMode = $skin->getIncludeMode() ? _PARSER_INCMODE_SKINDIR : _PARSER_INCMODE_NORMAL;\r
-                               echo Entity::hsc($incMode);\r
-                               break;\r
-                       default:\r
-                               break;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_edittemplateinfo()\r
-        * Parse skinvar edittemplateinfo\r
-        * \r
-        * @param       string  $type                   name of type for skin\r
-        * @param       string  $description    description for skin\r
-        * @param       string  $name                   name of skin\r
-        * @param       string  $help                   \r
-        * @param       string  $tabindex               index value for tabindex attribute of input element\r
-        * @param       string  $big                    \r
-        * @param       string  $tplt                   name of template\r
-        */\r
-       public function parse_edittemplateinfo($type, $description = '', $name = '', $help = '', $tabindex = 0, $big = 0, $tplt = '')\r
-       {\r
-               global $manager;\r
-               $templateid                             =  intRequestVar('templateid');\r
-               $templatename                   =  TEMPLATE::getNameFromId($templateid);\r
-               $templatedescription    =  TEMPLATE::getDesc($templateid);\r
-               $template                               =& $manager->getTemplate($templatename);\r
-               switch ( $type )\r
-               {\r
-                       case 'id':\r
-                               echo intval($templateid);\r
-                               break;\r
-                       case 'name':\r
-                               echo Entity::hsc($templatename);\r
-                               break;\r
-                       case 'desc':\r
-                               echo Entity::hsc($templatedescription);\r
-                               break;\r
-                       case 'extratemplate':\r
-                               $tabidx    = 600;\r
-                               $pluginfields = array();\r
-                               $manager->notify(\r
-                                       'TemplateExtraFields',\r
-                                       array(\r
-                                               'fields' => &$pluginfields\r
-                                       )\r
-                               );\r
-                               $tmplt = array();\r
-                               if ( $description )\r
-                               {\r
-                                       $tmplt = skinableTEMPLATE::read($description);\r
-                               }\r
-                               if ( array_key_exists('TEMPLATE_EDIT_EXPLUGNAME', $tmplt) && !empty($tmplt['TEMPLATE_EDIT_EXPLUGNAME']) )\r
-                               {\r
-                                       $base = $tmplt['TEMPLATE_EDIT_EXPLUGNAME'];\r
-                               }\r
-                               else\r
-                               {\r
-                                       $base = "</tr><tr>\n"\r
-                                                 . "\t" . '<th colspan="2"><%explugtplname%>' . "</th>\n";\r
-                               }\r
-                               foreach ( $pluginfields as $pfkey => $pfvalue )\r
-                               {\r
-                                       $data = array(\r
-                                               'explugtplname' => Entity::hsc($pfkey)\r
-                                       );\r
-                                       echo TEMPLATE::fill($base, $data);\r
-                                       foreach ( $pfvalue as $pffield => $pfdesc )\r
-                                       {\r
-                                               $this->_templateEditRow($template, $pfdesc, $pffield, '', ++$tabidx, 0, $name);\r
-                                       }\r
-                               }\r
-                               break;\r
-                       default:\r
-                               $desc = defined($description) ? constant($description) : $description;\r
-                               $name = defined($name) ? constant($name) : $name;\r
-                               $this->_templateEditRow($template, $desc, $name, $help, $tabindex, $big, $tplt);\r
-                               break;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_eventformextra()\r
-        * Parse skinvar eventformextra\r
-        * \r
-        * @param       string  $type   name of type for event form extra\r
-        * @return      void\r
-        */\r
-       public function parse_eventformextra($type = 'activation')\r
-       {\r
-               global $manager;\r
-               switch ( $type )\r
-               {\r
-                       case 'activation':\r
-                               $key = requestVar('ackey');\r
-                               if ( !$key )\r
-                               {\r
-                                       $this->objAdmin->error(_ERROR_ACTIVATE);\r
-                               }\r
-                               $info = MEMBER::getActivationInfo($key);\r
-                               if ( !$info )\r
-                               {\r
-                                       $this->objAdmin->error(_ERROR_ACTIVATE);\r
-                               }\r
-                               $mem  = MEMBER::createFromId($info->vmember);\r
-                               if ( !$mem )\r
-                               {\r
-                                       $this->objAdmin->error(_ERROR_ACTIVATE);\r
-                               }\r
-                               $data = array(\r
-                                       'type'   => 'activation',\r
-                                       'member' => $mem\r
-                               );\r
-                               break;\r
-                       case 'membermailform-notloggedin':\r
-                               $data = array(\r
-                                       'type' => 'membermailform-notloggedin',\r
-                               );\r
-                               break;\r
-               }\r
-               $manager->notify('FormExtra', $data);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_extrahead()\r
-        * Parse skinvar extrahead\r
-        */\r
-       public function parse_extrahead()\r
-       {\r
-               global $manager;\r
-               $extrahead = $this->objAdmin->extrahead;\r
-               $manager->notify(\r
-                       'AdminPrePageHead',\r
-                       array(\r
-                               'extrahead'     => &$extrahead,\r
-                               'action'        => $this->objAdmin->action\r
-                       )\r
-               );\r
-               echo $extrahead;\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_blogsetting()\r
-        * Parse skinvar blogsetting\r
-        * \r
-        * @param       string  $which  name of setting for blog\r
-        * @return      void\r
-        */\r
-       public function parse_blogsetting($which)\r
-       {\r
-               echo $this->parse_getblogsetting($which);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_category()\r
-        * Parse skinvar category\r
-        * \r
-        * @param       string  $type   name of setting for category\r
-        * @return      void\r
-        */\r
-       public function parse_category($type = 'name')\r
-       {\r
-               echo $this->parse_getcategory($type);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_geteditpluginfo()\r
-        * Parse skinvar geteditpluginfo\r
-        * \r
-        * @param       string  $type   name of setting for edit plugin info\r
-        * @return      void\r
-        */\r
-       public function parse_geteditpluginfo($type)\r
-       {\r
-               $pid = intRequestVar('plugid');\r
-               switch ( $type )\r
-               {\r
-                       case 'id':\r
-                               return $pid;\r
-                               break;\r
-                       case 'name':\r
-                               return Entity::hsc(getPluginNameFromPid($pid));\r
-                               break;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_getmember()\r
-        * Parse skinvar getmember\r
-        * (includes a member info thingie)\r
-        * \r
-        * @param       string  $what   name of setting for member\r
-        * @return      void\r
-        */\r
-       public function parse_getmember($what)\r
-       {\r
-               global $memberinfo, $member;\r
-               // 1. only allow the member-details-page specific variables on member pages\r
-               if ( $this->skintype == 'member' )\r
-               {\r
-                       switch ( $what )\r
-                       {\r
-                               case 'name':\r
-                                       return Entity::hsc($memberinfo->getDisplayName());\r
-                                       break;\r
-                               case 'realname':\r
-                                       return Entity::hsc($memberinfo->getRealName());\r
-                                       break;\r
-                               case 'notes':\r
-                                       return Entity::hsc($memberinfo->getNotes());\r
-                                       break;\r
-                               case 'url':\r
-                                       return Entity::hsc($memberinfo->getURL());\r
-                                       break;\r
-                               case 'email':\r
-                                       return Entity::hsc($memberinfo->getEmail());\r
-                                       break;\r
-                               case 'id':\r
-                                       return Entity::hsc($memberinfo->getID());\r
-                                       break;\r
-                       }\r
-               }\r
-               // 2. the next bunch of options is available everywhere, as long as the user is logged in\r
-               if ( $member->isLoggedIn() )\r
-               {\r
-                       switch ( $what )\r
-                       {\r
-                               case 'yourname':\r
-                                       return $member->getDisplayName();\r
-                                       break;\r
-                               case 'yourrealname':\r
-                                       return $member->getRealName();\r
-                                       break;\r
-                               case 'yournotes':\r
-                                       return $member->getNotes();\r
-                                       break;\r
-                               case 'yoururl':\r
-                                       return $member->getURL();\r
-                                       break;\r
-                               case 'youremail':\r
-                                       return $member->getEmail();\r
-                                       break;\r
-                               case 'yourid':\r
-                                       return $member->getID();\r
-                                       break;\r
-                       }\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_headmessage()\r
-        * Parse skinvar headmessage\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_headmessage()\r
-       {\r
-               if ( !empty($this->objAdmin->headMess) )\r
-               {\r
-                       echo '<p>' . _MESSAGE . ': ' . Entity::hsc($this->objAdmin->headMess) . "</p>\n";\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_helplink()\r
-        * Parse skinvar helplink\r
-        * \r
-        * @param       string  $topic  name of topic for help\r
-        * @return      void\r
-        */\r
-       public function parse_helplink($topic = '')\r
-       {\r
-               if ( empty($topic) )\r
-               {\r
-                       return;\r
-               }\r
-               help($topic);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_helpplugname()\r
-        * Parse skinvar helpplugname\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_helpplugname()\r
-       {\r
-               $plugid = intGetVar('plugid');\r
-               Entity::hsc(getPluginNameFromPid($plugid));\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_ilistaddnew()\r
-        * Parse skinvar ilistaddnew\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_ilistaddnew()\r
-       {\r
-               $blogid = intRequestVar('blogid');\r
-               if ( intPostVar('start') == 0 )\r
-               {\r
-                       echo '<p><a href="index.php?action=createitem&amp;blogid=' . $blogid . '">' . _ITEMLIST_ADDNEW . "</a></p>\n";\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_importskininfo()\r
-        * Parse skinvar importskininfo\r
-        * \r
-        * @param       string  $type   name of information for imported skin\r
-        * @return      void\r
-        */\r
-       public function parse_importskininfo($type)\r
-       {\r
-               switch ( $type )\r
-               {\r
-                       case 'info':\r
-                               echo Entity::hsc(requestVar('skininfo'));\r
-                               break;\r
-                       case 'snames':\r
-                               $dataArr = requestArray('skinnames');\r
-                               echo implode(' <em>' . _AND . '</em> ', $dataArr);\r
-                               break;\r
-                       case 'tnames':\r
-                               $dataArr = requestArray('tpltnames');\r
-                               echo implode(' <em>' . _AND . '</em> ', $dataArr);\r
-                               break;\r
-                       case 'sclashes':\r
-                               $dataArr = requestArray('skinclashes');\r
-                               echo implode(' <em>' . _AND . '</em> ', $dataArr);\r
-                               break;\r
-                       case 'tclashes':\r
-                               $dataArr = requestArray('tpltclashes');\r
-                               echo implode(' <em>' . _AND . '</em> ', $dataArr);\r
-                               break;\r
-                       case 'skinfile':\r
-                               echo Entity::hsc(requestVar('skinfile'));\r
-                               break;\r
-                       case 'mode':\r
-                               echo Entity::hsc(requestVar('mode'));\r
-                               break;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_inputyesno()\r
-        * Parse skinvar inputyesno\r
-        * \r
-        * @param       string  $name                   \r
-        * @param       string  $checkedval             \r
-        * @param       string  $tabindex               \r
-        * @param       string  $value1                 \r
-        * @param       string  $value2                 \r
-        * @param       string  $yesval                 \r
-        * @param       string  $noval                  \r
-        * @param       string  $isAdmin                \r
-        * @param       string  $templateName   \r
-        * @return      void\r
-        */\r
-       public function parse_inputyesno($name, $checkedval, $tabindex = 0, $value1 = 1, $value2 = 0, $yesval = _YES, $noval = _NO, $isAdmin = 0, $templateName = '')\r
-       {\r
-               self::input_yesno($name, $checkedval, $tabindex, $value1, $value2, $yesval, $noval, $isAdmin, $templateName );\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_insertpluginfo()\r
-        * Parse templatevar insertpluginfo\r
-        */\r
-       public function parse_insertpluginfo($type)\r
-       {\r
-               $option = $this->objAdmin;\r
-               switch ( $type )\r
-               {\r
-                       case 'id':\r
-                               return $option['pid'];\r
-                               break;\r
-                       case 'name':\r
-                               return Entity::hsc($option['pfile']);\r
-                               break;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_insertpluginoptions()\r
-        * Parse skinvar insertpluginoptions\r
-        * \r
-        * @param       string  $templateName   name of template\r
-        * @return      void\r
-        */\r
-       public function parse_insertpluginoptions($templateName = '')\r
-       {\r
-               $options        = $this->objAdmin->aOptions;\r
-               $template       = array();\r
-               $templats       = array();\r
-               \r
-               if ( $templateName )\r
-               {\r
-                       $templates = skinableTEMPLATE::read($templateName);\r
-               }\r
-               if (array_key_exists('INSERT_PLUGOPTION_TITLE', $templates) && !empty($templates['INSERT_PLUGOPTION_TITLE']) )\r
-               {\r
-                       $template['title'] = $templates['INSERT_PLUGOPTION_TITLE'];\r
-               }\r
-               else\r
-               {\r
-                       $template['title'] = '<tr><th colspan="2"><%sprinttext(_PLUGIN_OPTIONS_TITLE, <|%insertpluginfo(name)%|>)%></th></tr>' . "\n";\r
-               }\r
-               if ( array_key_exists('INSERT_PLUGOPTION_BODY', $templates) && !empty($templates['INSERT_PLUGOPTION_BODY']) )\r
-               {\r
-                       $template['body'] = $templates['INSERT_PLUGOPTION_BODY'];\r
-               }\r
-               else\r
-               {\r
-                       $template['body'] = '<tr><%listplugplugoptionrow%></tr>' . "\n";\r
-               }\r
-               \r
-               $prevPid = -1;\r
-               \r
-               foreach ( $options as $option )\r
-               {\r
-                       $handler = new skinableACTIONS($this->skintype, $template, $option);\r
-                       $parser  = new PARSER(skinableACTIONS::getDefinedActions(), $handler);\r
-                       // new plugin?\r
-                       if ( $prevPid != $option['pid'] )\r
-                       {\r
-                               $prevPid  = $option['pid'];\r
-                               $parser->parse($template['title']);\r
-                       }\r
-                       $meta = NucleusPlugin::getOptionMeta($option['typeinfo']);\r
-                       if ( @$meta['access'] != 'hidden' )\r
-                       {\r
-                               $parsed = $parser->parse($template['body']);\r
-                       }\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_insplugoptcontent()\r
-        * Parse skinvar insplugoptcontent\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_insplugoptcontent()\r
-       {\r
-               $option = $this->objAdmin->aOption;\r
-               \r
-               $meta   = NucleusPlugin::getOptionMeta($option['typeinfo']);\r
-               if (array_key_exists('access', $meta) && $meta['access'] != 'hidden')\r
-               {\r
-                       echo '<tr>';\r
-                       skinableListplug_plugOptionRow($option);\r
-                       echo '</tr>';\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_iprangeinput()\r
-        * Parse skinvar iprangeinput\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       function parse_iprangeinput()\r
-       {\r
-               if ( requestVar('ip') )\r
-               {\r
-                       $iprangeVal = Entity::hsc(requestVar('ip'));\r
-                       echo '<input name="iprange" type="radio" value="' . $iprangeVal . '" checked="checked" id="ip_fixed" />' . "\n";\r
-                       echo '<label for="ip_fixed">' . $iprangeVal . "</label><br />\n";\r
-                       echo '<input name="iprange" type="radio" value="custom" id="ip_custom" />' . "\n";\r
-                       echo '<label for="ip_custom">' . _BAN_IP_CUSTOM . '</label>' . "\n";\r
-                       echo '<input name="customiprange" value="' . $iprangeVal . '" maxlength="15" size="15" />' . "\n";\r
-               }\r
-               else\r
-               {\r
-                       echo '<input name="iprange" value="custom" type="hidden" />' . "\n";\r
-                       echo '<input name="customiprange" value="" maxlength="15" size="15" />' . "\n";\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_itemnavlist()\r
-        * Parse skinvar itemnavlist\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_itemnavlist()\r
-       {\r
-               global $CONF, $manager, $member;\r
-               if ( $this->skintype == 'itemlist' )\r
-               {\r
-                       $blogid =  intRequestVar('blogid');\r
-                       $blog   =& $manager->getBlog($blogid);\r
-               }\r
-               if ( postVar('start') )\r
-               {\r
-                       $start = intPostVar('start');\r
-               }\r
-               else\r
-               {\r
-                       $start = 0;\r
-               }\r
-               \r
-               // amount of items to show\r
-               if ( postVar('amount') )\r
-               {\r
-                       $amount = intPostVar('amount');\r
-               }\r
-               else\r
-               {\r
-                       $amount = intval($CONF['DefaultListSize']);\r
-                       if ( $amount < 1 )\r
-                       {\r
-                               $amount = 10;\r
-                       }\r
-               }\r
-               $query  = "SELECT bshortname, cname, mname, ititle, ibody, inumber, idraft, itime"\r
-                       . " FROM %s, %s, %s"\r
-                       . " WHERE iblog=bnumber AND iauthor=mnumber AND icat=catid;";\r
-               \r
-               $query = sprintf($query, sql_table('item'), sql_table('blog'), sql_table('member'), sql_table('category'));\r
-               \r
-               if ( $this->skintype == 'itemlist' )\r
-               {\r
-                       $query .= 'and iblog   = ' . $blogid;\r
-                       $template['now'] = $blog->getCorrectTime(time());\r
-                       \r
-                       // non-blog-admins can only edit/delete their own items\r
-                       if ( !$member->blogAdminRights($blogid) )\r
-                       {\r
-                               $query .= ' and iauthor = ' . $member->getID();\r
-                       }\r
-               }\r
-               elseif ( $this->skintype == 'browseownitems' )\r
-               {\r
-                       $query .= 'and iauthor   = ' . $member->getID();\r
-                       $blogid = 0;\r
-                       $template['now'] = time();\r
-               }\r
-               \r
-               // search through items\r
-               $search = postVar('search');\r
-               \r
-               if ( !empty($search) )\r
-               {\r
-                       $query .= ' AND ((ititle LIKE "%' . sql_real_escape_string($search) . '%") '\r
-                               . '  OR  (ibody LIKE "%' . sql_real_escape_string($search) . '%") '\r
-                               . '  OR  (imore LIKE "%' . sql_real_escape_string($search) . '%"))';\r
-               }\r
-               $query .= ' ORDER BY itime DESC'\r
-                       . " LIMIT {$start},{$amount}";\r
-               \r
-               $template['content'] = 'itemlist';\r
-               \r
-               $navList = new skinableNAVLIST($this->skintype, $start, $amount, 0, 1000, $blogid, $search, 0);\r
-               $navList->showBatchList('item', $query, 'table', $template);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_jstoolbaroptions()\r
-        * Parse skinvar jstoolbaroptions\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_jstoolbaroptions()\r
-       {\r
-               global $CONF;\r
-               $options = array(\r
-                       _SETTINGS_JSTOOLBAR_NONE,\r
-                       _SETTINGS_JSTOOLBAR_SIMPLE,\r
-                       _SETTINGS_JSTOOLBAR_FULL\r
-               );\r
-               $i = 1;\r
-               foreach ( $options as $option )\r
-               {\r
-                       $text  = "<option value=\"%d\"%s>%s</option>\n";\r
-                       $extra = ($CONF['DisableJsTools'] == $i) ? ' selected="selected"' : '';\r
-                       echo sprintf($text, $i, $extra, $option);\r
-                       $i++;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_localeselectoptions()\r
-        * Parse skinvar localeselectoptions\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_localeselectoptions()\r
-       {\r
-               $locales = i18n::get_available_locale_list();\r
-               $memid   = intRequestVar('memberid');\r
-               if ( $memid )\r
-               {\r
-                       $mem = MEMBER::createFromID($memid);\r
-                       if ( !$mem->getLocale() || !in_array($mem->getLocale(), $locales) )\r
-                       {\r
-                               echo "<option value=\"\" selected=\"selected\">" . Entity::hsc(_MEMBERS_USESITELANG) . "</option>\n";\r
-                       }\r
-                       else\r
-                       {\r
-                               echo "<option value=\"\">" . Entity::hsc(_MEMBERS_USESITELANG) . "</option>\n";\r
-                       }\r
-               }\r
-               else\r
-               {\r
-                       if ( !i18n::get_current_locale() || !in_array(i18n::get_current_locale(), $locales) )\r
-                       {\r
-                               echo "<option value=\"\" selected=\"selected\">en_Latn_US</option>\n";\r
-                       }\r
-               }\r
-               foreach ( $locales as $locale )\r
-               {\r
-                       if ($memid)\r
-                       {\r
-                               if ( $locale == $mem->getLocale() )\r
-                               {\r
-                                       echo "<option value=\"{$locale}\" selected=\"selected\">{$locale}</option>\n";\r
-                               }\r
-                               else\r
-                               {\r
-                                       echo "<option value=\"{$locale}\">{$locale}</option>\n";\r
-                               }\r
-                       }\r
-                       else\r
-                       {\r
-                               if ( $locale == i18n::get_current_locale() )\r
-                               {\r
-                                       echo "<option value=\"{$locale}\" selected=\"selected\">{$locale}</option>\n";\r
-                               }\r
-                               else\r
-                               {\r
-                                       echo "<option value=\"{$locale}\">{$locale}</option>\n";\r
-                               }\r
-                       }\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_listplugplugoptionrow()\r
-        * Parse templatevar listplugplugoptionrow\r
-        * \r
-        * @param       string  $templateName   name of template\r
-        * @return      void\r
-        */\r
-       public function parse_listplugplugoptionrow($templateName = '')\r
-       {\r
-               $option = $this->objAdmin;\r
-               echo skinableListplug_plugOptionRow($option, $templateName);\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_mediadirwarning()\r
-        * Parse skinvar mediadirwarning\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_mediadirwarning()\r
-       {\r
-               global $DIR_MEDIA;\r
-               if ( !is_dir($DIR_MEDIA) )\r
-               {\r
-                       echo "<br /><b>" . _WARNING_NOTADIR . "</b>\n";\r
-               }\r
-               if ( !is_readable($DIR_MEDIA) )\r
-               {\r
-                       echo "<br /><b>" . _WARNING_NOTREADABLE . "</b>\n";\r
-               }\r
-               if ( !is_writeable($DIR_MEDIA) )\r
-               {\r
-                       echo "<br /><b>" . _WARNING_NOTWRITABLE . "</b>\n";\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_movedistselect()\r
-        * Parse skinvar movedistselect\r
-        */\r
-       function parse_movedistselect()\r
-       {\r
-               $actionType = requestVar('action');\r
-               switch ( $actionType )\r
-               {\r
-                       case 'batchitem':\r
-                               $this->objAdmin->selectBlogCategory('destcatid');\r
-                               break;\r
-                       case 'batchcategory':\r
-                               $this->objAdmin->selectBlog('destblogid');\r
-                               break;\r
-                       default:\r
-                               if ( $this->skintype == 'itemmove' )\r
-                               {\r
-                                       $query  = "SELECT icat as result FROM %s WHERE inumber=%d;";\r
-                                       $query = spriintf($query, sql_table('item'), intRequestVar('itemid'));\r
-                                       $catid  = quickQuery(sprintf($query, intRequestVar('itemid')));\r
-                                       $this->objAdmin->selectBlogCategory('catid', $catid, 10, 1);\r
-                               }\r
-                               break;\r
-               }\r
-               return;\r
-       }\r
-       \r
-       /**\r
-        * Actions::parse_moveitemid()\r
-        * Parse skinvar moveitemid\r
-        * \r
-        * @param       void\r
-        * @return      void\r
-        */\r
-       public function parse_moveitemid()\r
-       {\r
-               echo intRequestVar('itemid');\r
-               return;\r
-       }\r
-}\r
+<?php
+/**
+ * Nucleus: PHP/MySQL Weblog CMS (http://nucleuscms.org/)
+ * Copyright (C) 2002-2012 The Nucleus Group
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ * (see nucleus/documentation/index.html#license for more info)
+ */
+/**
+ * This class contains the functions that get called by using
+ * the special tags in the skins
+ *
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2012 The Nucleus Group
+ * @version $Id: ACTIONS.php 1886 2012-06-17 08:27:27Z sakamocchi $
+ */
+
+class Actions extends BaseActions
+{
+       // part of the skin currently being parsed ('index', 'item', 'archive',
+       // 'archivelist', 'member', 'search', 'error', 'imagepopup')
+       private $skintype;
+       
+       // contains an assoc array with parameters that need to be included when
+       // generating links to items/archives/... (e.g. catid)
+       private $linkparams;
+       
+       // used when including templated forms from the include/ dir. The $formdata var
+       // contains the values to fill out in there (assoc array name -> value)
+       private $formdata;
+       
+       // filled out with the number of displayed items after calling one of the
+       // (other)blog/(other)searchresults skinvars.
+       private $amountfound;
+       
+       /**
+        * Actions::$default_actions
+        * list of whole action names with which this class can deal
+        */
+       static private $default_actions = array(
+               'addlink',
+               'addpopupcode',
+               'adminurl',
+               'archivelink',
+               'bloglist',
+               'category',
+               'loginform',
+               'member',
+               'nucleusbutton',
+               'otherarchivedaylist',
+               'otherarchivelist',
+               'otherarchiveyearlist',
+               'otherblog',
+               'plugin',
+               'referer',
+               'searchform',
+               'self',
+               'sitevar',
+               'skinname',
+               'sticky',
+               'todaylink',
+               'version',
+               // deprecated (Nucleus v2.0)
+               /* TODO: remove this */
+               'ifcat'
+       );
+       
+       /**
+        * Actions::$normal_skin_types
+        * friendly name for wrapped page types
+        */
+       static public $normal_skin_types = array(
+               'index'                 => _SKIN_PART_MAIN,
+               'item'                  => _SKIN_PART_ITEM,
+               'archivelist'   => _SKIN_PART_ALIST,
+               'archive'               => _SKIN_PART_ARCHIVE,
+               'search'                => _SKIN_PART_SEARCH,
+               'error'                 => _SKIN_PART_ERROR,
+               'member'                => _SKIN_PART_MEMBER,
+               'imagepopup'    => _SKIN_PART_POPUP
+       );
+       
+       /**
+        * Actions::getNormalSkinTypes()
+        * 
+        * @static
+        * @param       void
+        * @return      array   list of friendly names for page actions
+        */
+       static public function getNormalSkinTypes()
+       {
+               return self::$normal_skin_types;
+       }
+       
+       /**
+        * Actions::__construct()
+        * Constructor for a new Actions object
+        * 
+        * @param       string  $type
+        * @return      void
+        */
+       public function __construct($type)
+       {
+               global $catid;
+               
+               // call constructor of superclass first
+               parent::__construct();
+               $this->skintype = $type;
+               
+               if ( $catid )
+               {
+                       $this->linkparams = array('catid' => $catid);
+               }
+               return;
+       }
+       
+       /**
+        * Actions::getAvailableActions()
+        * 
+        * @param       void
+        * @return      array   allowed actions for the page type
+        */
+       public function getAvailableActions()
+       {
+               $extra_actions = array();
+               
+               switch ( $this->skintype )
+               {
+                       case 'index':
+                               $extra_actions = array(
+                                       'blog',
+                                       'blogsetting',
+                                       'preview',
+                                       'additemform',
+                                       'categorylist',
+                                       'archivelist',
+                                       'archivedaylist',
+                                       'archiveyearlist',
+                                       'nextlink',
+                                       'prevlink'
+                               );
+                               break;
+                       case 'archive':
+                               $extra_actions = array(
+                                       'blog',
+                                       'archive',
+                                       'otherarchive',
+                                       'categorylist',
+                                       'archivelist',
+                                       'archivedaylist',
+                                       'archiveyearlist',
+                                       'blogsetting',
+                                       'archivedate',
+                                       'nextarchive',
+                                       'prevarchive',
+                                       'nextlink',
+                                       'prevlink',
+                                       'archivetype'
+                               );
+                               break;
+                       case 'archivelist':
+                               $extra_actions = array(
+                                       'blog',
+                                       'archivelist',
+                                       'archivedaylist',
+                                       'archiveyearlist',
+                                       'categorylist',
+                                       'blogsetting'
+                               );
+                               break;
+                       case 'search':
+                               $extra_actions = array(
+                                       'blog',
+                                       'archivelist',
+                                       'archivedaylist',
+                                       'archiveyearlist',
+                                       'categorylist',
+                                       'searchresults',
+                                       'othersearchresults',
+                                       'blogsetting',
+                                       'query',
+                                       'nextlink',
+                                       'prevlink'
+                               );
+                               break;
+                       case 'imagepopup':
+                               $extra_actions = array(
+                                       'image',
+                                       // deprecated (Nucleus v2.0)
+                                       /* TODO: remove this */
+                                       'imagetext'
+                               );
+                               break;
+                       case 'member':
+                               $extra_actions = array(
+                                       'membermailform',
+                                       'blogsetting',
+                                       'nucleusbutton',
+                                       'categorylist'
+                               );
+                               break;
+                       case 'item':
+                               $extra_actions = array(
+                                       'blog',
+                                       'item',
+                                       'comments',
+                                       'commentform',
+                                       'vars',
+                                       'blogsetting',
+                                       'nextitem',
+                                       'previtem',
+                                       'nextlink',
+                                       'prevlink',
+                                       'nextitemtitle',
+                                       'previtemtitle',
+                                       'categorylist',
+                                       'archivelist',
+                                       'archivedaylist',
+                                       'archiveyearlist',
+                                       'itemtitle',
+                                       'itemid',
+                                       'itemlink'
+                               );
+                               break;
+                       case 'error':
+                               $extra_actions = array(
+                                       'errormessage',
+                                       'categorylist'
+                               );
+                               break;
+                       default:
+                                       $extra_actions = array(
+                                               'blog',
+                                               'blogsetting',
+                                               'preview',
+                                               'additemform',
+                                               'categorylist',
+                                               'archivelist',
+                                               'archivedaylist',
+                                               'archiveyearlist',
+                                               'nextlink',
+                                               'prevlink',
+                                               'membermailform',
+                                               'nucleusbutton',
+                                               'categorylist'
+                                       );
+                               break;
+               }
+               
+               $defined_actions = array_merge(self::$default_actions, $extra_actions);
+               
+               return array_merge($defined_actions, parent::getAvailableActions());
+       }
+       
+       /**
+        * Actions::doForm()
+        * Forms get parsedincluded now, using an extra <formdata> skinvar
+        *
+        * @param       string  $filename
+        * @return      void
+        */
+       public function doForm($filename)
+       {
+               global $DIR_NUCLEUS;
+               array_push($this->parser->actions,'formdata', 'callback','errordiv','ticket');
+               
+               $oldIncludeMode = Parser::getProperty('IncludeMode');
+               $oldIncludePrefix = Parser::getProperty('IncludePrefix');
+               Parser::setProperty('IncludeMode','normal');
+               Parser::setProperty('IncludePrefix','');
+               
+               $this->parse_parsedinclude($DIR_NUCLEUS . 'forms/' . $filename . '.template');
+               Parser::setProperty('IncludeMode',$oldIncludeMode);
+               Parser::setProperty('IncludePrefix',$oldIncludePrefix);
+               
+               array_pop($this->parser->actions);      // errordiv
+               array_pop($this->parser->actions);      // callback
+               array_pop($this->parser->actions);      // formdata
+               array_pop($this->parser->actions);      // ticket
+               return;
+       }
+
+       /**
+        * Actions::checkCondition()
+        * Checks conditions for if statements
+        *
+        * @param       string  $field  type of <%if%>
+        * @param       string  $name   property of field
+        * @param       string  $value  value of property
+        * @return      boolean condition
+        */
+       protected function checkCondition($field, $name='', $value = '')
+       {
+               global $catid, $blog, $member, $itemidnext, $itemidprev, $manager, $archiveprevexists, $archivenextexists;
+               
+               $condition = 0;
+               switch ( $field )
+               {
+                       case 'category':
+                               $condition = ($blog && $this->ifCategory($name,$value));
+                               break;
+                       case 'blogsetting':
+                               $condition = ($blog && ($blog->getSetting($name) == $value));
+                               break;
+                       case 'loggedin':
+                               $condition = $member->isLoggedIn();
+                               break;
+                       case 'onteam':
+                               $condition = $member->isLoggedIn() && $this->ifOnTeam($name);
+                               break;
+                       case 'admin':
+                               $condition = $member->isLoggedIn() && $this->ifAdmin($name);
+                               break;
+                       case 'nextitem':
+                               $condition = ($itemidnext != '');
+                               break;
+                       case 'previtem':
+                               $condition = ($itemidprev != '');
+                               break;
+                       case 'archiveprevexists':
+                               $condition = ($archiveprevexists == true);
+                               break;
+                       case 'archivenextexists':
+                               $condition = ($archivenextexists == true);
+                               break;
+                       case 'skintype':
+                               $condition = (($name == $this->skintype) || ($name == requestVar('action')));
+                               break;
+                       case 'hasplugin':
+                               $condition = $this->ifHasPlugin($name, $value);
+                               break;
+                       default:
+                               $condition = $manager->pluginInstalled("NP_{$field}") && $this->ifPlugin($field, $name, $value);
+                               break;
+               }
+               return $condition;
+       }
+       
+       /**
+        * Actions::_ifHasPlugin()
+        *      hasplugin,PlugName
+        *         -> checks if plugin exists
+        *      hasplugin,PlugName,OptionName
+        *         -> checks if the option OptionName from plugin PlugName is not set to 'no'
+        *      hasplugin,PlugName,OptionName=value
+        *         -> checks if the option OptionName from plugin PlugName is set to value
+        *
+        * @param       string  $name   name of plugin
+        * @param       string  $value  
+        * @return      
+        */
+       private function ifHasPlugin($name, $value)
+       {
+               global $manager;
+               $condition = false;
+               // (pluginInstalled method won't write a message in the actionlog on failure)
+               if ( $manager->pluginInstalled("NP_{$name}") )
+               {
+                       $plugin =& $manager->getPlugin("NP_{$name}");
+                       if ( $plugin != NULL )
+                       {
+                               if ( $value == "" )
+                               {
+                                       $condition = true;
+                               }
+                               else
+                               {
+                                       list($name2, $value2) = preg_split('#=#', $value, 2);
+                                       if ( $value2 == "" && $plugin->getOption($name2) != 'no' )
+                                       {
+                                               $condition = true;
+                                       }
+                                       else if ( $plugin->getOption($name2) == $value2 )
+                                       {
+                                               $condition = true;
+                                       }
+                               }
+                       }
+               }
+               return $condition;
+       }
+       
+       /**
+        * Actions::ifPlugin()
+        * Checks if a plugin exists and call its doIf function
+        * 
+        * @param       string  $name   name of plugin
+        * @param       string  $key    name of plugin option
+        * @param       string  $value  value of plugin option
+        * @return      void
+        */
+       private function ifPlugin($name, $key = '', $value = '')
+       {
+               global $manager;
+               
+               $plugin =& $manager->getPlugin("NP_{$name}");
+               if ( !$plugin )
+               {
+                       return;
+               }
+               
+               $params = func_get_args();
+               array_shift($params);
+               
+               return call_user_func_array(array(&$plugin, 'doIf'), $params);
+       }
+       
+       /**
+        * Actions::ifCategory()
+        * Different checks for a category
+        * 
+        * @param       string  $name   
+        * @param       string  $value  
+        * @return      boolean 
+        */
+       private function ifCategory($name = '', $value='')
+       {
+               global $blog, $catid;
+               
+               // when no parameter is defined, just check if a category is selected
+               if ( ($name != 'catname' && $name != 'catid') || ($value == '') )
+               {
+                       return $blog->isValidCategory($catid);
+               }
+               // check category name
+               else if ( $name == 'catname' )
+               {
+                       $value = $blog->getCategoryIdFromName($value);
+                       if ( $value == $catid )
+                       {
+                               return $blog->isValidCategory($catid);
+                       }
+               }
+               // check category id
+               else if ( ($name == 'catid') && ($value == $catid) )
+               {
+                       return $blog->isValidCategory($catid);
+               }
+               return FALSE;
+       }
+       
+       /**
+        * Actions::ifOnTeam()
+        * Checks if a member is on the team of a blog and return his rights
+        * 
+        * @param       string  $blogName       name of weblog
+        * @return      mixed
+        */
+       private function ifOnTeam($blogName = '')
+       {
+               global $blog, $member, $manager;
+               
+               // when no blog found
+               if ( ($blogName == '') && !is_object($blog) )
+               {
+                       return 0;
+               }
+               
+               // explicit blog selection
+               if ( $blogName != '' )
+               {
+                       $blogid = getBlogIDFromName($blogName);
+               }
+               
+               if ( ($blogName == '') || !$manager->existsBlogID($blogid) )
+               {
+                       // use current blog
+                       $blogid = $blog->getID();
+               }
+               
+               return $member->teamRights($blogid);
+       }
+
+       /**
+        * Actions::ifAdmin()
+        * Checks if a member is admin of a blog
+        * 
+        * @param       string  $blogName       name of weblog
+        * @return      mixed
+        */
+       private function ifAdmin($blogName = '')
+       {
+               global $blog, $member, $manager;
+               
+               // when no blog found
+               if ( ($blogName == '') && (!is_object($blog)) )
+               {
+                       return 0;
+               }
+               
+               // explicit blog selection
+               if ( $blogName != '' )
+               {
+                       $blogid = getBlogIDFromName($blogName);
+               }
+               
+               if ( ($blogName == '') || !$manager->existsBlogID($blogid) )
+               {
+                       // use current blog
+                       $blogid = $blog->getID();
+               }
+               
+               return $member->isBlogAdmin($blogid);
+       }
+       
+       /**
+        * Actions::link()
+        * returns either
+        *      - a raw link (html/xml encoded) when no linktext is provided
+        *      - a (x)html <a href... link when a text is present (text htmlencoded)
+        * 
+        * @param       string  $url            URL for href attribute of anchor element
+        * @param       string  $linktext       content of anchor element
+        * @return      
+        */
+       private function link($url, $linktext = '')
+       {
+               $u = Entity::hsc($url);
+               // fix URLs that already had encoded ampersands
+               $u = preg_replace("#&amp;amp;#", '&amp;', $u);
+               if ( $linktext != '' )
+               {
+                       $l = '<a href="' . $u .'">' . Entity::hsc($linktext) . '</a>';
+               }
+               else
+               {
+                       $l = $u;
+               }
+               return $l;
+       }
+       
+       /**
+        * Actions::searchlink()
+        * Outputs a next/prev link
+        *
+        * @param $maxresults
+        *              The maximum amount of items shown per page (e.g. 10)
+        * @param $startpos
+        *              Current start position (requestVar('startpos'))
+        * @param $direction
+        *              either 'prev' or 'next'
+        * @param $linktext
+        *              When present, the output will be a full <a href...> link. When empty,
+        *              only a raw link will be outputted
+        */
+       private function searchlink($maxresults, $startpos, $direction, $linktext = '', $recount = '')
+       {
+               global $CONF, $blog, $query, $amount;
+               // TODO: Move request uri to linkparams. this is ugly. sorry for that.
+               $startpos       = (integer) $startpos;
+               $parsed         = parse_url(serverVar('REQUEST_URI'));
+               $path           = ( in_array('path', $parsed) ) ? $parsed['path'] : '';
+               $parsed         = ( in_array('query', $parsed) ) ? $parsed['query'] : '';
+               $url            = '';
+               
+               if ( $direction == 'prev' )
+               {
+                       if ( intval($startpos) - intval($maxresults) >= 0 )
+                       {
+                               $startpos       = intval($startpos) - intval($maxresults);
+                               
+                               if ( $this->skintype == 'index' )
+                               {
+                                       $url = $path;
+                               }
+                               else if ( $this->skintype == 'search' )
+                               {
+                                       $url = $CONF['SearchURL'];
+                               }
+                               $url .= '?' . alterQueryStr($parsed,'startpos',$startpos);
+                       }
+               }
+               else if ( $direction == 'next' )
+               {
+                       global $navigationItems;
+                       if ( !isset($navigationItems) )
+                       {
+                               $navigationItems = 0;
+                       }
+                       
+                       if ( $recount )
+                       {
+                               $iAmountOnPage = 0;
+                       }
+                       else 
+                       {
+                               $iAmountOnPage = $this->amountfound;
+                       }
+                       
+                       if ( intval($navigationItems) > 0 )
+                       {
+                               $iAmountOnPage = intval($navigationItems) - intval($startpos);
+                       }
+                       elseif ( $iAmountOnPage == 0 )
+                       {
+                               /*
+                                * [%nextlink%] or [%prevlink%] probably called before [%blog%] or [%searchresults%]
+                                * try a count query
+                                */
+                               if ( $this->skintype == 'index' )
+                               {
+                                       $sqlquery = $blog->getSqlBlog('', 'count');
+                                       $url = $path;
+                               }
+                               else if ( $this->skintype == 'search' )
+                               {
+                                       $unused_highlight = '';
+                                       $sqlquery = $blog->getSqlSearch($query, $amount, $unused_highlight, 'count');
+                                       $url = $CONF['SearchURL'];
+                               }
+                               if ( $sqlquery )
+                               {
+                                       $iAmountOnPage = intval(DB::getValue($sqlquery)) - intval($startpos);
+                               }
+                       }
+                       
+                       $url = '';
+                       if ( intval($iAmountOnPage) >= intval($maxresults) )
+                       {
+                               $startpos        = intval($startpos) + intval($maxresults);
+                               $url            .= '?' . alterQueryStr($parsed, 'startpos', $startpos);
+                       }
+               }
+               
+               if ( $url != '' )
+               {
+                       echo $this->link($url, $linktext);
+               }
+               return;
+       }
+       
+       /**
+        * Actions::itemlink()
+        * Creates an item link and if no id is given a todaylink 
+        * 
+        * @param       integer $id     id for link
+        * @param       string  $linktext       text for link
+        * @return      void
+        */
+       private function itemlink($id, $linktext = '')
+       {
+               global $CONF;
+               if ( $id != 0 )
+               {
+                       echo $this->link(Link::create_item_link($id, $this->linkparams), $linktext);
+               }
+               else
+               {
+                       $this->parse_todaylink($linktext);
+               }
+               return;
+       }
+       
+       /**
+        * Actions::archivelink)
+        * Creates an archive link and if no id is given a todaylink 
+        * 
+        * @param       integer $id     id for link
+        * @param       string  $linktext       text for link
+        * @return      void
+        */
+       private function archivelink($id, $linktext = '')
+       {
+               global $CONF, $blog;
+               if ( $id != 0 )
+               {
+                       echo $this->link(Link::create_archive_link($blog->getID(), $id, $this->linkparams), $linktext);
+               }
+               else
+               {
+                       $this->parse_todaylink($linktext);
+               }
+               return;
+       }
+       
+       /**
+        * Actions:setBlogCategory()
+        * Helper function that sets the category that a blog will need to use
+        *
+        * @param       string  $blog           An object of the blog class, passed by reference (we want to make changes to it)
+        * @param       string  $catname        The name of the category to use
+        * @return      void
+        */
+       private function setBlogCategory(&$blog, $catname)
+       {
+               global $catid;
+               if ( $catname != '' )
+               {
+                       $blog->setSelectedCategoryByName($catname);
+               }
+               else
+               {
+                       $blog->setSelectedCategory($catid);
+               }
+               return;
+       }
+       
+       /**
+        * Actions::preBlogContent()
+        * Notifies the Manager that a PreBlogContent event occurs
+        * 
+        * @param       string  $type   type of skin
+        * @param       object  $blog   an instance of Blog class
+        * @return      void
+        */
+       private function preBlogContent($type, $blog)
+       {
+               global $manager;
+               $data = array('blog' => $blog, 'type' => $type);
+               $manager->notify('PreBlogContent', $data);
+               return;
+       }
+
+       /**
+        * Actions::postBlogContent()
+        * Notifies the Manager that a PostBlogContent event occurs
+        * 
+        * @param       string  $type   type of skin
+        * @param       objecct $blog   an instance of Blog class
+        * @return      void
+        */
+       private function postBlogContent($type, $blog)
+       {
+               global $manager;
+               $data = array('blog' => $blog, 'type' => $type);
+               $manager->notify('PostBlogContent', $data);
+               return;
+       }
+       
+       /**
+        * Actions::parse_additemform()
+        * Parse skinvar additemform
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_additemform()
+       {
+               global $blog, $CONF;
+               $this->formdata = array(
+                       'adminurl'      => Entity::hsc($CONF['AdminURL']),
+                       'catid'         => $blog->getDefaultCategory()
+               );
+               $blog->InsertJavaScriptInfo();
+               $this->doForm('additemform');
+               return;
+       }
+       
+       /**
+        * Actions::parse_addlink()
+        * Parse skinvar addlink
+        * A Link that allows to open a bookmarklet to add an item
+        */
+       public function parse_addlink()
+       {
+               global $CONF, $member, $blog;
+               if ( $member->isLoggedIn() && $member->isTeamMember($blog->blogid) )
+               {
+                       echo $CONF['AdminURL'].'bookmarklet.php?blogid='.$blog->blogid;
+               }
+               return;
+       }
+       
+       /**
+        * Actions::parse_addpopupcode()
+        * Parse skinvar addpopupcode
+        * Code that opens a bookmarklet in an popup window
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_addpopupcode()
+       {
+               echo "if (event &amp;&amp; event.preventDefault) event.preventDefault();winbm=window.open(this.href,'nucleusbm','scrollbars=yes,width=600,height=500,left=10,top=10,status=yes,resizable=yes');winbm.focus();return false;";
+               return;
+       }
+       
+       /**
+        * Parse skinvar adminurl
+        * (shortcut for admin url)
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_adminurl()
+       {
+               $this->parse_sitevar('adminurl');
+               return;
+       }
+       
+       /**
+        * Actions::parse_archive()
+        * Parse skinvar archive
+        * 
+        * @param       string  $template       name of template
+        * @param       string  $category       name of category
+        * @return      
+        */
+       public function parse_archive($template, $category = '')
+       {
+               global $blog, $archive;
+               // can be used with either yyyy-mm or yyyy-mm-dd
+               sscanf($archive,'%d-%d-%d', $y, $m, $d);
+               $this->setBlogCategory($blog, $category);
+               $this->preBlogContent('achive',$blog);
+               $blog->showArchive($template, $y, $m, $d);
+               $this->postBlogContent('achive',$blog);
+               return;
+       }
+       
+       /**
+        * Actions::parse_archivedate()
+        * %archivedate(locale,date format)%
+        * 
+        * @param       string  $locale
+        * @return      void
+        */
+       public function parse_archivedate($locale = '-def-')
+       {
+               global $archive;
+               
+               /* 
+                * TODO: these lines are no meaning because there is no $template.
+               if ( $locale == '-def-' )
+               {
+                       setlocale(LC_TIME, $template['LOCALE']);
+               }
+               else
+               {
+                       setlocale(LC_TIME, $locale);
+               }
+                */
+               
+               // get archive date
+               sscanf($archive,'%d-%d-%d',$y,$m,$d);
+               
+               // get format
+               $args = func_get_args();
+               // format can be spread over multiple parameters
+               if ( sizeof($args) > 1 )
+               {
+                       // take away locale
+                       array_shift($args);
+                       // implode
+                       $format=implode(',',$args);
+               }
+               elseif ( $d == 0 && $m !=0 )
+               {
+                       $format = '%B %Y';
+               }
+               elseif ( $m == 0 )
+               {
+                       $format = '%Y';
+               }
+               else
+               {
+                       $format = '%d %B %Y';
+               }
+               echo i18n::formatted_datetime($format, mktime(0,0,0,$m?$m:1,$d?$d:1,$y));
+               return;
+       }
+       
+       /**
+        * Actions::parse_archivedaylist()
+        * Parse skinvar archivedaylist
+        * 
+        * @param       string  $template       name of template
+        * @param       string  $category       name of category
+        * @param       integer $limit          the number of items in a display
+        * @return      void
+        */
+       public function parse_archivedaylist($template, $category = 'all', $limit = 0)
+       {
+               global $blog;
+               if ( $category == 'all' )
+               {
+                       $category = '';
+               }
+               $this->preBlogContent('archivelist',$blog);
+               $this->setBlogCategory($blog, $category);
+               $blog->showArchiveList($template, 'day', $limit);
+               $this->postBlogContent('archivelist',$blog);
+               return;
+       }
+       
+       /**
+        * Actions::parse_archivelink()
+        * A link to the archives for the current blog (or for default blog)
+        * 
+        * @param       string  $linktext       text for link
+        * @return      void
+        */
+       public function parse_archivelink($linktext = '')
+       {
+               global $blog, $CONF;
+               if ( $blog )
+               {
+                       echo $this->link(Link::create_archivelist_link($blog->getID(), $this->linkparams), $linktext);
+               }
+               else
+               {
+                       echo $this->link(Link::create_archivelist_link(), $linktext);
+               }
+               return;
+       }
+       
+       /**
+        * Actions::parse_archivelist()
+        * 
+        * @param       string  $template       name of template
+        * @param       string  $category       name of category
+        * @param       integer $limit          the number of items in a display
+        * @return      void
+        */
+       public function parse_archivelist($template, $category = 'all', $limit = 0)
+       {
+               global $blog;
+               if ( $category == 'all' )
+               {
+                       $category = '';
+               }
+               $this->preBlogContent('archivelist',$blog);
+               $this->setBlogCategory($blog, $category);
+               $blog->showArchiveList($template, 'month', $limit);
+               $this->postBlogContent('archivelist',$blog);
+               return;
+       }
+       
+       /**
+        * Actions::parse_archiveyearlist()
+        * 
+        * @param       string  $template       name of template
+        * @param       string  $category       name of category
+        * @param       integer $limit          the number of items in a display
+        */
+       public function parse_archiveyearlist($template, $category = 'all', $limit = 0)
+       {
+               global $blog;
+               if ( $category == 'all' )
+               {
+                       $category = '';
+               }
+               $this->preBlogContent('archivelist',$blog);
+               $this->setBlogCategory($blog, $category);
+               $blog->showArchiveList($template, 'year', $limit);
+               $this->postBlogContent('archivelist',$blog);
+               return;
+       }
+       
+       /**
+        * Actions::parse_archivetype()
+        * Parse skinvar archivetype
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_archivetype()
+       {
+               global $archivetype;
+               echo $archivetype;
+               return;
+       }
+       
+       /**
+        * Actions::parse_blog()
+        * Parse skinvar blog
+        * 
+        * @param       string  $template       name of template
+        * @param       mixed   $amount         the number of items in a display, in case it includes the beginning
+        * @param       string  $category       name of category
+        * @return      void
+        */
+       public function parse_blog($template, $amount = 10, $category = '')
+       {
+               global $blog, $startpos;
+               list($limit, $offset) = sscanf($amount, '%d(%d)');
+               $this->setBlogCategory($blog, $category);
+               $this->preBlogContent('blog',$blog);
+               $this->amountfound = $blog->readLog($template, $limit, $offset, $startpos);
+               $this->parse_benchmark();
+               $this->postBlogContent('blog',$blog);
+               return;
+       }
+       
+       /**
+        * Actions::parse_bloglist()
+        * Parse skinvar bloglist
+        * Shows a list of all blogs
+        * 
+        * @param       string  $template       name of template
+        * @param       string  $bnametype      whether 'name' or 'shortname' is used for the link text
+        * @param       string  $orderby        order criteria
+        * @param       string  $direction      order ascending or descending             
+        * @return      void
+        */
+       public function parse_bloglist($template, $bnametype = '', $orderby='number', $direction='asc')
+       {
+               Blog::showBlogList($template, $bnametype, $orderby, $direction);
+               return;
+       }
+       
+       /**
+        * Actions::parse_blogsetting()
+        * Parse skinvar blogsetting
+        * 
+        * @param       string  $which  key of weblog settings
+        * @return      void
+        */
+       public function parse_blogsetting($which)
+       {
+               global $blog;
+               switch( $which )
+               {
+                       case 'id':
+                               echo Entity::hsc($blog->getID());
+                               break;
+                       case 'url':
+                               echo Entity::hsc($blog->getURL());
+                               break;
+                       case 'name':
+                               echo Entity::hsc($blog->getName());
+                               break;
+                       case 'desc':
+                               echo Entity::hsc($blog->getDescription());
+                               break;
+                       case 'short':
+                               echo Entity::hsc($blog->getShortName());
+                               break;
+               }
+               return;
+       }
+       
+       /**
+        * Actions::parse_callback()
+        * Parse callback
+        * 
+        * @param       string  $eventName      name of event
+        * @param       string  $type   type of skin
+        * @return      void
+        */
+       public function parse_callback($eventName, $type)
+       {
+               global $manager;
+               $data = array('type' => $type);
+               $manager->notify($eventName, $data);
+               return;
+       }
+       
+       /**
+        * Actions::parse_category()
+        * Parse skinvar category
+        * 
+        * @param       string  $type   key of category settings
+        * @return      void
+        */
+       public function parse_category($type = 'name')
+       {
+               global $catid, $blog;
+               if ( !$blog->isValidCategory($catid) )
+               {
+                       return;
+               }
+               
+               switch ( $type )
+               {
+                       case 'name':
+                               echo $blog->getCategoryName($catid);
+                               break;
+                       case 'desc':
+                               echo $blog->getCategoryDesc($catid);
+                               break;
+                       case 'id':
+                               echo $catid;
+                               break;
+               }
+               return;
+       }
+       
+       /**
+        * Actions::parse_categorylist()
+        * Parse categorylist
+        * 
+        * @param       string  $template       name of template
+        * @param       string  $blogname       name of weblog
+        * @return      void
+        */
+       public function parse_categorylist($template, $blogname = '')
+       {
+               global $blog, $manager;
+               
+               // when no blog found
+               if ( ($blogname == '') && (!is_object($blog)) )
+               {
+                       return 0;
+               }
+                       
+               if ( $blogname == '' )
+               {
+                       $this->preBlogContent('categorylist',$blog);
+                       $blog->showCategoryList($template);
+                       $this->postBlogContent('categorylist',$blog);
+               }
+               else
+               {
+                       $b =& $manager->getBlog(getBlogIDFromName($blogname));
+                       $this->preBlogContent('categorylist',$b);
+                       $b->showCategoryList($template);
+                       $this->postBlogContent('categorylist',$b);
+               }
+               return;
+       }
+       
+       /**
+        * Actions::parse_commentform()
+        * Parse skinvar commentform
+        * 
+        * @param       string  $destinationurl URI for redirection
+        * @return      void
+        */
+       public function parse_commentform($destinationurl = '')
+       {
+               global $blog, $itemid, $member, $CONF, $manager, $DIR_LIBS, $errormessage;
+               
+               // warn when trying to provide a actionurl (used to be a parameter in Nucleus <2.0)
+               if ( stristr($destinationurl, 'action.php') )
+               {
+                       $args = func_get_args();
+                       $destinationurl = $args[1];
+                       ActionLog::add(WARNING,_ACTIONURL_NOTLONGER_PARAMATER);
+               }
+               
+               $actionurl = $CONF['ActionURL'];
+               
+               // if item is closed, show message and do nothing
+               $item =& $manager->getItem($itemid,0,0);
+               if ( $item['closed'] || !$blog->commentsEnabled() )
+               {
+                       $this->doForm('commentform-closed');
+                       return;
+               }
+               
+               if ( !$blog->isPublic() && !$member->isLoggedIn() )
+               {
+                       $this->doForm('commentform-closedtopublic');
+                       return;
+               }
+               
+               if ( !$destinationurl )
+               {
+                       // note: createLink returns an HTML encoded URL
+                       $destinationurl = Link::create_link(
+                               'item',
+                               array(
+                                       'itemid' => $itemid,
+                                       'title' => $item['title'],
+                                       'timestamp' => $item['timestamp'],
+                                       'extra' => $this->linkparams
+                               )
+                       );
+               }
+               else
+               {
+                       // HTML encode URL
+                       $destinationurl = Entity::hsc($destinationurl);
+               }
+               
+               // values to prefill
+               $user = cookieVar($CONF['CookiePrefix'] .'comment_user');
+               if ( !$user )
+               {
+                       $user = postVar('user');
+               }
+               
+               $userid = cookieVar($CONF['CookiePrefix'] .'comment_userid');
+               if ( !$userid )
+               {
+                       $userid = postVar('userid');
+               }
+               
+               $email = cookieVar($CONF['CookiePrefix'] .'comment_email');
+               if (!$email)
+               {
+                       $email = postVar('email');
+               }
+               
+               $body = postVar('body');
+               
+               $this->formdata = array(
+                       'destinationurl' => $destinationurl,    // url is already HTML encoded
+                       'actionurl' => Entity::hsc($actionurl),
+                       'itemid' => $itemid,
+                       'user' => Entity::hsc($user),
+                       'userid' => Entity::hsc($userid),
+                       'email' => Entity::hsc($email),
+                       'body' => Entity::hsc($body),
+                       'membername' => $member->getDisplayName(),
+                       'rememberchecked' => cookieVar($CONF['CookiePrefix'] .'comment_user')?'checked="checked"':''
+               );
+               
+               if ( !$member->isLoggedIn() )
+               {
+                       $this->doForm('commentform-notloggedin');
+               }
+               else
+               {
+                       $this->doForm('commentform-loggedin');
+               }
+               return;
+       }
+       
+       /**
+        * Actions::parse_comments()
+        * Parse skinvar comments
+        * include comments for one item
+        * 
+        * @param       string  $template       name of template
+        * @return      void
+        */
+       public function parse_comments($template)
+       {
+               global $manager, $blog, $highlight, $itemid;
+               
+               $template =& $manager->getTemplate($template);
+               $item =& $manager->getitem($itemid, 0, 0);
+               
+               // create parser object & action handler
+               $handler = new ItemActions($blog);
+               $handler->setTemplate($template);
+               $handler->setCurrentItem($item);
+               
+               $parser = new Parser($handler);
+               
+               $comments = new Comments($itemid);
+               $comments->setItemActions($handler);
+               // shows ALL comments
+               $comments->showComments($template, -1, 1, $highlight);
+               return;
+       }
+       
+       /**
+        * Actions::parse_errordiv()
+        * Parse errordiv
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_errordiv()
+       {
+               global $errormessage;
+               if ( $errormessage )
+               {
+                       echo '<div class="error">' . Entity::hsc($errormessage) . "</div>\n";
+               }
+               return;
+       }
+       
+       /**
+        * Actions::parse_errormessage()
+        * Parse skinvar errormessage
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_errormessage()
+       {
+               global $errormessage;
+               echo $errormessage;
+               return;
+       }
+       
+       /**
+        * Actions::parse_formdata()
+        * Parse formdata
+        * 
+        * @param       string  $what   key of format data
+        * @return      void
+        */
+       public function parse_formdata($what)
+       {
+               echo $this->formdata[$what];
+               return;
+       }
+       
+       /**
+        * Actions::parse_ifcat()
+        * Parse ifcat
+        * 
+        * @param       string  $text
+        * @return      void
+        */
+       public function parse_ifcat($text = '')
+       {
+               if ( $text == '' )
+               {
+                       // new behaviour
+                       $this->parse_if('category');
+               }
+               else
+               {
+                       // old behaviour
+                       global $catid, $blog;
+                       if ( $blog->isValidCategory($catid) )
+                       {
+                               echo $text;
+                       }
+               }
+               return;
+       }
+       
+       /**
+        * Actions::parse_image()
+        * Parse skinvar image
+        * 
+        * @param       string  $what   name of tag
+        * @return      void
+        */
+       public function parse_image($what = 'imgtag')
+       {
+               global $CONF;
+               
+               $imagetext      = Entity::hsc(requestVar('imagetext'));
+               $imagepopup = requestVar('imagepopup');
+               $width          = intRequestVar('width');
+               $height         = intRequestVar('height');
+               $fullurl        = Entity::hsc($CONF['MediaURL'] . $imagepopup);
+               
+               switch ( $what )
+               {
+                       case 'url':
+                               echo $fullurl;
+                               break;
+                       case 'width':
+                               echo $width;
+                               break;
+                       case 'height':
+                               echo $height;
+                               break;
+                       case 'caption':
+                       case 'text':
+                               echo $imagetext;
+                               break;
+                       case 'imgtag':
+                       default:
+                               echo "<img src=\"$fullurl\" width=\"$width\" height=\"$height\" alt=\"$imagetext\" title=\"$imagetext\" />";
+                               break;
+               }
+               return;
+       }
+       
+       /**
+        * Actions::parse_imagetext()
+        * Parse skinvar imagetext
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_imagetext()
+       {
+               $this->parse_image('imagetext');
+               return;
+       }
+
+       /**
+        * Actions::parse_item()
+        * Parse skinvar item
+        * include one item (no comments)
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_item($template)
+       {
+               global $blog, $itemid, $highlight;
+               
+               // need this to select default category
+               $this->setBlogCategory($blog, '');
+               $this->preBlogContent('item',$blog);
+               $r = $blog->showOneitem($itemid, $template, $highlight);
+               if ( $r == 0 )
+               {
+                       echo _ERROR_NOSUCHITEM;
+               }
+               $this->postBlogContent('item',$blog);
+               return;
+       }
+
+       /**
+        * Actions::parse_itemid()
+        * Parse skinvar itemid
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_itemid()
+       {
+               global $itemid;
+               echo $itemid;
+               return;
+       }
+       
+       /**
+        * Actions::parseitemlink()
+        * Parse skinvar itemlink
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_itemlink($linktext = '')
+       {
+               global $itemid;
+               $this->itemlink($itemid, $linktext);
+               return;
+       }
+       
+       /**
+        * Actions::parse_itemtitle()
+        * Parse itemtitle
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_itemtitle($format = '')
+       {
+               global $manager, $itemid;
+               $item =& $manager->getItem($itemid, 1, 1);
+               
+               switch ( $format )
+               {
+                       case 'xml':
+                               echo Entity::hen($item['title']);
+                               break;
+                       case 'raw':
+                               echo $item['title'];
+                               break;
+                       case 'attribute':
+                       default:
+                               echo Entity::hsc(strip_tags($item['title']));
+                               break;
+               }
+               return;
+       }
+       
+       /**
+        * Actions::parse_loginform()
+        * Parse skinvar loginform
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_loginform()
+       {
+               global $member, $CONF;
+               if ( !$member->isLoggedIn() )
+               {
+                       $filename = 'loginform-notloggedin';
+                       $this->formdata = array();
+               }
+               else
+               {
+                       $filename = 'loginform-loggedin';
+                       $this->formdata = array(
+                               'membername' => $member->getDisplayName(),
+                       );
+               }
+               $this->doForm($filename);
+               return;
+       }
+       
+       /**
+        * Actions::parse_member()
+        * Parse skinvar member
+        * (includes a member info thingie)
+        * 
+        * @param       string  $what   which memberdata is needed
+        * @return      void
+        */
+       public function parse_member($what)
+       {
+               global $memberinfo, $member, $CONF;
+               
+               // 1. only allow the member-details-page specific variables on member pages
+               if ( $this->skintype == 'member' )
+               {
+                       switch( $what )
+                       {
+                               case 'name':
+                                       echo Entity::hsc($memberinfo->getDisplayName());
+                                       break;
+                               case 'realname':
+                                       echo Entity::hsc($memberinfo->getRealName());
+                                       break;
+                               case 'notes':
+                                       echo Entity::hsc($memberinfo->getNotes());
+                                       break;
+                               case 'url':
+                                       echo Entity::hsc($memberinfo->getURL());
+                                       break;
+                               case 'email':
+                                       echo Entity::hsc($memberinfo->getEmail());
+                                       break;
+                               case 'id':
+                                       echo Entity::hsc($memberinfo->getID());
+                                       break;
+                       }
+               }
+               
+               // 2. the next bunch of options is available everywhere, as long as the user is logged in
+               if ( $member->isLoggedIn() )
+               {
+                       switch( $what )
+                       {
+                               case 'yourname':
+                                       echo $member->getDisplayName();
+                                       break;
+                               case 'yourrealname':
+                                       echo $member->getRealName();
+                                       break;
+                               case 'yournotes':
+                                       echo $member->getNotes();
+                                       break;
+                               case 'yoururl':
+                                       echo $member->getURL();
+                                       break;
+                               case 'youremail':
+                                       echo $member->getEmail();
+                                       break;
+                               case 'yourid':
+                                       echo $member->getID();
+                                       break;
+                               case 'yourprofileurl':
+                                       if ($CONF['URLMode'] == 'pathinfo')
+                                               echo Link::create_member_link($member->getID());
+                                       else
+                                               echo $CONF['IndexURL'] . Link::create_member_link($member->getID());
+                                       break;
+                       }
+               }
+               return;
+       }
+       
+       /**
+        * Link::parse_membermailform()
+        * Parse skinvar membermailform
+        * 
+        * @param       integer $rows   the height for textarea
+        * @param       integer $cols   the width for textarea
+        * @param       string  $desturl        URI to redirect
+        * @return      void
+        */
+       public function parse_membermailform($rows = 10, $cols = 40, $desturl = '')
+       {
+               global $member, $CONF, $memberid;
+               
+               if ( $desturl == '' )
+               {
+                       if ( $CONF['URLMode'] == 'pathinfo' )
+                       {
+                               $desturl = Link::create_member_link($memberid);
+                       }
+                       else
+                       {
+                               $desturl = $CONF['IndexURL'] . Link::create_member_link($memberid);
+                       }
+               }
+               
+               $message = postVar('message');
+               $frommail = postVar('frommail');
+               
+               $this->formdata = array(
+                       'url' => Entity::hsc($desturl),
+                       'actionurl' => Entity::hsc($CONF['ActionURL']),
+                       'memberid' => $memberid,
+                       'rows' => $rows,
+                       'cols' => $cols,
+                       'message' => Entity::hsc($message),
+                       'frommail' => Entity::hsc($frommail)
+               );
+               
+               if ( $member->isLoggedIn() )
+               {
+                       $this->doForm('membermailform-loggedin');
+               }
+               else if ( $CONF['NonmemberMail'] )
+               {
+                       $this->doForm('membermailform-notloggedin');
+               }
+               else
+               {
+                       $this->doForm('membermailform-disallowed');
+               }
+               return;
+       }
+       
+       /**
+        * Actions::parse_nextarchive()
+        * Parse skinvar nextarchive
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_nextarchive()
+       {
+               global $archivenext;
+               echo $archivenext;
+               return;
+       }
+       
+       /**
+        * Parse skinvar nextitem
+        * (include itemid of next item)
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_nextitem()
+       {
+               global $itemidnext;
+               if ( isset($itemidnext) )
+               {
+                       echo (int)$itemidnext;
+               }
+               return;
+       }
+       
+       /**
+        * Actions::parse_nextitemtitle()
+        * Parse skinvar nextitemtitle
+        * (include itemtitle of next item)
+        * 
+        * @param       string  $format format of text
+        * @return      void
+        */
+       public function parse_nextitemtitle($format = '')
+       {
+               global $itemtitlenext;
+               
+               switch ( $format )
+               {
+                       case 'xml':
+                               echo Entity::hen($itemtitlenext);
+                               break;
+                       case 'raw':
+                               echo $itemtitlenext;
+                               break;
+                       case 'attribute':
+                       default:
+                               echo Entity::hsc($itemtitlenext);
+                               break;
+               }
+               return;
+       }
+       
+       /**
+        * Actions::parse_nextlink()
+        * Parse skinvar nextlink
+        * 
+        * @param       string  $linktext       text for content of anchor element
+        * @param       integer $amount         the amount of items in a display
+        * @param       integer $recount        increment from this value
+        * @return      void
+        */
+       public function parse_nextlink($linktext = '', $amount = 10, $recount = '')
+       {
+               global $itemidnext, $archivenext, $startpos;
+               if ( $this->skintype == 'item' )
+               {
+                       $this->itemlink($itemidnext, $linktext);
+               }
+               else if ( $this->skintype == 'search' || $this->skintype == 'index' )
+               {
+                       $this->searchlink($amount, $startpos, 'next', $linktext, $recount);
+               }
+               else
+               {
+                       $this->archivelink($archivenext, $linktext);
+               }
+               return;
+       }
+
+       /**
+        * Actions::parse_nucleusbutton()
+        * Parse skinvar nucleusbutton
+        * 
+        * @param       string  $imgurl URL  for image
+        * @param       integer $imgwidth       width of image
+        * @param       integer $imgheidht      height of image
+        */
+       public function parse_nucleusbutton($imgurl = '', $imgwidth = '85', $imgheight = '31')
+       {
+               global $CONF;
+               if ( $imgurl == '' )
+               {
+                       $imgurl = $CONF['AdminURL'] . 'nucleus.gif';
+               }
+               else if ( Parser::getProperty('IncludeMode') == 'skindir' )
+               {
+                       // when skindit IncludeMode is used: start from skindir
+                       $imgurl = $CONF['SkinsURL'] . Parser::getProperty('IncludePrefix') . $imgurl;
+               }
+               
+               $this->formdata = array(
+                       'imgurl' => $imgurl,
+                       'imgwidth' => $imgwidth,
+                       'imgheight' => $imgheight,
+               );
+               $this->doForm('nucleusbutton');
+               return;
+       }
+       
+       /**
+        * Actions::parse_otherarchive()
+        * Parse skinvar otherarchive
+        * 
+        * @param       string  $blogname       name of weblog
+        * @param       string  $template       name of template
+        * @param       string  $category       name of category
+        * @return      void
+        */     
+       public function parse_otherarchive($blogname, $template, $category = '')
+       {
+               global $archive, $manager;
+               sscanf($archive,'%d-%d-%d',$y,$m,$d);
+               $b =& $manager->getBlog(getBlogIDFromName($blogname));
+               $this->setBlogCategory($b, $category);
+               $this->preBlogContent('otherachive',$b);
+               $b->showArchive($template, $y, $m, $d);
+               $this->postBlogContent('otherachive',$b);
+               return;
+       }
+       
+       /**
+        * Actions::parse_otherarchivedaylist()
+        * Parse skinvar otherarchivedaylist
+        * 
+        * @param       string  $blogname       name of weblog
+        * @param       string  $template       name of template
+        * @param       string  $category       name of category
+        * @param       integer $limit          the amount of items in a display
+        * @return      void
+        */
+       public function parse_otherarchivedaylist($blogname, $template, $category = 'all', $limit = 0)
+       {
+               global $manager;
+               if ( $category == 'all')
+               {
+                       $category = '';
+               }
+               $b =& $manager->getBlog(getBlogIDFromName($blogname));
+               $this->setBlogCategory($b, $category);
+               $this->preBlogContent('otherarchivelist',$b);
+               $b->showArchiveList($template, 'day', $limit);
+               $this->postBlogContent('otherarchivelist',$b);
+               return;
+       }
+       
+       /**
+        * Actions::parse_otherarchivelist()
+        * Parse skinvar otherarchivelist
+        * 
+        * @param       string  $blogname       name of weblog
+        * @param       string  $template       name of template
+        * @param       string  $category       name of category
+        * @param       integer $limit          the amount of items in a display
+        * @return      void
+        */
+       public function parse_otherarchivelist($blogname, $template, $category = 'all', $limit = 0)
+       {
+               global $manager;
+               if ( $category == 'all' )
+               {
+                       $category = '';
+               }
+               $b =& $manager->getBlog(getBlogIDFromName($blogname));
+               $this->setBlogCategory($b, $category);
+               $this->preBlogContent('otherarchivelist',$b);
+               $b->showArchiveList($template, 'month', $limit);
+               $this->postBlogContent('otherarchivelist',$b);
+               return;
+       }
+       
+       /**
+        * Actions::parse_otherarchiveyearlist()
+        * Parse skinvar otherarchiveyearlist
+        * 
+        * @param       string  $blogname       name of weblog
+        * @param       string  $template       name of template
+        * @param       string  $category       name of category
+        * @limit       integer $limit          the amount of items in a display
+        */
+       public function parse_otherarchiveyearlist($blogname, $template, $category = 'all', $limit = 0)
+       {
+               global $manager;
+               if ( $category == 'all' )
+               {
+                       $category = '';
+               }
+               $b =& $manager->getBlog(getBlogIDFromName($blogname));
+               $this->setBlogCategory($b, $category);
+               $this->preBlogContent('otherarchivelist',$b);
+               $b->showArchiveList($template, 'year', $limit);
+               $this->postBlogContent('otherarchivelist',$b);
+               return;
+       }
+       
+       /**
+        * Actions::parse_otherblog()
+        * Parse skinvar otherblog
+        * 
+        * @param       string  $blogname       name of weblog
+        * @param       string  $template       name of template
+        * @param       mixed   $amount         the amount of items, in case it includes the beginning
+        * @param       string  $category       name of category
+        * @return      void
+        */
+       public function parse_otherblog($blogname, $template, $amount = 10, $category = '')
+       {
+               global $manager;
+               
+               list($limit, $offset) = sscanf($amount, '%d(%d)');
+               
+               $b =& $manager->getBlog(getBlogIDFromName($blogname));
+               $this->setBlogCategory($b, $category);
+               $this->preBlogContent('otherblog',$b);
+               $this->amountfound = $b->readLog($template, $limit, $offset);
+               $this->postBlogContent('otherblog',$b);
+               return;
+       }
+       
+       /**
+        * Actions::parse_othersearchresults()
+        * Parse skinvar othersearchresults
+        * 
+        * @param       string  $blogname       name of weblog
+        * @param       string  $template       name of template
+        * @param       integer $maxresults     the amount of results
+        * @return      void
+        */
+       public function parse_othersearchresults($blogname, $template, $maxresults = 50)
+       {
+               global $query, $amount, $manager, $startpos;
+               $b =& $manager->getBlog(getBlogIDFromName($blogname));
+               // need this to select default category
+               $this->setBlogCategory($b, '');
+               $this->preBlogContent('othersearchresults',$b);
+               $b->search($query, $template, $amount, $maxresults, $startpos);
+               $this->postBlogContent('othersearchresults',$b);
+               return;
+       }
+       
+       /**
+        * Actions::parse_plugin()
+        * Executes a plugin skinvar
+        * extra parameters can be added
+        * 
+        * @param       string  $pluginName     name of plugin (without the NP_)
+        * @return      void
+        */
+       public function parse_plugin($pluginName)
+       {
+               global $manager;
+               
+               $plugin =& $manager->getPlugin('NP_' . $pluginName);
+               if ( !$plugin )
+               {
+                       return;
+               }
+               
+               // get arguments
+               $params = func_get_args();
+               
+               // remove plugin name
+               array_shift($params);
+               
+               // add skin type on front
+               array_unshift($params, $this->skintype);
+               
+               call_user_func_array(array(&$plugin,'doSkinVar'), $params);
+               return;
+       }
+       
+       /**
+        * Actions::parse_prevarchive()
+        * Parse skinvar prevarchive
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_prevarchive()
+       {
+               global $archiveprev;
+               echo $archiveprev;
+       }
+       
+       /**
+        * Actions::parse_preview()
+        * Parse skinvar preview
+        * 
+        * @param       string  $template       name of tempalte
+        * @return      void
+        */
+       public function parse_preview($template)
+       {
+               global $blog, $CONF, $manager;
+               
+               $template =& $manager->getTemplate($template);
+               
+               $row['body'] = '<span id="prevbody"></span>';
+               $row['title'] = '<span id="prevtitle"></span>';
+               $row['more'] = '<span id="prevmore"></span>';
+               $row['itemlink'] = '';
+               $row['itemid'] = 0; $row['blogid'] = $blog->getID();
+               
+               echo Template::fill($template['ITEM_HEADER'],$row);
+               echo Template::fill($template['ITEM'],$row);
+               echo Template::fill($template['ITEM_FOOTER'],$row);
+               return;
+       }
+       
+       /**
+        * Actions::parse_previtem()
+        * Parse skinvar previtem
+        * (include itemid of prev item)
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_previtem()
+       {
+               global $itemidprev;
+               if ( isset($itemidprev) )
+               {
+                       echo (integer) $itemidprev;
+               }
+               return;
+       }
+       
+       /**
+        * Actions::parse_previtemtitle()
+        * Parse skinvar previtemtitle
+        * (include itemtitle of prev item)
+        * 
+        * @param       String  $format string format
+        * @return      String  formatted string
+        */
+       public function parse_previtemtitle($format = '')
+       {
+               global $itemtitleprev;
+               
+               switch ( $format )
+               {
+                       case 'xml':
+                               echo Entity::hen($itemtitleprev);
+                               break;
+                       case 'raw':
+                               echo $itemtitleprev;
+                               break;
+                       case 'attribute':
+                       default:
+                               echo Entity::hsc($itemtitleprev);
+                               break;
+               }
+               return;
+       }
+       
+       /**
+        * Actions::parse_prevlink()
+        * Parse skinvar prevlink
+        * 
+        * @param       string  $linktext       text as a content of anchor element
+        * @param       integer the amount of links
+        * @return      void
+        */
+       public function parse_prevlink($linktext = '', $amount = 10)
+       {
+               global $itemidprev, $archiveprev, $startpos;
+               
+               if ( $this->skintype == 'item' )
+               {
+                       $this->itemlink($itemidprev, $linktext);
+               }
+               else if ( $this->skintype == 'search' || $this->skintype == 'index' )
+               {
+                       $this->searchlink($amount, $startpos, 'prev', $linktext);
+               }
+               else
+               {
+                       $this->archivelink($archiveprev, $linktext);
+               }
+               return;
+       }
+       
+       /**
+        * Actions::parse_query()
+        * Parse skinvar query
+        * (includes the search query)   
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_query()
+       {
+               global $query;
+               echo Entity::hsc($query);
+               return;
+       }
+       
+       /**
+        * Actions::parse_referer()
+        * Parse skinvar referer
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_referer()
+       {
+               echo Entity::hsc(serverVar('HTTP_REFERER'));
+               return;
+       }
+       
+       /**
+        * Actions::parse_searchform()
+        * Parse skinvar searchform
+        * 
+        * @param       string  $blogname       name of weblog
+        * @return      void
+        */
+       public function parse_searchform($blogname = '')
+       {
+               global $CONF, $manager, $maxresults;
+               if ( $blogname )
+               {
+                       $blog =& $manager->getBlog(getBlogIDFromName($blogname));
+               }
+               else
+               {
+                       global $blog;
+               }
+               // use default blog when no blog is selected
+               $this->formdata = array(
+                       'id'    => $blog?$blog->getID():$CONF['DefaultBlog'],
+                       'query' => Entity::hsc(getVar('query')),
+               );
+               $this->doForm('searchform');
+               return;
+       }
+       
+       /**
+        * Actions::parse_searchresults()
+        * Parse skinvar searchresults
+        * 
+        * @param       string  $template       name of tempalte
+        * @param       integer $maxresults     searched items in a display
+        * @return      void;
+        */
+       public function parse_searchresults($template, $maxresults = 50 )
+       {
+               global $blog, $query, $amount, $startpos;
+               
+               $this->setBlogCategory($blog, '');      // need this to select default category
+               $this->preBlogContent('searchresults',$blog);
+               $this->amountfound = $blog->search($query, $template, $amount, $maxresults, $startpos);
+               $this->postBlogContent('searchresults',$blog);
+               return;
+       }
+       
+       /**
+        * Actions::parse_self()
+        * Parse skinvar self
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_self()
+       {
+               global $CONF;
+               echo $CONF['Self'];
+               return;
+       }
+       
+       /**
+        * Actions::parse_sitevar()
+        * Parse skinvar sitevar
+        * (include a sitevar)
+        * 
+        * @param       string  $which
+        * @return      void
+        */
+       public function parse_sitevar($which)
+       {
+               global $CONF;
+               switch ( $which )
+               {
+                       case 'url':
+                               echo $CONF['IndexURL'];
+                               break;
+                       case 'name':
+                               echo $CONF['SiteName'];
+                               break;
+                       case 'admin':
+                               echo $CONF['AdminEmail'];
+                               break;
+                       case 'adminurl':
+                               echo $CONF['AdminURL'];
+               }
+               return;
+       }
+       
+       /**
+        * Actions::parse_skinname()
+        * Parse skinname
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_skinname()
+       {
+               echo $this->parser->skin->getName();
+               return;
+       }
+       
+       /**
+        * Actions::parse_skintype()
+        * Parse skintype (experimental)
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_skintype()
+       {
+               echo $this->skintype;
+               return;
+       }
+       
+       /**
+        * Actions::parse_ticket()
+        * Parse ticket
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_ticket()
+       {
+               global $manager;
+               $manager->addTicketHidden();
+               return;
+       }
+
+       /**
+        * Actions::parse_todaylink()
+        * Parse skinvar todaylink
+        * A link to the today page (depending on selected blog, etc...)
+        *
+        * @param       string  $linktext       text for link
+        * @return      void
+        */
+       public function parse_todaylink($linktext = '')
+       {
+               global $blog, $CONF;
+               if ( $blog )
+               {
+                       echo $this->link(Link::create_blogid_link($blog->getID(),$this->linkparams), $linktext);
+               }
+               else
+               {
+                       echo $this->link($CONF['SiteUrl'], $linktext);
+               }
+               return;
+       }
+       
+       /**
+        * Parse vars
+        * When commentform is not used, to include a hidden field with itemid   
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_vars()
+       {
+               global $itemid;
+               echo '<input type="hidden" name="itemid" value="'.$itemid.'" />' . "\n";
+               return;
+       }
+
+       /**
+        * Actions::parse_version()
+        * Parse skinvar version
+        * (include nucleus versionnumber)       
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_version()
+       {
+               global $nucleus;
+               echo 'Nucleus CMS ' . $nucleus['version'];
+               return;
+       }
+       
+       /**
+        * Actions::parse_sticky()
+        * Parse skinvar sticky
+        * 
+        * @param       integer $itemnumber     id of item
+        * @param       string  $template       name of template
+        * @return      void
+        */
+       public function parse_sticky($itemid = 0, $template = '')
+       {
+               global $manager;
+               
+               $itemid = (integer) $itemid;
+               $itemarray = array($itemid);
+               
+               $item =& $manager->getItem($post['itemid'], 1, 1);
+               $blog =& $manager->getBlog($item['blogid']);
+               
+               $this->preBlogContent('sticky', $blog);
+               $this->amountfound = $blog->readLogFromList($itemarray, $template);
+               $this->postBlogContent('sticky', $blog);
+               return;
+       }
+}