OSDN Git Service

MERGE: リビジョン1834。globalfunctions.phpの非推奨関数の整理。
[nucleus-jp/nucleus-next.git] / nucleus / libs / AdminActions.php
index 0e992cc..be713d3 100644 (file)
@@ -7,9 +7,6 @@ if ( !class_exists('BaseActions') )
 
 class AdminActions extends BaseActions
 {
-       // reference to the skin object for which a part is being parsed
-       private $skin;
-       
        private $skintype;
        
        /* NOTE: list of whole available action names for tags
@@ -133,11 +130,23 @@ class AdminActions extends BaseActions
        static private $default_actions = array(
                'addtickettourl',
                'adminurl',
+               'codename',
                'customhelplink',
+               'date',
+               'extrahead',
                'headmessage',
                'helplink',
+               'member',
+               'newestcompare',
+               'pagehead',
+               'pagefoot',
+               'qmenuaddselect',
+               'quickmenu',
+               'sitevar',
                'sprinttext',
-               'ticket'
+               'ticket',
+               'version',
+               'versioncheckurl'
        );
        
        /**
@@ -160,7 +169,7 @@ class AdminActions extends BaseActions
                'adminskinremovetype'   => _ADM_SKPRT_ADMINSKINREMOVETYPE,
                'admintemplatedelete'   => _ADM_SKPRT_ADMINTEMPLATEDELETE,
                'admintemplateedit'             => _ADM_SKPRT_ADMINTEMPLATEEDIT,
-               'admintemplateoverview' => _ADM_SKPRT_ADMINTEMPLATEOVERVIEW,
+               'admntemplateoverview'  => _ADM_SKPRT_ADMINTEMPLATEOVERVIEW,
                'backupoverview'                => _ADM_SKPRT_BACKUPOVERVIEW,
                'backuprestore'                 => _ADM_SKPRT_BACKUPRESTORE,
                'banlist'                               => _ADM_SKPRT_BANLIST,
@@ -531,7 +540,7 @@ class AdminActions extends BaseActions
                                        'categories',
                                        'currenttime',
                                        'init',
-                                       'itemoptions',
+                                       'pluginoptions',
                                        'pluginextras'
                                );
                                break;
@@ -581,8 +590,8 @@ class AdminActions extends BaseActions
                                        'categories',
                                        'currenttime',
                                        'itemtime',
-                                       'pluginextras',
-                                       'itemoptions'
+                                       'pluginoptions',
+                                       'pluginextras'
                                );
                                break;
                        case 'itemlist':
@@ -621,27 +630,6 @@ class AdminActions extends BaseActions
                                        'yrbloglist',
                                );
                                break;
-                       case 'pagefoot':
-                               $extra_actions = array(
-                                       'date',
-                                       'qmenuaddselect',
-                                       'member',
-                                       'quickmenu',
-                               );
-                               break;
-                       case 'pagehead':
-                               $extra_actions = array(
-                                       'charset',
-                                       'sitevar',
-                                       'adminurl',
-                                       'extrahead',
-                                       'member',
-                                       'versioncheckurl',
-                                       'version',
-                                       'codename',
-                                       'newestcompare',
-                               );
-                               break;
                        case 'plugindelete':
                                $extra_actions = array(
                                        'editpluginfo',
@@ -787,18 +775,6 @@ class AdminActions extends BaseActions
        }
        
        /**
-        * AdminActions::setSkin()
-        * Set the skin
-        * @param       object  $skin   an instance of Skin class
-        * @return      void
-        */
-       public function setSkin(&$skin)
-       {
-               $this->skin =& $skin;
-               return;
-       }
-       
-       /**
         * AdminActions::parse_actionloglist()
         * Parse skinvar actionloglist
         * 
@@ -1000,10 +976,10 @@ class AdminActions extends BaseActions
                
                if ( !array_key_exists('ADMIN_BATCHLIST', $templates) || empty($templates['ADMIN_BATCHLIST']) )
                {
-                       $template = '<li><%text(_BATCH_EXECUTING)%>'
-                                 . '<b><%adminbatchaction%></b>'
-                                 . '<%batchlisttype%>'
-                                 . '<b><%batchid%></b>...'
+                       $template = '<li><%text(_BATCH_EXECUTING)%>&nbsp;'
+                                 . '<b><%adminbatchaction%></b>&nbsp;'
+                                 . '<%batchlisttype%>&nbsp;'
+                                 . '<b><%batchid%></b>...&nbsp;'
                                  . '<b><%batchlistmsg%></b>'
                                  . '</li>' . "\n";
                }
@@ -1014,7 +990,7 @@ class AdminActions extends BaseActions
                
                $selected = requestIntArray('batch');
                $action   = requestVar('batchaction');
-               
+
                switch ( $this->skintype )
                {
                        case 'batchitem':
@@ -1057,13 +1033,12 @@ class AdminActions extends BaseActions
                {
                        $error = '';
                        $selectedid = intval($selectedid);
-                       
                        switch ( $action )
                        {
                                case 'delete':
                                        if ( $this->skintype != 'batchteam' )
                                        {
-                                               $error = Admin::deleteaction($selectedid);
+                                               $error = call_user_func_array(array('Admin', $deleteaction), array($selectedid));
                                        }
                                        else
                                        {
@@ -1071,23 +1046,23 @@ class AdminActions extends BaseActions
                                        }
                                        break;
                                case 'move':
-                                       $error = Admin::moveaction($selectedid, $destid);
+                                       $error = call_user_func_array(array('Admin', $moveaction), array($selectedid, $destid));
                                        break;
                                case 'setadmin':
                                        // always succeeds
-                                       sql_query("UPDATE {$setadminsql} {$selectedid};");
+                                       DB::execute("UPDATE {$setadminsql} {$selectedid};");
                                        $error = '';
                                        break;
                                case 'unsetadmin':
                                        // there should always remain at least one super-admin
-                                       $r = sql_query($unsetchksql);
-                                       if ( sql_num_rows($r) < 2 )
+                                       $r = DB::getResult($unsetchksql);
+                                       if ( $r->rowCount() < 2 )
                                        {
                                                $error = $unseterrmsg;
                                        }
                                        else
                                        {
-                                               sql_query("UPDATE {$setadminsql} {$selectedid};");
+                                               DB::execute("UPDATE {$unsetupsql} {$selectedid};");
                                        }
                                        break;
                                default:
@@ -1104,14 +1079,14 @@ class AdminActions extends BaseActions
                        $handler = new AdminActions('template');
                        $parser = new Parser($handler);
                        
+                       $output = Template::fill($template, $data);
                        ob_start();
-                       $parser->parse($template);
-                       $template = ob_get_contents();
+                       $parser->parse($output);
+                       $output = ob_get_contents();
                        ob_end_clean();
-                       
-                       echo Template::fill($template, $data);
-                       return;
+                       echo "{$output}<br />";
                }
+               return;
        }
        
        /**
@@ -1249,15 +1224,15 @@ class AdminActions extends BaseActions
                        case 'skin':
                                $query = "SELECT * FROM %s WHERE sdname LIKE 'admin/%%';";
                                $query = sprintf($query, sql_table('skin_desc'));
-                               $res = sql_query($query);
+                               $res = DB::getResult($query);
                                
-                               while ( $skinObj = sql_fetch_object($res) )
+                               foreach ( $res as $row )
                                {
                                        $data = array(
-                                               'typeid'        => 'skin[' . $skinObj->sdnumber . ']',
-                                               'expid'         => 'skinexp' . $skinObj->sdnumber,
-                                               'expname'       => Entity::hsc($skinObj->sdname),
-                                               'expdesc'       => Entity::hsc($skinObj->sddesc),
+                                               'typeid'        => 'skin[' . $row['sdnumber'] . ']',
+                                               'expid'         => 'skinexp' . $row['sdnumber'],
+                                               'expname'       => Entity::hsc($row['sdname']),
+                                               'expdesc'       => Entity::hsc($row['sddesc']),
                                        );
                                        echo Template::fill($template, $data);
                                }
@@ -1265,14 +1240,14 @@ class AdminActions extends BaseActions
                        case 'template':
                                $query = "SELECT * FROM %s WHERE tdname LIKE 'admin/%%';";
                                $query = sprintf($query, sql_table('template_desc'));
-                               $res = sql_query($query);
-                               while ( $templateObj = sql_fetch_object($res) )
+                               $res = DB::getResult($query);
+                               foreach ( $res as $row )
                                {
                                        $data = array(
-                                               'typeid'        => 'template[' . $templateObj->tdnumber . ']',
-                                               'expid'         => 'templateexp' . $templateObj->tdnumber,
-                                               'expname'       => Entity::hsc($templateObj->tdname),
-                                               'expdesc'       => Entity::hsc($templateObj->tddesc),
+                                               'typeid'        => 'template[' . $row['tdnumber'] . ']',
+                                               'expid'         => 'templateexp' . $row['tdnumber'],
+                                               'expname'       => Entity::hsc($row['tdname']),
+                                               'expdesc'       => Entity::hsc($row['tddesc']),
                                        );
                                        echo Template::fill($template, $data);
                                }
@@ -1295,7 +1270,7 @@ class AdminActions extends BaseActions
                
                $template['content'] = 'adminskinlist';
                $template['tabindex'] = 10;
-               $template['friendly_names'] = $this->skin->getAvailableTypes();
+               $template['friendly_names'] = $this->parser->skin->getAvailableTypes();
                Showlist($query, 'table', $template, $templateName);
                return;
        }
@@ -1307,16 +1282,16 @@ class AdminActions extends BaseActions
         * @param       void
         * @return      void
         */     
-       public function parse_adminskinselectoptions()
+       public function parse_adminskinselectoptions($templateName = '')
        {
                global $CONF;
                $query = "SELECT sdname as text, sdnumber as value FROM %s WHERE sdname LIKE 'admin/%%';";
                $query = sprintf($query, sql_table('skin_desc'));
                
                $template['name'] = 'adminskin';
-               $template['selected'] = $CONF['DefaultAdminSkin'];
+               $template['selected'] = $CONF['AdminSkin'];
                $template['tabindex'] = 110;
-               Showlist($query, 'select', $template, '');
+               Showlist($query, 'select', $template, $templateName);
                return;
        }
        
@@ -1334,14 +1309,14 @@ class AdminActions extends BaseActions
                        $templates = Template::read($templateName);
                }
                
-               $nType  = $this->skin->getAvailableTypes();
+               $nType  = $this->parser->skin->getAvailableTypes();
                $skinid = intRequestVar('skinid');
                
                $query = "SELECT stype FROM  %s WHERE stype NOT IN (%s) AND sdesc=%d;";
                $query = sprintf($query, sql_table('skin'), "'" . implode("', '", $nType) . "'", (integer) $skinid);
                
-               $res    = sql_query($query);
-               if ( $res && sql_num_rows($res) > 0 )
+               $res    = DB::getResult($query);
+               if ( $res && $res->rowCount() > 0 )
                {
                        /* NOTE: set templates for HEAD/BODY/FOOT */
                        if ( !array_key_exists('ADMIN_SPECIALSKINLIST_HEAD', $templates) || empty($templates['ADMIN_SPECIALSKINLIST_HEAD']) )
@@ -1381,7 +1356,7 @@ class AdminActions extends BaseActions
                        /* NOTE: do echo */
                        $data = array();
                        echo $template['head'];
-                       while ( $row = sql_fetch_assoc($res) )
+                       foreach ( $res as $row )
                        {
                                $data = array(
                                        'tabindex'      => $tabstart++,
@@ -1426,7 +1401,7 @@ class AdminActions extends BaseActions
        {
                global $DIR_ADMINSKINS;
                $skinType = strtolower(trim(requestVar('type')));
-               $actions  = $this->skin->getAllowedActionsForType($skinType);
+               $actions  = $this->parser->skin->getAllowedActionsForType($skinType);
                sort($actions);
                
                while ( $current = array_shift($actions) )
@@ -1596,9 +1571,11 @@ class AdminActions extends BaseActions
        public function parse_batchmovelist()
        {
                $selected = requestIntArray('batch');
+               $count    = 0;
                foreach ( $selected as $select )
                {
-                       echo '<input type="hidden" name="batch[' . ($select++) . ']" value="' . intval($select) . "\" />\n";
+                       echo '<input type="hidden" name="batch[' . ($count) . ']" value="' . intval($select) . "\" />\n";
+                       $count++;
                }
                return;
        }
@@ -1645,7 +1622,7 @@ class AdminActions extends BaseActions
         * @param       void
         * @return      void
         */
-       public function parse_blogcatlist()
+       public function parse_blogcatlist($templateName = '')
        {
                global $manager;
                $blogid = intRequestVar('blogid');
@@ -1656,7 +1633,7 @@ class AdminActions extends BaseActions
                $template['tabindex'] = 200;
                
                $batch = new Batch('category');
-               $batch->showlist($query, 'table', $template);
+               $batch->showlist($query, 'table', $template, $templateName);
                return;
        }
        
@@ -1736,38 +1713,38 @@ class AdminActions extends BaseActions
                // (only select those blogs that have the user on the team)
                $queryBlogs = "SELECT bnumber, bname FROM %s WHERE bnumber in (%s) ORDER BY bname;";
                $queryBlogs = sprintf($queryBlogs, sql_table('blog'), implode(',', $aBlogIds));
-               $blogs = sql_query($queryBlogs);
+               $blogs = DB::getResult($queryBlogs);
                
                if ( $mode == 'category' )
                {
-                       if ( sql_num_rows($blogs) > 1 )
+                       if ( $blogs->rowCount() > 1 )
                        {
                                $multipleBlogs = 1;
                        }
-                       while ( $oBlog = sql_fetch_object($blogs) )
+                       foreach ( $blogs as $rBlog )
                        {
                                if ( isset($multipleBlogs) && !empty($multipleBlogs) )
                                {
-                                       echo '<optgroup label="' . Entity::hsc($oBlog->bname) . "\">\n";
+                                       echo '<optgroup label="' . Entity::hsc($rBlog['bname']) . "\">\n";
                                }
                                
                                // show selection to create new category when allowed/wanted
                                if ( $showNewCat )
                                {
                                        // check if allowed to do so
-                                       if ( $member->blogAdminRights($oBlog->bnumber) )
+                                       if ( $member->blogAdminRights($rBlog['bnumber']) )
                                        {
-                                               echo '<option value="newcat-' . $oBlog->bnumber . '">' . _ADD_NEWCAT . "</option>\n";
+                                               echo '<option value="newcat-' . $rBlog['bnumber'] . '">' . _ADD_NEWCAT . "</option>\n";
                                        }
                                }
                                
                                // 2. for each category in that blog
                                $catQuery = "SELECT cname, catid FROM %s WHERE cblog=%d ORDER BY cname ASC;";
-                               $catQuery = sprintf($catQuery, sql_table('category'), (integer) $oBlog->bnumber);
-                               $categories = sql_query($catQuery);
-                               while ( $oCat = sql_fetch_object($categories) )
+                               $catQuery = sprintf($catQuery, sql_table('category'), (integer) $rBlog['bnumber']);
+                               $categories = DB::getResult($catQuery);
+                               foreach ( $categories as $rCat )
                                {
-                                       if ( $oCat->catid == $selected )
+                                       if ( $rCat['catid'] == $selected )
                                        {
                                                $selectText = ' selected="selected" ';
                                        }
@@ -1775,7 +1752,7 @@ class AdminActions extends BaseActions
                                        {
                                                $selectText = '';
                                        }
-                                       echo '<option value="' . $oCat->catid . '" ' . $selectText . '>' . Entity::hsc($oCat->cname) . "</option>\n";
+                                       echo '<option value="' . $rCat['catid'] . '" ' . $selectText . '>' . Entity::hsc($rCat['cname']) . "</option>\n";
                                }
                                
                                if ( isset($multipleBlogs) && !empty($multipleBlogs) )
@@ -1787,16 +1764,16 @@ class AdminActions extends BaseActions
                else
                {
                        // blog mode
-                       while ( $oBlog = sql_fetch_object($blogs) )
+                       foreach ( $blogs as $rBlog )
                        {
-                               echo '<option value="' . $oBlog->bnumber . '"';
-                               if ( $oBlog->bnumber == $selected )
+                               echo '<option value="' . $rBlog['bnumber'] . '"';
+                               if ( $rBlog['bnumber'] == $selected )
                                {
-                                       echo '<option value="' . $oBlog->bnumber . '" selected="selected">' . Entity::hsc($oBlog->bname) . "</option>\n";
+                                       echo '<option value="' . $rBlog['bnumber'] . '" selected="selected">' . Entity::hsc($rBlog['bname']) . "</option>\n";
                                }
                                else
                                {
-                                       echo '<option value="' . $oBlog->bnumber . '">' . Entity::hsc($oBlog->bname) . "</option>\n";
+                                       echo '<option value="' . $rBlog['bnumber'] . '">' . Entity::hsc($rBlog['bname']) . "</option>\n";
                                }
                        }
                }
@@ -1883,7 +1860,7 @@ class AdminActions extends BaseActions
                $template['tabindex'] = 10;
 
                $batch = new Batch('team');
-               $batch->showlist($query, 'table', $template, _LISTS_NOMORE, $templateName);
+               $batch->showList($query, 'table', $template, $templateName, _LISTS_NOMORE);
                return;
        }
        
@@ -1901,11 +1878,11 @@ class AdminActions extends BaseActions
                                . "FROM %s, %s "
                                . "WHERE mnumber=tmember AND tblog=%d;";
                $query = sprintf($query, sql_table('member'), sql_table('team'), (integer) $blogid);
-               $res = sql_query($query);
+               $res = DB::getResult($query);
                $memberNames = array();
-               while ( $o = sql_fetch_object($res) )
+               foreach ( $res as $row )
                {
-                       $memberNames[] = Entity::hsc($o->mname) . ' (' . Entity::hsc($o->mrealname). ')';
+                       $memberNames[] = Entity::hsc($row['mname']) . ' (' . Entity::hsc($row['mrealname']). ')';
                }
                echo implode(',', $memberNames);
        }
@@ -2043,16 +2020,15 @@ class AdminActions extends BaseActions
                $blogid = intRequestVar('blogid');
                $query  = "SELECT * FROM %s WHERE cblog = %d AND catid = %d;";
                $query  = sprintf($query, sql_table('category'), (integer) $blogid, (integer) $catid);
-               $res    = sql_query($query);
-               $obj    = sql_fetch_object($res);
+               $row    = DB::getRow($query);
                
                if ( $type != 'name' )
                {
-                       echo Entity::hsc($obj->cdesc);
+                       echo Entity::hsc($row['cdesc']);
                }
                else
                {
-                       echo Entity::hsc($obj->cname);
+                       echo Entity::hsc($row['cname']);
                }
                
                return;
@@ -2182,7 +2158,7 @@ class AdminActions extends BaseActions
                $search = postVar('search');
                if ( !empty($search) )
                {
-                       $query .= ' and cbody LIKE "%' . sql_real_escape_string($search) . '%"';
+                       $query .= ' and cbody LIKE ' . DB::quoteValue('%'.$search.'%');
                }
                
                $query .= " ORDER BY ctime ASC LIMIT {$start},{$amount}";
@@ -2211,7 +2187,7 @@ class AdminActions extends BaseActions
                                {
                                        $query = "INSERT INTO %s VALUES (DefaultListSize, 10);";
                                        $query = sprintf($query, sql_table('config'));
-                                       sql_query($query);
+                                       DB::execute($query);
                                        $CONF['DefaultListSize'] = 10;
                                }
                                elseif ( intval($CONF['DefaultListSize']) < 1 )
@@ -2377,7 +2353,7 @@ class AdminActions extends BaseActions
                        $templates = Template::read($templateName);
                }
                
-               $types = $this->skin->getAvailableTypes();
+               $types = $this->parser->skin->getAvailableTypes();
                ksort($types);
                
                /* NOTE: set templates for HEAD/BODY/FOOT */
@@ -2658,7 +2634,7 @@ class AdminActions extends BaseActions
        {
                global $CONF, $manager, $member;
                
-               $fNames = $this->skin->getAvailableTypes();
+               $fNames = $this->parser->skin->getAvailableTypes();
                $sType  = strtolower(trim(requestVar('type')));
                
                switch ( $type )
@@ -2667,16 +2643,16 @@ class AdminActions extends BaseActions
                                echo intRequestVar('skinid');
                                break;
                        case 'name':
-                               echo Entity::hsc($this->skin->getName());
+                               echo Entity::hsc($this->parser->skin->getName());
                                break;
                        case 'desc':
-                               echo Entity::hsc($this->skin->getDescription());
+                               echo Entity::hsc($this->parser->skin->getDescription());
                                break;
                        case 'type':
-                               echo Entity::hsc($this->skin->getContentType());
+                               echo Entity::hsc($this->parser->skin->getContentType());
                                break;
                        case 'content':
-                               echo Entity::hsc($this->skin->getContentFromDB($sType));
+                               echo Entity::hsc($this->parser->skin->getContentFromDB($sType));
                                break;
                        case 'skintype':
                                $skinType = !array_key_exists($sType, $fNames) ? ucfirst($sType) : $fNames[$sType];
@@ -2686,7 +2662,7 @@ class AdminActions extends BaseActions
                                echo Entity::hsc($sType);
                                break;
                        case 'prefix':
-                               echo Entity::hsc($this->skin->getIncludePrefix());
+                               echo Entity::hsc($this->parser->skin->getIncludePrefix());
                                break;
                        case 'mode':
                                $incMode = $skin->getIncludeMode() ? _PARSER_INCMODE_SKINDIR : _PARSER_INCMODE_NORMAL;
@@ -2779,7 +2755,7 @@ class AdminActions extends BaseActions
                $template['tabindex'] = 10;
                
                $batch = new Batch('member');
-               $batch->showlist($query, 'table', $template, _LISTS_NOMORE, $templateName);
+               $batch->showList($query, 'table', $template, $templateName, _LISTS_NOMORE);
                return;
        }
        
@@ -2857,6 +2833,8 @@ class AdminActions extends BaseActions
         */
        public function parse_editpluginfo($type)
        {
+               global $manager;
+               
                $pid = intRequestVar('plugid');
                switch ( $type )
                {
@@ -2864,7 +2842,7 @@ class AdminActions extends BaseActions
                                echo $pid;
                                break;
                        case 'name':
-                               echo Entity::hsc(getPluginNameFromPid($pid));
+                               echo Entity::hsc($manager->getPluginNameFromPid($pid));
                                break;
                }
                return;
@@ -2887,18 +2865,18 @@ class AdminActions extends BaseActions
                
                $query  = "SELECT * FROM %s WHERE ocontext='global' AND opid=%d ORDER BY oid ASC;";
                $query = sprintf($query, sql_table('plugin_option_desc'), (integer) $pid);
-               $resource = sql_query($query);
-               
-               while ( $o = sql_fetch_object($resource) )
-               {
-                       array_push($aOIDs, $o->oid);
-                       $aOptions[$o->oid] = array(
-                               'oid'                   => $o->oid,
-                               'value'                 => $o->odef,
-                               'name'                  => $o->oname,
-                               'description'   => $o->odesc,
-                               'type'                  => $o->otype,
-                               'typeinfo'              => $o->oextra,
+               $resource = DB::getResult($query);
+               
+               foreach ( $resource as $row )
+               {
+                       array_push($aOIDs, $row['oid']);
+                       $aOptions[$row['oid']] = array(
+                               'oid'                   => $row['oid'],
+                               'value'                 => $row['odef'],
+                               'name'                  => $row['oname'],
+                               'description'   => $row['odesc'],
+                               'type'                  => $row['otype'],
+                               'typeinfo'              => $row['oextra'],
                                'contextid'             => 0
                        );
                }
@@ -2909,11 +2887,11 @@ class AdminActions extends BaseActions
                        $query = 'SELECT oid, ovalue FROM %s WHERE oid in (%s)';
                        $query = sprintf($query, sql_table('plugin_option'), implode(',', $aOIDs));
                        
-                       $result = sql_query($query);
+                       $result = DB::getResult($query);
                        
-                       while ( $o = sql_fetch_object($result) )
+                       foreach ( $result as $row )
                        {
-                               $aOptions[$o->oid]['value'] = $o->ovalue;
+                               $aOptions[$row['oid']]['value'] = $row['ovalue'];
                        }
                }
                
@@ -3453,7 +3431,7 @@ class AdminActions extends BaseActions
                                return $pid;
                                break;
                        case 'name':
-                               return Entity::hsc(getPluginNameFromPid($pid));
+                               return Entity::hsc($manager->getPluginNameFromPid($pid));
                                break;
                }
                return;
@@ -3565,7 +3543,7 @@ class AdminActions extends BaseActions
        public function parse_helpplugname()
        {
                $plugid = intGetVar('plugid');
-               Entity::hsc(getPluginNameFromPid($plugid));
+               Entity::hsc($manager->getPluginNameFromPid($plugid));
                return;
        }
        
@@ -3691,7 +3669,7 @@ class AdminActions extends BaseActions
         */
        public function parse_insertpluginfo($type)
        {
-               $option = Admin::$aOptions;
+               $option = Admin::getAdminaOption();
                switch ( $type )
                {
                        case 'id':
@@ -3721,6 +3699,7 @@ class AdminActions extends BaseActions
                {
                        $templates = Template::read($templateName);
                }
+               
                if ( !array_key_exists('INSERT_PLUGOPTION_TITLE', $templates) || empty($templates['INSERT_PLUGOPTION_TITLE']) )
                {
                        $template['title'] = "<tr>"
@@ -3731,6 +3710,7 @@ class AdminActions extends BaseActions
                {
                        $template['title'] = $templates['INSERT_PLUGOPTION_TITLE'];
                }
+               
                if ( !array_key_exists('INSERT_PLUGOPTION_BODY', $templates) || empty($templates['INSERT_PLUGOPTION_BODY']) )
                {
                        $template['body'] = "<tr>"
@@ -3777,7 +3757,7 @@ class AdminActions extends BaseActions
         */
        public function parse_insplugoptcontent()
        {
-               $option = Admin::$aOption;
+               $option = Admin::getAdminaOption();
                
                $meta = NucleusPlugin::getOptionMeta($option['typeinfo']);
                if ( array_key_exists('access', $meta) && $meta['access'] != 'hidden' )
@@ -3822,7 +3802,7 @@ class AdminActions extends BaseActions
         * @param       void
         * @return      void
         */
-       public function parse_itemnavlist()
+       public function parse_itemnavlist($templateName)
        {
                global $CONF, $manager, $member;
                
@@ -3868,9 +3848,9 @@ class AdminActions extends BaseActions
                
                if ( !empty($search) )
                {
-                       $query .= ' AND ((ititle LIKE "%' . sql_real_escape_string($search) . '%") '
-                               . '  OR  (ibody LIKE "%' . sql_real_escape_string($search) . '%") '
-                               . '  OR  (imore LIKE "%' . sql_real_escape_string($search) . '%"))';
+                       $query .= ' AND ((ititle LIKE ' . DB::quoteValue('%'.$search.'%') . ') '
+                               . '  OR  (ibody LIKE ' . DB::quoteValue('%'.$search.'%') . ') '
+                               . '  OR  (imore LIKE ' . DB::quoteValue('%'.$search.'%') . '))';
                }
                
                if ( postVar('start') )
@@ -3900,34 +3880,20 @@ class AdminActions extends BaseActions
                        . " LIMIT {$start},{$amount}";
                
                $template['content'] = 'itemlist';
-               
+
                $navList = new Navlist($this->skintype, $start, $amount, 0, 1000, $blogid, $search, 0);
-               $navList->showBatchList('item', $query, 'table', $template);
+               $navList->showBatchList('item', $query, 'table', $template, '', $templateName);
                return;
        }
        
        /**
-        * AdminActions::parse_itemoptions()
-        * Parse skinvar itemoptions
-        * Adds the itemOptions of a plugin to a page
-        * @author TeRanEX
-        */
-       public function parse_itemoptions()
-       {
-               $this->parse_pluginoptions('item');
-               return;
-       }
-       
-       /**
-        * AdminActions::parse_itemoptions()
-        * 
+        * AdminActions::parse_itemtime()
         * date change on edit item
         * 
-        * Parse skinvar itemoptions
-        * Adds the itemOptions of a plugin to a page
-        * @author TeRanEX
+        * @param       string  $key    key of PHP's getDate()
+        * @return      void
         */
-       public function parse_itemtime($what)
+       public function parse_itemtime($key)
        {
                global $manager;
                
@@ -3957,7 +3923,7 @@ class AdminActions extends BaseActions
                        $manager->notify('PreAddItemForm', $data);
                }
                $itemtime = getdate($contents['timestamp']);
-               echo $itemtime[$what];
+               echo $itemtime[$key];
                return;
        }
        
@@ -4063,7 +4029,7 @@ class AdminActions extends BaseActions
         */
        public function parse_listplugplugoptionrow($templateName = '')
        {
-               echo listplug_plugOptionRow(Admin::$aOptions, $templateName);
+               echo listplug_plugOptionRow(Admin::getAdminaOption(), $templateName);
                return;
        }
        
@@ -4112,7 +4078,7 @@ class AdminActions extends BaseActions
                                {
                                        $query  = "SELECT icat as result FROM %s WHERE inumber=%d;";
                                        $query = sprintf($query, sql_table('item'), intRequestVar('itemid'));
-                                       $catid  = quickQuery(sprintf($query, intRequestVar('itemid')));
+                                       $catid  = DB::getValue(sprintf($query, intRequestVar('itemid')));
                                        Admin::selectBlogCategory('catid', $catid, 10, 1);
                                }
                                break;
@@ -4169,19 +4135,22 @@ class AdminActions extends BaseActions
                
                $query = "SELECT tmember FROM %s WHERE tblog=%d;";
                $query = sprintf($query, sql_table('team'), (integer) $blogid);
-               $res = sql_query($query);
+               $res = DB::getResult($query);
                
                $tmem = array();
-               while ( $tmember = sql_fetch_object($res) ) 
+               foreach ( $res as $row ) 
                {
-                       $tmem[] = intval($tmember->tmember);
+                       $tmem[] = intval($row['tmember']);
                }
                
                $query  = "SELECT mname as text, mnumber as value FROM %s WHERE mnumber NOT IN (%s);";
                $query = sprintf($query, sql_table('member'), implode(', ', $tmem));
                
-               $template['name']        = 'memberid';
-               $template['tabindex'] = 10000;
+               $template = array(
+                                       'name'          => 'memberid',
+                                       'tabindex'      => 10000,
+                                       'selected'      => 0
+                               );
                Showlist($query, 'select', $template, $templateName);
                return;
        }
@@ -4293,7 +4262,7 @@ class AdminActions extends BaseActions
                global $manager, $DIR_PLUGINS;
                
                $plugid = intGetVar('plugid');
-               $plugName =  getPluginNameFromPid($plugid);
+               $plugName = $manager->getPluginNameFromPid($plugid);
                $plug =& $manager->getPlugin($plugName);
                
                if ( $plug->supportsFeature('HelpPage') > 0 )
@@ -4342,26 +4311,77 @@ class AdminActions extends BaseActions
         * @param       string  $type   type of plugin option
         * @return      void
         */
-       public function parse_pluginoptions($type = 'global')
+       public function parse_pluginoptions($context='global')
        {
-               global $itemid;
+               global $itemid, $manager;
                
-               switch ( $type )
+               switch ( $context )
                {
                        case 'member':
-                               $id = intRequestVar('memberid');
+                               $contextid = intRequestVar('memberid');
                                break;
                        case 'blog':
-                               $id = intRequestVar('blogid');
+                               $contextid = intRequestVar('blogid');
                                break;
                        case 'category':
-                               $id = intRequestVar('catid');
+                               $contextid = intRequestVar('catid');
                                break;
                        case 'item':
-                               $id = $itemid;
+                               $contextid = $itemid;
                                break;
                }
-               Admin::insertPluginOptions($type, $id);
+               
+               /* Actually registererd plugin options */
+               $aIdToValue = array();
+               $query = "SELECT oid, ovalue FROM %s WHERE ocontextid=%d;";
+               $query = sprintf($query, sql_table('plugin_option'), (integer) $contextid);
+               $res = DB::getResult($query);
+               foreach ( $res as $row )
+               {
+                       $aIdToValue[$row['oid']] = $row['ovalue'];
+               }
+               
+               /* Currently available plugin options */
+               $query  = "SELECT * FROM %s, %s WHERE opid=pid and ocontext= %s ORDER BY porder, oid ASC;";
+               $query  = sprintf($query, sql_table('plugin_option_desc'), sql_table('plugin'), DB::quoteValue($context));
+               $res    = DB::getResult($query);
+               
+               $options = array();
+               foreach ($res as $row )
+               {
+                       if ( !array_key_exists($row['oid'], $aIdToValue) )
+                       {
+                               $value = $row['odef'];
+                       }
+                       else
+                       {
+                               $value = $aIdToValue[$row['oid']];
+                       }
+                               
+                       $options[] = array(
+                               'pid'                   => $row['pid'],
+                               'pfile'                 => $row['pfile'],
+                               'oid'                   => $row['oid'],
+                               'value'                 => $value,
+                               'name'                  => $row['oname'],
+                               'description'   => $row['odesc'],
+                               'type'                  => $row['otype'],
+                               'typeinfo'              => $row['oextra'],
+                               'contextid'             => $contextid,
+                               'extra'                 => ''
+                       );
+               }
+               
+               $data = array(
+                       'context'       =>  $context,
+                       'contextid'     =>  $contextid,
+                       'options'       => &$opt4ions
+               );
+               $manager->notify('PrePluginOptionsEdit', $data);
+               
+               $content = $this->parser->skin->getContentFromDB('insertpluginoptions');
+               $this->parser->parse($content);
+               
                return;
        }
        
@@ -4623,26 +4643,27 @@ class AdminActions extends BaseActions
                switch ( $type )
                {
                        case 'skin':
-                               $res = sql_query('SELECT * FROM ' . sql_table('skin_desc'));
-                               while ( $skinObj = sql_fetch_object($res) )
+                               $res = DB::getResult('SELECT * FROM ' . sql_table('skin_desc'));
+                               foreach ( $res as $row )
                                {
                                        $data = array(
-                                               'typeid'        => 'skin[' . $skinObj->sdnumber . ']',
-                                               'expid'         => 'skinexp' . $skinObj->sdnumber,
-                                               'expname'       => Entity::hsc($skinObj->sdname),
-                                               'expdesc'       => Entity::hsc($skinObj->sddesc),
+                                               'typeid'        => 'skin[' . $row['sdnumber'] . ']',
+                                               'expid'         => 'skinexp' . $row['sdnumber'],
+                                               'expname'       => Entity::hsc($row['sdname']),
+                                               'expdesc'       => Entity::hsc($row['sddesc'])
                                        );
                                        echo Template::fill($template, $data);
                                }
                                break;
                        case 'template':
-                               $res = sql_query('SELECT * FROM '.sql_table('template_desc'). " WHERE tdname NOT LIKE 'admin/%%';");
-                               while ($templateObj = sql_fetch_object($res)) {
+                               $res = DB::getResult('SELECT * FROM '.sql_table('template_desc'). " WHERE tdname NOT LIKE 'admin/%%';");
+                               foreach ( $res as $row )
+                               {
                                        $data = array(
-                                               'typeid'        => 'template[' . $templateObj->tdnumber . ']',
-                                               'expid'         => 'templateexp' . $templateObj->tdnumber,
-                                               'expname'       => Entity::hsc($templateObj->tdname),
-                                               'expdesc'       => Entity::hsc($templateObj->tddesc),
+                                               'typeid'        => 'template[' . $row['tdnumber'] . ']',
+                                               'expid'         => 'templateexp' . $row['tdnumber'],
+                                               'expname'       => Entity::hsc($row['tdname']),
+                                               'expdesc'       => Entity::hsc($row['tddesc'])
                                        );
                                        echo Template::fill($template, $data);
                                }
@@ -4735,8 +4756,8 @@ class AdminActions extends BaseActions
                $query  = "SELECT stype FROM %s WHERE stype NOT IN ('%s') AND sdesc = %d;";
                $query = sprintf($query, sql_table('skin'), implode("', '", $nType), $skinid);
                
-               $res    = sql_query($query);
-               if ( $res && sql_num_rows($res) > 0 )
+               $res    = DB::getResult($query);
+               if ( $res && $res->rowCount() > 0 )
                {
                        $data = array();
                        if ( array_key_exists('SPECIALSKINLIST_HEAD', $templates) && !empty($templates['SPECIALSKINLIST_HEAD']) )
@@ -4760,7 +4781,7 @@ class AdminActions extends BaseActions
                        }
                        
                        $tabstart = 75;
-                       while ( $row = sql_fetch_assoc($res) )
+                       foreach ( $res as $row )
                        {
                                $data = array(
                                        'tabindex'      => $tabstart++,
@@ -4851,10 +4872,10 @@ class AdminActions extends BaseActions
                                echo phpversion();
                                break;
                        case 'sqlserverinfo':
-                               echo sql_get_server_info();
+                               echo DB::getAttribute(PDO::ATTR_SERVER_VERSION);
                                break;
                        case 'sqlclientinfo':
-                               echo sql_get_client_info();
+                               echo DB::getAttribute(PDO::ATTR_CLIENT_VERSION);
                                break;
                        case 'magicquotesgpc':
                                echo ini_get('magic_quotes_gpc') ? 'On' : 'Off';
@@ -5022,7 +5043,7 @@ class AdminActions extends BaseActions
                {
                        $query = 'SELECT COUNT(*) as result FROM ' . sql_table('blog');
                        
-                       $total = quickQuery($query);
+                       $total = DB::getValue($query);
                        if ( $total > $amount )
                        {
                                echo '<p><a href="index.php?action=overview&amp;showall=yes">' . _OVERVIEW_SHOWALL . '</a></p>';
@@ -5610,7 +5631,7 @@ class AdminActions extends BaseActions
         * @param               $templateName
         * @param               $showlist
         */
-       private function input_yesno($name,
+       public function input_yesno($name,
                                                                $checkedval,
                                                                $tabindex        = 0,
                                                                $value1    = 1,
@@ -5704,26 +5725,301 @@ class AdminActions extends BaseActions
        {
                global $DIR_PLUGINS;
                
-               $candidates = array();
+               $query = "SELECT * FROM %s;";
+               $query = sprintf($query, sql_table('plugin'));
+               $res  = DB::getResult($query);
+               
+               $installed = array();
+               foreach( $res as $row )
+               {
+                       $installed[] = $row['pfile'];
+               }
+               
                $files = scandir($DIR_PLUGINS);
                
+               $candidates = array();
                foreach ( $files as $file )
                {
-                       if ( preg_match("#^NP_(.*)\.php$#", $file, $matches) )
+                       if ( preg_match("#^(NP_.*)\.php$#", $file, $matches) )
                        {
-                               $name = $matches[1];
-                               $query = "SELECT * FROM %s WHERE pfile='%s';";
-                               $query = sprintf($query, sql_table('plugin'), sql_real_escape_string("{NP_{$name}"));
-                               $res  = sql_query($query);
-                               
-                               if ( sql_num_rows($res) == 0 )
+                               if ( !in_array($matches[1], $installed) )
                                {
-                                       $candidates[] = $name;
+                                       $candidates[] = $matches[1];
                                }
                        }
-                       continue;
                }
                $this->newPlugCandidates = $candidates;
                return (count($candidates) > 0);
        }
+       
+       /**
+        * AdminActions::pagehead()
+        * Output admin page head
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_pagehead()
+       {
+               global $member, $nucleus, $CONF, $manager;
+               
+               $content = $this->parser->skin->getContentFromDB('pagehead');
+               if ( !$content )
+               {
+                       $extrahead = Admin::$extrahead;
+                       $data = array(
+                               'extrahead'     => &$extrahead,
+                               'action'        =>  Admin::$action
+                       );
+                       $manager->notify('AdminPrePageHead', $data);
+                       
+                       $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 '(';
+                       
+                       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);
+               }
+               
+               return;
+       }
+       
+       /**
+        * AdminActionss::pagefoot()
+        * Output admin page foot include quickmenu
+        * 
+        * @param       void
+        * @return      void
+        */
+       public function parse_pagefoot()
+       {
+               global $action, $member, $manager;
+               
+               $content = $this->parser->skin->getContentFromDB('pagefoot');
+               if ( !$content )
+               {
+                       $data = array(
+                               'action' => self::$action
+                       );
+                       $manager->notify('AdminPrePageFoot', $data);
+                       
+                       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']   = -1;
+                               $template['shorten']    = 10;
+                               $template['shortenel']  = '';
+                               $template['javascript'] = 'onchange="return form.submit()"';
+                               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->skin->parse('pagefoot');
+                       exit;
+               }
+               
+               return;
+       }
 }