]> git.mjollnir.org Git - s9y.git/commitdiff
Allow possibility to style the backend (surrounding layout + entry editor so far)
authorgarvinhicking <garvinhicking>
Wed, 30 May 2007 11:20:53 +0000 (11:20 +0000)
committergarvinhicking <garvinhicking>
Wed, 30 May 2007 11:20:53 +0000 (11:20 +0000)
docs/NEWS
include/functions_config.inc.php
include/functions_entries_admin.inc.php
include/functions_smarty.inc.php
serendipity_admin.php
templates/default/admin/entries.tpl [new file with mode: 0644]
templates/default/admin/index.tpl [new file with mode: 0644]

index d09ca2a8492d7065bf8faab6c862a8321134a15c..800f5bf425b2784a457e2da2da8f84d333bb127e 100644 (file)
--- a/docs/NEWS
+++ b/docs/NEWS
@@ -3,6 +3,13 @@
 Version 1.2 ()
 ------------------------------------------------------------------------
 
+    * Add admin backend templates for main area and the entry editor.
+      Falls back to default PHP output if Smarty cannot be utilized.
+      (garvinhicking)
+
+    * Fix properly reinstantiating sessions and properly deleting cookies
+      when requested (garvinhicking)
+
     * Add support for sqlite3 (http://php-sqlite3.sourceforge.net/), by 
       geekmug
 
index 03972156e4b7fa7d1645c64c13bc2d10f723cbd8..d73145436ebe7440741a12e21dac14af270aa0a9 100644 (file)
@@ -336,8 +336,24 @@ function serendipity_load_configuration($author = null) {
  */
 function serendipity_logout() {
     $_SESSION['serendipityAuthedUser'] = false;
-    @session_destroy();
+    serendipity_session_destroy();
     serendipity_deleteCookie('author_information');
+    serendipity_deleteCookie('author_token');
+}
+
+/**
+ * Destroys a session, keeps important stuff intact.
+ * @access public
+ * @return null
+ */
+function serendipity_session_destroy() {
+    $no_smarty = $_SESSION['no_smarty'];
+    @session_destroy();
+    session_regenerate_id();
+    session_start();
+
+    $_SESSION['SERVER_GENERATED_SID'] = true;
+    $_SESSION['no_smarty']            = $no_smarty;
 }
 
 /**
@@ -437,7 +453,7 @@ function serendipity_checkAutologin($ident, $iv) {
 
     if ($autologin['name'] < (time()-86400)) {
         // Issued autologin cookie has been issued more than 1 day ago. Re-Issue new cookie, invalidate old one to prevent abuse
-        serendipity_header('X-ReIssue-Cookie: +' . (time() - $autologin['name']) . 's');
+        if ($serendipity['expose_s9y']) serendipity_header('X-ReIssue-Cookie: +' . (time() - $autologin['name']) . 's');
         serendipity_issueAutologin($cookie);
     }
 
@@ -445,9 +461,9 @@ function serendipity_checkAutologin($ident, $iv) {
 }
 
 function serendipity_setAuthorToken() {
-        $hash = sha1(uniqid(rand(), true));
-        serendipity_setCookie('author_token', $hash);
-        $_SESSION['author_token'] = $hash;
+    $hash = sha1(uniqid(rand(), true));
+    serendipity_setCookie('author_token', $hash);
+    $_SESSION['author_token'] = $hash;
 }
 
 /**
@@ -516,7 +532,7 @@ function serendipity_authenticate_author($username = '', $password = '', $is_md5
             return true;
         } else {
             $_SESSION['serendipityAuthedUser'] = false;
-            @session_destroy();
+            serendipity_session_destroy();
         }
     }
 
@@ -613,7 +629,12 @@ function serendipity_setCookie($name, $value, $securebyprot = true) {
 function serendipity_deleteCookie($name) {
     global $serendipity;
 
-    setcookie("serendipity[$name]", '', time()-4000);
+    $host = $_SERVER['HTTP_HOST'];
+    if ($pos = strpos($host, ":")) {
+        $host = substr($host, 0, $pos);
+    }
+
+    setcookie("serendipity[$name]", '', time()-4000, $serendipity['serendipityHTTPPath'], $host);
     unset($_COOKIE[$name]);
     unset($serendipity['COOKIE'][$name]);
 }
@@ -874,7 +895,7 @@ function serendipity_getSessionLanguage() {
         return $serendipity['lang'];
     } else {
         $_SESSION['serendipityLanguage'] = $lang;
-        if (! is_null($serendipity['detected_lang'])) {
+        if (!is_null($serendipity['detected_lang'])) {
             if ($serendipity['expose_s9y']) serendipity_header('X-Serendipity-InterfaceLang: ' . $lang);
         }
     }
index 6321489dccf927699d92baab80e0ce5ccda4eeaf..1d7a1872e3185021dd615b0611597e3a0de04ba5 100644 (file)
@@ -36,31 +36,41 @@ function serendipity_printEntryForm($targetURL, $hiddens = array(), $entry = arr
     $draftP = '';
     $categoryselector_expanded = false;
 
+    $template_vars = array();
+
     serendipity_plugin_api::hook_event('backend_entryform', $entry);
 
     if ( (isset($entry['isdraft']) && serendipity_db_bool($entry['isdraft'])) ||
          (!isset($entry['isdraft']) && $serendipity['publishDefault'] == 'draft') ) {
         $draftD = ' selected="selected"';
+        $template_vars['draft_mode'] = 'draft';
     } else {
         $draftP = ' selected="selected"';
+        $template_vars['draft_mode'] = 'publish';
     }
 
     if (isset($entry['moderate_comments']) && (serendipity_db_bool($entry['moderate_comments']))) {
+        $template_vars['moderate_comments'] = true;
         $moderate_comments = ' checked="checked"';
     } elseif (!isset($entry['moderate_comments']) && ($serendipity['moderateCommentsDefault'] == 'true' || $serendipity['moderateCommentsDefault'] === true)) {
         // This is the default on creation of a new entry and depends on the "moderateCommentsDefault" variable of the configuration.
         $moderate_comments = ' checked="checked"';
+        $template_vars['moderate_comments'] = true;
     } else {
         $moderate_comments = '';
+        $template_vars['moderate_comments'] = false;
     }
 
 
     if (isset($entry['allow_comments']) && (serendipity_db_bool($entry['allow_comments']))) {
+        $template_vars['allow_comments'] = true;
         $allow_comments = ' checked="checked"';
     } elseif ((!isset($entry['allow_comments']) || $entry['allow_comments'] !== 'false') && (!isset($serendipity['allowCommentsDefault']) || $serendipity['allowCommentsDefault'] == 'true' || $serendipity['allowCommentsDefault'] === true)) {
         // This is the default on creation of a new entry and depends on the "allowCommentsDefault" variable of the configuration.
+        $template_vars['allow_comments'] = true;
         $allow_comments = ' checked="checked"';
     } else {
+        $template_vars['allow_comments'] = false;
         $allow_comments = '';
     }
 
@@ -94,10 +104,19 @@ function serendipity_printEntryForm($targetURL, $hiddens = array(), $entry = arr
 
     if (is_array($cats = serendipity_fetchCategories())) {
         $cats = serendipity_walkRecursive($cats, 'categoryid', 'parentid', VIEWMODE_THREADED);
-        foreach ( $cats as $cat ) {
-            $cat_list .= '<option value="'. $cat['categoryid'] .'"'. (in_array($cat['categoryid'], $selected) ? ' selected="selected"' : '') .'>'. str_repeat('&nbsp;', $cat['depth']) . $cat['category_name'] .'</option>' . "\n";
+        foreach ($cats as $cat) {
+
+            if (in_array($cat['categoryid'], $selected)) {
+                $cat['is_selected'] = true;
+            }
+            
+            $cat['depth_pad'] = str_repeat('&nbsp;', $cat['depth']);
+
+            $template_vars['category_options'][] = $cat;
+            $cat_list .= '<option value="'. $cat['categoryid'] .'"'. ($cat['is_selected'] ? ' selected="selected"' : '') .'>'. $cat['depth_pad'] . $cat['category_name'] .'</option>' . "\n";
         }
     }
+    
     $cat_list .= '</select>' . $n;
 
     if (!empty($serendipity['GET']['title'])) {
@@ -120,6 +139,42 @@ function serendipity_printEntryForm($targetURL, $hiddens = array(), $entry = arr
     $hidden .= '        <input type="hidden" name="serendipity[timestamp]" value="' . (isset($entry['timestamp']) ? serendipity_serverOffsetHour($entry['timestamp']) : serendipity_serverOffsetHour(time())) . '" />' . $n;
     $hidden .= '        <input type="hidden" name="serendipity[preview]" value="false" />';
     $hidden .= '        ' . serendipity_setFormToken();
+
+    if (is_object($serendipity['smarty'])) {
+        if (isset($serendipity['allowDateManipulation']) && $serendipity['allowDateManipulation']) {
+            $template_vars['allowDateManipulation'] = true;
+        }
+
+        if ((!empty($entry['extended']) || !empty($serendipity['COOKIE']['toggle_extended'])) && !$serendipity['wysiwyg']) {
+            $template_vars['show_wysiwyg'] = true;
+        }
+
+        if (eregi($serendipity['EditorBrowsers'], $_SERVER['HTTP_USER_AGENT']) ) {
+            $template_vars['wysiwyg_advanced'] = true;
+        }
+
+        $template_vars['timestamp']                 = serendipity_serverOffsetHour(isset($entry['timestamp']) && $entry['timestamp'] > 0 ? $entry['timestamp'] : time());
+        $template_vars['reset_timestamp']           = serendipity_serverOffsetHour(time());
+        $template_vars['hidden']                    = $hidden;
+        $template_vars['errMsG']                    = $errMsg;
+        $template_vars['entry']                     =& $entry;
+        $template_vars['targetURL']                 = $targetURL;
+        $template_vars['cat_count']                 = count($cats)+1;
+        $template_vars['cat_state']                 = $categoryselector_expanded ? 'on' : 'off';
+        $template_vars['wysiwyg']                   = $serendipity['wysiwyg'];
+        $template_vars['serendipityRightPublish']   = $_SESSION['serendipityRightPublish'];
+        $template_vars['wysiwyg_blocks']            = array(
+                                                        'body'      => 'serendipity[body]',
+                                                        'extended'  => 'serendipity[extended]'
+                                                      );
+        $serendipity['smarty']->register_modifier('emit_htmlarea_code', 'serendipity_emit_htmlarea_code');
+        $serendipity['smarty']->assign('admin_view', 'entryform');
+        $serendipity['smarty']->assign_by_ref('entry_vars', $template_vars);
+        $serendipity['smarty']->display(serendipity_getTemplateFile('admin/entries.tpl', 'serendipityPath'));
+        return true;
+    }
+
+    /* HTML CODE BELOW IS FOR FALLBACK PORTABILITY ONLY - MODIFY CODE IN TEMPLATE ADMIN/ENTRIES.TPL INSTEAD! */
     if (!empty($errMsg)) {
 ?>
         <div class="serendipityAdminMsgError"><?php echo $errMsg; ?></div>
index 7469c93d9fb8b7c733cdfa843680b413c5ace18b..01fefdf4a31db402ae2aac62d52e8d40b01ff3ad 100644 (file)
@@ -695,12 +695,20 @@ function serendipity_smarty_init($vars = array()) {
             // Beware: Smarty is used in the Admin backend, despite of this.
             include $template_dir . '/template.inc.php';
         } else {
-            // Default Smarty Engine will be used
+            // Set a session variable if Smarty fails:
+            $prev_smarty = $_SESSION['no_smarty'];
+            $_SESSION['no_smarty'] = true;
 
+            // Default Smarty Engine will be used
             @define('SMARTY_DIR', S9Y_PEAR_PATH . 'Smarty/libs/');
             if (!class_exists('Smarty')) {
-                require SMARTY_DIR . 'Smarty.class.php';
+                include SMARTY_DIR . 'Smarty.class.php';
+            }
+            
+            if (!class_exists('Smarty')) {
+                return false;
             }
+
             $serendipity['smarty'] = new Smarty;
             if ($serendipity['production'] === 'debug') {
                 $serendipity['smarty']->force_compile   = true;
@@ -714,9 +722,13 @@ function serendipity_smarty_init($vars = array()) {
             $serendipity['smarty']->compile_dir   = $serendipity['serendipityPath'] . PATH_SMARTY_COMPILE;
 
             if (!is_dir($serendipity['smarty']->compile_dir) || !is_writable($serendipity['smarty']->compile_dir)) {
-                serendipity_die(sprintf(DIRECTORY_WRITE_ERROR, $serendipity['smarty']->compile_dir));
+                printf(DIRECTORY_WRITE_ERROR, $serendipity['smarty']->compile_dir);
+                return false;
             }
 
+            // Hooray for Smarty:
+            $_SESSION['no_smarty'] = $prev_smarty;
+
             $serendipity['smarty']->config_dir    = $template_dir;
             $serendipity['smarty']->secure_dir    = array($serendipity['serendipityPath'] . $serendipity['templatePath']);
             $serendipity['smarty']->security_settings['MODIFIER_FUNCS']  = array('sprintf', 'sizeof', 'count', 'rand', 'print_r', 'str_repeat');
@@ -732,6 +744,7 @@ function serendipity_smarty_init($vars = array()) {
             $serendipity['smarty']->register_modifier('formatTime', 'serendipity_smarty_formatTime');
             $serendipity['smarty']->register_modifier('serendipity_utf8_encode', 'serendipity_utf8_encode');
             $serendipity['smarty']->register_modifier('ifRemember', 'serendipity_ifRemember');
+            $serendipity['smarty']->register_modifier('checkPermission', 'serendipity_checkPermission');
 
             $serendipity['smarty']->register_function('serendipity_printSidebar', 'serendipity_smarty_printSidebar');
             $serendipity['smarty']->register_function('serendipity_hookPlugin', 'serendipity_smarty_hookPlugin');
index 783e4871d9dcbada6c8f99c7e3fa95efde064987..fa09c6ab877b3e01c72306f05aa03cdcabfb5c95 100644 (file)
@@ -30,7 +30,7 @@ if (isset($serendipity['GET']['adminModule']) && $serendipity['GET']['adminModul
         if (!isset($_SESSION['author_token']) || !isset($serendipity['COOKIE']['author_token']) || 
             ($_SESSION['author_token'] !== $serendipity['COOKIE']['author_token'])) {
             $_SESSION['serendipityAuthedUser'] = false;
-            @session_destroy();
+            serendipity_session_destroy();
         }
         if (!serendipity_userLoggedIn()) {
             // Try again to log in, this time with enabled external authentication event hook
@@ -44,13 +44,212 @@ if (serendipity_is_iframe()) {
     return true;
 }
 
+if (isset($serendipity['GET']['no_smarty']) || isset($serendipity['no_smarty'])) {
+    $_SESSION['no_smarty'] = true;
+}
+
+$admin_css_file = serendipity_getTemplateFile('admin/pluginmanager.css');
+
+if (defined('IS_up2date') && IS_up2date === true && IS_installed === true) {
+    $admin_installed = true;
+} else {
+    $admin_installed = false;
+}
+
+$is_logged_in = serendipity_userLoggedIn();
+
+if ($is_logged_in) {
+    $self_info = sprintf(USER_SELF_INFO, $serendipity['serendipityUser'], $serendipity['permissionLevels'][$serendipity['serendipityUserlevel']]);
+} else {
+    $self_info = '';
+}
+
+if (isset($serendipity['GET']['noBanner']) || isset($serendipity['POST']['noBanner'])) {
+    $no_banner = true;
+} else {
+    $no_banner = false;
+}
+
+if (isset($serendipity['GET']['noSidebar']) || isset($serendipity['POST']['noSidebar'])) {
+    $no_sidebar = true;
+} else {
+    $no_sidebar = false;
+}
+
+$file = '';
+if (!isset($serendipity['serendipityPath']) || IS_installed === false || IS_up2date === false ) {
+    $use_installer = true;
+    if (IS_installed === false) {
+        $file = 'include/admin/installer.inc.php';
+    } elseif ( IS_up2date === false ) {
+        $file = 'include/admin/upgrader.inc.php';
+    } else {
+        $file = ''; // For register_global, safety
+    }
+} else {
+    $use_installer = false;
+}
+
+$post_action = $serendipity['POST']['action'];
+
+$main_content = '';
+if (!$use_installer && $is_logged_in) {
+    if (!isset($serendipity['GET']['adminModule'])) {
+        $serendipity['GET']['adminModule'] = (isset($serendipity['POST']['adminModule']) ? $serendipity['POST']['adminModule'] : '');
+    }
+
+    ob_start();
+    serendipity_checkXSRF();
+
+    switch($serendipity['GET']['adminModule']) {
+        case 'installer':
+        case 'configuration':
+            if (!serendipity_checkPermission('siteConfiguration') && !serendipity_checkPermission('blogConfiguration')) {
+                break;
+            }
+
+            include S9Y_INCLUDE_PATH . 'include/admin/configuration.inc.php';
+            break;
+
+        case 'media':
+        case 'images':
+            if (!serendipity_checkPermission('adminImages')) {
+                break;
+            }
+
+            include S9Y_INCLUDE_PATH . 'include/admin/images.inc.php';
+            break;
+
+        case 'templates':
+            if (!serendipity_checkPermission('adminTemplates')) {
+                break;
+            }
+
+            include S9Y_INCLUDE_PATH . 'include/admin/templates.inc.php';
+            break;
+
+        case 'plugins':
+            if (!serendipity_checkPermission('adminPlugins')) {
+                break;
+            }
+
+            include S9Y_INCLUDE_PATH . 'include/admin/plugins.inc.php';
+            break;
+
+        case 'users':
+            if (!serendipity_checkPermission('adminUsers')) {
+                break;
+            }
+
+            include S9Y_INCLUDE_PATH . 'include/admin/users.inc.php';
+            break;
+
+        case 'groups':
+            if (!serendipity_checkPermission('adminUsersGroups')) {
+                break;
+            }
+
+            include S9Y_INCLUDE_PATH . 'include/admin/groups.inc.php';
+            break;
+
+        case 'personal':
+            if (!serendipity_checkPermission('personalConfiguration')) {
+                break;
+            }
+
+            include S9Y_INCLUDE_PATH . 'include/admin/personal.inc.php';
+            break;
+
+        case 'export':
+            if (!serendipity_checkPermission('adminImport')) {
+                break;
+            }
+
+            include S9Y_INCLUDE_PATH . 'include/admin/export.inc.php';
+            break;
+
+        case 'import':
+            if (!serendipity_checkPermission('adminImport')) {
+                break;
+            }
+
+            include S9Y_INCLUDE_PATH . 'include/admin/import.inc.php';
+            break;
+
+        case 'entries':
+            if (!serendipity_checkPermission('adminEntries')) {
+                break;
+            }
+
+            include S9Y_INCLUDE_PATH . 'include/admin/entries.inc.php';
+            break;
+
+        case 'comments':
+            if (!serendipity_checkPermission('adminComments')) {
+                break;
+            }
+
+            include S9Y_INCLUDE_PATH . 'include/admin/comments.inc.php';
+            break;
+
+        case 'category':
+        case 'categories':
+            if (!serendipity_checkPermission('adminCategories')) {
+                break;
+            }
+
+            include S9Y_INCLUDE_PATH . 'include/admin/category.inc.php';
+            break;
+
+        case 'logout':
+            echo LOGGEDOUT;
+            break;
+
+        case 'event_display':
+            if ($serendipity['no_create'] !== true) {
+                serendipity_plugin_api::hook_event('backend_sidebar_entries_event_display_' . $serendipity['GET']['adminAction'], $serendipity);
+            }
+            break;
+
+        case 'logout':
+            echo LOGGEDOUT;
+            break;
+
+        default:
+            include S9Y_INCLUDE_PATH . 'include/admin/overview.inc.php';
+            break;
+    }
+
+    $main_content = ob_get_contents();
+    ob_end_clean();
+}
+
+if (!$use_installer && !$_SESSION['no_smarty'] && serendipity_smarty_init()) {
+    $poll_admin_vars = array('css_file', 'admin_css_file', 'main_content', 'no_banner', 'no_sidebar', 'post_action', 'is_logged_in', 'admin_installed', 'self_info', 'use_installer');
+    $admin_vars = array();
+    foreach($poll_admin_vars AS $poll_admin_var) {
+        $admin_vars[$poll_admin_var] =& $$poll_admin_var;
+    }
+
+    $admin_vars['out']              = array();
+    $admin_vars['no_create']        = $serendipity['no_create'];
+
+    if ($serendipity['expose_s9y']) {
+        $admin_vars['version_info'] = sprintf(ADMIN_FOOTER_POWERED_BY, $serendipity['versionInstalled'], phpversion());
+    } else {
+        $admin_vars['version_info'] = sprintf(ADMIN_FOOTER_POWERED_BY, '', '');
+    }
+
+    $serendipity['smarty']->assign_by_ref('admin_vars', $admin_vars);
+    $serendipity['smarty']->display(serendipity_getTemplateFile('admin/index.tpl', 'serendipityPath'));
+} else {
 ?>
 <html>
     <head>
         <title><?php echo SERENDIPITY_ADMIN_SUITE; ?></title>
         <meta http-equiv="Content-Type" content="text/html; charset=<?php echo LANG_CHARSET; ?>" />
         <link rel="stylesheet" type="text/css" href="<?php echo $css_file; ?>" />
-        <link rel="stylesheet" type="text/css" href="<?php echo serendipity_getTemplateFile('admin/pluginmanager.css'); ?>" />
+        <link rel="stylesheet" type="text/css" href="<?php echo $admin_css_file; ?>" />
 
         <script type="text/javascript">
         function spawn() {
@@ -88,49 +287,42 @@ if (serendipity_is_iframe()) {
 
         </script>
 <?php
-    if (defined('IS_up2date') && IS_up2date === true) {
+    if ($admin_installed) {
         serendipity_plugin_api::hook_event('backend_header', $serendipity);
     }
 ?>
     </head>
     <body id="serendipity_admin_page" onload="spawn()">
         <table cellspacing="0" cellpadding="0" border="0" id="serendipityAdminFrame">
-        <?php if (!isset($serendipity['GET']['noBanner']) && !isset($serendipity['POST']['noBanner'])) { ?>
+        <?php if (!$no_banner) { ?>
             <tr>
                 <td colspan="2" id="serendipityAdminBanner">
-                <?php if ( IS_installed === true && IS_up2date === true ) { ?>
+                <?php if ($admin_installed) { ?>
                     <h1><?php echo SERENDIPITY_ADMIN_SUITE ?></h1>
                     <h2><?php echo $serendipity['blogTitle'] ?></h2>
-                <?php } elseif ( IS_installed === false || IS_up2date === false ) { ?>
+                <?php } else { ?>
                     <h1><?php echo SERENDIPITY_INSTALLATION ?></h1>
                 <?php } ?>
                 </td>
             </tr>
             <tr>
                 <td colspan="2" id="serendipityAdminInfopane">
-                    <?php if (serendipity_userLoggedIn()) { ?>
-                        <?php echo sprintf(USER_SELF_INFO, $serendipity['serendipityUser'], $serendipity['permissionLevels'][$serendipity['serendipityUserlevel']]) ?>
+                    <?php if ($is_logged_in) { ?>
+                        <?php echo $self_info; ?>
                     <?php } ?>
                 </td>
             </tr>
         <?php } ?>
             <tr valign="top">
 <?php
-if (!isset($serendipity['serendipityPath']) || IS_installed === false || IS_up2date === false ) {
-    if (IS_installed === false) {
-        $file = 'include/admin/installer.inc.php';
-    } elseif ( IS_up2date === false ) {
-        $file = 'include/admin/upgrader.inc.php';
-    } else {
-        $file = ''; // For register_global, safety
-    }
+if ($use_installer) {
 ?>
                 <td class="serendipityAdminContent" colspan="2">
                     <?php require(S9Y_INCLUDE_PATH . $file); ?>
 <?php
 
 
-} elseif ( serendipity_userLoggedIn() == false ) {
+} elseif (!$is_logged_in) {
     $out = array();
     serendipity_plugin_api::hook_event('backend_login_page', $out);
 ?>
@@ -138,7 +330,7 @@ if (!isset($serendipity['serendipityPath']) || IS_installed === false || IS_up2d
                     <div align="center"><?php echo WELCOME_TO_ADMIN ?><br /><?php echo PLEASE_ENTER_CREDENTIALS ?></div>
                     <?php echo $out['header']; ?>
                     <br />
-                    <?php if ( isset($serendipity['POST']['action']) && !serendipity_userLoggedIn() ) { ?>
+                    <?php if ($post_action != '' && !$is_logged_in ) { ?>
                     <div class="serendipityAdminMsgError"><?php echo WRONG_USERNAME_OR_PASSWORD; ?></div>
                     <?php } ?>
                     <form action="serendipity_admin.php" method="post">
@@ -164,12 +356,8 @@ if (!isset($serendipity['serendipityPath']) || IS_installed === false || IS_up2d
                     <?php echo $out['footer']; ?>
                     <a href="<?php echo $serendipity['serendipityHTTPPath']; ?>"><?php echo BACK_TO_BLOG;?></a>
 <?php
-
-
-
 } else {
-?>
-<?php if (!isset($serendipity['GET']['noSidebar']) && !isset($serendipity['POST']['noSidebar'])) { ?>
+    if (!$no_sidebar) { ?>
                 <td id="serendipitySideBar">
                     <ul class="serendipitySideBarMenu">
                         <li><a href="serendipity_admin.php"><?php echo ADMIN_FRONTPAGE; ?></a></li>
@@ -194,8 +382,9 @@ if (!isset($serendipity['serendipityPath']) || IS_installed === false || IS_up2d
 <?php if (serendipity_checkPermission('adminEntries') || serendipity_checkPermission('adminEntriesPlugins')) { ?>
                         <?php if ($serendipity['no_create'] !== true) serendipity_plugin_api::hook_event('backend_sidebar_entries', $serendipity); ?>
 <?php } ?>
-                    </ul>
 <?php } ?>
+                    </ul>
+
 <?php if (serendipity_checkPermission('adminImages')) { ?>
                     <ul class="serendipitySideBarMenu">
                         <li class="serendipitySideBarMenuHead"><?php echo MEDIA; ?></li>
@@ -255,130 +444,7 @@ if (!isset($serendipity['serendipityPath']) || IS_installed === false || IS_up2d
 <?php } ?>
                 <td class="serendipityAdminContent">
 <?php
-    if (!isset($serendipity['GET']['adminModule'])) {
-        $serendipity['GET']['adminModule'] = (isset($serendipity['POST']['adminModule']) ? $serendipity['POST']['adminModule'] : '');
-    }
-
-    serendipity_checkXSRF();
-
-    switch($serendipity['GET']['adminModule']) {
-        case 'installer':
-        case 'configuration':
-            if (!serendipity_checkPermission('siteConfiguration') && !serendipity_checkPermission('blogConfiguration')) {
-                break;
-            }
-
-            include S9Y_INCLUDE_PATH . 'include/admin/configuration.inc.php';
-            break;
-
-        case 'media':
-        case 'images':
-            if (!serendipity_checkPermission('adminImages')) {
-                break;
-            }
-
-            include S9Y_INCLUDE_PATH . 'include/admin/images.inc.php';
-            break;
-
-        case 'templates':
-            if (!serendipity_checkPermission('adminTemplates')) {
-                break;
-            }
-
-            include S9Y_INCLUDE_PATH . 'include/admin/templates.inc.php';
-            break;
-
-        case 'plugins':
-            if (!serendipity_checkPermission('adminPlugins')) {
-                break;
-            }
-
-            include S9Y_INCLUDE_PATH . 'include/admin/plugins.inc.php';
-            break;
-
-        case 'users':
-            if (!serendipity_checkPermission('adminUsers')) {
-                break;
-            }
-
-            include S9Y_INCLUDE_PATH . 'include/admin/users.inc.php';
-            break;
-
-        case 'groups':
-            if (!serendipity_checkPermission('adminUsersGroups')) {
-                break;
-            }
-
-            include S9Y_INCLUDE_PATH . 'include/admin/groups.inc.php';
-            break;
-
-        case 'personal':
-            if (!serendipity_checkPermission('personalConfiguration')) {
-                break;
-            }
-
-            include S9Y_INCLUDE_PATH . 'include/admin/personal.inc.php';
-            break;
-
-        case 'export':
-            if (!serendipity_checkPermission('adminImport')) {
-                break;
-            }
-
-            include S9Y_INCLUDE_PATH . 'include/admin/export.inc.php';
-            break;
-
-        case 'import':
-            if (!serendipity_checkPermission('adminImport')) {
-                break;
-            }
-
-            include S9Y_INCLUDE_PATH . 'include/admin/import.inc.php';
-            break;
-
-        case 'entries':
-            if (!serendipity_checkPermission('adminEntries')) {
-                break;
-            }
-
-            include S9Y_INCLUDE_PATH . 'include/admin/entries.inc.php';
-            break;
-
-        case 'comments':
-            if (!serendipity_checkPermission('adminComments')) {
-                break;
-            }
-
-            include S9Y_INCLUDE_PATH . 'include/admin/comments.inc.php';
-            break;
-
-        case 'category':
-        case 'categories':
-            if (!serendipity_checkPermission('adminCategories')) {
-                break;
-            }
-
-            include S9Y_INCLUDE_PATH . 'include/admin/category.inc.php';
-            break;
-
-        case 'logout':
-            echo LOGGEDOUT;
-            break;
-
-        case 'event_display':
-            if ($serendipity['no_create'] !== true) {
-                serendipity_plugin_api::hook_event('backend_sidebar_entries_event_display_' . $serendipity['GET']['adminAction'], $serendipity);
-            }
-            break;
-
-        case 'logout':
-            echo LOGGEDOUT;
-            break;
-
-        default:
-            include S9Y_INCLUDE_PATH . 'include/admin/overview.inc.php';
-            break;
-    }
+    echo $main_content;
 }
 ?>
                 </td>
@@ -397,5 +463,4 @@ if (!isset($serendipity['serendipityPath']) || IS_installed === false || IS_up2d
     </body>
 </html>
 <?php
-/* vim: set sts=4 ts=4 expandtab : */
-?>
\ No newline at end of file
+}
\ No newline at end of file
diff --git a/templates/default/admin/entries.tpl b/templates/default/admin/entries.tpl
new file mode 100644 (file)
index 0000000..27c3ecd
--- /dev/null
@@ -0,0 +1,227 @@
+<!-- ADMIN-ENTRY TEMPLATE: entries.tpl START -->
+{*** POSSIBLE ERROR MESSAGES START ***}
+{if $entry_vars.errMsg}
+    <div class="serendipityAdminMsgError">{$entry_vars.errMsg}</div>
+{/if}
+{*** POSSIBLE ERROR MESSAGES END ***}
+
+{*** MAIN ENTRY FORM START ***}
+<form {$entry_vars.entry.entry_form action="{$entry_vars.targetURL}" method="post" id="serendipityEntry" style="margin-top: 0px; margin-bottom: 0px; padding-top: 0px; padding-bottom: 0px">
+{$entry_vars.hidden}
+
+<table class="serendipityEntryEdit" border="0" width="100%">
+
+    {*** ENTRY TITLE, DRAFT START ***}
+    <tr>
+        <td>
+           <b>{$CONST.TITLE}:</b>
+        </td>
+        <td colspan="2">
+            <table width="100%" cellspacing="0" cellpadding="0" border="0">
+                <tr>
+                    <td><input type="text" id="entryTitle" name="serendipity[title]" value="{$entry_vars.entry.title|@escape}" size="60" /></td>
+                    <td align="right">
+                        <select name="serendipity[isdraft]">
+                            {if $entry_vars.serendipityRightPublish}
+                            <option  value="false" {if $entry_vars.draft_mode == 'publish'}selected="selected"{/if}>{CONST.PUBLISH}</option>
+                            {/if}
+                            <option  value="true"  {if $entry_vars.draft_mode == 'draft'}selected="selected"{/if}>{$CONST.DRAFT}</option>
+                        </select>
+                    </td>
+                </tr>
+            </table>
+        </td>
+    </tr>
+    {*** ENTRY TITLE, DRAFT END ***}
+
+    <tr>
+   
+    {*** ENTRY DATE,CATEGORY START ***}
+    {if $entry_vars.allowDateManipulation}
+        <td>
+            <b>{$CONST.DATE}:</b>
+        </td>
+        <td>
+            <input type="hidden" name="serendipity[chk_timestamp]" value="{$entry_vars.timestamp}" />
+            <input type="text" name="serendipity[new_timestamp]" id="serendipityNewTimestamp" value="{$entry_vars.timestamp|@formatTime:DATE_FORMAT_2}" />
+            <a href="#" onclick="document.getElementById('serendipityNewTimestamp').value = '{$entry_vars.reset_timestamp|@formatTime:DATE_FORMAT_2}'; return false;" title="{$CONST.RESET_DATE_DESC}"><img src="{serendipity_getFile file='admin/img/clock.png'}" border="0"  style="vertical-align: text-top;" alt="{$CONST.RESET_DATE}" /></a>
+        </td>
+        <td align="right">
+    {else}
+        <td align="right" colspan="3">
+    {/if}
+            <a style="border:0; text-decoration: none" href="#" onclick="showItem('categoryselector'); return false" title="{$CONST.TOGGLE_OPTION}"><img src="{serendipity_getFile file='img/plus.png'}" id="option_categoryselector" style="border: 20px" alt="" border="0" /></a> <b>{$CONST.CATEGORY}:</b> 
+            <select id="categoryselector" name="serendipity[categories][]" style="vertical-align: middle;" multiple="multiple">
+                <option value="0">[{$CONST.NO_CATEGORY}]</option>
+                {foreach from=$entry_vars.category_options item="entry_cat"}
+                <option value="{$entry_cat.categoryid}" {if $entry_cat.is_selected}selected="selected"{/if}>{$entry_cat.depth_pad}{$entry_cat.category_name}</option>
+                {/foreach}
+            </select>
+
+            <script type="text/javascript" language="JavaScript">
+
+            var plus_img  = '{serendipity_getFile file='img/plus.png'}';
+            var minus_img = '{serendipity_getFile file='img/minus.png'}';
+            var cat_count = {$entry_vars.cat_count};
+            var selector_toggle  = new Array();
+            var selector_store   = new Array();
+            var selector_restore = new Array();
+        
+            function checkSave() {
+                {serendipity_hookPlugin hook='backend_entry_checkSave' hookAll='true'}
+                return true;
+            }
+
+            selector_toggle['categoryselector'] = '{$entry_vars.cat_state}';
+            addLoadEvent(showItem);
+            </script>
+            <script type="text/javascript" language="JavaScript" src="{serendipity_getFile file='admin/category_selector.js'}">
+        </td>
+    </tr>
+    {*** ENTRY DATE,CATEGORY END ***}
+
+    {*** ENTRY TOOLBAR START ***}
+    <tr>
+        {if NOT $entry_vars.wysiwyg}
+        <td colspan="2"><b>{$CONST.ENTRY_BODY}</b></td>
+        <td align="right">
+            {if $entry_vars.wysiwyg_advanced}
+            <script type="text/javascript" language="JavaScript">
+                document.write('<input type="button" class="serendipityPrettyButton" name="insI" value="I" accesskey="i" style="font-style: italic" onclick="wrapSelection(document.forms[\'serendipityEntry\'][\'serendipity[body]\'],\'<em>\',\'</em>\')" />');
+                document.write('<input type="button" class="serendipityPrettyButton" name="insB" value="B" accesskey="b" style="font-weight: bold" onclick="wrapSelection(document.forms[\'serendipityEntry\'][\'serendipity[body]\'],\'<strong>\',\'</strong>\')" />');
+                document.write('<input type="button" class="serendipityPrettyButton" name="insU" value="U" accesskey="u" style="text-decoration: underline;" onclick="wrapSelection(document.forms[\'serendipityEntry\'][\'serendipity[body]\'],\'<u>\',\'</u>\')" />');
+                document.write('<input type="button" class="serendipityPrettyButton" name="insQ" value="{$CONST.QUOTE}" accesskey="q" style="font-style: italic" onclick="wrapSelection(document.forms[\'serendipityEntry\'][\'serendipity[body]\'],\'<blockquote>\',\'</blockquote>\')" />');
+                document.write('<input type="button" class="serendipityPrettyButton" name="insJ" value="img" accesskey="j" onclick="wrapInsImage(document.forms[\'serendipityEntry\'][\'serendipity[body]\'])" />');
+                document.write('<input type="button" class="serendipityPrettyButton" name="insImage" value="{$CONST.MEDIA}" style="" onclick="window.open(\'serendipity_admin_image_selector.php?serendipity[textarea]=body\', \'ImageSel\', \'width=800,height=600,toolbar=no,scrollbars=1,scrollbars,resize=1,resizable=1\');" />');
+                document.write('<input type="button" class="serendipityPrettyButton" name="insURL" value="URL" accesskey="l" onclick="wrapSelectionWithLink(document.forms[\'serendipityEntry\'][\'serendipity[body]\'])" />');
+            </script>
+            {else}
+            <script type="text/javascript" language="JavaScript">
+                document.write('<input type="button" class="serendipityPrettyButton" value=" B " onclick="serendipity_insBasic(document.forms[\'serendipityEntry\'][\'serendipity[body]\'], \'b\')">');
+                document.write('<input type="button" class="serendipityPrettyButton" value=" U " onclick="serendipity_insBasic(document.forms[\'serendipityEntry\'][\'serendipity[body]\'], \'u\')">');
+                document.write('<input type="button" class="serendipityPrettyButton" value=" I " onclick="serendipity_insBasic(document.forms[\'serendipityEntry\'][\'serendipity[body]\'], \'i\')">');
+                document.write('<input type="button" class="serendipityPrettyButton" value="<img>" onclick="serendipity_insImage(document.forms[\'serendipityEntry\'][\'serendipity[body]\'])">');
+                document.write('<input type="button" class="serendipityPrettyButton" value="{$CONST.MEDIA}" onclick="window.open(\'serendipity_admin_image_selector.php?serendipity[textarea]=body\', \'ImageSel\', \'width=800,height=600,toolbar=no\');">');
+                document.write('<input type="button" class="serendipityPrettyButton" value="Link" onclick="serendipity_insLink(document.forms[\'serendipityEntry\'][\'serendipity[body]\'])">');
+            </script>
+            {/if}
+            {serendipity_hookPlugin hook="backend_entry_toolbar_extended" data=$entry_data.entry hookAll="true"}
+        </td>
+        {else}
+        <td colspan="2"><b>{$CONST.ENTRY_BODY}</b></td>
+        <td>{serendipity_hookPlugin hook="backend_entry_toolbar_extended" data=$entry_data.entry hookAll="true"}</td>
+        {/if}
+    </tr>
+    {*** ENTRY TOOLBAR END ***}
+
+    {*** ENTRY BODY START ***}
+    <tr>
+        <td colspan="3">
+            <textarea style="width: 100%" name="serendipity[body]" id="serendipity[body]" cols="80" rows="20">{$entry_vars.entry.body|@escape}</textarea>
+        </td>
+    </tr>
+    {*** ENTRY BODY START ***}
+
+    {*** ENTRY OPTIONS START ***}
+    <tr>
+        <td colspan="3">
+            <table width="100%" cellpadding="0" cellspacing="0">
+                <tr>
+                    <td align="left" width="70%">
+                        <input id="checkbox_allow_comments" type="checkbox" name="serendipity[allow_comments]" value="true" {if $entry_vars.allow_comments}checked="checked"{/if} /><label for="checkbox_allow_comments">{$CONST.COMMENTS_ENABLE; ?></label><br />
+                        <input id="checkbox_moderate_comments" type="checkbox" name="serendipity[moderate_comments]" value="true" {if $entry_vars.moderate_comments}checked="checked"{/if} /><label for="checkbox_moderate_comments">{$CONST.COMMENTS_MODERATE}</label>
+                    </td>
+                    <td align="right" rowspan="2" valign="middle" width="30%">
+                        <input accesskey="p" type="submit" value="- {$CONST.PREVIEW} -" class="serendipityPrettyButton"  style="width: 150px" onclick="document.forms['serendipityEntry'].elements['serendipity[preview]'].value='true';" /><br />
+                        <input accesskey="s" type="submit" onclick="return checkSave();" value="- {$CONST.SAVE} -" class="serendipityPrettyButton" style="width: 150px" />
+                    </td>
+                </tr>
+            </table>
+            <br />
+        </td>
+    </tr>
+    {*** ENTRY OPTIONS END ***}
+
+    {*** EXTENDED ENTRY TOOLBAR START ***}
+    <tr>
+        <td colspan="2">
+            {if NOT $entry_vars.wysiwyg}
+            <a style="border:0; text-decoration: none" href="#" onclick="toggle_extended(true); return false;" title="{$CONST.TOGGLE_OPTION}"><img src="{serendipity_getFile file='img/plus.png'}" id="option_extended" alt="+/-" border="0" /></a>
+            {/if}
+            <b>{$CONST.EXTENDED_BODY}</b>
+        </td>
+
+        <td align="right">
+            {if NOT $entry_vars.wysiwyg}
+            <div id="tools_extended" style="display: none">
+                {if $entry_vars.wysiwyg_advanced}
+                <input type="button" class="serendipityPrettyButton" name="insI" value="I" accesskey="i" style="font-style: italic" onclick="wrapSelection(document.forms['serendipityEntry']['serendipity[extended]'],'<em>','</em>')" />
+                <input type="button" class="serendipityPrettyButton" name="insB" value="B" accesskey="b" style="font-weight: bold" onclick="wrapSelection(document.forms['serendipityEntry']['serendipity[extended]'],'<strong>','</strong>')" />
+                <input type="button" class="serendipityPrettyButton" name="insU" value="U" accesskey="u" style="text-decoration: underline;" onclick="wrapSelection(document.forms['serendipityEntry']['serendipity[extended]'],'<u>','</u>')" />
+                <input type="button" class="serendipityPrettyButton" name="insQ" value="{$CONST.QUOTE}" accesskey="q" style="font-style: italic" onclick="wrapSelection(document.forms['serendipityEntry']['serendipity[extended]'],'<blockquote>','</blockquote>')" />
+                <input type="button" class="serendipityPrettyButton" name="insJ" value="img" accesskey="j" onclick="wrapInsImage(document.forms['serendipityEntry']['serendipity[extended]'])" />
+                <input type="button" class="serendipityPrettyButton" name="insImage" value="{$CONST.MEDIA}" onclick="window.open('serendipity_admin_image_selector.php?serendipity[textarea]=extended', 'ImageSel', 'width=800,height=600,toolbar=no,scrollbars=1,scrollbars,resize=1,resizable=1');" />
+                <input type="button" class="serendipityPrettyButton" name="insURL" value="URL" accesskey="l" onclick="wrapSelectionWithLink(document.forms['serendipityEntry']['serendipity[extended]'])" />
+                {else}
+                <input type="button" class="serendipityPrettyButton" value=" B " onclick="serendipity_insBasic(document.forms['serendipityEntry']['serendipity[extended]'], 'b')">
+                <input type="button" class="serendipityPrettyButton" value=" U " onclick="serendipity_insBasic(document.forms['serendipityEntry']['serendipity[extended]'], 'u')">
+                <input type="button" class="serendipityPrettyButton" value=" I " onclick="serendipity_insBasic(document.forms['serendipityEntry']['serendipity[extended]'], 'i')">
+                <input type="button" class="serendipityPrettyButton" value="<img>" onclick="serendipity_insImage(document.forms['serendipityEntry']['serendipity[extended]'])">
+                <input type="button" class="serendipityPrettyButton" value="{$CONST.MEDIA}" onclick="window.open('serendipity_admin_image_selector.php?serendipity[textarea]=extended', 'ImageSel', 'width=800,height=600,toolbar=no');">
+                <input type="button" class="serendipityPrettyButton" value="Link" onclick="serendipity_insLink(document.forms['serendipityEntry']['serendipity[extended]'])">
+                {/if}
+                {serendipity_hookPlugin hook="backend_entry_toolbar_extended" data=$entry_data.entry hookAll="true"}
+            </div>
+            {else}
+                {serendipity_hookPlugin hook="backend_entry_toolbar_extended" data=$entry_data.entry hookAll="true"}
+            {/if}
+       </td>
+    </tr>
+    {*** EXTENDED ENTRY TOOLBAR END ***}
+
+    {*** EXTENDED ENTRY BODY START ***}
+    <tr>
+        <td colspan="3">
+            <textarea style="width: 100%;" name="serendipity[extended]" id="serendipity[extended]" cols="80" rows="20">{$entry_vars.entry.extended|@escape}</textarea>
+            {if NOT $entry_vars.wysiwyg}
+            <script type="text/javascript" language="JavaScript">
+               toggle_extended();
+            </script>
+            {/if}
+        </td>
+    </tr>
+    {*** EXTENDED ENTRY BODY END ***}
+
+    <tr>
+        <td colspan="3">
+            <br />
+            <fieldset>
+                <legend><b>{$CONST.ADVANCED_OPTIONS}</b></legend>
+    {*** EXTERNAL PLUGINS OUTPUT START ***}                
+                {serendipity_hookPlugin hook="backend_display" data=$entry_vars.entry hookAll="true"}
+    {*** EXTERNAL PLUGINS OUTPUT END ***}                
+            </fieldset>
+        </td>
+    </tr>
+</table>
+</form>
+{*** MAIN ENTRY FORM END ***}
+
+{*** SPAWN WYSIWYG EDITORS START ***}
+{if $entry_vars.show_wysiwyg}
+<script type="text/javascript" language="JavaScript">
+    toggle_extended();
+</script>
+{/if}
+
+{if $entry_vars.wysiwyg}
+    {foreach from=$entry_vars.wysiwyg_blocks item="wysiwyg_block_item" key="wysiwyg_block_jsname"}
+        {$wysiwyg_block_item|emit_htmlarea_code:$wysiwyg_block_jsname}
+    {/foreach}
+    {serendipity_hookPlugin hook="backend_wysiwyg_finish" data=$entry_vars.wysiwyg_blocks hookAll="true"}
+{/if}
+{*** SPAWN WYSIWYG EDITORS END ***}
+
+<script type="text/javascript" language="JavaScript" src="serendipity_define.js.php"></script>
+<script type="text/javascript" language="JavaScript" src="serendipity_editor.js"></script>
+<!-- ADMIN-ENTRY TEMPLATE: entries.tpl END -->
diff --git a/templates/default/admin/index.tpl b/templates/default/admin/index.tpl
new file mode 100644 (file)
index 0000000..9061f1e
--- /dev/null
@@ -0,0 +1,240 @@
+<html>
+    <head>
+<!-- ADMIN-ENTRY TEMPLATE: index.tpl START -->
+        <title>{$CONST.SERENDIPITY_ADMIN_SUITE}</title>
+        <meta http-equiv="Content-Type" content="text/html; charset={$CONST.LANG_CHARSET}" />
+        <link rel="stylesheet" type="text/css" href="{$admin_vars.css_file}" />
+        <link rel="stylesheet" type="text/css" href="{$admin_vars.admin_css_file}" />
+
+        <script type="text/javascript">
+        {literal}
+        function spawn() {
+            if (self.Spawnextended) {
+                Spawnextended();
+            }
+
+            if (self.Spawnbody) {
+                Spawnbody();
+            }
+
+            if (self.Spawnnugget) {
+                Spawnnugget();
+            }
+        }
+
+        function SetCookie(name, value) {
+            var today  = new Date();
+            var expire = new Date();
+            expire.setTime(today.getTime() + (60*60*24*30));
+            document.cookie = 'serendipity[' + name + ']='+escape(value) + ';expires=' + expire.toGMTString();
+        }
+
+        function addLoadEvent(func) {
+          var oldonload = window.onload;
+          if (typeof window.onload != 'function') {
+            window.onload = func;
+          } else {
+            window.onload = function() {
+              oldonload();
+              func();
+            }
+          }
+        }
+        {/literal}
+
+        </script>
+    {if $admin_vars.admin_installed}
+        {serendipity_hookPlugin hook="backend_header" hookAll="true"}
+    {/if}
+    </head>
+
+    <body id="serendipity_admin_page" onload="spawn()">
+        <table cellspacing="0" cellpadding="0" border="0" id="serendipityAdminFrame">
+
+{*** BANNER START ***}
+        {if NOT $admin_vars.no_banner}
+            <tr>
+                <td colspan="2" id="serendipityAdminBanner">
+                {if $admin_vars.admin_installed}
+                    <h1>{$CONST.SERENDIPITY_ADMIN_SUITE}</h1>
+                    <h2>{$blogTitle}</h2>
+                {else}
+                    <h1>{$CONST.SERENDIPITY_INSTALLATION}</h1>
+                {/if}
+                </td>
+            </tr>
+            <tr>
+                <td colspan="2" id="serendipityAdminInfopane">
+                    {if $admin_vars.is_logged_in}
+                        {$admin_vars.self_info}
+                    {/if}
+                </td>
+            </tr>
+        {/if}
+{*** BANNER END ***}
+
+            <tr valign="top">
+{if NOT $admin_vars.is_logged_in}
+{*** LOGIN-AREA START ***}
+
+    {serendipity_hookPlugin hook="backend_header" data=$admin_vars.out hookAll="true"}
+                <td colspan="2" class="serendipityAdminContent">
+                    <div align="center">{$CONST.WELCOME_TO_ADMIN}<br />
+                    {$CONST.PLEASE_ENTER_CREDENTIALS}
+                    {$admin_vars.out.header}
+                    </div>
+                    <br />
+
+                    {if $admin_vars.post_action != '' AND NOT $admin_vars.is_logged_in}
+                    <div class="serendipityAdminMsgError">{$CONST.WRONG_USERNAME_OR_PASSWORD}</div>
+                    {/if}
+                    
+                    <form action="serendipity_admin.php" method="post">
+                        <input type="hidden" name="serendipity[action]" value="admin" />
+                        <table cellspacing="10" cellpadding="0" border="0" align="center">
+                            <tr>
+                                <td>{$CONST.USERNAME}</td>
+                                <td><input type="text" name="serendipity[user]" /></td>
+                            </tr>
+                            <tr>
+                                <td>{$CONST.PASSWORD}</td>
+                                <td><input type="password" name="serendipity[pass]" /></td>
+                            </tr>
+                            <tr>
+                                <td colspan="2"><input id="autologin" type="checkbox" name="serendipity[auto]" /><label for="autologin"> {$CONST.AUTOMATIC_LOGIN}</label></td>
+                            </tr>
+                            <tr>
+                                <td colspan="2" align="right"><input type="submit" name="submit" value="{$CONST.LOGIN} &gt;" class="serendipityPrettyButton" /></td>
+                            </tr>
+                            {$admin_vars.out.table}
+                        </table>
+                    </form>
+                    {$admin_vars.out.footer}
+                    <a href="{$serendipityHTTPPath}">{$CONST.BACK_TO_BLOG}</a>
+{*** LOGIN-AREA END ***}
+{else}
+{*** SIDEBAR-MENU START ***}
+    {if NOT $admin_vars.no_sidebar}
+                <td id="serendipitySideBar">
+    {*** MAIN LINKS START ***}
+                    <ul class="serendipitySideBarMenu">
+                        <li><a href="serendipity_admin.php">{$CONST.ADMIN_FRONTPAGE}</a></li>
+                        {if 'personalConfiguration'|checkPermission}
+                        <li><a href="serendipity_admin.php?serendipity[adminModule]=personal">{$CONST.PERSONAL_SETTINGS}</a></li>
+                        {/if}
+                    </ul>
+    {*** MAIN LINKS END ***}
+
+                    <br />
+
+    {*** ENTRY LINKS START ***}
+                    <ul class="serendipitySideBarMenu">
+                    {if 'adminEntries'|checkPermission OR 'adminEntriesPlugins'|checkPermission}
+                        <li class="serendipitySideBarMenuHead">{$CONST.ADMIN_ENTRIES}</li>
+                        {if 'adminEntries'|checkPermission}
+                        <li><a href="serendipity_admin.php?serendipity[adminModule]=entries&amp;serendipity[adminAction]=new">{$CONST.NEW_ENTRY}</a></li>
+                        <li><a href="serendipity_admin.php?serendipity[adminModule]=entries&amp;serendipity[adminAction]=editSelect">{$CONST.EDIT_ENTRIES}</a></li>
+                        {/if}
+
+                        {if 'adminComments'|checkPermission}
+                        <li><a href="serendipity_admin.php?serendipity[adminModule]=comments">{$CONST.COMMENTS}</a></li>
+                        {/if}
+
+                        {if 'adminCategories'|checkPermission}
+                        <li><a href="serendipity_admin.php?serendipity[adminModule]=category&amp;serendipity[adminAction]=view">{$CONST.CATEGORIES}</a></li>
+                        {/if}
+
+                        {if 'adminEntries'|checkPermission OR 'adminEntriesPlugins'|checkPermission}
+                        {if $admin_vars.no_create !== true} {serendipity_hookPlugin hook="backend_sidebar_entries" hookAll="true"}{/if}
+                        {/if}
+                    {/if}
+                    </ul>
+    {*** ENTRY LINKS END ***}
+
+    {*** MEDIA LINKS START ***}
+        {if 'adminImages'|checkPermission}
+                    <ul class="serendipitySideBarMenu">
+                        <li class="serendipitySideBarMenuHead">{$CONST.MEDIA}</li>
+                        {if 'adminImagesAdd'|checkPermission}
+                        <li><a href="serendipity_admin.php?serendipity[adminModule]=media&amp;serendipity[adminAction]=addSelect">{$CONST.ADD_MEDIA}</a></li>
+                        {/if}
+                        {if 'adminImagesView'|checkPermission}
+                        <li><a href="serendipity_admin.php?serendipity[adminModule]=media">{$CONST.MEDIA_LIBRARY}</a></li>
+                        {/if}
+                        {if 'adminImagesDirectories'|checkPermission}
+                        <li><a href="serendipity_admin.php?serendipity[adminModule]=media&amp;serendipity[adminAction]=directorySelect">{$CONST.MANAGE_DIRECTORIES}</a></li>
+                        {/if}
+                        {if 'adminImagesSync'|checkPermission}
+                        <li><a href="serendipity_admin.php?serendipity[adminModule]=media&amp;serendipity[adminAction]=sync" onclick="return confirm('{$CONST.WARNING_THIS_BLAHBLAH}');">{$CONST.CREATE_THUMBS}</a></li>
+                        {/if}
+                        {if $admin_vars.no_create !== true} {serendipity_hookPlugin hook="backend_sidebar_entries_images" hookAll="true"}{/if}
+                    </ul>
+        {/if}
+    {*** MEDIA LINKS END ***}
+
+    {*** APPEARANCE START ***}
+        {if 'adminTemplates'|checkPermission OR 'adminPlugins'|checkPermission}
+                    <ul class="serendipitySideBarMenu">
+                        <li class="serendipitySideBarMenuHead">{$CONST.APPEARANCE}</li>
+                        {if 'adminTemplates'|checkPermission}
+                        <li><a href="serendipity_admin.php?serendipity[adminModule]=templates">{$CONST.MANAGE_STYLES}</a></li>
+                        {/if}
+                        {if 'adminPlugins'|checkPermission}
+                        <li><a href="serendipity_admin.php?serendipity[adminModule]=plugins">{$CONST.CONFIGURE_PLUGINS}</a></li>
+                        {/if}
+                        {if $admin_vars.no_create !== true} {serendipity_hookPlugin hook="backend_sidebar_admin_appearance" hookAll="true"}{/if}
+                    </ul>
+        {/if}
+    {*** APPEARANCE END ***}
+
+    {*** USER MANAGEMENT START ***}
+        {if 'adminUsersGroups'|checkPermission OR 'adminImport'|checkPermission OR 'siteConfiguration'|checkPermission OR 'blogConfiguration'|checkPermission OR 'adminUsers'|checkPermission}
+                    <ul class="serendipitySideBarMenu">
+                        <li class="serendipitySideBarMenuHead">{$CONST.ADMIN}</li>
+                        {if 'siteConfiguration'|checkPermission OR 'blogConfiguration'|checkPermission}
+                        <li><a href="serendipity_admin.php?serendipity[adminModule]=configuration">{$CONST.CONFIGURATION}</a></li>
+                        {/if}
+                        {if 'adminUsers'|checkPermission}
+                        <li><a href="serendipity_admin.php?serendipity[adminModule]=users">{$CONST.MANAGE_USERS}</a></li>
+                        {/if}
+                        {if 'adminUsersGroups'|checkPermission}
+                        <li><a href="serendipity_admin.php?serendipity[adminModule]=groups">{$CONST.MANAGE_GROUPS}</a></li>
+                        {/if}
+                        {if 'adminImport'|checkPermission}
+                        <li><a href="serendipity_admin.php?serendipity[adminModule]=import">{$CONST.IMPORT_ENTRIES}</a></li>
+                        <li><a href="serendipity_admin.php?serendipity[adminModule]=export">{$CONST.EXPORT_ENTRIES}</a></li>
+                        {/if}
+                        {if $admin_vars.no_create !== true} {serendipity_hookPlugin hook="backend_sidebar_admin" hookAll="true"}{/if}
+                    </ul>
+        {/if}
+    {*** USER MANAGEMENT END ***}
+
+    {*** LOGOUT START ***}
+                    <br />
+                    <ul class="serendipitySideBarMenu">
+                        <li><a href="{$baseURL}">{$CONST.BACK_TO_BLOG}</a></li>
+                        <li><a href="serendipity_admin.php?serendipity[adminModule]=logout">{$CONST.LOGOUT}</a></li>
+                    </ul>
+    {*** LOGOUT END ***}
+
+                </td>
+    {/if}
+                <td class="serendipityAdminContent">
+
+    {*** MAIN CONTENT OF THE ADMIN INTERFACE START ***}
+                    {$admin_vars.main_content}
+    {*** MAIN CONTENT OF THE ADMIN INTERFACE END ***}
+
+{/if}
+{*** SIDEBAR-MENU END ***}
+                </td>
+            </tr>
+        </table>
+
+        <br />
+        <div id="serendipityAdminFooter">
+            {$admin_vars.version_info}
+        </div>
+    </body>
+<!-- ADMIN-ENTRY TEMPLATE: index.tpl END -->
+</html>
\ No newline at end of file