From 0f1faec39271130500b836d8c81ce060fc5cbc07 Mon Sep 17 00:00:00 2001
From: thomascube <thomas@roundcube.net>
Date: Thu, 11 Aug 2011 18:24:29 -0400
Subject: [PATCH] Fix saving and deleting LDAP contacts; skip client-side input validation for contacts, this is done server-side

---
 program/include/rcube_ldap.php |   15 ++++++++++++---
 program/js/app.js              |    7 +------
 2 files changed, 13 insertions(+), 9 deletions(-)

diff --git a/program/include/rcube_ldap.php b/program/include/rcube_ldap.php
index 41d722e..76217ac 100644
--- a/program/include/rcube_ldap.php
+++ b/program/include/rcube_ldap.php
@@ -728,6 +728,15 @@
         $newdata = array();
         $replacedata = array();
         $deletedata = array();
+        
+        // flatten composite fields in $record
+        if (is_array($record['address'])) {
+          foreach ($record['address'] as $i => $struct) {
+            foreach ($struct as $col => $val) {
+              $record[$col][$i] = $val;
+            }
+          }
+        }
 
         foreach ($this->fieldmap as $col => $fld) {
             $val = $save_cols[$col];
@@ -843,10 +852,10 @@
     {
         if (!is_array($ids)) {
             // Not an array, break apart the encoded DNs.
-            $dns = explode(',', $ids);
+            $ids = explode(',', $ids);
         } // end if
 
-        foreach ($dns as $id) {
+        foreach ($ids as $id) {
             $dn = base64_decode($id);
             $this->_debug("C: Delete [dn: $dn]");
             // Delete the record.
@@ -869,7 +878,7 @@
             }
         } // end foreach
 
-        return count($dns);
+        return count($ids);
     }
 
 
diff --git a/program/js/app.js b/program/js/app.js
index 9334dc8..a4fa419 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -642,11 +642,6 @@
             if (props == 'reload') {
               form.action += '?_reload=1';
             }
-            else if ((input = $("input[name='_name']", form)) &&input.length && input.val() == '') {
-              alert(this.get_label('nonamewarning'));
-              input.focus();
-              break;
-            }
             else if (this.task == 'settings' && (this.env.identities_level % 2) == 0  &&
               (input = $("input[name='_email']", form)) && input.length && !rcube_check_email(input.val())
             ) {
@@ -4427,7 +4422,7 @@
   this.set_photo_actions = function(id)
   {
     var n, buttons = this.buttons['upload-photo'];
-    for (n=0; n < buttons.length; n++)
+    for (n=0; n < buttons && buttons.length; n++)
       $('#'+buttons[n].id).html(this.get_label(id == '-del-' ? 'addphoto' : 'replacephoto'));
 
     $('#ff_photo').val(id);

--
Gitblit v1.9.1