Index: admin/index.php
===================================================================
--- admin/index.php	(revision 1558)
+++ admin/index.php	(revision 1591)
@@ -121,5 +121,20 @@
 $__dashboard_items = new ArrayObject(array(new ArrayObject,new ArrayObject));
 
+# Documentation links
 $dashboardItem = 0;
+if ($core->auth->user_prefs->dashboard->doclinks) {
+	if (!empty($__resources['doc']))
+	{
+		$doc_links = '<h3>'.__('Documentation and support').'</h3><ul>';
+	
+		foreach ($__resources['doc'] as $k => $v) {
+			$doc_links .= '<li><a href="'.$v.'" title="'.$k.' '.__('(external link)').'">'.$k.'</a></li>';
+		}
+	
+		$doc_links .= '</ul>';
+		$__dashboard_items[$dashboardItem][] = $doc_links;
+		$dashboardItem++;
+	}
+}
 
 if ($core->auth->user_prefs->dashboard->dcnews) {
@@ -165,20 +180,4 @@
 }
 
-# Documentation links
-if ($core->auth->user_prefs->dashboard->doclinks) {
-	if (!empty($__resources['doc']))
-	{
-		$doc_links = '<h3>'.__('Documentation and support').'</h3><ul>';
-	
-		foreach ($__resources['doc'] as $k => $v) {
-			$doc_links .= '<li><a href="'.$v.'" title="'.$k.' '.__('(external link)').'">'.$k.'</a></li>';
-		}
-	
-		$doc_links .= '</ul>';
-		$__dashboard_items[$dashboardItem][] = $doc_links;
-		$dashboardItem++;
-	}
-}
-
 $core->callBehavior('adminDashboardItems', $core, $__dashboard_items);
 
@@ -194,11 +193,78 @@
 	dcPage::jsLoad('js/_index.js').
 	# --BEHAVIOR-- adminDashboardHeaders
-	$core->callBehavior('adminDashboardHeaders'),
-	dcPage::breadcrumb(
-		array(
-		'<span class="page-title">'.__('Dashboard').' : '.html::escapeHTML($core->blog->name).'</span>' => ''
-		),
-		false)
+	$core->callBehavior('adminDashboardHeaders')
 );
+
+echo '<h2>'.html::escapeHTML($core->blog->name).' &rsaquo; <span class="page-title">'.__('Dashboard').'</span></h2>';
+
+if ($core->auth->getInfo('user_default_blog') != $core->blog->id && $core->auth->blog_count > 1) {
+	echo
+	'<p><a href="index.php?default_blog=1" class="button">'.__('Make this blog my default blog').'</a></p>';
+}
+
+if ($core->blog->status == 0) {
+	echo '<p class="static-msg">'.__('This blog is offline').'</p>';
+} elseif ($core->blog->status == -1) {
+	echo '<p class="static-msg">'.__('This blog is removed').'</p>';
+}
+
+if (!defined('DC_ADMIN_URL') || !DC_ADMIN_URL) {
+	echo
+	'<p class="static-msg">'.
+	sprintf(__('%s is not defined, you should edit your configuration file.'),'DC_ADMIN_URL').
+	' '.__('See <a href="http://dotclear.org/documentation/2.0/admin/config">documentation</a> for more information.').
+	'</p>';
+}
+
+if (!defined('DC_ADMIN_MAILFROM') || !DC_ADMIN_MAILFROM) {
+	echo
+	'<p class="static-msg">'.
+	sprintf(__('%s is not defined, you should edit your configuration file.'),'DC_ADMIN_MAILFROM').
+	' '.__('See <a href="http://dotclear.org/documentation/2.0/admin/config">documentation</a> for more information.').
+	'</p>';
+}
+
+$err = array();
+
+# Check cache directory
+if (!is_dir(DC_TPL_CACHE)) {
+	$err[] = '<p>'.sprintf(__('Cache directory %s does not exist.'),DC_TPL_CACHE).'</p>';
+} else if (!is_writable(DC_TPL_CACHE)) {
+	$err[] = '<p>'.sprintf(__('Cache directory %s is not writable.'),DC_TPL_CACHE).'</p>';
+}
+
+# Check public directory
+if (!is_dir($core->blog->public_path)) {
+	$err[] = '<p>'.sprintf(__('Directory %s does not exist.'),$core->blog->public_path).'</p>';
+} else if (!is_writable($core->blog->public_path)) {
+	$err[] = '<p>'.sprintf(__('Directory %s is not writable.'),$core->blog->public_path).'</p>';
+}
+
+# Error list
+if (count($err) > 0) {
+	echo '<div class="error"><p><strong>Erreur&nbsp;:</strong></p>'.
+	'<ul><li>'.implode("</li><li>",$err).'</li></ul></div>';
+}
+
+# Plugins install messages
+if (!empty($plugins_install['success']))
+{
+	echo '<div class="static-msg">'.__('Following plugins have been installed:').'<ul>';
+	foreach ($plugins_install['success'] as $k => $v) {
+		echo '<li>'.$k.'</li>';
+	}
+	echo '</ul></div>';
+}
+if (!empty($plugins_install['failure']))
+{
+	echo '<div class="error">'.__('Following plugins have not been installed:').'<ul>';
+	foreach ($plugins_install['failure'] as $k => $v) {
+		echo '<li>'.$k.' ('.$v.')</li>';
+	}
+	echo '</ul></div>';
+}
+
+# Dashboard columns (processed first, as we need to know the result before displaying the icons.)
+$dashboardItems = '';
 
 # Dotclear updates notifications
@@ -208,63 +274,14 @@
 	$new_v = $updater->check(DC_VERSION);
 	$version_info = $new_v ? $updater->getInfoURL() : '';
-
+	
 	if ($updater->getNotify() && $new_v) {
-		$message =
-		'<div><p>'.sprintf(__('Dotclear %s is available!'),$new_v).'</p> '.
+		$dashboardItems .=
+		'<div id="upg-notify" class="static-msg"><p>'.sprintf(__('Dotclear %s is available!'),$new_v).'</p> '.
 		'<ul><li><strong><a href="update.php">'.sprintf(__('Upgrade now'),$new_v).'</a></strong>'.
 		'</li><li><a href="update.php?hide_msg=1">'.__('Remind me later').'</a>'.
-		($version_info ? ' </li><li><a href="'.$version_info.'">'.__('information about this version').'</a>' : '').
+		($version_info ? ' </li><li>'.sprintf(__('<a href=\"%s\">Information about this version</a>.'),$version_info) : '').
 		'</li></ul></div>';
-		dcPage::message($message,false,true);
-	}
-}
-
-if ($core->auth->getInfo('user_default_blog') != $core->blog->id && $core->auth->blog_count > 1) {
-	echo
-	'<p><a href="index.php?default_blog=1" class="button">'.__('Make this blog my default blog').'</a></p>';
-}
-
-if ($core->blog->status == 0) {
-	echo '<p class="static-msg">'.__('This blog is offline').'.</p>';
-} elseif ($core->blog->status == -1) {
-	echo '<p class="static-msg">'.__('This blog is removed').'.</p>';
-}
-
-if (!defined('DC_ADMIN_URL') || !DC_ADMIN_URL) {
-	echo
-	'<p class="static-msg">'.
-	sprintf(__('%s is not defined, you should edit your configuration file.'),'DC_ADMIN_URL').
-	' '.__('See <a href="http://dotclear.org/documentation/2.0/admin/config">documentation</a> for more information.').
-	'</p>';
-}
-
-if (!defined('DC_ADMIN_MAILFROM') || !DC_ADMIN_MAILFROM) {
-	echo
-	'<p class="static-msg">'.
-	sprintf(__('%s is not defined, you should edit your configuration file.'),'DC_ADMIN_MAILFROM').
-	' '.__('See <a href="http://dotclear.org/documentation/2.0/admin/config">documentation</a> for more information.').
-	'</p>';
-}
-
-# Plugins install messages
-if (!empty($plugins_install['success']))
-{
-	echo '<div class="static-msg">'.__('Following plugins have been installed:').'<ul>';
-	foreach ($plugins_install['success'] as $k => $v) {
-		echo '<li>'.$k.'</li>';
-	}
-	echo '</ul></div>';
-}
-if (!empty($plugins_install['failure']))
-{
-	echo '<div class="error">'.__('Following plugins have not been installed:').'<ul>';
-	foreach ($plugins_install['failure'] as $k => $v) {
-		echo '<li>'.$k.' ('.$v.')</li>';
-	}
-	echo '</ul></div>';
-}
-
-# Dashboard columns (processed first, as we need to know the result before displaying the icons.)
-$dashboardItems = '';
+	}
+}
 
 # Errors modules notifications
@@ -288,5 +305,5 @@
 	if ($i->count() > 0)
 	{
-		$dashboardItems .= '<div class="db-item">';
+		$dashboardItems .= '<div>';
 		foreach ($i as $v) {
 			$dashboardItems .= $v;
@@ -322,28 +339,28 @@
 			}
 		} catch (Exception $e) { }
-	
+		
 		echo
 		'<div id="quick">'.
 		'<h3>'.__('Quick entry').'</h3>'.
-		'<form id="quick-entry" action="post.php" method="post" class="fieldset">'.
-		'<h4>'.__('New entry').'</h4>'.
-		'<p class="col"><label for="post_title" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Title:').'</label>'.
+		'<form id="quick-entry" action="post.php" method="post">'.
+		'<fieldset><legend>'.__('New entry').'</legend>'.
+		'<p class="col"><label for="post_title" class="required"><abbr title="'.__('Required field').'">*</abbr> '.__('Title:').
 		form::field('post_title',20,255,'','maximal').
-		'</p>'.
+		'</label></p>'.
 		'<p class="area"><label class="required" '.
 		'for="post_content"><abbr title="'.__('Required field').'">*</abbr> '.__('Content:').'</label> '.
 		form::textarea('post_content',50,7).
 		'</p>'.
-		'<p><label for="cat_id" class="classic">'.__('Category:').'</label> '.
-		form::combo('cat_id',$categories_combo).'</p>'.
+		'<p><label for="cat_id" class="classic">'.__('Category:').' '.
+		form::combo('cat_id',$categories_combo).'</label></p>'.
 		($core->auth->check('categories', $core->blog->id)
 			? '<div>'.
-			'<p id="new_cat" class="q-cat">'.__('Add a new category').'</p>'.
-			'<p class="q-cat"><label for="new_cat_title">'.__('Title:').'</label> '.
-			form::field('new_cat_title',30,255,'','').'</p>'.
-			'<p class="q-cat"><label for="new_cat_parent">'.__('Parent:').'</label> '.
-			form::combo('new_cat_parent',$categories_combo,'','').
-			'</p>'.
+			'<p id="new_cat">'.__('Add a new category').'</p>'.
 			'<p class="form-note info clear">'.__('This category will be created when you will save your post.').'</p>'.
+			'<p><label for="new_cat_title">'.__('Title:').' '.
+			form::field('new_cat_title',30,255,'','maximal').'</label></p>'.
+			'<p><label for="new_cat_parent">'.__('Parent:').' '.
+			form::combo('new_cat_parent',$categories_combo,'','maximal').
+			'</label></p>'.
 			'</div>'
 			: '').
@@ -359,4 +376,5 @@
 		form::hidden('post_notes','').
 		'</p>'.
+		'</fieldset>'.
 		'</form>'.
 		'</div>';
