OSDN Git Service

「メンバーの編集(editmembersettings)」画面でスキン変数<%pluginextras%>がパースされていなかった不具合を修正
[nucleus-jp/nucleus-next.git] / nucleus / libs / AdminActions.php
index 30d14eb..15e62ad 100644 (file)
@@ -1,9 +1,19 @@
 <?php
-if ( !class_exists('BaseActions') )
-{
-       include $DIR_LIBS . 'BaseActions.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)
+ */
+/**
+ * @license http://nucleuscms.org/license.txt GNU General Public License
+ * @copyright Copyright (C) 2002-2012 The Nucleus Group
+ * @version $Id: AdminActions.php 1661 2012-02-12 11:55:39Z sakamocchi $
+ */
 
 class AdminActions extends BaseActions
 {
@@ -37,10 +47,10 @@ class AdminActions extends BaseActions
        );
        
        /**
-        * AdminActions::$skin_type_friendly_names
+        * AdminActions::$normal_skin_types
         * friendly name for wrapped page types
         */
-       static private $default_skin_types = array(
+       static private $normal_skin_types = array(
                'actionlog'                             => _ADM_SKPRT_ACTIONLOG,
                'activate'                              => _ADM_SKPRT_ACTIVATE,
                'activatesetpwd'                => _ADM_SKPRT_ACTIVATESETPWD,
@@ -82,22 +92,20 @@ class AdminActions extends BaseActions
                'commentedit'                   => _ADM_SKPRT_COMMENTEDIT,
                'createitem'                    => _ADM_SKPRT_CREATEITEM,
                'createnewlog'                  => _ADM_SKPRT_CREATENEWLOG,
-               'createaccountinput'    => _ADM_SKPRT_CREATEACCOUNTINPUT,                       /* not yet */
-               'createaccountsuccess'  => _ADM_SKPRT_CREATEACCOUNTSUCCESS,                     /* not yet */
-               'createaccountdisable'  => _ADM_SKPRT_CREATEACCOUNTDISALLOWED,          /* not yet */
+               'createaccountinput'    => _ADM_SKPRT_CREATEACCOUNTINPUT,
+               'createaccountsuccess'  => _ADM_SKPRT_CREATEACCOUNTSUCCESS,
+               'createaccountdisable'  => _ADM_SKPRT_CREATEACCOUNTDISALLOWED,
                'deleteblog'                    => _ADM_SKPRT_DELETEBLOG,
                'editmembersettings'    => _ADM_SKPRT_EDITMEMBERSETTINGS,
-               'forgotpassword'                => _ADM_SKPRT_FORGOTPASSWORD,                           /* not yet */
+               'forgotpassword'                => _ADM_SKPRT_FORGOTPASSWORD,
                'itemcommentlist'               => _ADM_SKPRT_ITEMCOMMENTLIST,
                'itemdelete'                    => _ADM_SKPRT_ITEMDELETE,
                'itemedit'                              => _ADM_SKPRT_ITEMEDIT,
                'itemlist'                              => _ADM_SKPRT_ITEMLIST,
                'itemmove'                              => _ADM_SKPRT_ITEMMOVE,
-               'login'                                 => FALSE,       //missing
                'manage'                                => _ADM_SKPRT_MANAGE,
                'manageteam'                    => _ADM_SKPRT_MANAGETEAM,
                'memberdelete'                  => _ADM_SKPRT_MEMBERDELETE,
-               'memberedit'                    => FALSE,       //missing
                'overview'                              => _ADM_SKPRT_OVERVIEW,
                'pagefoot'                              => _ADM_SKPRT_PAGEFOOT,
                'pagehead'                              => _ADM_SKPRT_PAGEHEAD,
@@ -120,31 +128,19 @@ class AdminActions extends BaseActions
                'templatedelete'                => _ADM_SKPRT_TEMPLATEDELETE,
                'templateedit'                  => _ADM_SKPRT_TEMPLATEEDIT,
                'templateoverview'              => _ADM_SKPRT_TEMPLATEOVERVIEW,
-               'usermanagement'                => _ADM_SKPRT_USERMANAGEMENT,
+               'usermanagement'                => _ADM_SKPRT_USERMANAGEMENT
        );
        
        /**
-        * AdminActions::getAvailableSkinTypes()
-        *
-        * @static
-        * @param       void
-        * @return      array   list of friendly names for page actions
-        */
-       static public function getAvailableSkinTypes()
-       {
-               return self::$default_skin_types;
-       }
-       
-       /**
-        * AdminActions::getDefaultTypes()
+        * AdminActions::getNormalSkinTypes()
         *
         * @static
         * @param       void
         * @return      array   list of friendly names for page actions
         */
-       static public function getDefaultTypes()
+       static public function getNormalSkinTypes()
        {
-               return self::$default_skin_types;
+               return self::$normal_skin_types;
        }
        
        /**
@@ -430,17 +426,17 @@ class AdminActions extends BaseActions
                                'contents',
                                'pluginextras',
                                'eventformextra',
-                               );\r
+                               );
                                break;
                        case 'createaccountsuccess':
-                               $extra_actions = array(\r
+                               $extra_actions = array(
                                'contents',
-                               );\r
+                               );
                                break;
                        case 'createaccountdisable':
                                $extra_actions = array(
                                /* nothing special */
-                               );\r
+                               );
                                break;
                        case 'createitem':
                                $extra_actions = array(
@@ -474,6 +470,7 @@ class AdminActions extends BaseActions
                                'pluginoptions',
                                'defadminskinselect',
                                'defbookmarkletselect',
+                               'pluginextras',
                                );
                                break;
                        case 'forgotpassword':
@@ -704,7 +701,8 @@ class AdminActions extends BaseActions
                if ( $resource->rowCount() > 0 )
                {
                        $template['content'] = 'actionlist';
-                       $this->parser->parse(showlist($resource, 'table', $template, $template_name));
+                       $action_list = showlist($resource, 'table', $template, $template_name);
+                       $this->parser->parse($action_list);
                }
                else
                {
@@ -858,7 +856,8 @@ class AdminActions extends BaseActions
                if ( $resource->rowCount() > 0 )
                {
                        $template['content'] = 'banlist';
-                       $this->parser-parse(showlist($resource, 'table', $template, $template_name));
+                       $ban_list = showlist($resource, 'table', $template, $template_name);
+                       $this->parser-parse($ban_list);
                }
                else
                {
@@ -1085,7 +1084,7 @@ class AdminActions extends BaseActions
                $type = strtolower(trim(requestVar('type')));
                $skinid = intRequestVar('skinid');
                
-               if ( !preg_match('#^admin#', $this->skintype) )
+               if ( !in_array($this->skintype, Admin::$adminskin_actions) )
                {
                        $skin =& $manager->getSkin($skinid);
                        $tag = 'skinvar';
@@ -1187,24 +1186,23 @@ class AdminActions extends BaseActions
         */
        public function parse_defadminskinselect($template_name)
        {
-               global $CONF, $action;
-
+               global $CONF, $action, $manager;
+               
                if ( $action == 'editmembersettings' )
                {
                        global $member;
-                       $default = ($member->adminskin > 0) ? $member->adminskin : $CONF['AdminSkin'];
+                       $default = $member->adminskin;
                }
                elseif ( $action == 'memberedit' )
                {
-                       global $manager;
                        $mem = $manager->getMember(intRequestVar('memberid'));
-                       $default = ($mem->adminskin > 0) ? $mem->adminskin : $CONF['AdminSkin'];
+                       $default = $mem->adminskin;
                }
                else
                {
                        $default = $CONF['AdminSkin'];
                }
-
+               
                $query  = "SELECT sdname as text, sdnumber as value FROM %s WHERE sdname LIKE 'admin/%%'";
                $query = sprintf($query, sql_table('skin_desc'));
                $template = array(
@@ -1212,7 +1210,14 @@ class AdminActions extends BaseActions
                                'tabindex'      => 10080,
                                'selected'      => $default
                );
-               $this->parser->parse(showlist($query, 'select', $template, $template_name));
+               
+               if ( $this->skintype != 'settingsedit' )
+               {
+                       $template['extra'] = Entity::hsc(_MEMBERS_USESITELANG);
+               }
+               
+               $skin_select = showlist($query, 'select', $template, $template_name);
+               $this->parser->parse($skin_select);
                return;
        }
        
@@ -1225,18 +1230,17 @@ class AdminActions extends BaseActions
         */
        public function parse_defbookmarkletselect($template_name)
        {
-               global $CONF, $action;
+               global $CONF, $action, $manager;
                
                if ( $action == 'editmembersettings' )
                {
                        global $member;
-                       $default = ($member->bookmarklet > 0) ? $member->bookmarklet : $CONF['BookmarkletSkin'];
+                       $default = $member->bookmarklet;
                }
                elseif ( $action == 'memberedit' )
                {
-                       global $manager;
                        $mem = $manager->getMember(intRequestVar('memberid'));
-                       $default = ($mem->bookmarklet > 0) ? $mem->bookmarklet : $CONF['BookmarkletSkin'];
+                       $default = $mem->bookmarklet;
                }
                else
                {
@@ -1251,7 +1255,14 @@ class AdminActions extends BaseActions
                                'tabindex'      => 10085,
                                'selected'      => $default
                );
-               $this->parser->parse(showlist($query, 'select', $template, $template_name));
+               
+               if ( $this->skintype != 'settingsedit' )
+               {
+                       $template['extra'] = Entity::hsc(_MEMBERS_USESITELANG);
+               }
+               
+               $bookmarklet_select = showlist($query, 'select', $template, $template_name);
+               $this->parser->parse($bookmarklet_select);
                return;
        }
        
@@ -1363,7 +1374,8 @@ class AdminActions extends BaseActions
                {
                        $template['content']  = 'categorylist';
                        $template['tabindex'] = 200;
-                       $this->parser->parse(listplug_batchlist('category', $resource, 'table', $template));
+                       $category_list = listplug_batchlist('category', $resource, 'table', $template, $template_name);
+                       $this->parser->parse($category_list);
                }
                else
                {
@@ -1505,8 +1517,9 @@ class AdminActions extends BaseActions
                {
                        $template['content']  = 'teamlist';
                        $template['tabindex'] = 10;
-                               
-                       $this->parser->parse(listplug_batchlist('team', $resource, 'table', $template));
+                       
+                       $team_list = listplug_batchlist('team', $resource, 'table', $template, $template_name);
+                       $this->parser->parse($team_list);
                }
                else
                {
@@ -1708,10 +1721,10 @@ class AdminActions extends BaseActions
         * AdminActions::parse_commentnavlist()
         * Parse skinvar commentnavlist
         *
-        * @param       void
+        * @param       string  $template_name  name of template to use
         * @return      void
         */
-       public function parse_commentnavlist()
+       public function parse_commentnavlist($template_name = '')
        {
                global $CONF, $manager, $member;
                
@@ -1791,7 +1804,8 @@ class AdminActions extends BaseActions
                                
                        $template['content'] = 'commentlist';
                                
-                       $this->parser->parse(listplug_navlist('comment', $resource, 'table', $template));
+                       $navlist = listplug_navlist('comment', $resource, 'table', $template, $template_name);
+                       $this->parser->parse($navlist);
                }
                else
                {
@@ -1938,7 +1952,7 @@ class AdminActions extends BaseActions
        {
                global $CONF, $manager;
                
-               if ( !preg_match('#^admin#', $this->skintype) )
+               if ( !in_array($this->skintype, Admin::$adminskin_actions) )
                {
                        $skin =& $manager->getSkin($CONF['BaseSkin']);
                        /* TODO: removeaction? */
@@ -1951,7 +1965,7 @@ class AdminActions extends BaseActions
                        /* TODO: removeaction? */
                }
                
-               $temporary = $skin->getDefaultTypes();
+               $temporary = $skin->getNormalTypes();
                $normal_skintype = array();
                foreach ( $temporary as $type => $label )
                {
@@ -1962,9 +1976,10 @@ class AdminActions extends BaseActions
                }
                
                $template['tabindex'] = 10;
-               $template['skinid'] = $skin->getID();
+               $template['skinid'] = intRequestVar('skinid');
                $template['skinname'] = $skin->getName();
-               $this->parser->parse(showlist($normal_skintype, 'list_normalskinlist', $template, $template_name));
+               $skin_list = showlist($normal_skintype, 'list_normalskinlist', $template, $template_name);
+               $this->parser->parse($skin_list);
                
                return;
        }
@@ -1986,7 +2001,8 @@ class AdminActions extends BaseActions
                $template['name'] = 'DefaultBlog';
                $template['selected'] = $CONF['DefaultBlog'];
                $template['tabindex'] = 10;
-               $this->parser->parse(showlist($query, 'select', $template, $template_name));
+               $blog_select = showlist($query, 'select', $template, $template_name);
+               $this->parser->parse($blog_select);
                
                return;
        }
@@ -2012,7 +2028,8 @@ class AdminActions extends BaseActions
                $template['selected'] = $blog->getDefaultCategory();
                $template['tabindex'] = 110;
                
-               $this->parser->parse(showlist($query, 'select', $template, $template_name));
+               $category_select = showlist($query, 'select', $template, $template_name);
+               $this->parser->parse($category_select);
                
                return;
        }
@@ -2029,7 +2046,7 @@ class AdminActions extends BaseActions
        {
                global $CONF, $manager, $member;
                
-               if ( !preg_match('#^admin#', $this->skintype) )
+               if ( !in_array($this->skintype, Admin::$adminskin_actions) )
                {
                        $blogid = intRequestVar('blogid');
                        if ( !$blogid )
@@ -2064,7 +2081,8 @@ class AdminActions extends BaseActions
                $query = sprintf($query, sql_table('skin_desc'));
                $template['tabindex'] = 50;
                
-               $this->parser->parse(showlist($query, 'select', $template, $template_name));
+               $skin_select = showlist($query, 'select', $template, $template_name);
+               $this->parser->parse($skin_select);
                
                return;
        }
@@ -2240,8 +2258,9 @@ class AdminActions extends BaseActions
                {
                        $template['content'] = 'memberlist';
                        $template['tabindex'] = 10;
-                               
-                       $this->parser->parse(listplug_batchlist('member', $resource, 'table', $template));
+                       
+                       $member_list = listplug_batchlist('member', $resource, 'table', $template, $template_name);
+                       $this->parser->parse($member_list);
                }
                else
                {
@@ -2398,7 +2417,8 @@ class AdminActions extends BaseActions
                if ( sizeof($aOptions) > 0 )
                {
                        $template['content'] = 'plugoptionlist';
-                       $this->parser->parse(showlist($aOptions, 'table', $template, $template_name));
+                       $option_list = showlist($aOptions, 'table', $template, $template_name);
+                       $this->parser->parse($option_list);
                }
                else
                {
@@ -2420,7 +2440,7 @@ class AdminActions extends BaseActions
                
                $skinid = intRequestVar('skinid');
                
-               if ( !preg_match('#^admin#', $this->skintype) )
+               if ( !in_array($this->skintype, Admin::$adminskin_actions) )
                {
                        $skin =& $manager->getSKIN($skinid);
                }
@@ -2472,7 +2492,7 @@ class AdminActions extends BaseActions
                {
                        $skinid = intRequestVar('skinid');
                        
-                       if ( !preg_match('#^admin#', $this->skintype) )
+                       if ( !in_array($this->skintype, Admin::$adminskin_actions) )
                        {
                                $skin =& $manager->getSkin($skinid);
                        }
@@ -2481,7 +2501,7 @@ class AdminActions extends BaseActions
                                $skin =& $manager->getSkin($skinid, 'AdminActions');
                        }
                        
-                       $types = $skin->getDefaultTypes();
+                       $types = $skin->getNormalTypes();
                }
                
                $type = strtolower(trim(requestVar('type')));
@@ -2602,13 +2622,15 @@ class AdminActions extends BaseActions
                        case 'extratemplate':
                                $tabidx = 600;
                                $pluginfields = array();
-                               if ( !preg_match('#^admin/#', $this->skintype) )
+                               if ( !in_array($this->skintype, Admin::$adminskin_actions) )
                                {
-                                       $manager->notify('TemplateExtraFields', array('fields' => &$pluginfields));
+                                       $data = array('fields' => &$pluginfields);
+                                       $manager->notify('TemplateExtraFields', $data);
                                }
                                else
                                {
-                                       $manager->notify('AdminTemplateExtraFields', array('fields' => &$pluginfields));
+                                       $data = array('fields' => &$pluginfields);
+                                       $manager->notify('AdminTemplateExtraFields', $data);
                                }
                                
                                foreach ( $pluginfields as $ptkey => $ptvalue )
@@ -2622,9 +2644,9 @@ class AdminActions extends BaseActions
                                        /* extra plugin field */
                                        if ( !array_key_exists('TEMPLATE_EDIT_EXPLUGNAME', $tmplt) || empty($tmplt['TEMPLATE_EDIT_EXPLUGNAME']) )
                                        {
-                                               $base = "</tr>\n"
-                                                     . "<tr>\n"
-                                                     . "<th colspan=\"2\"><%explugtplname%></th>\n";
+                                               $base = "<tr>\n"
+                                                     . "<th colspan=\"2\"><%explugtplname%></th>\n"
+                                                     . "</tr>";
                                        }
                                        else
                                        {
@@ -2645,7 +2667,8 @@ class AdminActions extends BaseActions
                                                {
                                                        $content = $template[$ptname];
                                                }
-                                               $this->parser->parse(listplug_templateEditRow($content, $ptdesc, $ptname, $help, $tabidx++, $big, $template_name));
+                                               $tempate_textarea = listplug_templateEditRow($content, $ptdesc, $ptname, $help, $tabidx++, $big, $template_name);
+                                               $this->parser->parse($tempate_textarea);
                                                continue;
                                        }
                                }
@@ -2662,7 +2685,8 @@ class AdminActions extends BaseActions
                                {
                                        $content = $template[$typename];
                                }
-                               $this->parser->parse(listplug_templateEditRow($content, $typedesc, $typename, $help, $tabindex, $big, $template_name));
+                               $tempate_textarea = listplug_templateEditRow($content, $typedesc, $typename, $help, $tabindex, $big, $template_name);
+                               $this->parser->parse($tempate_textarea);
                                break;
                }
                
@@ -2721,15 +2745,14 @@ class AdminActions extends BaseActions
        {
                global $manager;
                
-               $extrahead = Admin::getAdminextrahead();
-               
                $data = array(
-                       'extrahead'     => &$extrahead,
-                       'action'        => Admin::getAdminAction()
+                       'extrahead'     => &Admin::$extrahead,
+                       'action'        => Admin::$action
                );
                
                $manager->notify('AdminPrePageHead', $data);
-               echo $extrahead;
+               
+               $this->parser->parse(Admin::$extrahead);
                return;
        }
        
@@ -3083,29 +3106,29 @@ class AdminActions extends BaseActions
                switch ( $type )
                {
                        case 'info':
-                               echo Entity::hsc(requestVar('skininfo'));
+                               echo Entity::hsc(Admin::$contents['skininfo']);
                                break;
                        case 'snames':
-                               $dataArr = requestArray('skinnames');
+                               $dataArr = Admin::$contents['skinnames'];
                                echo implode(' <em>' . _AND . '</em> ', $dataArr);
                                break;
                        case 'tnames':
-                               $dataArr = requestArray('tpltnames');
+                               $dataArr = Admin::$contents['tpltnames'];
                                echo implode(' <em>' . _AND . '</em> ', $dataArr);
                                break;
                        case 'sclashes':
-                               $dataArr = requestArray('skinclashes');
+                               $dataArr = Admin::$contents['skinclashes'];
                                echo implode(' <em>' . _AND . '</em> ', $dataArr);
                                break;
                        case 'tclashes':
-                               $dataArr = requestArray('tpltclashes');
+                               $dataArr = Admin::$contents['tpltclashes'];
                                echo implode(' <em>' . _AND . '</em> ', $dataArr);
                                break;
                        case 'skinfile':
-                               echo Entity::hsc(requestVar('skinfile'));
+                               echo Entity::hsc(Admin::$contents['skinfile']);
                                break;
                        case 'mode':
-                               echo Entity::hsc(requestVar('mode'));
+                               echo Entity::hsc(Admin::$contents['mode']);
                                break;
                }
                return;
@@ -3149,7 +3172,8 @@ class AdminActions extends BaseActions
         */
        public function parse_inputyesno($name, $checkedval, $tabindex = 0, $value1 = 1, $value2 = 0, $yesval = _YES, $noval = _NO, $isAdmin = 0, $template_name = '')
        {
-               $this->parser->parse(listplug_input_yesno($name, $checkedval, $tabindex, $value1, $value2, $yesval, $noval, $isAdmin, $template_name));
+               $input_yesno = listplug_input_yesno($name, $checkedval, $tabindex, $value1, $value2, $yesval, $noval, $isAdmin, $template_name);
+               $this->parser->parse($input_yesno);
                return;
        }
        
@@ -3159,14 +3183,13 @@ class AdminActions extends BaseActions
         */
        public function parse_insertpluginfo($type)
        {
-               $option = Admin::getAdminaOption();
                switch ( $type )
                {
                        case 'id':
-                               return $option['pid'];
+                               return Admin::$aOptions['pid'];
                                break;
                        case 'name':
-                               return Entity::hsc($option['pfile']);
+                               return Entity::hsc(Admin::$aOptions['pfile']);
                                break;
                }
                return;
@@ -3181,13 +3204,11 @@ class AdminActions extends BaseActions
         */
        public function parse_insplugoptcontent()
        {
-               $option = Admin::getAdminaOption();
-               
-               $meta = NucleusPlugin::getOptionMeta($option['typeinfo']);
+               $meta = NucleusPlugin::getOptionMeta(Admin::$aOptions['typeinfo']);
                if ( array_key_exists('access', $meta) && $meta['access'] != 'hidden' )
                {
                        echo '<tr>';
-                       listplug_plugOptionRow($option);
+                       listplug_plugOptionRow(Admin::$aOptions);
                        echo '</tr>';
                }
                return;
@@ -3223,10 +3244,10 @@ class AdminActions extends BaseActions
         * AdminActions::parse_itemnavlist()
         * Parse skinvar itemnavlist
         *
-        * @param       void
+        * @param       string  $template_name  name of template to use
         * @return      void
         */
-       public function parse_itemnavlist($template_name)
+       public function parse_itemnavlist($template_name = '')
        {
                global $CONF, $manager, $member;
                
@@ -3317,7 +3338,8 @@ class AdminActions extends BaseActions
                                
                        $template['content'] = 'itemlist';
                                
-                       $this->parser->parse(listplug_navlist('item', $query, 'table', $template));
+                       $navlist = listplug_navlist('item', $query, 'table', $template, $template_name);
+                       $this->parser->parse($navlist);
                }
                else
                {
@@ -3339,34 +3361,7 @@ class AdminActions extends BaseActions
        {
                global $manager;
                
-               $item = false;
-               $itemid = intRequestVar('itemid');
-               $item =& $manager->getItem($itemid, 1, 1);
-               
-               if ( $item )
-               {
-                       $blog =& $manager->getBlog($item['blogid']);
-                       
-                       if ( $blog->convertBreaks() && requestVar('action') == 'itemedit' )
-                       {
-                               $item['body'] = removeBreaks($item['body']);
-                               $item['more'] = removeBreaks($item['more']);
-                       }
-               }
-               
-               $contents = array();
-               if ( requestVar('action') == 'itemedit' )
-               {
-                       $contents = $item;
-               }
-               elseif ( requestVar('action') == 'createitem' )
-               {
-                       $data = array(
-                               'contents'      => &$contents,
-                               'blog'          => &$this->blog
-                       );
-                       $manager->notify('PreAddItemForm', $data);
-               }
+               $contents = Admin::$contents;
                $itemtime = getdate($contents['timestamp']);
                echo $itemtime[$key];
                return;
@@ -3407,15 +3402,14 @@ class AdminActions extends BaseActions
         */
        public function parse_localeselectoptions()
        {
-               global $manager;
+               global $CONF, $member;
                
                $locales = i18n::get_available_locale_list();
                
-               $memid = intRequestVar('memberid');
-               if ( $memid )
+               /* default option */
+               if ( $this->skintype == 'editmembersettings' )
                {
-                       $mem =& $manager->getMember($memid);
-                       if ( !$mem->getLocale() || !in_array($mem->getLocale(), $locales) )
+                       if ( !$member->getLocale() )
                        {
                                echo "<option value=\"\" selected=\"selected\">" . Entity::hsc(_MEMBERS_USESITELANG) . "</option>\n";
                        }
@@ -3426,43 +3420,56 @@ class AdminActions extends BaseActions
                }
                else
                {
-                       if ( !i18n::get_current_locale() || !in_array(i18n::get_current_locale(), $locales) )
+                       if ( $CONF['Locale'] == 'en_Latn_US' )
                        {
-                               echo "<option value=\"\" selected=\"selected\">en_Latn_US</option>\n";
+                               echo "<option value=\"\" selected=\"selected\">" . Entity::hsc(_LOCALE_EN_LATN_US) . "</option>\n";
                        }
                        else
                        {
-                               echo "<option value=\"\">en_Latn_US</option>\n";
+                               echo "<option value=\"\">" . Entity::hsc(_LOCALE_EN_LATN_US) . "</option>\n";
                        }
                }
+               
+               /* optional options */
                foreach ( $locales as $locale )
                {
-                       if ( $locale == 'en_Latn_US' )
-                       {
-                               continue;
-                       }
-                       else if ($memid)
+                       if ( $this->skintype == 'editmembersettings' )
                        {
-                               if ( $locale == $mem->getLocale() )
+                               if ( $locale != $member->getLocale() )
                                {
-                                       echo "<option value=\"{$locale}\" selected=\"selected\">{$locale}</option>\n";
+                                       echo "<option value=\"{$locale}\">";
                                }
                                else
                                {
-                                       echo "<option value=\"{$locale}\">{$locale}</option>\n";
+                                       echo "<option value=\"{$locale}\" selected=\"selected\">";
                                }
                        }
                        else
                        {
-                               if ( $locale == i18n::get_current_locale() )
+                               if ( $locale == 'en_Latn_US' )
                                {
-                                       echo "<option value=\"{$locale}\" selected=\"selected\">{$locale}</option>\n";
+                                       /* already output */
+                                       continue;
+                               }
+                               else if ( $locale != $CONF['Locale'] )
+                               {
+                                       echo "<option value=\"{$locale}\">";
                                }
                                else
                                {
-                                       echo "<option value=\"{$locale}\">{$locale}</option>\n";
+                                       echo "<option value=\"{$locale}\" selected=\"selected\">";
                                }
                        }
+                       $label = '_LOCALE_' . strtoupper($locale);
+                       if ( !defined($label) )
+                       {
+                               echo $locale;
+                       }
+                       else
+                       {
+                               echo constant($label);
+                       }
+                       echo "</option>\n";
                }
                return;
        }
@@ -3476,7 +3483,7 @@ class AdminActions extends BaseActions
         */
        public function parse_listplugplugoptionrow($template_name = '')
        {
-               echo listplug_plugOptionRow(Admin::getAdminaOption(), $template_name);
+               echo listplug_plugOptionRow(Admin::$aOptions, $template_name);
                return;
        }
        
@@ -3566,6 +3573,10 @@ class AdminActions extends BaseActions
                        echo '<br /><a style="color:red" href="http://nucleuscms.org/upgrade.php" title="' . _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TITLE . '">';
                        echo _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TEXT . $newestVersion . '</a>';
                }
+               else
+               {
+                       echo _ADMIN_SYSTEMOVERVIEW_VERSION_LATEST;
+               }
                return;
        }
        
@@ -3598,7 +3609,8 @@ class AdminActions extends BaseActions
                        'tabindex'      => 10000,
                        'selected'      => 0
                );
-               $this->parser->parse(showlist($query, 'select', $template, $template_name));
+               $member_select = showlist($query, 'select', $template, $template_name);
+               $this->parser->parse($member_select);
                return;
        }
        
@@ -3651,7 +3663,7 @@ class AdminActions extends BaseActions
         */
        public function parse_passrequestvars()
        {
-               $passvar   = Admin::getAdminpassvar();
+               $passvar   = Admin::$passvar;
                $oldaction = postVar('oldaction');
                
                if ( ($oldaction != 'logout')
@@ -3680,12 +3692,14 @@ class AdminActions extends BaseActions
                        case 'member':
                                $id  = intRequestVar('memberid');
                                $mem =& $manager->getMember($id);
-                               $manager->notify('MemberSettingsFormExtras', array('member' => &$mem));
+                               $data = array('member' => &$mem);
+                               $manager->notify('MemberSettingsFormExtras', $data);
                                break;
                        case 'blog':
                                $id  = intRequestVar('blogid');
                                $blg =& $manager->getBlog($id);
-                               $manager->notify('BlogSettingsFormExtras', array('member' => &$blg));
+                               $data = array('member' => &$blg);
+                               $manager->notify('BlogSettingsFormExtras', $data);
                                break;
                        case 'createaccount':
                                $data = array(
@@ -3698,7 +3712,8 @@ class AdminActions extends BaseActions
                                $manager->notify('RegistrationFormExtraFields', $data);
                                break;
                        default:
-                               $manager->notify('GeneralSettingsFormExtras', array());
+                       $data = array();
+                               $manager->notify('GeneralSettingsFormExtras', $data);
                                break;
                }
                return;
@@ -3753,7 +3768,8 @@ class AdminActions extends BaseActions
                $template['content']  = 'pluginlist';
                $template['tabindex'] = 10;
                
-               $this->parser->parse(showlist($query, 'table', $template, $template_name));
+               $plugin_list = showlist($query, 'table', $template, $template_name);
+               $this->parser->parse($plugin_list);
                
                return;
        }
@@ -3913,7 +3929,8 @@ class AdminActions extends BaseActions
                $template['shortenel']  = '';
                $template['javascript'] = 'onchange="return form.submit()"';
                
-               $this->parser->parse(showlist($query, 'select', $template, $template_name));
+               $selectlist = showlist($query, 'select', $template, $template_name);
+               $this->parser->parse($selectlist);
                
                return;
        }
@@ -3935,7 +3952,8 @@ class AdminActions extends BaseActions
                        $templates = & $manager->getTemplate($template_name);
                }
                $pluginExtras = array();
-               $manager->notify('QuickMenu', array('options' => &$pluginExtras));
+               $data = array('options' => &$pluginExtras);
+               $manager->notify('QuickMenu', $data);
                
                $template  = array();
                if ( count($pluginExtras) > 0 )
@@ -3976,7 +3994,8 @@ class AdminActions extends BaseActions
                                        'plugadmintooltip'      => Entity::hsc($aInfo['tooltip']),
                                        'plugadmintitle'        => Entity::hsc($aInfo['title']),
                                );
-                               $this->parser->parse(Template::fill($template['body'], $data));
+                               $body = Template::fill($template['body'], $data);
+                               $this->parser->parse($body);
                        }
                        $this->parser->parse($template['foot']);
                }
@@ -4031,8 +4050,8 @@ class AdminActions extends BaseActions
                {
                        include_libs('skinie.php');
                }
-
-               if ( !preg_match('#^admin#', $this->skintype) && $this->skintype != 'importAdmin' )
+               
+               if ( !in_array($this->skintype, Admin::$adminskin_actions) && $this->skintype != 'importAdmin' )
                {
                        $skindir = $DIR_SKINS;
                }
@@ -4044,8 +4063,15 @@ class AdminActions extends BaseActions
                $candidates = SkinImport::searchForCandidates($skindir);
                foreach ( $candidates as $skinname => $skinfile )
                {
-                       $skinfile = Entity::hsc($skinfile);
                        $skinname = Entity::hsc($skinname);
+                       if ( !in_array($this->skintype, Admin::$adminskin_actions) && $this->skintype != 'importAdmin' )
+                       {
+                               $skinfile = Entity::hsc($skinfile);
+                       }
+                       else
+                       {
+                               $skinfile = Entity::hsc("admin/$skinfile");
+                       }
                        echo "<option value=\"{$skinfile}\">{$skinname}</option>\n";
                }
        
@@ -4072,7 +4098,7 @@ class AdminActions extends BaseActions
                                $query = sprintf($query, sql_table('blog'));
                                break;
                        case 'template':
-                               if ( !preg_match('#^admin#', $this->skintype) )
+                               if ( !in_array($this->skintype, Admin::$adminskin_actions) )
                                {
                                        $query = "SELECT tdname as name, tddesc as description FROM %s WHERE tdname NOT LIKE 'admin/%%';";
                                }
@@ -4086,8 +4112,9 @@ class AdminActions extends BaseActions
                                $query = sprintf($query, sql_table('template_desc'));
                                break;
                }
-       
-               $this->parser->parse(showlist($query, 'table', $show, $template_name));
+               
+               $skin_list = showlist($query, 'table', $show, $template_name);
+               $this->parser->parse($skin_list);
                return;
        }
        
@@ -4110,13 +4137,13 @@ class AdminActions extends BaseActions
                }
                if ( !array_key_exists('SKINIE_EXPORT_LIST', $templates) || empty($templates['SKINIE_EXPORT_LIST']) )
                {
-                       $template = "<td>"
-                       . "<input type=\"checkbox\" name=\"<%typeid%>\" id=\"<%expid%>\" />\n"
-                       . "<label for=\"<%expid%>\"><%expname%></label>\n"
-                       . "</td>\n"
-                       . "<td><%expdesc%></td>\n"
-                       . "</tr>\n"
-                       . "<tr>\n";
+                       $template = "<tr>\n"
+                                 . "<td>"
+                                 . "<input type=\"checkbox\" name=\"<%typeid%>\" id=\"<%expid%>\" />\n"
+                                 . "<label for=\"<%expid%>\"><%expname%></label>\n"
+                                 . "</td>\n"
+                                 . "<td><%expdesc%></td>\n"
+                                 . "</tr>\n";
                }
                else
                {
@@ -4126,7 +4153,7 @@ class AdminActions extends BaseActions
                switch ( $type )
                {
                        case 'skin':
-                               if ( !preg_match('#^admin#', $this->skintype) )
+                               if ( !in_array($this->skintype, Admin::$adminskin_actions) )
                                {
                                        $res = DB::getResult('SELECT * FROM ' . sql_table('skin_desc'). " WHERE sdname NOT LIKE 'admin/%%';");
                                }
@@ -4146,7 +4173,7 @@ class AdminActions extends BaseActions
                                }
                                break;
                        case 'template':
-                               if ( !preg_match('#^admin#', $this->skintype) )
+                               if ( !in_array($this->skintype, Admin::$adminskin_actions) )
                                {
                                        $res = DB::getResult('SELECT * FROM '.sql_table('template_desc'). " WHERE tdname NOT LIKE 'admin/%%';");
                                }
@@ -4181,9 +4208,10 @@ class AdminActions extends BaseActions
                global $CONF;
                
                $template = array();
-               if ( !preg_match('#^admin#', $this->skintype) )
+               if ( !in_array($this->skintype, Admin::$adminskin_actions) )
                {
                        $query = "SELECT * FROM %s WHERE sdname NOT LIKE 'admin/%%' ORDER BY sdname;";
+                       $template['handler'] = 'Actions';
                        $template['editaction'] = 'skinedit';
                        $template['cloneaction'] = 'skinclone';
                        $template['deleteaction'] = 'skindelete';
@@ -4193,6 +4221,7 @@ class AdminActions extends BaseActions
                else
                {
                        $query = "SELECT * FROM %s WHERE sdname LIKE 'admin/%%' ORDER BY sdname;";
+                       $template['handler'] = 'AdminActions';
                        $template['editaction'] = 'adminskinedit';
                        $template['cloneaction'] = 'adminskinclone';
                        $template['deleteaction'] = 'adminskindelete';
@@ -4204,7 +4233,8 @@ class AdminActions extends BaseActions
                $template['tabindex'] = 10;
                $template['content'] = 'skinlist';
                
-               $this->parser->parse(showlist($query, 'table', $template, $template_name));
+               $skin_list = showlist($query, 'table', $template, $template_name);
+               $this->parser->parse($skin_list);
                
                return;
        }
@@ -4218,33 +4248,20 @@ class AdminActions extends BaseActions
         */
        public function parse_skintypehelp()
        {
-               $nowSkinType = strtolower(trim(requestVar('type')));
-               $pageAction  = strtolower(trim(requestVar('action')));
-               if ( preg_match('/^admin.*/', $pageAction) )
+               $surrent_skin_type = strtolower(trim(requestVar('type')));
+               $page_action  = strtolower(trim(requestVar('action')));
+               if ( in_array($page_action, Admin::$adminskin_actions) )
                {
-                       $regularType = self::$default_skin_types;
-                       unset($regularType['memberedit']);
-                       unset($regularType['login']);
-                       $regularType = array_keys($regularType);
+                       $normal_types = array_keys(self::$normal_skin_types);
                }
                else
                {
-                       /* TODO: use Skin class */
-                       $regularType = array(
-                               'index',
-                               'item',
-                               'archivelist',
-                               'archive',
-                               'search',
-                               'error',
-                               'member',
-                               'imagepopup'
-                       );
+                       $normal_types = array_keys(Actions::getNormalSkinTypes());
                }
                
-               if ( in_array($nowSkinType, $regularType) )
+               if ( in_array($surrent_skin_type, $normal_types) )
                {
-                       help('skinpart' . $nowSkinType);
+                       help('skinpart' . $surrent_skin_type);
                }
                else
                {
@@ -4268,7 +4285,7 @@ class AdminActions extends BaseActions
                
                $skinid = intRequestVar('skinid');
                
-               if ( !preg_match('#^admin#', $this->skintype) )
+               if ( !in_array($this->skintype, Admin::$adminskin_actions) )
                {
                        $skin =& $manager->getSkin($skinid);
                        $template['editaction'] = 'skinedittype';
@@ -4280,7 +4297,7 @@ class AdminActions extends BaseActions
                        $template['editaction'] = 'adminskinedittype';
                        $template['removeaction'] = 'adminskinremovetype';
                }
-               $normal_types = $skin->getDefaultTypes();
+               $normal_types = $skin->getNormalTypes();
                $available_types = $skin->getAvailableTypes();
                
                $special_skintypes = array();
@@ -4300,7 +4317,8 @@ class AdminActions extends BaseActions
                        $template['tabindex'] = 75;
                        $template['skinid'] = $skin->getID();
                        $template['skinname'] = $skin->getName();
-                       $this->parser->parse(showlist($special_skintypes, 'list_specialskinlist', $template, $template_name));
+                       $skin_list = showlist($special_skintypes, 'list_specialskinlist', $template, $template_name);
+                       $this->parser->parse($skin_list);
                }
                else
                {
@@ -4430,11 +4448,25 @@ class AdminActions extends BaseActions
                                }
                                break;
                        case 'modrewrite':
-                               ob_start();
-                               phpinfo(INFO_MODULES);
-                               $im = ob_get_contents();
-                               ob_end_clean();
-                               echo ( i18n::strpos($im, 'mod_rewrite') !== FALSE ) ? $enable : $disable;
+                               if ( function_exists('apache_get_modules') && in_array('mod_rewrite', apache_get_modules()) )
+                               {
+                                       echo $enable;
+                               }
+                               else
+                               {
+                                       ob_start();
+                                       phpinfo(INFO_MODULES);
+                                       $im = ob_get_contents();
+                                       ob_end_clean();
+                                       if ( i18n::strpos($im, 'mod_rewrite') !== FALSE )
+                                       {
+                                               echo $enable;
+                                       }
+                                       else
+                                       {
+                                               echo $disable;
+                                       }
+                               }
                                break;
                        case 'nucleusversion':
                                echo getNucleusVersion() / 100 . '(' . $nucleus['version'] . ')';
@@ -4473,7 +4505,7 @@ class AdminActions extends BaseActions
         */
        public function parse_templateoverview($template_name = '')
        {
-               if ( !preg_match('#^admin#', $this->skintype) )
+               if ( !in_array($this->skintype, Admin::$adminskin_actions) )
                {
                        $query = "SELECT * FROM %s WHERE tdname NOT LIKE 'admin/%%' ORDER BY tdname;";
                        $template['deleteaction'] = 'templatedelete';
@@ -4492,7 +4524,8 @@ class AdminActions extends BaseActions
                $template['tabindex'] = 10;
                $template['content'] = 'templatelist';
                
-               $this->parser->parse(showlist($query, 'table', $template, $template_name));
+               $template_list = showlist($query, 'table', $template, $template_name);
+               $this->parser->parse($template_list);
                
                return;
        }
@@ -4570,7 +4603,8 @@ class AdminActions extends BaseActions
                        $template['content']    = 'bloglist';
                        $template['superadmin'] = $member->isAdmin();
                                
-                       $this->parser->parse(showlist($resource, 'table', $template, $template_name));
+                       $list_resource_table = showlist($resource, 'table', $template, $template_name);
+                       $this->parser->parse($list_resource_table);
                        $resource->closeCursor();
                                
                        echo '<h2>' . _OVERVIEW_YRDRAFTS . '</h2>';
@@ -4583,7 +4617,8 @@ class AdminActions extends BaseActions
                        if ( $resource->rowCount() > 0 )
                        {
                                $template['content'] = 'draftlist';
-                               $this->parser->parse(showlist($resource, 'table', $template, $template_name));
+                               $draft_list = showlist($resource, 'table', $template, $template_name);
+                               $this->parser->parse($draft_list);
                        }
                        else
                        {
@@ -4674,10 +4709,10 @@ class AdminActions extends BaseActions
                                $condition = $this->ifHasPlugin($name, $value);
                                break;
                        case 'adminaction':
-                               $condition = (Admin::getAdminAction() == $name);
+                               $condition = (Admin::$action == $name);
                                break;
                        case 'adminoldaction':
-                               $condition = (Admin::getAdminAction() == $name);
+                               $condition = (Admin::$action == $name);
                                break;
                        case 'addresschange':
                                $condition = ($this->ifAddresscange());
@@ -4689,7 +4724,7 @@ class AdminActions extends BaseActions
                                $condition = ($this->ifSkincandidates());
                                break;
                        case 'nameclashes':
-                               $condition = requestVar('nameclashes');
+                               $condition = Admin::$contents['nameclashes'];
                                break;
                        case 'existsnewplugin':
                                $condition = ($this->existsNewPlugin());
@@ -5131,114 +5166,71 @@ class AdminActions extends BaseActions
        {
                global $member, $nucleus, $CONF, $manager;
                
-               $extrahead = Admin::getAdminextrahead();
-               $data = array(
-                       'extrahead'     => &$extrahead,
-                       'action'        =>  Admin::getAdminAction()
-               );
-               $manager->notify('AdminPrePageHead', $data);
+               /* HTTP 1.1 application for no caching */
+               header("Cache-Control: no-cache, must-revalidate");
+               header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
                
                $content = $this->parser->skin->getContentFromDB('pagehead');
                if ( !$content )
                {
-                       $baseUrl = Entity::hsc($CONF['SkinsURL']);
-                       
-                       /*
-                        * TODO: obsoleted
-                        if ( !array_key_exists('AdminCSS', $CONF) )
-                        {
-                        DB::execute("INSERT INTO " . sql_table('config') . " VALUES ('AdminCSS', 'original')");
-                        $CONF['AdminCSS'] = 'original';
-                        }
-                        */
-                       
-                       /* HTTP 1.1 application for no caching */
-                       header("Cache-Control: no-cache, must-revalidate");
-                       header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
-                       
                        $root_element = 'html';
                        $charset = i18n::get_current_charset();
                        $locale = preg_replace('#_#', '-', i18n::get_current_locale());
-                       $xml_version_info = self::$xml_version_info;
-                       $formal_public_identifier = self::$formal_public_identifier;
-                       $system_identifier = self::$system_identifier;
-                       $xhtml_namespace = self::$xhtml_namespace;
-                       
-                       echo "<?xml version=\"{$xml_version_info}\" encoding=\"{$charset}\" ?>\n";
-                       echo "<!DOCTYPE {$root_element} PUBLIC \"{$formal_public_identifier}\" \"{$system_identifier}\">\n";
-                       echo "<{$root_element} xmlns=\"{$xhtml_namespace}\" xml:lang=\"{$locale}\" lang=\"{$locale}\">\n";
-                       echo "<head>\n";
-                       echo '<title>' . Entity::hsc($CONF['SiteName']) . " - Admin</title>\n";
-                       /*
-                        * TODO: obsoleted
-                        echo "<link rel=\"stylesheet\" title=\"Nucleus Admin Default\" type=\"text/css\" href=\"{$baseUrl}admin/defaultadmin/styles/admin_{$CONF["AdminCSS"]}.css\" />\n";
-                        */
-                       echo "<link rel=\"stylesheet\" title=\"Nucleus Admin Default\" type=\"text/css\" href=\"{$baseUrl}admin/defaultadmin/styles/addedit.css\" />\n";
-                       echo "<script type=\"text/javascript\" src=\"{$baseUrl}javascripts/edit.js\"></script>\n";
-                       echo "<script type=\"text/javascript\" src=\"{$baseUrl}javascripts/admin.js\"></script>\n";
-                       echo "<script type=\"text/javascript\" src=\"{$baseUrl}javascripts/compatibility.js\"></script>\n";
-                       echo "{$extrahead}\n";
-                       echo "</head>\n\n";
-                       echo "<body>\n";
-                       echo "<div id=\"adminwrapper\">\n";
-                       echo "<div class=\"header\">\n";
-                       echo '<h1>' . Entity::hsc($CONF['SiteName']) . "</h1>\n";
-                       echo "</div>\n";
-                       echo "<div id=\"container\">\n";
-                       echo "<div id=\"content\">\n";
-                       echo "<div class=\"loginname\">\n";
-                       
-                       if ( !$member->isLoggedIn() )
-                       {
-                               echo '<a href="index.php?action=showlogin" title="Log in">' . _NOTLOGGEDIN . "</a><br />\n";
-                       }
-                       else
-                       {
-                               echo _LOGGEDINAS . ' ' . $member->getDisplayName() ." - <a href='index.php?action=logout'>" . _LOGOUT. "</a><br />\n";
-                               echo "<a href='index.php?action=overview'>" . _ADMINHOME . "</a> - ";
-                       }
-                       
-                       echo "<a href='".$CONF['IndexURL']."'>"._YOURSITE."</a><br />\n";
-                       echo '(';
+                       $xml_version_info = '1.0';
+                       $formal_public_identifier = '-//W3C//DTD XHTML 1.0 Strict//EN';
+                       $system_identifier = 'http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd';
+                       $xhtml_namespace = 'http://www.w3.org/1999/xhtml';
                        
-                       if ( !array_key_exists('codename', $nucleus) || empty($nucleus['codename']) )
-                       {
-                               $codenamestring = '';
-                       }
-                       else
-                       {
-                               $codenamestring = ' &quot;' . $nucleus['codename'].'&quot;';
-                       }
-                       
-                       if ( $member->isLoggedIn() && $member->isAdmin() )
-                       {
-                               $checkURL = sprintf(_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_URL, getNucleusVersion(), getNucleusPatchLevel());
-                               echo '<a href="' . $checkURL . '" title="' . _ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_TITLE . '">Nucleus CMS ' . $nucleus['version'] . $codenamestring . '</a>';
-                               
-                               $newestVersion = getLatestVersion();
-                               $newestCompare = str_replace('/', '.', $newestVersion);
-                               $currentVersion = str_replace(array('/','v'), array('.',''), $nucleus['version']);
-                               
-                               if ( $newestVersion && version_compare($newestCompare, $currentVersion) > 0 )
-                               {
-                                       echo "<br />\n";
-                                       echo '<a style="color:red" href="http://nucleuscms.org/upgrade.php" title="' . _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TITLE . '">';
-                                       echo _ADMIN_SYSTEMOVERVIEW_LATESTVERSION_TEXT . $newestVersion;
-                                       echo "</a>";
-                               }
-                       }
-                       else
-                       {
-                               echo "Nucleus CMS {$nucleus['version']}{$codenamestring}";
-                       }
-                       echo ')';
-                       echo '</div>';
-               }
-               else
-               {
-                       $this->parser->parse($content);
-               }
-               
+                       $content = "<?xml version=\"{$xml_version_info}\" encoding=\"{$charset}\" ?>\n"
+                                 . "<!DOCTYPE {$root_element} PUBLIC \"{$formal_public_identifier}\" \"{$system_identifier}\">\n"
+                                 . "<{$root_element} xmlns=\"{$xhtml_namespace}\" xml:lang=\"{$locale}\" lang=\"{$locale}\">\n"
+                                 . "<head>\n"
+                                 . "<title><%sitevar(name)%> - Admin</title>\n"
+                                 . "<script type=\"text/javascript\" src=\"<%skinfile(/javascripts/edit.js)%>\"></script>"
+                                 . "<script type=\"text/javascript\" src=\"<%skinfile(/javascripts/admin.js)%>\"></script>"
+                                 . "<script type=\"text/javascript\" src=\"<%skinfile(/javascripts/compatibility.js)%>\"></script>"
+                                 . "<%extrahead%>"
+                                 . "</head>"
+                                 . "<body>"
+                                 . "<div id=\"adminwrapper\">"
+                                 . "<div class=\"header\">"
+                                 . "<h1><%sitevar(name)%></h1>"
+                                 . "</div>"
+                                 . "<div id=\"container\">"
+                                 . "<div id=\"content\">"
+                                 . "<div class=\"loginname\">"
+                                 . "<link rel=\"stylesheet\" title=\"Nucleus Admin Default\" type=\"text/css\" href=\"<%skinfile(admin/defaultadmin/styles/addedit.css%>\" />\n"
+                                 . "<script type=\"text/javascript\" src=\"<%skinfile(/javascripts/edit.js)%>\"></script>\n"
+                                 . "<script type=\"text/javascript\" src=\"<%skinfile(/javascripts/admin.js)%>\"></script>\n"
+                                 . "<script type=\"text/javascript\" src=\"<%skinfile(/javascripts/compatibility.js)%>\"></script>\n"
+                                 . "<%extrahead%>\n"
+                                 . "</head>\n"
+                                 . "\n"
+                                 . "<body>\n"
+                                 . "<div id=\"adminwrapper\">\n"
+                                 . "<div class=\"header\">\n"
+                                 . "<h1><%sitevar(name)%></h1>\n"
+                                 . "</div>\n"
+                                 . "<div id=\"container\">\n"
+                                 . "<div id=\"content\">\n"
+                                 . "<div class=\"loginname\">\n"
+                                 . "<%if(loggedin)%>"
+                                 . "<%text(_LOGGEDINAS)%> <%member(yourrealname)%> - <a href=\"<%adminurl%>index.php?action=logout\"><%text(_LOGOUT)%></a><br />"
+                                 . "<a href=\"<%adminurl%>index.php?action=overview\"><%text(_ADMINHOME)%></a> - "
+                                 . "<%else%>"
+                                 . "<a href=\"<%adminurl%>index.php?action=showlogin\" title=\"Log in\"><%text(_NOTLOGGEDIN)%></a><br />"
+                                 . "<%endif%>"
+                                 . "<a href=\"<%sitevar(url)%>\"><%text(_YOURSITE)%></a><br />"
+                                 . "("
+                                 . "<%if(superadmin)%>"
+                                 . "<a href=\"<%versioncheckurl%>\" title=\"<%text(_ADMIN_SYSTEMOVERVIEW_VERSIONCHECK_TITLE)%>\"><%version%><%codename%></a>"
+                                 . "<%newestcompare%><%else%><%version%><%codename%>"
+                                 . "<%endif%>"
+                                 . ")"
+                                 . "</div>";
+               }
+               
+               $this->parser->parse($content);
                return;
        }
        
@@ -5252,141 +5244,96 @@ class AdminActions extends BaseActions
        public function parse_pagefoot()
        {
                global $action, $member, $manager, $blogid;
-               
-               $data = array(
-                       'action' => Admin::getAdminAction()
-               );
+
+               $data = array('action' => Admin::$action);
                $manager->notify('AdminPrePageFoot', $data);
                
                $content = $this->parser->skin->getContentFromDB('pagefoot');
                if ( !$content )
                {
-                       if ( $member->isLoggedIn() && ($action != 'showlogin') )
-                       {
-                               echo '<h2>' . _LOGOUT . "</h2>\n";
-                               echo "<ul>\n";
-                               echo '<li><a href="index.php?action=overview">' . _BACKHOME . "</a></li>\n";
-                               echo '<li><a href="index.php?action=logout">' .  _LOGOUT . "</a></li>\n";
-                               echo "</ul>\n";
-                       }
-                       
-                       echo "<div class=\"foot\">\n";
-                       echo '<a href="' . _ADMINPAGEFOOT_OFFICIALURL . '">Nucleus CMS</a> &copy; 2002-' . date('Y') . ' ' . _ADMINPAGEFOOT_COPYRIGHT;
-                       echo '-';
-                       echo '<a href="' . _ADMINPAGEFOOT_DONATEURL . '">' . _ADMINPAGEFOOT_DONATE . "</a>\n";
-                       echo "</div>\n";
-                               
-                       echo "<div id=\"quickmenu\">\n";
-                               
-                       if ( ($action != 'showlogin') && ($member->isLoggedIn()) )
-                       {
-                               echo "<ul>\n";
-                               echo '<li><a href="index.php?action=overview">' . _QMENU_HOME . "</a></li>\n";
-                               echo "</ul>\n";
-                               
-                               echo '<h2>' . _QMENU_ADD . "</h2>\n";
-                               echo "<form method=\"get\" action=\"index.php\">\n";
-                               echo "<p>\n";
-                               echo "<input type=\"hidden\" name=\"action\" value=\"createitem\" />\n";
-                               
-                               $showAll = requestVar('showall');
-                               
-                               if ( ($member->isAdmin()) && ($showAll == 'yes') )
-                               {
-                                       // Super-Admins have access to all blogs! (no add item support though)
-                                       $query = "SELECT bnumber as value, bname as text FROM %s ORDER BY bname;";
-                                       $query = sprintf($query, sql_table('blog'));
-                               }
-                               else
-                               {
-                                       $query = "SELECT bnumber as value, bname as text FROM %s, %s WHERE tblog=bnumber and tmember=%d ORDER BY bname;";
-                                       $query = sprintf($query, sql_table('blog'), sql_table('team'), (integer) $member->getID());
-                               }
-                               $template['name']               = 'blogid';
-                               $template['tabindex']   = 15000;
-                               $template['extra']              = _QMENU_ADD_SELECT;
-                               $template['selected']   = $blogid;
-                               $template['shorten']    = 10;
-                               $template['shortenel']  = '';
-                               $template['javascript'] = 'onchange="return form.submit()"';
-                               $this->parser->parse(showlist($query, 'select', $template));
-                               
-                               echo "</p>\n";
-                               echo "</form>\n";
-                               
-                               echo "<h2>{$member->getDisplayName()}</h2>\n";
-                               echo "<ul>\n";
-                               echo '<li><a href="index.php?action=editmembersettings">' . _QMENU_USER_SETTINGS . "</a></li>\n";
-                               echo '<li><a href="index.php?action=browseownitems">' . _QMENU_USER_ITEMS . "</a></li>\n";
-                               echo '<li><a href="index.php?action=browseowncomments">' . _QMENU_USER_COMMENTS . "</a></li>\n";
-                               echo "</ul>\n";
-                               
-                               if ( $member->isAdmin() )
-                               {
-                                       echo '<h2>' . _QMENU_MANAGE . "</h2>\n";
-                                       echo "<ul>\n";
-                                       echo '<li><a href="index.php?action=actionlog">' . _QMENU_MANAGE_LOG . "</a></li>\n";
-                                       echo '<li><a href="index.php?action=settingsedit">' . _QMENU_MANAGE_SETTINGS . "</a></li>\n";
-                                       echo '<li><a href="index.php?action=systemoverview">' . _QMENU_MANAGE_SYSTEM . "</a></li>\n";
-                                       echo '<li><a href="index.php?action=usermanagement">' . _QMENU_MANAGE_MEMBERS . "</a></li>\n";
-                                       echo '<li><a href="index.php?action=createnewlog">' . _QMENU_MANAGE_NEWBLOG . "</a></li>\n";
-                                       echo '<li><a href="index.php?action=backupoverview">' . _QMENU_MANAGE_BACKUPS . "</a></li>\n";
-                                       echo '<li><a href="index.php?action=pluginlist">' . _QMENU_MANAGE_PLUGINS . "</a></li>\n";
-                                       echo "</ul>\n";
-                                               
-                                       echo "<h2>" . _QMENU_LAYOUT . "</h2>\n";
-                                       echo "<ul>\n";
-                                       echo '<li><a href="index.php?action=skinoverview">' . _QMENU_LAYOUT_SKINS . "</a></li>\n";
-                                       echo '<li><a href="index.php?action=templateoverview">' . _QMENU_LAYOUT_TEMPL . "</a></li>\n";
-                                       echo '<li><a href="index.php?action=skinieoverview">' . _QMENU_LAYOUT_IEXPORT . "</a></li>\n";
-                                       echo "</ul>\n";
-                               }
-                               
-                               $data = array('options' => array());
-                               $manager->notify('QuickMenu', $data);
-                               
-                               if ( count($data['options']) > 0 )
-                               {
-                                       echo "<h2>" . _QMENU_PLUGINS . "</h2>\n";
-                                       echo "<ul>\n";
-                                       foreach ( $data['options'] as $option )
-                                       {
-                                               echo '<li><a href="' . Entity::hsc($option['url']) . '" title="' . Entity::hsc($option['tooltip']) . '">' . Entity::hsc($option['title']) . "</a></li>\n";
-                                       }
-                                       echo "</ul>\n";
-                               }
-                       }
-                       else if ( ($action == 'activate') || ($action == 'activatesetpwd') )
-                       {
-                                       
-                               echo '<h2>' . _QMENU_ACTIVATE . '</h2>' . _QMENU_ACTIVATE_TEXT;
-                       }
-                       else
-                       {
-                               echo '<h2>' . _QMENU_INTRO . '</h2>' . _QMENU_INTRO_TEXT;
-                       }
-                               
-                       echo "<!-- quickmenu -->\n";
-                       echo "</div>\n";
-                               
-                       echo "<!-- content -->\n";
-                       echo "</div>\n";
-                               
-                       echo "<!-- container -->\n";
-                       echo "</div>\n";
-                               
-                       echo "<!-- adminwrapper -->\n";
-                       echo "</div>\n";
-                               
-                       echo "</body>\n";
-                       echo "</html>\n";
-               }
-               else
-               {
-                       $this->parser->parse($content);
-                       exit;
-               }
-       
+                       $content = "<%if(loggedin)%>"
+                                . "<%ifnot(adminaction,showlogin)%>"
+                                . "<h2><%text(_LOGOUT)%></h2>"
+                                . "<ul>"
+                                . "<li><a href=\"<%adminurl%>index.php?action=overview\"><%text(_BACKHOME)%></a></li>"
+                                . "<li><a href=\"<%adminurl%>index.php?action=logout\"><%text(_LOGOUT)%></a></li>"
+                                . "</ul>"
+                                . "<%endif%>"
+                                . "<%endif%>"
+                                . "<div class=\"foot\">"
+                                . "<a href=\"<%text(_ADMINPAGEFOOT_OFFICIALURL)%>\">Nucleus CMS</a> &copy; 2002- <%date(%Y)%> <%text(_ADMINPAGEFOOT_COPYRIGHT)%>"
+                                . " - <a href=\"<%text(_ADMINPAGEFOOT_DONATEURL)%>\"><%text(_ADMINPAGEFOOT_DONATE)%></a>"
+                                . "</div>"
+                                . "</div>"
+                                . "<!-- content -->"
+                                . "<div id=\"quickmenu\">"
+                                . "<%if(loggedin)%>"
+                                . "<%ifnot(adminaction,showlogin)%>"
+                                . "<ul>"
+                                . "<li><a href=\"<%adminurl%>index.php?action=overview\"><%text(_QMENU_HOME)%></a></li>"
+                                . "</ul>"
+                                . "<h2><%text(_QMENU_ADD)%></h2>"
+                                . "<form method=\"get\" action=\"<%adminurl%>index.php\">"
+                                . "<div>"
+                                . "<input type=\"hidden\" name=\"action\" value=\"createitem\" />"
+                                . "<%qmenuaddselect(admin/default)%>"
+                                . "</div>"
+                                . "</form>"
+                                . "<h2><%member(yourrealname)%></h2>"
+                                . "<ul>"
+                                . "<li><a href=\"<%adminurl%>index.php?action=editmembersettings\"><%text(_QMENU_USER_SETTINGS)%></a></li>"
+                                . "<li><a href=\"<%adminurl%>index.php?action=browseownitems\"><%text(_QMENU_USER_ITEMS)%></a></li>"
+                                . "<li><a href=\"<%adminurl%>index.php?action=browseowncomments\"><%text(_QMENU_USER_COMMENTS)%></a></li>"
+                                . "</ul>"
+                                . "<%if(superadmin)%>"
+                                . "<h2><%text(_QMENU_MANAGE)%></h2>"
+                                . "<ul>"
+                                . "<li><a href=\"<%adminurl%>index.php?action=actionlog\"><%text(_QMENU_MANAGE_LOG)%></a></li>"
+                                . "<li><a href=\"<%adminurl%>index.php?action=settingsedit\"><%text(_QMENU_MANAGE_SETTINGS)%></a></li>"
+                                . "<li><a href=\"<%adminurl%>index.php?action=systemoverview\"><%text(_QMENU_MANAGE_SYSTEM)%></a></li>"
+                                . "<li><a href=\"<%adminurl%>index.php?action=usermanagement\"><%text(_QMENU_MANAGE_MEMBERS)%></a></li>"
+                                . "<li><a href=\"<%adminurl%>index.php?action=createnewlog\"><%text(_QMENU_MANAGE_NEWBLOG)%></a></li>"
+                                . "<li><a href=\"<%adminurl%>index.php?action=backupoverview\"><%text(_QMENU_MANAGE_BACKUPS)%></a></li>"
+                                . "<li><a href=\"<%adminurl%>index.php?action=pluginlist\"><%text(_QMENU_MANAGE_PLUGINS)%></a></li>"
+                                . "</ul>"
+                                . "<h2><%text(_QMENU_LAYOUT)%></h2>"
+                                . "<ul>"
+                                . "<li><a href=\"<%adminurl%>index.php?action=skinoverview\"><%text(_QMENU_LAYOUT_SKINS)%></a></li>"
+                                . "<li><a href=\"<%adminurl%>index.php?action=templateoverview\"><%text(_QMENU_LAYOUT_TEMPL)%></a></li>"
+                                . "<li><a href=\"<%adminurl%>index.php?action=skinieoverview\"><%text(_QMENU_LAYOUT_IEXPORT)%></a></li>"
+                                . "</ul>"
+                                . "<h2><%text(_SKINABLEADMIN_QMENU_LAYOUT)%></h2>"
+                                . "<ul>"
+                                . "<li><a href=\"<%adminurl%>index.php?action=adminskinoverview\"><%text(_QMENU_LAYOUT_SKINS)%></a></li>"
+                                . "<li><a href=\"<%adminurl%>index.php?action=admintemplateoverview\"><%text(_QMENU_LAYOUT_TEMPL)%></a></li>"
+                                . "<li><a href=\"<%adminurl%>index.php?action=adminskinieoverview\"><%text(_QMENU_LAYOUT_IEXPORT)%></a></li>"
+                                . "</ul>"
+                                . "<%endif%>"
+                                . "<%quickmenu(admin/default)%>"
+                                . "<%endif%>"
+                                . "<%elseif(adminaction,activate)%>"
+                                . "<h2><%text(_QMENU_ACTIVATE)%></h2>"
+                                . "<%text(_QMENU_ACTIVATE_TEXT)%>"
+                                . "<%elseif(adminaction,activatesetpwd)%>"
+                                . "<h2><%text(_QMENU_ACTIVATE)%></h2><%text(_QMENU_ACTIVATE_TEXT)%>"
+                                . "<%else%>"
+                                . "<h2><%text(_QMENU_INTRO)%></h2><%text(_QMENU_INTRO_TEXT)%>"
+                                . "<%endif%>"
+                                . "</div>"
+                                . "<!-- content / quickmenu container -->"
+                                . "<div class=\"clear\"></div>"
+                                . "<!-- new -->"
+                                . "</div>"
+                                . "<!-- adminwrapper -->"
+                                . "<!-- new -->"
+                                . "</div>"
+                                . "<!-- new -->"
+                                . "<p style=\"text-align:right;\"><%benchmark%></p>"
+                                . "</body>"
+                                . "</html>";
+               }
+               
+               $this->parser->parse($content);
                return;
        }
        /**