From 112c54ffbbfd65d2d76ce2526b77407f7fb067b8 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Thu, 28 Feb 2008 17:59:02 -0500
Subject: [PATCH] Fix imap host selection in install script

---
 installer/rcube_install.php |   22 +++++++++++++++++++++-
 installer/config.php        |    6 +-----
 installer/test.php          |   13 +++++++++----
 3 files changed, 31 insertions(+), 10 deletions(-)

diff --git a/installer/config.php b/installer/config.php
index 97052c8..9d22c28 100644
--- a/installer/config.php
+++ b/installer/config.php
@@ -250,14 +250,10 @@
 <div id="defaulthostlist">
 <?php
 
-$default_hosts = (array)$RCI->getprop('default_host');
 $text_imaphost = new textfield(array('name' => '_default_host[]', 'size' => 30));
 
 $i = 0;
-foreach ($default_hosts as $key => $name) {
-  if (empty($name))
-    continue;
-  $host = is_numeric($key) ? $name : $key;
+foreach ($RCI->get_hostlist() as $host) {
   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>';
diff --git a/installer/rcube_install.php b/installer/rcube_install.php
index e02ee75..35054a1 100644
--- a/installer/rcube_install.php
+++ b/installer/rcube_install.php
@@ -98,7 +98,8 @@
    */
   function getprop($name, $default = '')
   {
-    $value = $_SERVER['REQUEST_METHOD'] == 'POST' ? $_POST["_$name"] : $this->config[$name];
+    $value = $_SERVER['REQUEST_METHOD'] == 'POST' &&
+              (isset($_POST["_$name"]) || $this->config_props[$name]) ? $_POST["_$name"] : $this->config[$name];
     
     if ($name == 'des_key' && !isset($_REQUEST["_$name"]))
       $value = self::random_key(24);
@@ -182,6 +183,25 @@
   
   
   /**
+   * Return a list with all imap hosts configured
+   *
+   * @return array Clean list with imap hosts
+   */
+  function get_hostlist()
+  {
+    $default_hosts = (array)$this->getprop('default_host');
+    $out = array();
+    
+    foreach ($default_hosts as $key => $name) {
+      if (!empty($name))
+        $out[] = is_numeric($key) ? $name : $key;
+    }
+    
+    return $out;
+  }
+  
+  
+  /**
    * Display OK status
    *
    * @param string Test name
diff --git a/installer/test.php b/installer/test.php
index 62535ac..d83534b 100644
--- a/installer/test.php
+++ b/installer/test.php
@@ -238,9 +238,14 @@
 
 <?php
 
-$default_hosts = (array)$RCI->getprop('default_host');
-$select_imaphost = new select(array('name' => '_host', 'id' => 'imaphost'));
-$select_imaphost->add(array_values($default_hosts));
+$default_hosts = $RCI->get_hostlist();
+if (!empty($default_hosts)) {
+  $host_field = new select(array('name' => '_host', 'id' => 'imaphost'));
+  $host_field->add($default_hosts);
+}
+else {
+  $host_field = new textfield(array('name' => '_host', 'id' => 'imaphost'));
+}
 
 $user_field = new textfield(array('name' => '_user', 'id' => 'imapuser'));
 $pass_field = new passwordfield(array('name' => '_pass', 'id' => 'imappass'));
@@ -251,7 +256,7 @@
 <tbody>
   <tr>
     <td><label for="imaphost">Server</label></td>
-    <td><?php echo $select_imaphost->show($_POST['_host'] ? $_POST['_host'] : '0'); ?></td>
+    <td><?php echo $host_field->show($_POST['_host']); ?></td>
   </tr>
   <tr>
     <td>Port</td>

--
Gitblit v1.9.1