Index: branches/2.8.x/CHANGELOG
===================================================================
--- branches/2.8.x/CHANGELOG	(revision 1838)
+++ branches/2.8.x/CHANGELOG	(revision 1839)
@@ -12,7 +12,9 @@
 ===============================================================================
 
 
-
+21 Dez-2012 Build 1839 Werner v.d.Decken(DarkViper)
+! the second optimization of runtime by recoding /admin/pages/index.php
++ new class a_pages_PageTree() for use with /admin/pages/index.php
 13 Dez-2012 Build 1838 Dietmar Woellbrink (Luisehahne)
 ! groups management now completely html valide
 13 Dez-2012 Build 1837 Dietmar Woellbrink (Luisehahne)
Index: branches/2.8.x/wb/admin/skel/themes/htt/pages.htt
===================================================================
--- branches/2.8.x/wb/admin/skel/themes/htt/pages.htt	(revision 1838)
+++ branches/2.8.x/wb/admin/skel/themes/htt/pages.htt	(revision 1839)
@@ -1,90 +1,86 @@
 <!-- BEGIN main_block -->
 <div class="{DISPLAY_ADD} left">
-<h2>{HEADING_ADD_PAGE}</h2>
-<form name="add" action="add.php" method="post">
-{FTAN}
-<table summary="" cellpadding="2" cellspacing="0" border="0" width="100%" align="center">
-  <tr>
-	<td width="70" height="20">{TEXT_TITLE}:</td>
-	<td width="240" height="20"><input type="text" name="title" style="width: 232px;" /></td>
-	<td rowspan="6" valign="top" style="padding-left: 20px; padding-top: 8px;">{TEXT_ADMINISTRATORS}:
-		<ul style="list-style-type: none; margin: 0; padding: 0;">
-			<!-- BEGIN group_list_block -->
-			<li>
-			<input type="checkbox" name="admin_groups[]" id="admin_group_{ID}" value="{ID}"{CHECKED}{DISABLED} />
-			<label for="admin_group_{TOGGLE}">{NAME}</label>
-			</li>
-			<!-- END group_list_block -->
-		</ul>
-	</td>
-	<td rowspan="6" valign="top" style="padding-left: 20px; padding-top: 8px;">
-		<div id="viewers" style="display: none;">{TEXT_REGISTERED_VIEWERS}:
-			<ul style="list-style-type: none; margin: 0; padding: 0;">
-				<!-- BEGIN group_list_block2 -->
-				<li>
-				<input type="checkbox" name="viewing_groups[]" id="viewing_group_{ID}" value="{ID}"{CHECKED}{DISABLED} />
-				<label for="viewing_group_{TOGGLE}">{NAME}</label>
-				</li>
-				<!-- END group_list_block2 -->
-			</ul>
-		</div>
-	</td>
-  </tr>
-  <tr>
-	<td width="70">{TEXT_TYPE}:</td>
-	<td width="240">
-		<select name="type" style="width: 240px;">
-			<!-- BEGIN module_list_block -->
-				<option value="{VALUE}"{SELECTED}>{NAME}</option>
-			<!-- END module_list_block -->
-		</select>
-	</td>
-  </tr>
-  <tr>
-	<td width="70">{TEXT_PARENT}:</td>
-	<td width="240">
-		<select  name="parent" style="width: 240px;" onchange="return disabled_hack_for_ie(this);">
-			<!-- BEGIN page_list_block2 -->
-			<option value="{ID}"{DISABLED} style="background: {FLAG_ROOT_ICON} no-repeat center left; padding-left: 20px;">{TITLE}</option>
-			<!-- END page_list_block2 -->
-		</select>
-	</td>
-  </tr>
-  <tr>
-	<td width="70">{TEXT_VISIBILITY}:</td>
-	<td width="240">
-		<select name="visibility" onchange="javascript: toggle_viewers();" style="width: 240px;">
-			<option value="public"{SELECTED}>{TEXT_PUBLIC}</option>
-			<option value="private">{TEXT_PRIVATE}</option>
-			<option value="registered">{TEXT_REGISTERED}</option>
-			<option value="hidden">{TEXT_HIDDEN}</option>
-			<option value="none">{TEXT_NONE}</option>
-		</select>
-	</td>
-  </tr>
-  <tr>
-	<td width="70">&nbsp;</td>
-	<td colspan="4">
-		<input type="submit" name="submit" value="{TEXT_ADD}" style="width: 117px;" />
-		<input type="reset" name="reset" value="{TEXT_RESET}" style="width: 117px;" />
-	</td>
-  </tr>
-  <tr>
-	<td>&nbsp;</td>
-	<td>&nbsp;</td>
-  </tr>
-</table>
-</form>
+	<h2>{HEADING_ADD_PAGE}</h2>
+		<form name="add" action="add.php" method="post">
+		{FTAN}
+		<table summary="" cellpadding="2" cellspacing="0" border="0" width="100%" align="center">
+			<tr>
+				<td width="70" height="20">{TEXT_TITLE}:</td>
+				<td width="240" height="20"><input type="text" name="title" style="width: 232px;" /></td>
+				<td rowspan="6" valign="top" style="padding-left: 20px; padding-top: 8px;">{TEXT_ADMINISTRATORS}:
+					<ul style="list-style-type: none; margin: 0; padding: 0;">
+					<!-- BEGIN admingroups_list_block -->
+						<li>
+							<input type="checkbox" name="admin_groups[]" id="admin_group_{ID}" value="{ID}"{CHECKED}{DISABLED} />
+							<label for="admin_group_{ID}">{NAME}</label>
+						</li>
+					<!-- END admingroups_list_block -->
+					</ul>
+				</td>
+				<td rowspan="6" valign="top" style="padding-left: 20px; padding-top: 8px;">
+					<div id="viewers" style="display: none;">{TEXT_REGISTERED_VIEWERS}:
+						<ul style="list-style-type: none; margin: 0; padding: 0;">
+						<!-- BEGIN viewergroups_list_block -->
+							<li>
+								<input type="checkbox" name="viewing_groups[]" id="viewing_group_{ID}" value="{ID}"{CHECKED}{DISABLED} />
+								<label for="viewing_group_{ID}">{NAME}</label>
+							</li>
+						<!-- END viewergroups_list_block -->
+						</ul>
+					</div>
+				</td>
+			</tr>
+			<tr>
+				<td width="70">{TEXT_TYPE}:</td>
+				<td width="240">
+					<select name="type" style="width: 240px;">
+					<!-- BEGIN module_list_block -->
+						<option value="{DIRECTORY}"{SELECTED}>{NAME}</option>
+					<!-- END module_list_block -->
+					</select>
+				</td>
+			</tr>
+			<tr>
+				<td width="70">{TEXT_PARENT}:</td>
+				<td width="240">
+					<select  name="parent" class="pages-parent-list" style="width: 240px;" onchange="return disabled_hack_for_ie(this);">
+					<!-- BEGIN parents_list_block -->
+						<option value="{ID}"{DISABLED}{FLAG_ROOT_ICON}>{TITLE}</option>
+					<!-- END parents_list_block -->
+					</select>
+				</td>
+			</tr>
+			<tr>
+				<td width="70">{TEXT_VISIBILITY}:</td>
+				<td width="240">
+					<select name="visibility" onchange="javascript: toggle_viewers();" style="width: 240px;">
+						<option value="public"{SELECTED}>{TEXT_PUBLIC}</option>
+						<option value="private">{TEXT_PRIVATE}</option>
+						<option value="registered">{TEXT_REGISTERED}</option>
+						<option value="hidden">{TEXT_HIDDEN}</option>
+						<option value="none">{TEXT_NONE}</option>
+					</select>
+				</td>
+			</tr>
+			<tr>
+				<td width="70">&nbsp;</td>
+				<td colspan="4">
+					<input type="submit" name="submit" value="{TEXT_ADD}" style="width: 117px;" />
+					<input type="reset" name="reset" value="{TEXT_RESET}" style="width: 117px;" />
+				</td>
+			</tr>
+			<tr>
+				<td>&nbsp;</td>
+				<td>&nbsp;</td>
+			</tr>
+		</table>
+	</form>
 </div>
 <div class="{DISPLAY_INTRO}" style="padding-top: 10px;">
-<br />
-<h2>{HEADING_MODIFY_INTRO_PAGE}</h2>
-<a href="intro.php">{INTRO_LINK}</a>
+	<br />
+	<h2>{HEADING_MODIFY_INTRO_PAGE}</h2>
+	<a href="intro.php" title="{INTRO_LINK}">{INTRO_LINK}</a>
 </div>
 <!-- Addition for remembering expanded state of pages -->
-<script type="text/javascript">
-var THEME_URL = '{THEME_URL}';
-var WB_URL = '{WB_URL}';
-</script>
 <script src="{ADMIN_URL}/pages/page_index.js" type="text/javascript"></script>
 <!-- END main_block -->
Index: branches/2.8.x/wb/admin/pages/PageTree.php
===================================================================
--- branches/2.8.x/wb/admin/pages/PageTree.php	(nonexistent)
+++ branches/2.8.x/wb/admin/pages/PageTree.php	(revision 1839)
@@ -0,0 +1,464 @@
+<?php
+
+/**
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * 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 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+/**
+ * Description of PageTree
+ *
+ * @category     WbACP
+ * @package      WbACP_Pages
+ * @author       Werner v.d. Decken <wkl@isteam.de>
+ * @copyright    Werner v.d. Decken <wkl@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      1.0.0
+ * @revision     $Revision$
+ * @link         $HeadURL$
+ * @lastmodified $Date$
+ * @since        file added on 2012-12-21
+ */
+	
+class a_pages_PageTree
+{
+/** @var array language definitions */
+	private $_TEXT     = null;
+/** @var array language definitions */
+	private $_MESSAGE  = null;
+/** @var array language definitions */
+	private $_HEADING  = null;
+/** @var object instance of the application object */
+	private $_oApp     = null;
+/** @var object instance of the database object */
+	private $_oDb      = null;
+/** @var array holds several values from the application global scope */	
+	private $_aReg     = array();
+/** @var string full HTML formattet list of pages */
+	private $_sOutput         = '';
+/** @var integer number of all reachable pages */	
+	private $_iPagesTotal     = 0;
+/** @var integer number of all writeable pages */	
+	private $_iPagesWriteable = 0;
+/** @var integer index for toggle background color of the list */	
+	private $_iLineColor      = 0;
+/** @var array entries to build a select list for parents */	
+	private $_aParentList     = array();
+/** @var integer count all executed database requests passing all iterations. */
+	private $_queries = 0;
+/**
+ * constructor used to import some application constants and objects
+ */	
+	public function __construct() 
+	{
+		// import global vars and objects
+		$this->_wbAdaptor();
+	}
+/**
+ * parse the page tree and return
+ * @return type
+ */	
+	public function parseTree() {
+		return $this->_createTree();
+	}
+/**
+ *  parse the page tree and print it out
+ */	
+	public function displayTree() {
+		echo $this->parseTree();
+	}
+/**
+ * total number of found pages which are visible for actual user
+ * @return integer
+ */	
+	public function getTotalPages() {
+		return $this->_iPagesTotal;
+	}
+/**
+ * number of found pages which are writable for actual user
+ * @return integer
+ */	
+	public function getWriteablePages() {
+		return $this->_iPagesWriteable;
+	}
+/**
+ * a list with all possible parent pages
+ * @return array
+ */	
+	public function getParentList() {
+		if(!$this->_sOutput) {
+			$this->parseTree();
+		}
+		return $this->_aParentList;
+	}
+/**
+ * used to import some WB-constants and objects
+ */	
+	private function _wbAdaptor()
+	{
+		$this->_TEXT        = $GLOBALS['TEXT'];
+		$this->_MESSAGE     = $GLOBALS['MESSAGE'];
+		$this->_HEADING     = $GLOBALS['HEADING'];
+		$this->_oApp        = $GLOBALS['admin'];
+		$this->_oDb         = WbDatabase::getInstance();
+		$this->_aReg['PAGE_TRASH']       = PAGE_TRASH;
+		$this->_aReg['PAGE_LEVEL_LIMIT'] = PAGE_LEVEL_LIMIT;
+		$this->_aReg['MANAGE_SECTIONS']  = MANAGE_SECTIONS;
+		$this->_aReg['WB_URL']           = WB_URL;
+		$this->_aReg['WB_REL']           = WB_REL;
+		$this->_aReg['ACP_REL']          = ADMIN_REL;
+		$this->_aReg['THEME_REL']        = THEME_REL;
+		$this->_aReg['TABLE_PREFIX']     = TABLE_PREFIX;
+	}
+/**
+ * create a page tree as a well formatted, unordered list
+ * @return string the whoole list
+ */
+	private function _createTree()
+	{
+		// compose the complete list
+		$sOutput = ''
+		// build the head
+		      . $this->_Tabs(0 , true).'<div class="pages_list">'.PHP_EOL
+		      . $this->_Tabs(1).'<table>'.PHP_EOL
+		      . $this->_Tabs(1).'<tbody>'.PHP_EOL
+		      . $this->_Tabs(1).'<tr class="pages_list_header">'.PHP_EOL
+		      . $this->_Tabs(1).'<th class="header_list_menu_title">'.$this->_TEXT['VISIBILITY'].
+		                        ' / '.$this->_TEXT['MENU_TITLE'].':</th>'.PHP_EOL
+		      . $this->_Tabs(0).'<th class="header_list_page_title">'.$this->_TEXT['PAGE_TITLE'].
+		                        '</th>'.PHP_EOL
+		      . $this->_Tabs(0).'<th class="header_list_page_id">PID</th>'.PHP_EOL
+		      . $this->_Tabs(0).'<th class="header_list_actions">'.$this->_TEXT['ACTIONS'].
+		                        ':</th>'.PHP_EOL
+		      . $this->_Tabs(0).'<th class="list_page_id">&nbsp;</th>'.PHP_EOL
+		      . $this->_Tabs(-1).'</tr>'.PHP_EOL
+		      . $this->_Tabs(-1).'</tbody>'.PHP_EOL
+		      . $this->_Tabs(-1).'</table>'.PHP_EOL
+		// generate the page lines
+		      . $this->_IterateTree()
+		// build the footer
+		      . $this->_Tabs(-1).'</div>'.PHP_EOL;
+		;
+		$this->_sOutput = $sOutput;
+		return $sOutput;
+	}
+/**
+ * Create a string of multiple TABs to prettify the HTML-output
+ * ingrease the number of TABs with a positive and degrease with an negative Value.
+ * '0' means: do not change the value. Or set an absolute number using $bRelative=false
+ * @staticvar int $iTabLevel
+ * @param integer $iTabsDiv number of TABs to add/sub
+ * @param bool $bRelative false if should be set to absolute value
+ * @return string
+ */
+	private function _Tabs($iTabsDiv = 0, $bRelative = true)
+	{
+		static $iTabLevel = 0;
+		$iTabLevel = ($bRelative ? $iTabLevel + $iTabsDiv : $iTabsDiv);
+		$iTabLevel += ($iTabLevel < 0 ? 0 - $iTabLevel : $iTabsDiv);
+		return str_repeat("\t", $iTabLevel);
+	}
+/**
+ * compose the needed SQL statement
+ * @param integer $iParentKey
+ * @return string SQL statement
+ */			
+	private function _makeSql($iParentKey = 0)
+	{
+		if($this->_aReg['PAGE_TRASH'] != 'inline') {
+			$sUseTrash = ' AND `visibility`!=\'deleted\'';
+		}else { $sUseTrash = ''; }
+		$sql = 'SELECT ( SELECT COUNT(*) '
+		     .          'FROM `'.$this->_aReg['TABLE_PREFIX'].'pages` `x` '
+		     .          'WHERE x.`parent`=p.`page_id`'
+		     .        ') `children`, '
+		     .        's.`module`, MAX(s.`publ_start` + s.`publ_end`) published, p.`link`, '
+		     .        '(SELECT MAX(`position`) FROM `'.$this->_aReg['TABLE_PREFIX'].'pages` '
+		     .        'WHERE `parent`='.$iParentKey.') max_position, '
+		     .        '0 min_position, '
+		     .        'p.`position`, '
+		     .        'p.`page_id`, p.`parent`, p.`level`, p.`language`, p.`admin_groups`, '
+		     .        'p.`admin_users`, p.`viewing_groups`, p.`viewing_users`, p.`visibility`, '
+		     .        'p.`menu_title`, p.`page_title`, p.`page_trail` '
+		     . 'FROM `'.$this->_aReg['TABLE_PREFIX'].'pages` p '
+		     .    'INNER JOIN `'.$this->_aReg['TABLE_PREFIX'].'sections` s '
+		     .    'ON p.`page_id`=s.`page_id` '
+		     . 'WHERE `parent`='.$iParentKey.$sUseTrash.' '
+		     . 'GROUP BY p.`page_id` '
+		     . 'ORDER BY p.`position` ASC';
+		return $sql;
+	}
+/**
+ * iterate through all nodes which having subnodes 
+ * @param integer $iParent
+ * @return string all of the item lines 
+ */	
+	private function _IterateTree($iParent = 0)
+	{
+		$sOutput = '';
+		// Get page list from database
+		if(($oPages = $this->_oDb->query($this->_makeSql($iParent)))) 
+		{
+			$this->_queries++;
+			// output block-header
+			$sOutput .= $this->_Tabs(0).'<ul id="p'.$iParent.'" class="page_list"';
+			if(!$iParent) {
+				$sOutput .= ' style="display: block;"';
+			}else {
+			// show block depending from Cookies
+				if (isset ($_COOKIE['p'.$iParent]) && $_COOKIE['p'.$iParent] == '1') {
+					$sOutput .= ' style="display: block;"';
+				}
+			}
+			$sOutput .= '>'.PHP_EOL;
+			$iMinPosition = 1;
+			while($aPage = $oPages->fetchRow(MYSQL_ASSOC))
+			{ // iterate through the current branch
+				$aPage['min_position'] = ($aPage['position'] < $iMinPosition ? $aPage['position'] : $iMinPosition);
+				$this->_iLineColor = $this->_iPagesTotal++ % 2;
+				$aPage['iswriteable'] = false;
+				if( $this->_oApp->ami_group_member($aPage['admin_users']) ||
+					$this->_oApp->is_group_match($this->_oApp->get_groups_id(), $aPage['admin_groups']))
+				{
+					if(($aPage['visibility'] == 'deleted' && $this->_aReg['PAGE_TRASH'] == 'inline') ||
+					   ($aPage['visibility'] != 'deleted'))
+					{
+						$aPage['iswriteable'] = true;
+						$this->_iPagesWriteable++;
+					}
+				} else {
+					if($aPage['visibility'] == 'private') { continue; }
+				}
+				// add this item to the secondary list of parents
+				$this->_addToParentList($aPage);
+				$sOutput .= $this->_createListItem($aPage);
+			}
+			$sOutput .= $this->_Tabs(-1).'</ul>'.PHP_EOL;
+		}
+		return $sOutput;
+	}
+/**
+ * formating the given page object for output
+ * @param type $aPage
+ * @return string
+ */
+	private function _createListItem($aPage)
+	{
+	// output the current item
+	// --- HEADER ------------------------------------------------------------------------
+		$sOutput  = $this->_Tabs(0).'<li class="p'.$aPage['parent'].'">'.PHP_EOL
+		          . $this->_Tabs(1).'<table class="pages_view">'.PHP_EOL
+		          . $this->_Tabs(1).'<tbody>'.PHP_EOL
+		          . $this->_Tabs(1).'<tr class="row_'.$this->_iLineColor.'">'.PHP_EOL;
+	// --- TAB 1 --- (expand/collapse) ---------------------------------------------------
+		$sOutput .= $this->_Tabs(1).'<td valign="middle" width="20" style="padding-left: '
+		          . (int)($aPage['level']*20).'px;">';
+		if((bool)$aPage['children']) {
+			$sOutput .= '<a href="javascript:toggle_visibility(\'p'.$aPage['page_id'].'\');" '
+			          . 'title="'.$this->_TEXT['EXPAND'].'/'.$this->_TEXT['COLLAPSE'].'">'
+			          . '<span><img src="'.$this->_aReg['THEME_REL'].'/images/'
+			          . ( ((isset($_COOKIE['p'.$aPage['page_id']]) 
+						  && $_COOKIE['p'.$aPage['page_id']] == '1') ? 'minus' : 'plus')
+						)
+			          . '_16.png" onclick="toggle_plus_minus(\''.$aPage['page_id'].'\');" '
+			          . 'name="plus_minus_'.$aPage['page_id'].'" alt="+" /></span></a>';
+		}else {
+			$sOutput .= '&nbsp;';
+		}
+		$sOutput .= '</td>'.PHP_EOL;
+	// --- TAB 2 --- (menu title) --------------------------------------------------------
+		switch($aPage['visibility']):
+			case 'private':
+				$sIcon = 'private_16.png';
+				$sText = $this->_TEXT['PRIVATE'];
+				break;
+			case 'registered':
+				$sIcon = 'keys_16.png';
+				$sText = $this->_TEXT['REGISTERED'];
+				break;
+			case 'hidden':
+				$sIcon = 'hidden_16.png';
+				$sText = $this->_TEXT['HIDDEN'];
+				break;
+			case 'none':
+				$sIcon = 'none_16.png';
+				$sText = $this->_TEXT['NONE'];
+				break;
+			case 'deleted':
+				$sIcon = 'deleted_16.png';
+				$sText = $this->_TEXT['DELETED'];
+				break;
+			default: // public
+				$sIcon = 'visible_16.png';
+				$sText = $this->_TEXT['PUBLIC'];
+				break;
+		endswitch;
+		$sOutput .= $this->_Tabs(0).'<td class="list_menu_title">';
+		if($this->_oApp->get_permission('pages_modify') && $aPage['iswriteable']) {
+			$sOutput .= '<a href="'.$this->_aReg['ACP_REL'].'/pages/modify.php?page_id='
+			          . $aPage['page_id'].'" title="'.$this->_TEXT['MODIFY'].'">';
+		}
+		$sOutput .= '<img src="'.$this->_aReg['THEME_REL'].'/images/'.$sIcon.'" '
+		          . 'alt="'.$this->_TEXT['VISIBILITY'].': '.$sText.'" class="page_list_rights" />';
+		if($this->_oApp->get_permission('pages_modify') && $aPage['iswriteable']) {
+			$sOutput .= '<span class="modify_link">'.$aPage['menu_title'].'</span></a>';
+		}else {
+			$sOutput .=  '<span class="bold grey">'.$aPage['menu_title'].'</span>';
+		}
+		$sOutput .= '</td>'.PHP_EOL;
+	// --- TAB 3 --- (page title) --------------------------------------------------------
+		$sOutput .= $this->_Tabs(0).'<td class="list_page_title">'.$aPage['page_title'].'</td>'.PHP_EOL;
+	// --- TAB 4 --- (page ID) -----------------------------------------------------------
+		$sOutput .= $this->_Tabs(0).'<td class="list_page_id right">'.$aPage['page_id'].'</td>'.PHP_EOL;
+	// --- TAB 5 --- (show this page in new window) --------------------------------------
+		$sOutput .= $this->_Tabs(0).'<td class="list_actions">';
+		if($aPage['visibility'] != 'deleted' && $aPage['visibility'] != 'none') {
+			$sPageLink = $this->_aReg['WB_REL'].preg_replace(
+			                                 '/^'.preg_quote($this->_aReg['WB_URL'], '/').'/siU', 
+			                                 '', 
+			                                 $this->_oApp->page_link($aPage['link'])
+			                                );
+			$sOutput .= '<a href="'.$sPageLink.'" target="_blank" title="'.$this->_TEXT['VIEW']
+			          . '"><img src="'.$this->_aReg['THEME_REL'].'/images/view_16.png" alt="'
+			          . $this->_TEXT['VIEW'].'" /></a>';
+		}else { 
+			$sOutput .= '<img src="'.$this->_aReg['THEME_REL'].'/images/blank_16.gif" alt=" " />'; 
+		}
+		$sOutput .= '</td>'.PHP_EOL;
+
+	// --- TAB 6 --- (edit settings) -----------------------------------------------------
+		$sOutput .= $this->_Tabs(0).'<td class="list_actions">';
+		if($aPage['visibility'] != 'deleted') { 
+			if($this->_oApp->get_permission('pages_settings') && $aPage['iswriteable']) {
+				$sOutput .= '<a href="'.$this->_aReg['ACP_REL'].'/pages/settings.php?page_id='
+				          . $aPage['page_id'].'" title="'.$this->_TEXT['SETTINGS'].'">'
+				          . '<img src="'.$this->_aReg['THEME_REL'].'/images/modify_16.png" alt="'
+				          . $this->_TEXT['SETTINGS'].'" /></a>';
+			}
+		}else {
+			$sOutput .= '<a href="'.$this->_aReg['ACP_REL'].'/pages/restore.php?page_id='.$aPage['page_id'].'" '
+			          . 'title="'.$this->_TEXT['RESTORE'].'"><img src="'.$this->_aReg['THEME_REL']
+			          . '/images/restore_16.png" alt="'.$this->_TEXT['RESTORE'].'" /></a>';
+		}
+		$sOutput .= '</td>'.PHP_EOL;
+
+	// --- TAB 7 --- (edit sections) -----------------------------------------------------
+		$sOutput .= $this->_Tabs(0).'<td class="list_actions">';
+		if( $this->_aReg['MANAGE_SECTIONS'] && $this->_oApp->get_permission('pages_add') && $aPage['iswriteable'] ) {
+			$file = $this->_oApp->page_is_active($aPage) ? "clock_16.png" : "clock_red_16.png";
+			$file = ($aPage['published'] && $aPage['module'] != 'menu_link') ? $file : 'noclock_16.png';
+			$sOutput .= '<a href="'.$this->_aReg['ACP_REL'].'/pages/sections.php?page_id='
+			          . $aPage['page_id'].'" title="'.$this->_HEADING['MANAGE_SECTIONS'].'">'
+			          . '<img src="'.$this->_aReg['THEME_REL'].'/images/'.$file.'" alt="'
+			          . $this->_HEADING['MANAGE_SECTIONS'].'" /></a>';
+		}else { 
+			$sOutput .= '<img src="'.$this->_aReg['THEME_REL'].'/images/blank_16.gif" alt=" " />'; 
+		}
+		$sOutput .= '</td>'.PHP_EOL;
+
+	// --- TAB 8 --- (move up) -----------------------------------------------------------
+		$sOutput .= $this->_Tabs(0).'<td class="list_actions">';
+		if($aPage['position'] > $aPage['min_position']) {
+			if($aPage['visibility'] != 'deleted') {
+				if($this->_oApp->get_permission('pages_settings') && $aPage['iswriteable']) {
+					$sOutput .= '<a href="'.$this->_aReg['ACP_REL'].'/pages/move_up.php?page_id='
+					          . $aPage['page_id'].'" title="'.$this->_TEXT['MOVE_UP']
+					          . '"><img src="'.$this->_aReg['THEME_REL'].'/images/up_16.png" alt="'
+					          . $this->_TEXT['MOVE_UP'].'" /></a>';
+				}
+			}
+		}
+		$sOutput .= '</td>'.PHP_EOL;
+
+	// --- TAB 9 --- (move down) ---------------------------------------------------------
+		$sOutput .= $this->_Tabs(0).'<td class="list_actions">';
+		if($aPage['position'] < $aPage['max_position']) {
+			if($aPage['visibility'] != 'deleted') {
+				if($this->_oApp->get_permission('pages_settings') && $aPage['iswriteable']) {
+					$sOutput .= '<a href="'.$this->_aReg['ACP_REL'].'/pages/move_down.php?page_id='
+					          . $aPage['page_id'].'" title="'.$this->_TEXT['MOVE_DOWN']
+					          . '"><img src="'.$this->_aReg['THEME_REL'].'/images/down_16.png" alt="'
+					          . $this->_TEXT['MOVE_DOWN'].'" /></a>';
+				}
+			}
+		}
+		$sOutput .= '</td>'.PHP_EOL;
+
+	// --- TAB 10 --- (delete page) ------------------------------------------------------
+		$sOutput .= $this->_Tabs(0).'<td class="list_actions">';
+		if($this->_oApp->get_permission('pages_delete') && $aPage['iswriteable']) {
+			$sOutput .= '<a href="javascript:confirm_link(pages_delete_confirm+\'?\',\''
+			          . $this->_aReg['ACP_REL'].'/pages/delete.php?page_id='
+			          . $this->_oApp->getIDKEY($aPage['page_id']).'\');" title="'
+			          . $this->_TEXT['DELETE'].'"><img src="'.$this->_aReg['THEME_REL']
+			          . '/images/delete_16.png" alt="'.$this->_TEXT['DELETE'].'" /></a>';
+		}else { 
+			$sOutput .= '<img src="'.$this->_aReg['THEME_REL'].'/images/blank_16.gif" alt=" " />'; 
+		}
+		$sOutput .= '</td>'.PHP_EOL;
+
+	// --- TAB 11 --- (add child page) ---------------------------------------------------
+		$sOutput .= $this->_Tabs(0).'<td class="list_actions">';
+		if( 
+			$this->_oApp->get_permission('pages_add')
+			&& $aPage['iswriteable'] 
+			&& ($aPage['visibility'] != 'deleted') 
+			&& $aPage['level'] < ($this->_aReg['PAGE_LEVEL_LIMIT'] - 1)
+		  )
+		{
+			$sOutput .= '<a href="javascript:add_child_page(\''.$aPage['page_id'].'\');" '
+			          . 'title="'.$this->_HEADING['ADD_CHILD_PAGE'].'"><img src="'
+			          . $this->_aReg['THEME_REL'].'/images/siteadd.png" name="addpage_'.$aPage['page_id']
+			          . '" alt="'.$this->_HEADING['ADD_CHILD_PAGE'].'" /></a>';
+		}else { 
+			$sOutput .= '&nbsp;'; 
+		}
+		$sOutput .= '</td>'.PHP_EOL;
+	// --- TAB 12 --- (show language) ----------------------------------------------------
+		$sOutput .= $this->_Tabs(0).'<td class="list_page_id center">'.$aPage['language'].'</td>'.PHP_EOL;
+	// --- FOOTER ------------------------------------------------------------------------
+		$sOutput .= $this->_Tabs(-1).'</tr>'.PHP_EOL
+		          . $this->_Tabs(-1).'</tbody>'.PHP_EOL
+		          . $this->_Tabs(-1).'</table>'.PHP_EOL;
+	// if there children, iterate through this children now
+		if((bool)$aPage['children']) {
+			$sOutput .= $this->_IterateTree($aPage['page_id']);
+		}
+		$sOutput .= $this->_Tabs(-1).'</li>'.PHP_EOL;
+		return $sOutput;
+	} // end of method _createListItem
+/**
+ * build a list of possible parent pages
+ * @param array $aPage 
+ */	
+	private function _addToParentList(array $aPage)
+	{
+		if( ($aPage['level'] < ($this->_aReg['PAGE_LEVEL_LIMIT'] - 1))
+			&& $aPage['iswriteable'] 
+			&& ($aPage['visibility'] != 'deleted')
+			&& $this->_oApp->get_permission('pages_add') ) 
+		{
+			$aNewEntry = array();
+			$aNewEntry['ID']             = $aPage['page_id'];
+			$aNewEntry['TITLE']          = $aPage['menu_title'];
+			$aNewEntry['DISABLED']       = ($aPage['iswriteable'] ? 0 : 1);
+			$aNewEntry['PARENT']         = $aPage['parent'];
+			$aNewEntry['FLAG_ROOT_ICON'] = '';
+			$aNewEntry['LEVEL']          = $aPage['level'];
+			$aNewEntry['LANGUAGE']       = $aPage['language'];
+			$this->_aParentList[]        = $aNewEntry;
+		}
+	}
+	
+} // end of class PageTree

Property changes on: branches/2.8.x/wb/admin/pages/PageTree.php
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Date Author Id Revision HeadURL
\ No newline at end of property
Index: branches/2.8.x/wb/admin/pages/index.php
===================================================================
--- branches/2.8.x/wb/admin/pages/index.php	(revision 1838)
+++ branches/2.8.x/wb/admin/pages/index.php	(revision 1839)
@@ -1,526 +1,245 @@
 <?php
-/**
+
+/** 
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
  *
- * @category        admin
- * @package         pages
- * @author          Ryan Djurovich, WebsiteBaker Project
- * @copyright       2009-2012, Website Baker Org. e.V.
- * @link			http://www.websitebaker2.org/
- * @license         http://www.gnu.org/licenses/gpl.html
- * @platform        WebsiteBaker 2.8.x
- * @requirements    PHP 5.2.2 and higher and higher
- * @version         $Id$
- * @filesource		$HeadURL$
- * @lastmodified    $Date$
+ * 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 3 of the License, or
+ * (at your option) any later version.
  *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
+/**
+ * calling file to create ACP-Pagetree
+ *
+ * @category     WbACP
+ * @package      WbACP_Pages
+ * @author       Werner v.d. Decken <wkl@isteam.de>
+ * @copyright    Werner v.d. Decken <wkl@isteam.de>
+ * @license      http://www.gnu.org/licenses/gpl.html   GPL License
+ * @version      1.0.0
+ * @revision     $Revision$
+ * @link         $HeadURL$
+ * @lastmodified $Date$
+ * @since        file added on 2012-12-21
+ * @todo         rebuild this file to go into coding standards (sideeffects!!!)
+ */
 
-require('../../config.php');
-require_once(WB_PATH.'/framework/class.admin.php');
-$admin = new admin('Pages', 'pages');
-$admin->clearIDKEY();
-// Include the WB functions file
-require_once(WB_PATH.'/framework/functions.php');
-// eggsurplus: add child pages for a specific page
-/**/
-
-echo '<script type="text/javascript" src="'.ADMIN_URL.'/pages/eggsurplus.js"></script>'.PHP_EOL;
-// fixes A URI contains impermissible characters or quotes around the URI are not closed.
-$MESSAGE['PAGES_DELETE_CONFIRM'] = url_encode(  $MESSAGE['PAGES_DELETE_CONFIRM'] );
-
-function set_node ($parent,& $par)
-{
-    $retval = '';
-	if ($par['num_subs']) {
-		$retval .= "\n".'<ul id="p'.$parent.'"';
-		if ($parent != 0) {
-			$retval .= ' class="page_list"';
-			if (isset ($_COOKIE['p'.$parent]) && $_COOKIE['p'.$parent] == '1') {
-				 $retval .= ' style="display:block"';
+// --- start helper functions ------------------------------------------------------------
+/**
+ * create a list of groups
+ * @param type $sPermission which permission the groups should have
+ * @return array 
+ */
+	function admin_pages_makeGroupList($sPermission)
+	{
+		$aNewGroups = array();
+		$sql = 'SELECT `group_id` ID, `name` NAME, \'\' CHECKED, \'\' DISABLED '
+			 . 'FROM `'.TABLE_PREFIX.'groups` '
+			 . 'WHERE FIND_IN_SET(\'pages_'.$sPermission.'\', `system_permissions`) '
+			 . 'ORDER BY `NAME` ASC'
+		;
+		if(($oGroups = WbDatabase::getInstance()->query($sql))) {
+			while($aGroup = $oGroups->fetchRow(MYSQL_ASSOC)) {
+				if($aGroup['ID'] == 1) {
+					$aGroup['CHECKED'] = ' checked="checked"';
+					$aGroup['DISABLED'] = ' disabled="disabled"';
+					// move it to topmost position of list
+					array_unshift($aNewGroups, $aGroup);
+				}else {
+					if(in_array($aGroup['ID'], $GLOBALS['admin']->get_groups_id())) {
+						$aGroup['CHECKED'] = ' checked="checked"';
+					}
+					// move it at the end of list
+					$aNewGroups[] = $aGroup;
+				}
 			}
 		}
-		$retval .= ">\n";
- 	}
-	return $retval;
-}
+		return $aNewGroups;
+	} // end of admin_pages_makeGroupList()
+// --- end helper functions --------------------------------------------------------------
+// #######################################################################################
+// --- start script ----------------------------------------------------------------------
 
-function make_list($parent = 0, $editable_pages = 0) {
-	// Get objects and vars from outside this function
-	global $admin, $template, $TEXT, $MESSAGE, $HEADING, $par;
+// read configuration and initialize the system
+	if(!defined('WB_URL')) {
+		$sCfgFile = realpath(dirname(__FILE__).'/../../config.php');
+		if(is_readable($sCfgFile)) {
+			include($sCfgFile);
+		}else {
+			throw new RuntimeException('unable to read configuration file!!!');
+		}
+	}
+// import languange translations
+ 	global $TEXT, $MESSAGE, $HEADING;
+// define additional constants
+	if(!defined('ADMIN_REL')) { define('ADMIN_REL', WB_REL.'/'.ADMIN_DIRECTORY); }
+	if(!defined('THEME_REL')) {
+		$sTmp = preg_replace('/^'.preg_quote(WB_URL, '/').'/siU', '', THEME_URL);
+		define('THEME_REL', WB_REL.$sTmp);
+	}
+// create the needed admin object
 	$database = WbDatabase::getInstance();
-	static $row = 0;
-//	static $iLevel = 0;
-//	static $iOldLevel = 0;
-//	static $aRowLevel = array();
+	if(!class_exists('admin', false)) { include(WB_PATH.'/framework/class.admin.php'); }
+	$admin = new admin('Pages', 'pages');
+	$admin->clearIDKEY();
+// include the WB functions file
+	if(!function_exists('get_page_title')) { include(WB_PATH.'/framework/functions.php'); }
+// add module depending Javascript (eggsurplus: add child pages for a specific page)
+	$sOutput = '<script type="text/javascript" src="'.ADMIN_REL.'/pages/eggsurplus.js" '
+	         . 'charset="utf-8"></script>'.PHP_EOL
+	         . '<script type="text/javascript" charset="utf-8">'.PHP_EOL
+	         . "\t".'var pages_delete_confirm =\''.$MESSAGE['PAGES_DELETE_CONFIRM'].'\';'.PHP_EOL
+	         . "\t".'var THEME_URL = \''.THEME_REL.'\';'.PHP_EOL
+	         . "\t".'var WB_URL = \''.WB_REL.'\';'.PHP_EOL
+	         . '</script>'.PHP_EOL;
+	echo $sOutput;
+// create page tree and display it -------------------------------------------------------
+	$oPageTree = new a_pages_PageTree();
+	$oPageTree->displayTree();
 	
-    print set_node ($parent, $par);
-	// Get page list from database
- $sql = 'SELECT `module`, MAX(s.`publ_start` + s.`publ_end`) published, p.* '
-      . 'FROM `'.TABLE_PREFIX.'pages` p '
-      .     'INNER JOIN `'.TABLE_PREFIX.'sections` s ON p.`page_id` = s.`page_id` '
-      . 'WHERE `parent`='.$parent.((PAGE_TRASH != 'inline') ?  ' AND `visibility`!=\'deleted\' ' : ' ')
-      . 'GROUP BY p.`page_id` '
-      . 'ORDER BY p.`position` ASC';
-
-    if($get_pages = $database->query($sql)) {
-    	// Work out how many pages there are for this parent
-    	$num_pages = $get_pages->numRows();
-    	// Insert values into main page list
-    	if($num_pages > 0)
-    	{
-    		while($page = $get_pages->fetchRow(MYSQL_ASSOC))
-    		{
-//echo implode('-',$page);
-    			$sLineOut = '';
-    			$row = $row++ % 2; // toggle row colors between 0<->1
-    			// Get user permissions
-    			$can_modify = false;
-    			if( $admin->ami_group_member($page['admin_users']) ||
-    			    $admin->is_group_match($admin->get_groups_id(), $page['admin_groups']))
-    			{
-    				if(($page['visibility'] == 'deleted' && PAGE_TRASH == 'inline') ||
-    				   ($page['visibility'] != 'deleted'))
-    				{
-    					$can_modify = true;
-    					$editable_pages++;
-    				}
-    			} else {
-    				if($page['visibility'] == 'private') { continue; }
-    			}
-    			// check if the page has children
-//                $sql  = 'SELECT COUNT(*) FROM `'.TABLE_PREFIX.'pages` ';
-//    			$sql .= 'WHERE `parent`='.$page['page_id'];
-//                $sql .= (PAGE_TRASH != 'inline') ? ' AND `visibility`!=\'deleted\'' : '';
-                $sql = 'SELECT COUNT(*) FROM `'.TABLE_PREFIX.'pages` '
-    			     . 'WHERE `parent`='.$page['page_id'].((PAGE_TRASH != 'inline') ? ' AND `visibility`!=\'deleted\'' : '');
-    			$par['num_subs'] = intval($database->get_one($sql));
-    			$display_plus = (bool)$par['num_subs'];
-    			$sLineOut .= '<li class="p'.$page['parent'].'">';
-    // ---------------------------------------------------------------------------------------
-    			$sLineOut .= '<table class="pages_view">';
-    			$sLineOut .= "\t".'<tbody>';
-    			$sLineOut .= "\t\t".'<tr class="row_'.$row.'">';
-    // --- Tab 1 ---
-    			$sLineOut .= "\t\t\t".'<td valign="middle" width="20" style="padding-left: '.
-    				 (($page['level'] == 0) ? 0 : ($page['level']*25)-pow($page['level'],2)).'px;">';
-    			if($display_plus == true) {
-    				$sLineOut .= '<a href="javascript:toggle_visibility(\'p'.$page['page_id'].'\');" '.
-    					 'title="'.$TEXT['EXPAND'].'/'.$TEXT['COLLAPSE'].'">';
-    				$sLineOut .= '<span>';
-    				$sLineOut .= '<img src="'.THEME_URL.'/images/'.
-    					 ( ((isset($_COOKIE['p'.$page['page_id']]) && $_COOKIE['p'.$page['page_id']] == '1') ? 'minus' : 'plus').
-    					 '_16.png" onclick="toggle_plus_minus(\''.$page['page_id'].'\');" '.
-    					 'name="plus_minus_'.$page['page_id'] ).'" alt="+" />';
-    				$sLineOut .= '</span>';
-    				$sLineOut .= '</a>';
-    			}
-    			$sLineOut .= '</td>'.PHP_EOL;
-    // --- Tab 2 ---
-    			$sLineOut .= "\t\t\t".'<td class="list_menu_title">';
-                $sClassMenutitle = '';
-    			if($admin->get_permission('pages_modify') && $can_modify) {
-    				$sLineOut .= '<a href="'.ADMIN_URL.'/pages/modify.php?page_id='.$page['page_id'].'" title="'.$TEXT['MODIFY'].'">';
-                    $sClassMenutitle = 'bold grey';
-    			}
-    			$sLineOut .= '<span>';
-    			switch($page['visibility']):
-    				case 'private':
-    					$sIcon = 'private_16.png';
-    					$sText = $TEXT['PRIVATE'];
-    					break;
-    				case 'registered':
-    					$sIcon = 'keys_16.png';
-    					$sText = $TEXT['REGISTERED'];
-    					break;
-    				case 'hidden':
-    					$sIcon = 'hidden_16.png';
-    					$sText = $TEXT['HIDDEN'];
-    					break;
-    				case 'none':
-    					$sIcon = 'none_16.png';
-    					$sText = $TEXT['NONE'];
-    					break;
-    				case 'deleted':
-    					$sIcon = 'deleted_16.png';
-    					$sText = $TEXT['DELETED'];
-    					break;
-    				default: // public
-    					$sIcon = 'visible_16.png';
-    					$sText = $TEXT['PUBLIC'];
-    					break;
-                     endswitch;
-                     $sLineOut .= '<img src="'.THEME_URL.'/images/'.$sIcon.'" ';
-                     $sLineOut .= 'alt="'.$TEXT['VISIBILITY'].': '.$sText.'" class="page_list_rights" />';
-                     if($admin->get_permission('pages_modify') && $can_modify) {
-                      $sLineOut .= '<span class="modify_link">'.$page['menu_title'].'</span></a>';
-                     }else {
-                      $sLineOut .=  '<span class="bold grey">'.$page['menu_title'].'</span>';
-                     }
-                     $sLineOut .= '</td>'.PHP_EOL;
-    // --- Tab 3 ---
-    			$sLineOut .= "\t\t\t".'<td class="list_page_title">'.$page['page_title'].'</td>'.PHP_EOL;
-    // --- Tab 4 ---
-    			$sLineOut .= "\t\t\t".'<td class="list_page_id right">'.$page['page_id'].'</td>'.PHP_EOL;
-    // --- Tab 5 ---
-    			$sLineOut .= "\t\t\t".'<td class="list_actions">';
-    			if($page['visibility'] != 'deleted' && $page['visibility'] != 'none') {
-    				$sLineOut .= '<a href="'.$admin->page_link($page['link']).'" target="_blank" '.
-    					 'title="'.$TEXT['VIEW'].'">';
-    				$sLineOut .= '<img src="'.THEME_URL.'/images/view_16.png" alt="'.$TEXT['VIEW'].'" />';
-    				$sLineOut .= '</a>';
-    			}
-    			$sLineOut .= '</td>'.PHP_EOL;
-    // --- Tab 6 ---		
-    			$sLineOut .= "\t\t\t".'<td class="list_actions">';
-    			if($page['visibility'] != 'deleted') { 
-    				if($admin->get_permission('pages_settings') && $can_modify) {
-    					$sLineOut .= '<a href="'.ADMIN_URL.'/pages/settings.php?page_id='.$page['page_id'].'" '.
-    						 'title="'.$TEXT['SETTINGS'].'">';
-    					$sLineOut .= '<img src="'.THEME_URL.'/images/modify_16.png" alt="'.$TEXT['SETTINGS'].'" />';
-    					$sLineOut .= '</a>';
-    				}
-    			}else {
-    				$sLineOut .= '<a href="'.ADMIN_URL.'/pages/restore.php?page_id='.$page['page_id'].'" '.
-    					 'title="'.$TEXT['RESTORE'].'">';
-    				$sLineOut .= '<img src="'.THEME_URL.'/images/restore_16.png" alt="'.$TEXT['RESTORE'].'" />';
-    				$sLineOut .= '</a>';
-    			}
-    			$sLineOut .= '</td>'.PHP_EOL;
-    // --- Tab 7 --- MANAGE SECTIONS AND DATES BUTTONS ---
-    			$sLineOut .= "\t\t\t".'<td class="list_actions">';
-    			// Work-out if we should show the "manage dates" link
-    			if( MANAGE_SECTIONS && $admin->get_permission('pages_add') && $can_modify ) {
-    				$sLineOut .= '<a href="'.ADMIN_URL.'/pages/sections.php?page_id='.$page['page_id'].'"'.
-    					 ' title="'.$HEADING['MANAGE_SECTIONS'].'">';
-                     $file = $admin->page_is_active($page) ? "clock_16.png" : "clock_red_16.png";
-                     $file = ($page['published'] && $page['module'] != 'menu_link') ? $file : 'noclock_16.png';
-     				$sLineOut .= '<img src="'.THEME_URL.'/images/'.$file.'" alt="'.$HEADING['MANAGE_SECTIONS'].'" />';
-    				$sLineOut .= '</a>';
-    			}
-    			$sLineOut .= '</td>'.PHP_EOL;
-    // --- Tab 8 ---
-    			$sLineOut .= "\t\t\t".'<td class="list_actions">';
-    			if($page['position'] != 1) {
-    				if($page['visibility'] != 'deleted') {
-    					if($admin->get_permission('pages_settings') && $can_modify) {
-    						$sLineOut .= '<a href="'.ADMIN_URL.'/pages/move_up.php?page_id='.$page['page_id'].'" '.
-    							 'title="'.$TEXT['MOVE_UP'].'"><img src="'.THEME_URL.
-    							 '/images/up_16.png" alt="'.$TEXT['MOVE_UP'].'" /></a>';
-    					}
-    				}
-    			}
-    			$sLineOut .= '</td>'.PHP_EOL;
-    // --- Tab 9 ---
-    			$sLineOut .= "\t\t\t".'<td class="list_actions">';
-    			if($page['position'] != $num_pages) {
-    				if($page['visibility'] != 'deleted') {
-    					if($admin->get_permission('pages_settings') && $can_modify) {
-    						$sLineOut .= '<a href="'.ADMIN_URL.'/pages/move_down.php?page_id='.$page['page_id'].'" '.
-    							 'title="'.$TEXT['MOVE_DOWN'].'"><img src="'.THEME_URL.
-    							 '/images/down_16.png" alt="'.$TEXT['MOVE_DOWN'].'" /></a>';
-    					}
-    				}
-    			}else { $sLineOut .= '&nbsp;'; }
-    			$sLineOut .= '</td>'.PHP_EOL;
-    // --- Tab 10 ---
-    			$sLineOut .= "\t\t\t".'<td class="list_actions">';
-    			if($admin->get_permission('pages_delete') && $can_modify) {
-    				$sLineOut .= '<a href="javascript:confirm_link(\''.$MESSAGE['PAGES_DELETE_CONFIRM'].
-    					 '?,'.ADMIN_URL.'/pages/delete.php?page_id='.$admin->getIDKEY($page['page_id']).'\');" '.
-    					 'title="'.$TEXT['DELETE'].'">';
-    				$sLineOut .= '<img src="'.THEME_URL.'/images/delete_16.png" alt="'.$TEXT['DELETE'].'" />';
-    				$sLineOut .= '</a>';
-    			}else { $sLineOut .= '&nbsp;'; }
-    			$sLineOut .= '</td>'.PHP_EOL;
-    // --- Tab 11 --- Add action to add a page as a child ---
-    			$sLineOut .= "\t\t\t".'<td class="list_actions">';
-    			if($admin->get_permission('pages_add') && $can_modify && ($page['visibility'] != 'deleted')) {
-    				$sLineOut .= '<a href="javascript:add_child_page(\''.$page['page_id'].'\');" '
-    					.'title="'.$HEADING['ADD_CHILD_PAGE'].'">';
-    				$sLineOut .= '<img src="'.THEME_URL.'/images/siteadd.png" name="addpage_'.$page['page_id'].'" '
-    					.'alt="Add Child Page" />';
-    				$sLineOut .= '</a>';
-    			}else { $sLineOut .= '&nbsp;'; }
-    			$sLineOut .= '</td>'.PHP_EOL;
-    // --- Tab 12 ---
-    			$sLineOut .= "\t\t\t".'<td class="list_page_id center">'.$page['language'].'</td>'.PHP_EOL;
-    // --- End TR / TBODY / TABLE		
-    			$sLineOut .= "\t\t".'</tr>'.PHP_EOL;
-    			$sLineOut .= "\t".'</tbody>'.PHP_EOL;
-    			$sLineOut .= '</table>'.PHP_EOL;
-    // ---------------------------------------------------------------------------------------
-           echo $sLineOut;
-           if ( $page['parent'] == 0) {
-            $page_tmp_id = $page['page_id'];
-           }
-           // Get subs
-           $editable_pages = make_list($page['page_id'], $editable_pages);
-                    echo '</li>'.PHP_EOL;
-          } // end of WHILE
-    	} // end of $num_pages > 0
-    }  // end of $get_pages = $database->query($sql)
-
-	$output = ($par['num_subs'] )? '</ul>'.PHP_EOL : '';
-    $par['num_subs'] = (empty($output) ) ?  1 : $par['num_subs'];
-    echo $output;
-	return $editable_pages;
-}
-// Generate pages list
-if($admin->get_permission('pages_view') == true) 
-{
-	$sListHeader = <<<LHEAD
-	<div class="jsadmin hide"></div>
-		<table>
-			<tbody>
-				<tr>
-					<td><h2 class="left">{$HEADING['MODIFY_DELETE_PAGE']}</h2></td>
-					<td align="right"></td>
-				</tr>
-			</tbody>
-		</table>
-		<div class="pages_list">
-			<table>
-				<tbody>
-					<tr class="pages_list_header">
-						<td class="header_list_menu_title">{$TEXT['VISIBILITY']} / {$TEXT['MENU_TITLE']}:</td>
-						<td class="header_list_page_title">{$TEXT['PAGE_TITLE']}:</td>
-						<td class="header_list_page_id">PID</td>
-						<td class="header_list_actions">{$TEXT['ACTIONS']}:</td>
-						<td class="list_page_id">&nbsp;</td>
-					</tr>
-				</tbody>
-			</table>
-LHEAD;
-	echo $sListHeader;
-	// Work-out if we should check for existing page_code
-	$field_set = $database->field_exists(TABLE_PREFIX.'pages', 'page_code');
-    $par = array();
-	$par['num_subs'] = 1;
-	$editable_pages = make_list(0, 0);
-}else {
-	$editable_pages = 0;
-}
-echo "\t\t".'</div>'.PHP_EOL;
-if(!intval($editable_pages)) {
-	echo "\t\t".'<div class="empty_list">'.$TEXT['NONE_FOUND'].'</div>'.PHP_EOL;
-}
-// Setup template object, parse vars to it, then parse it
-// Create new template object
-$template = new Template(dirname($admin->correct_theme_source('pages.htt')),'keep');
-// $template->debug = true;
-$template->set_file('page', 'pages.htt');
-$template->set_block('page', 'main_block', 'main');
-// Insert values into the add page form
-$template->set_var('FTAN', $admin->getFTAN());
-// Group list 1
-$query = "SELECT * FROM ".TABLE_PREFIX."groups";
-$get_groups = $database->query($query);
-
-$template->set_block('main_block', 'group_list_block', 'group_list');
-// Insert admin group and current group first
-$admin_group_name = $get_groups->fetchRow(MYSQL_ASSOC);
-$template->set_var(array(
-						'ID' => 1,
-						'TOGGLE' => '1',
-						'DISABLED' => ' disabled="disabled"',
-						'LINK_COLOR' => '000000',
-						'CURSOR' => 'default',
-						'NAME' => $admin_group_name['name'],
-						'CHECKED' => ' checked="checked"'
-						)
-					);
-$template->parse('group_list', 'group_list_block', true);
-while($group = $get_groups->fetchRow(MYSQL_ASSOC)) {
-	// check if the user is a member of this group
-	$flag_disabled = '';
-	$flag_checked =  '';
-	$flag_cursor =   'pointer';
-	$flag_color =    '';
-	if (in_array($group["group_id"], $admin->get_groups_id())) {
-		$flag_disabled = ''; //' disabled';
-		$flag_checked =  ' checked="checked"';
-		$flag_cursor =   'default';
-		$flag_color =    '000000';
+// Setup template object, parse vars to it, then parse it --------------------------------
+	$oTpl = new Template(dirname($admin->correct_theme_source('pages.htt')),'keep');
+	// $oTpl->debug = true;
+	$oTpl->set_file('page', 'pages.htt');
+	$oTpl->set_block('page', 'main_block', 'main');
+	// Insert values into the add page form
+	$oTpl->set_var('FTAN', $admin->getFTAN());
+	
+// --- admin groups list -----------------------------------------------------------------
+	$aAdminGroups = admin_pages_makeGroupList('modify');
+	// write block into template
+	$oTpl->set_block('main_block', 'admingroups_list_block', 'admingroups_list');
+	foreach($aAdminGroups as $aValue) {
+		$oTpl->set_var($aValue);
+		$oTpl->parse('admingroups_list', 'admingroups_list_block', true);
 	}
-	// Check if the group is allowed to edit pages
-	$system_permissions = explode(',', $group['system_permissions']);
-	if(is_numeric(array_search('pages_modify', $system_permissions))) {
-		$template->set_var(array(
-								'ID' => $group['group_id'],
-								'TOGGLE' => $group['group_id'],
-								'CHECKED' => $flag_checked,
-								'DISABLED' => $flag_disabled,
-								'LINK_COLOR' => $flag_color,
-								'CURSOR' => $flag_checked,
-								'NAME' => $group['name'],
-								)
-							);
-		$template->parse('group_list', 'group_list_block', true);
+	unset($aAdminGroups);
+	
+// --- viewer groups list ----------------------------------------------------------------
+	$aViewerGroups = admin_pages_makeGroupList('view');
+	// write block into template
+	$oTpl->set_block('main_block', 'viewergroups_list_block', 'viewergroups_list');
+	foreach($aViewerGroups as $aValue) {
+		$oTpl->set_var($aValue);
+		$oTpl->parse('viewergroups_list', 'viewergroups_list_block', true);
 	}
-}
-// Group list 2
-$sql = 'SELECT * FROM `'.TABLE_PREFIX.'groups`';
-$get_groups = $database->query($sql);
-$template->set_block('main_block', 'group_list_block2', 'group_list2');
-// Insert admin group and current group first
-$admin_group_name = $get_groups->fetchRow(MYSQL_ASSOC);
-$template->set_var(array(
-						'ID' => 1,
-						'TOGGLE' => '1',
-						'DISABLED' => ' disabled="disabled"',
-						'LINK_COLOR' => '000000',
-						'CURSOR' => 'default',
-						'NAME' => $admin_group_name['name'],
-						'CHECKED' => ' checked="checked"'
-						)
-					);
-$template->parse('group_list2', 'group_list_block2', true);
-while($group = $get_groups->fetchRow(MYSQL_ASSOC)) {
-	// check if the user is a member of this group
-	$flag_disabled = '';
-	$flag_checked =  '';
-	$flag_cursor =   'pointer';
-	$flag_color =    '';
-	if (in_array($group["group_id"], $admin->get_groups_id())) {
-		$flag_disabled = ''; //' disabled';
-		$flag_checked =  ' checked="checked"';
-		$flag_cursor =   'default';
-		$flag_color =    '000000';
-	}
-	$template->set_var(array(
-							'ID' => $group['group_id'],
-							'TOGGLE' => $group['group_id'],
-							'CHECKED' => $flag_checked,
-							'DISABLED' => $flag_disabled,
-							'LINK_COLOR' => $flag_color,
-							'CURSOR' => $flag_cursor,
-							'NAME' => $group['name'],
-							)
-						);
-	$template->parse('group_list2', 'group_list_block2', true);
-}
-// Parent page list
-// $database = new database();
-function parent_list($parent)
-{
-	global $admin, $template, $field_set;
-	$database = WbDatabase::getInstance();
-	$sql = 'SELECT * FROM `'.TABLE_PREFIX.'pages` '.
-	       'WHERE `parent`='.$parent.' AND `visibility`!=\'deleted\' '.
-	       'ORDER BY `position` ASC';
-	$get_pages = $database->query($sql);
-
-	while($page = $get_pages->fetchRow(MYSQL_ASSOC)) {
-		if(!$admin->page_is_visible($page)) { continue; }
-		// if parent = 0 set flag_icon
-		$template->set_var('FLAG_ROOT_ICON', ' none ');
-		if( $page['parent'] == 0 && $field_set) {
-			$template->set_var('FLAG_ROOT_ICON','url('.THEME_URL.'/images/flags/'.strtolower($page['language']).'.png)');
+	unset($aViewerGroups);
+	
+// --- build parent pages list -----------------------------------------------------------
+	$aParents = $oPageTree->getParentList();
+	$aFirstEntry = array();
+	$aFirstEntry['ID']             = 0;
+	$aFirstEntry['TITLE']          = $TEXT['NONE'];
+	$aFirstEntry['DISABLED']       = 0;
+	$aFirstEntry['PARENT']         = 99;
+	$aFirstEntry['FLAG_ROOT_ICON'] = '';
+	$aFirstEntry['LEVEL']          = 0;
+	$aFirstEntry['LANGUAGE']       = '';
+	array_unshift($aParents, $aFirstEntry);
+	reset($aParents);
+	$oTpl->set_block('main_block', 'parents_list_block', 'parents_list');
+	// walk through all items
+	while (list(, $aItem) = each($aParents)) {
+		if($admin->get_permission('pages_add')) {
+			// modify item
+			$aItem['DISABLED'] = ($aItem['DISABLED'] ? ' disabled="disabled" class="disabled"' : '');
+			if(!$aItem['PARENT']) {
+				$aItem['FLAG_ROOT_ICON'] = ' style="background-image: url('.THEME_REL.'/images/flags/'
+										 . strtolower($aItem['LANGUAGE']).'.png);"';
+			}
+			$aItem['TITLE'] = str_repeat('- ', $aItem['LEVEL']).$aItem['TITLE'];
+			// write block into template
+			$oTpl->set_var($aItem);
+			$oTpl->parse('parents_list', 'parents_list_block', true);
 		}
-		// Stop users from adding pages with a level of more than the set page level limit
-		if($page['level']+1 < PAGE_LEVEL_LIMIT) {
-			// Get user permissions
-			$can_modify = ($admin->ami_group_member($page['admin_groups']) ||
-					       $admin->is_group_match($admin->get_groups_id(), $page['admin_users']));
-			// Title -'s prefix
-			$title_prefix = '';
-			for($i = 1; $i <= $page['level']; $i++) { $title_prefix .= ' - - &nbsp;'; }
-				$template->set_var(array(
-										'ID' => $page['page_id'],
-										'TITLE' => ($title_prefix.$page['menu_title']),
-										'MENU-TITLE' => ($title_prefix.$page['menu_title']),
-										'PAGE-TITLE' => ($title_prefix.$page['page_title'])
-										));
-				if($can_modify == true) {
-					$template->set_var('DISABLED', '');
-				} else {
-					$template->set_var('DISABLED', ' disabled="disabled" class="disabled"');
-				}
-				$template->parse('page_list2', 'page_list_block2', true);
-		}
-		parent_list($page['page_id']);
 	}
-}
-$template->set_block('main_block', 'page_list_block2', 'page_list2');
-if($admin->get_permission('pages_add_l0') == true) {
-	$template->set_var(array(
-						'ID' => '0',
-						'TITLE' => $TEXT['NONE'],
-						'SELECTED' => ' selected="selected"',
-						'DISABLED' => ''
-					)
-				);
-	$template->parse('page_list2', 'page_list_block2', true);
-}
-parent_list(0);
-// Explode module permissions
-$module_permissions = $_SESSION['MODULE_PERMISSIONS'];
-// Modules list
-$template->set_block('main_block', 'module_list_block', 'module_list');
-$result = $database->query("SELECT * FROM ".TABLE_PREFIX."addons WHERE type = 'module' AND function = 'page' order by name");
-if($result->numRows() > 0) {
-	while ($module = $result->fetchRow(MYSQL_ASSOC)) {
-		// Check if user is allowed to use this module
-		if(!is_numeric(array_search($module['directory'], $module_permissions))) {
-			$template->set_var('VALUE', $module['directory']);
-			$template->set_var('NAME', $module['name']);
-			if($module['directory'] == 'wysiwyg') {
-				$template->set_var('SELECTED', ' selected="selected"');
-			} else {
-				$template->set_var('SELECTED', '');
-			}
-			$template->parse('module_list', 'module_list_block', true);
+	unset($aParents);
+	
+// --- build modules list ----------------------------------------------------------------
+	$bMatch = false;
+	$aModulePermissions = '\''.implode(',', $_SESSION['MODULE_PERMISSIONS']).'\'';
+	$sql = 'SELECT `directory` DIRECTORY, `name` NAME, \'\' SELECTED FROM `'.TABLE_PREFIX.'addons` '
+	     . 'WHERE `type`=\'module\' AND `function`=\'page\' ';
+	if($admin->get_user_id() != 1) {
+		$sql .= 'AND NOT FIND_IN_SET(`DIRECTORY`, '.$aModulePermissions.') ';
+	}
+	$sql .= 'ORDER BY `name` ASC';
+	if(($oModules = $database->query($sql))) {
+		$oTpl->set_block('main_block', 'module_list_block', 'module_list');
+		while ($aModule = $oModules->fetchRow(MYSQL_ASSOC)) {
+			$bMatch = true;
+			// Check if user is allowed to use this module
+			$aModule['SELECTED'] = ($aModule['DIRECTORY'] == 'wysiwyg' ? ' selected="selected"' : '');
+			$oTpl->set_var($aModule);
+			$oTpl->parse('module_list', 'module_list_block', true);
 		}
 	}
-}
+	if(!$bMatch) {
+		$aModule = array('DIRECTORY' => '',
+		                 'NAME'      => $TEXT['NONE'],
+		                 'SELECTED'  => ''
+		                );
+		$oTpl->set_var($aModule);
+		$oTpl->parse('module_list', 'module_list_block', true);
+	}
+
+// --- Insert global replacements --------------------------------------------------------	
 // Insert urls
-$template->set_var(array(
-								'THEME_URL' => THEME_URL,
-								'WB_URL' => WB_URL,
-								'ADMIN_URL' => ADMIN_URL,
-								)
-						);
-// Insert language headings
-$template->set_var(array(
-								'HEADING_ADD_PAGE' => $HEADING['ADD_PAGE'],
-								'HEADING_MODIFY_INTRO_PAGE' => $HEADING['MODIFY_INTRO_PAGE']
-								)
-						);
+	$oTpl->set_var(array(
+		'WB_URL'    => WB_REL,
+		'ADMIN_URL' => ADMIN_REL,
+		'THEME_URL' => THEME_REL,
+		'WB_REL'    => WB_REL,
+		'ADMIN_REL' => ADMIN_REL,
+		'THEME_REL' => THEME_REL
+		)
+	);
 // Insert language text and messages
-$template->set_var(array(
-								'TEXT_TITLE' => $TEXT['TITLE'],
-								'TEXT_TYPE' => $TEXT['TYPE'],
-								'TEXT_PARENT' => $TEXT['PARENT'],
-								'TEXT_VISIBILITY' => $TEXT['VISIBILITY'],
-								'TEXT_PUBLIC' => $TEXT['PUBLIC'],
-								'TEXT_PRIVATE' => $TEXT['PRIVATE'],
-								'TEXT_REGISTERED' => $TEXT['REGISTERED'],
-								'TEXT_HIDDEN' => $TEXT['HIDDEN'],
-								'TEXT_NONE' => $TEXT['NONE'],
-								'TEXT_NONE_FOUND' => $TEXT['NONE_FOUND'],
-								'TEXT_ADD' => $TEXT['ADD'],
-								'TEXT_RESET' => $TEXT['RESET'],
-								'TEXT_ADMINISTRATORS' => $TEXT['ADMINISTRATORS'],
-								'TEXT_PRIVATE_VIEWERS' => $TEXT['PRIVATE_VIEWERS'],
-								'TEXT_REGISTERED_VIEWERS' => $TEXT['REGISTERED_VIEWERS'],
-								'INTRO_LINK' => $MESSAGE['PAGES_INTRO_LINK'],
-								)
-						);
+	$oTpl->set_var(array(
+		'HEADING_ADD_PAGE'          => $HEADING['ADD_PAGE'],
+		'HEADING_MODIFY_INTRO_PAGE' => $HEADING['MODIFY_INTRO_PAGE'],
+		'TEXT_TITLE'                => $TEXT['TITLE'],
+		'TEXT_TYPE'                 => $TEXT['TYPE'],
+		'TEXT_PARENT'               => $TEXT['PARENT'],
+		'TEXT_VISIBILITY'           => $TEXT['VISIBILITY'],
+		'TEXT_PUBLIC'               => $TEXT['PUBLIC'],
+		'TEXT_PRIVATE'              => $TEXT['PRIVATE'],
+		'TEXT_REGISTERED'           => $TEXT['REGISTERED'],
+		'TEXT_HIDDEN'               => $TEXT['HIDDEN'],
+		'TEXT_NONE'                 => $TEXT['NONE'],
+		'TEXT_NONE_FOUND'           => $TEXT['NONE_FOUND'],
+		'TEXT_ADD'                  => $TEXT['ADD'],
+		'TEXT_RESET'                => $TEXT['RESET'],
+		'TEXT_ADMINISTRATORS'       => $TEXT['ADMINISTRATORS'],
+		'TEXT_PRIVATE_VIEWERS'      => $TEXT['PRIVATE_VIEWERS'],
+		'TEXT_REGISTERED_VIEWERS'   => $TEXT['REGISTERED_VIEWERS'],
+		'INTRO_LINK'                => $MESSAGE['PAGES_INTRO_LINK'],
+		)
+	);
 // Insert permissions values
-if($admin->get_permission('pages_add') != true) {
-	$template->set_var('DISPLAY_ADD', 'hide');
-} elseif($admin->get_permission('pages_add_l0') != true && $editable_pages == 0) {
-	$template->set_var('DISPLAY_ADD', 'hide');
-}
-if($admin->get_permission('pages_intro') != true || INTRO_PAGE != 'enabled') {
-	$template->set_var('DISPLAY_INTRO', 'hide');
-}
+	if($admin->get_permission('pages_add') != true) {
+		$oTpl->set_var('DISPLAY_ADD', 'hide');
+	} elseif($admin->get_permission('pages_add_l0') != true && !$oPageTree->getWriteablePages()) {
+		$oTpl->set_var('DISPLAY_ADD', 'hide');
+	}
+	if($admin->get_permission('pages_intro') != true || INTRO_PAGE != 'enabled') {
+		$oTpl->set_var('DISPLAY_INTRO', 'hide');
+	}
 // Parse template object
-$template->parse('main', 'main_block', false);
-$template->pparse('output', 'page');
-// include the required file for Javascript admin
-if(file_exists(WB_PATH.'/modules/jsadmin/jsadmin_backend_include.php')) {
-	include(WB_PATH.'/modules/jsadmin/jsadmin_backend_include.php');
-}
-// Print admin
-$admin->print_footer();
+	$oTpl->parse('main', 'main_block', false);
+	$oTpl->pparse('output', 'page');
+	// include the required file for Javascript admin
+	if(file_exists(WB_PATH.'/modules/jsadmin/jsadmin_backend_include.php')) {
+		include(WB_PATH.'/modules/jsadmin/jsadmin_backend_include.php');
+	}
+	// Print admin
+	$admin->print_footer();
+	
\ No newline at end of file
Index: branches/2.8.x/wb/admin/interface/version.php
===================================================================
--- branches/2.8.x/wb/admin/interface/version.php	(revision 1838)
+++ branches/2.8.x/wb/admin/interface/version.php	(revision 1839)
@@ -51,5 +51,5 @@
 
 // check if defined to avoid errors during installation (redirect to admin panel fails if PHP error/warnings are enabled)
 if(!defined('VERSION')) define('VERSION', '2.8.3');
-if(!defined('REVISION')) define('REVISION', '1838');
+if(!defined('REVISION')) define('REVISION', '1839');
 if(!defined('SP')) define('SP', '');
Index: branches/2.8.x/wb/templates/wb_theme/css/screen.css
===================================================================
--- branches/2.8.x/wb/templates/wb_theme/css/screen.css	(revision 1838)
+++ branches/2.8.x/wb/templates/wb_theme/css/screen.css	(revision 1839)
@@ -330,3 +330,15 @@
 div.acess-main a:hover { color :#6699ff; text-decoration :underline; }
 div.acess-main div.content { overflow :hidden; padding :1px; text-align :left; }
 div.acess-main div.bottomdiv h3 { font-weight :bold; color :#ff0000; }
+
+.pages_list table td, table.pages_view td {
+   padding :3px;
+   font-size :150%;
+}
+select.pages-parent-list {
+	width: 240px;
+}
+	select.pages-parent-list option {
+		background: none no-repeat center left; 
+		padding-left: 20px;
+	}
Index: branches/2.8.x/wb/templates/argos_theme/css/screen.css
===================================================================
--- branches/2.8.x/wb/templates/argos_theme/css/screen.css	(revision 1838)
+++ branches/2.8.x/wb/templates/argos_theme/css/screen.css	(revision 1839)
@@ -340,3 +340,15 @@
    div.admintools span.title { font-size :1.1em; }
 /* */
 .access h2,.access h3,.access h4,.access h6 { font-weight :bold; }
+
+.pages_list table td, table.pages_view td {
+   padding :3px;
+   font-size :150%;
+}
+select.pages-parent-list {
+	width: 240px;
+}
+	select.pages-parent-list option {
+		background: none no-repeat center left; 
+		padding-left: 20px;
+	}
Index: branches/2.8.x/wb/languages/DE.php
===================================================================
--- branches/2.8.x/wb/languages/DE.php	(revision 1838)
+++ branches/2.8.x/wb/languages/DE.php	(revision 1839)
@@ -563,7 +563,7 @@
 $MESSAGE['PAGES_CANNOT_DELETE_ACCESS_FILE'] = 'Beim L&ouml;schen der Zugangsdatei im Verzeichnis /pages ist ein Fehler aufgetreten (Ungen&uuml;gende Zugangsrechte)';
 $MESSAGE['PAGES_CANNOT_REORDER'] = 'Bei der Zusammenstellung der Seite ist ein Fehler aufgetreten';
 $MESSAGE['PAGES_DELETED'] = 'Die Seite wurde erfolgreich gel&ouml;scht';
-$MESSAGE['PAGES_DELETE_CONFIRM'] = 'Sind Sie sicher, dass Sie die ausgew&auml;hlte Seite l&ouml;schen m&ouml;chten ( und deren Unterseiten )';
+$MESSAGE['PAGES_DELETE_CONFIRM'] = 'Sind Sie sicher, dass Sie die ausgewählte Seite und deren Unterseiten löschen möchten?';
 $MESSAGE['PAGES_INSUFFICIENT_PERMISSIONS'] = 'Sie haben keine Berechtigung, diese Seite zu &auml;ndern';
 $MESSAGE['PAGES_INTRO_LINK'] = 'Bitte klicken Sie HIER um die Eingangsseite zu &auml;ndern';
 $MESSAGE['PAGES_INTRO_NOT_WRITABLE'] = 'Es konnte nicht in die Datei /pages/intro.php geschrieben werden (ungen&uuml;gende Zugangsrechte)';
