steffen: server/kolab-webadmin/kolab-webadmin/www/admin/addressbook addr.php, 1.10.2.3, 1.10.2.4

cvs at intevation.de cvs at intevation.de
Tue Feb 21 03:33:09 CET 2006


Author: steffen

Update of /kolabrepository/server/kolab-webadmin/kolab-webadmin/www/admin/addressbook
In directory doto:/tmp/cvs-serv30672/kolab-webadmin/www/admin/addressbook

Modified Files:
      Tag: kolab_2_0_branch
	addr.php 
Log Message:
Backport of: Fix for issue848 (external address in dist. list)

Index: addr.php
===================================================================
RCS file: /kolabrepository/server/kolab-webadmin/kolab-webadmin/www/admin/addressbook/Attic/addr.php,v
retrieving revision 1.10.2.3
retrieving revision 1.10.2.4
diff -u -d -r1.10.2.3 -r1.10.2.4
--- addr.php	13 Oct 2005 01:50:25 -0000	1.10.2.3
+++ addr.php	21 Feb 2006 02:33:07 -0000	1.10.2.4
@@ -238,20 +238,17 @@
 	}
 	break;
   case 'modify':
-	$result = $ldap->search( $dn, '(objectClass=inetOrgPerson)' );
-	if( $result ) {
-	  $ldap_object = ldap_get_entries( $ldap->connection, $result );
-	  if( $ldap_object['count'] == 1 ) {
-		fill_form_for_modify( $form, $ldap_object[0] );
-		$form->entries['action']['value'] = 'save';
-		$form->entries['dn'] = array( 'name' => 'dn',
-									  'type' => 'hidden',
-									  'value' => $dn );
-		$heading = _('Modify External Address'); 
-		$content = $form->outputForm();
-	  } else {
-		array_push($errors, sprintf(_("Error: Multiple results returned for DN %s"), $dn) );
-	  }
+	$ldap_object = $ldap->read( $dn );
+	if( $ldap_object ) {
+	  fill_form_for_modify( $form, $ldap_object );
+	  $form->entries['action']['value'] = 'save';
+	  $form->entries['dn'] = array( 'name' => 'dn',
+									'type' => 'hidden',
+									'value' => $dn );
+	  $heading = _('Modify External Address'); 
+	  $content = $form->outputForm();
+	} else {
+	  array_push($errors, sprintf(_("Error: No entry with DN %s found"), $dn) );
 	}
 	break;
   case 'delete':
@@ -260,24 +257,46 @@
 		$form->entries[$k]['attrs'] = 'readonly';
 	  }
 	}
-	$result = $ldap->search( $dn, '(objectClass=*)' );
-	if( $result ) {
-	  $ldap_object = ldap_get_entries( $ldap->connection, $result );
-	  if( $ldap_object['count'] == 1 ) {
-		fill_form_for_modify( $form, $ldap_object[0] );
-		$form->entries['action']['value'] = 'kill';
-		foreach( array_keys($form->entries) as $key ) {
-		  $form->entries[$key]['attrs'] = 'readonly';
-		}
-		$form->submittext = _('Delete');
-		$heading = _('Delete External Address');
-		$content = $form->outputForm();
-	  } else {
-		array_push($errors, sprintf(_("Error: Multiple results returned for DN %s"),$dn) );
+	$ldap_object = $ldap->read($dn);
+	if( $ldap_object ) {
+	  fill_form_for_modify( $form, $ldap_object );
+	  $form->entries['action']['value'] = 'kill';
+	  foreach( array_keys($form->entries) as $key ) {
+		$form->entries[$key]['attrs'] = 'readonly';
 	  }
+	  $form->submittext = _('Delete');
+	  $heading = _('Delete External Address');
+	  $content = $form->outputForm();
+	} else {
+	  array_push($errors, sprintf(_("Error: No entry with DN %s found"), $dn) );
 	}
 	break;
   case 'kill':
+	// Check for distribution lists with only this user as member
+	$ldap->search( $_SESSION['base_dn'],
+				   '(&(objectClass=kolabGroupOfNames)(member='.$ldap->escape($dn).'))',
+				   array( 'dn', 'cn', 'mail', 'member' ) );
+	$distlists = $ldap->getEntries();
+	unset($distlists['count']);
+	foreach( $distlists as $distlist ) {
+	  $dlmail = $distlist['mail'][0];
+	  if( !$dlmail ) $dlmail = $distlist['cn'][0]; # Compatibility with old stuff
+	  if( $distlist['member']['count'] == 1 ) {
+		$errors[] = sprintf(_("Account could not be deleted, distribution list '%s' depends on it."), $dlmail);
+	  }
+	}
+	if( !$errors ) foreach( $distlists as $distlist ) {
+	  $dlmail = $distlist['mail'][0];
+	  if( !$dlmail ) $dlmail = $distlist['cn'][0]; # Compatibility with old stuff
+	  if( ldap_mod_del( $ldap->connection, $distlist['dn'], array('member' => $dn ) ) ) {
+		$messages[] = sprintf(_("Addressbook entry removed from distribution list '%s'."), $dlmail);
+	  } else {
+		$errors[] = sprintf(_("Failure to remove addressbook entry from distribution list '%s', entry will not be deleted."),
+							$dlmail);
+		break;
+	  }
+	}
+	
 	if (!$errors) {    
 	  if (!($ldap->deleteObject($dn))) {
 		array_push($errors, _("LDAP Error: could not delete ").$dn.": ".ldap_error($ldap->connection));





More information about the commits mailing list