packages/ssoinabox-webui/root/usr/local/share/ssoinabox/htdocs/index.php
changeset 7 faf6f7941e8f
parent 4 2212b2ded8bf
--- a/packages/ssoinabox-webui/root/usr/local/share/ssoinabox/htdocs/index.php	Sat Feb 16 19:02:51 2013 -0500
+++ b/packages/ssoinabox-webui/root/usr/local/share/ssoinabox/htdocs/index.php	Sat Feb 16 20:47:45 2013 -0500
@@ -42,10 +42,36 @@
 		break;
 	case 'profile-update':
 		// header('Content-type: text/plain'); print_r(!empty($_POST['sshPublicKey']) ? $_POST['sshPublicKey'] : array()); exit;
-		$result = ldap_mod_replace($_ldapconn, ldap_make_user_dn($_SERVER['REMOTE_USER']), array(
-				'mail' => array($_POST['mail'])
-				, 'sshPublicKey' => !empty($_POST['sshPublicKey']) ? array_unique($_POST['sshPublicKey']) : array()
-			));
+		$ui = ldap_get_user($_SERVER['REMOTE_USER']);
+		
+		foreach ( array('mail', 'sshPublicKey') as $field )
+		{
+			if ( empty($_POST[$field]) && empty($ui[$field]) )
+			{
+				// both empty, do nothing
+			}
+			else if ( empty($_POST[$field]) && !empty($ui[$field]) )
+			{
+				// POST empty, database not. Delete attr.
+				$result = ldap_mod_del($_ldapconn, ldap_make_user_dn($_SERVER['REMOTE_USER']), array(
+						$field => array()
+					));
+			}
+			else if ( !empty($_POST[$field]) && empty($ui[$field]) )
+			{
+				// POST filled, database empty. Add attr.
+				$result = ldap_mod_add($_ldapconn, ldap_make_user_dn($_SERVER['REMOTE_USER']), array(
+						$field => is_array($_POST[$field]) ? array_unique($_POST[$field]) : array($_POST[$field])
+					));
+			}
+			else if ( !empty($_POST[$field]) && !empty($ui[$field]) )
+			{
+				// POST and database filled. Replace attr.
+				$result = ldap_mod_replace($_ldapconn, ldap_make_user_dn($_SERVER['REMOTE_USER']), array(
+						$field => is_array($_POST[$field]) ? array_unique($_POST[$field]) : array($_POST[$field])
+					));
+			}
+		}
 		
 		if ( $result || ldap_error($_ldapconn) === 'Success' )
 		{