From 49cdae95f6d6e9c2010008d4414389654bcbac7b Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Fri, 06 Jan 2012 10:57:33 -0500
Subject: [PATCH] Migrate LDAP fieldmap fix from trunk

---
 program/include/rcube_ldap.php |   13 ++++++++++---
 1 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/program/include/rcube_ldap.php b/program/include/rcube_ldap.php
index a7ea62c..65ec463 100644
--- a/program/include/rcube_ldap.php
+++ b/program/include/rcube_ldap.php
@@ -107,7 +107,7 @@
             list($col, $type) = explode(':', $col);
             if (!is_array($this->coltypes[$col])) {
                 $subtypes = $type ? array($type) : null;
-                $this->coltypes[$col] = array('limit' => 2, 'subtypes' => $subtypes);
+                $this->coltypes[$col] = array('limit' => 1, 'subtypes' => $subtypes);
             }
             elseif ($type) {
                 $this->coltypes[$col]['subtypes'][] = $type;
@@ -117,8 +117,15 @@
                 $this->fieldmap[$col] = $lf;
         }
 
-        if ($this->fieldmap['street'] && $this->fieldmap['locality'])
-            $this->coltypes['address'] = array('limit' => 1);
+        if ($this->fieldmap['street'] && $this->fieldmap['locality']) {
+            $this->coltypes['address'] = array('limit' => max(1, $this->coltypes['locality']['limit']), 'subtypes' => $this->coltypes['locality']['subtypes'], 'childs' => array());
+            foreach (array('street','locality','zipcode','region','country') as $childcol) {
+                if ($this->fieldmap[$childcol]) {
+                    $this->coltypes['address']['childs'][$childcol] = array('type' => 'text');
+                    unset($this->coltypes[$childcol]);  // remove address child col from global coltypes list
+                }
+            }
+        }
         else if ($this->coltypes['address'])
             $this->coltypes['address'] = array('type' => 'textarea', 'childs' => null, 'limit' => 1, 'size' => 40);
 

--
Gitblit v1.9.1