From b3f9dfb54e46e63d14e605ea88605b6bc1ffa17d Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Wed, 27 Feb 2008 03:11:17 -0500
Subject: [PATCH] Allow to skip the config step if config files already exist

---
 installer/rcube_install.php |    3 +++
 installer/styles.css        |   17 +++++++++++------
 installer/config.php        |   18 +++++++++++-------
 installer/check.php         |    5 ++---
 installer/test.php          |    3 ---
 installer/index.php         |    5 +++--
 6 files changed, 30 insertions(+), 21 deletions(-)

diff --git a/installer/check.php b/installer/check.php
index 9f54d8f..06eae42 100644
--- a/installer/check.php
+++ b/installer/check.php
@@ -1,3 +1,4 @@
+<form action="index.php" method="get">
 <?php
 
 $required_php_exts = array('PCRE' => 'pcre', 'Session' => 'session', 'Sockets' => 'sockets');
@@ -28,10 +29,8 @@
     'Mail_mime' => 'http://pear.php.net/package/Mail_mime'
 );
 
+echo '<input type="hidden" name="_step" value="' . ($RCI->configured ? 2 : 3) . '" />';
 ?>
-
-<form action="index.php" method="get">
-<input type="hidden" name="_step" value="2" />
 
 <h3>Checking PHP version</h3>
 <?php
diff --git a/installer/config.php b/installer/config.php
index c110276..2719cdb 100644
--- a/installer/config.php
+++ b/installer/config.php
@@ -5,7 +5,7 @@
 ini_set('display_errors', 1);
 require_once 'include/rcube_html.inc';
 
-$RCI->load_config();
+// also load the default config to fill in the fields
 $RCI->load_defaults();
 
 if (!empty($_POST['submit'])) {
@@ -235,12 +235,16 @@
 <div id="defaulthostlist">
 <?php
 
-$default_hosts = array_unique((array)$RCI->getprop('default_host'));
+$default_hosts = (array)$RCI->getprop('default_host');
 $text_imaphost = new textfield(array('name' => '_default_host[]', 'size' => 30));
 
-for ($i=0; $i < count($default_hosts); $i++) {
-  echo '<div id="defaulthostentry'.$i.'">' . $text_imaphost->show($default_hosts[$i]);
-  if ($i > 0)
+$i = 0;
+foreach ($default_hosts as $key => $name) {
+  if (empty($name))
+    continue;
+  $host = is_numeric($key) ? $name : $key;
+  echo '<div id="defaulthostentry'.$i.'">' . $text_imaphost->show($host);
+  if ($i++ > 0)
     echo '<a href="#" onclick="removehostfield(this.parentNode);return false" class="removelink" title="Remove this entry">remove</a>';
   echo '</div>';
 }
@@ -249,7 +253,7 @@
 </div>
 <div><a href="javascript:addhostfield()" class="addlink" title="Add another field">add</a></div>
 
-<p class="hint">Leave blank to show a textbox at login</p>
+<p class="hint">Leave blank to show a textbox at login. To use SSL/IMAPS connection, type ssl://hostname</p>
 </dd>
 
 <dt class="propname">default_port</dt>
@@ -431,7 +435,7 @@
 
 <?php
 
-echo '<p><input type="submit" name="submit" value="UPDATE" ' . ($RCI->failures ? 'disabled' : '') . ' /></p>';
+echo '<p><input type="submit" name="submit" value="' . ($RCI->configured ? 'UPDATE' : 'CREATE') . ' CONFIG" ' . ($RCI->failures ? 'disabled' : '') . ' /></p>';
 
 ?>
 </form>
diff --git a/installer/index.php b/installer/index.php
index aab406e..a5225eb 100644
--- a/installer/index.php
+++ b/installer/index.php
@@ -34,7 +34,8 @@
 
   require_once 'rcube_install.php';
   $RCI = rcube_install::get_instance();
-
+  $RCI->load_config();
+  
 ?>
 
 <ol id="progress">
@@ -42,7 +43,7 @@
   
   foreach (array('Check environment', 'Create config', 'Test config') as $i => $item) {
     $j = $i + 1;
-    $link = $RCI->step > $j ? '<a href="./index.php?_step='.$j.'">' . Q($item) . '</a>' : Q($item);
+    $link = ($RCI->step >= $j || $RCI->configured) ? '<a href="./index.php?_step='.$j.'">' . Q($item) . '</a>' : Q($item);
     printf('<li class="step%d%s">%s</li>', $j+1, $RCI->step > $j ? ' passed' : ($RCI->step == $j ? ' current' : ''), $link);
   }
 ?>
diff --git a/installer/rcube_install.php b/installer/rcube_install.php
index 8ff2203..44d4531 100644
--- a/installer/rcube_install.php
+++ b/installer/rcube_install.php
@@ -26,6 +26,7 @@
   var $step;
   var $failures = 0;
   var $config = array();
+  var $configured = false;
   var $last_error = null;
   var $email_pattern = '([a-z0-9][a-z0-9\-\.\+\_]*@[a-z0-9]([a-z0-9\-][.]?)*[a-z0-9])';
   
@@ -64,7 +65,9 @@
    */
   function load_config()
   {
+    $this->config = array();
     $this->_load_config('.php');
+    $this->configured = !empty($this->config);
   }
 
   /**
diff --git a/installer/styles.css b/installer/styles.css
index 0260b67..1e91ec2 100644
--- a/installer/styles.css
+++ b/installer/styles.css
@@ -88,19 +88,24 @@
   padding: 1em 5em 1em 0.2em;
 }
 
+#progress li a {
+  color: #999;
+  text-decoration: none;
+}
+
+#progress li a:hover {
+  text-decoration: underline;
+}
+
 #progress li.current {
   color: #000;
   font-weight: bold;
 }
 
 #progress li.passed,
-#progress li.passed a {
+#progress li.passed a,
+#progress li.current a {
   color: #333;
-  text-decoration: none;
-}
-
-#progress li.passed a:hover {
-  text-decoration: underline;
 }
 
 fieldset {
diff --git a/installer/test.php b/installer/test.php
index 0f499eb..d0cb777 100644
--- a/installer/test.php
+++ b/installer/test.php
@@ -3,9 +3,6 @@
 <h3>Check config files</h3>
 <?php
 
-// load local config files
-$RCI->load_config();
-
 $read_main = is_readable('../config/main.inc.php');
 $read_db = is_readable('../config/db.inc.php');
 

--
Gitblit v1.9.1