benefits: Add uniqueness validation for email aliases.
[org.fsf.memberdashboard.git] / CRM / Memberdashboard / Page / Benefits.php
index 7d968f8fffb56ea6121b26389e6d24aa0754e459..41a7da1e8aa4485771009c084ef7f328b71d10a1 100644 (file)
@@ -70,22 +70,27 @@ class CRM_Memberdashboard_Page_Benefits extends CRM_Memberdashboard_Page {
 
     if(CRM_Utils_Rule::email($forward)) {
       if(CRM_Utils_Rule::email("$localpart@example.com")) {
-        if($count < MEMBERDASHBOARD_MAX_EMAIL_ALIASES) {
-          try {
-            $params = array(
-              'contact_id' => $contactId,
-              'localpart' => $localpart,
-              'forward' => $forward
-            );
-            CRM_Memberdashboard_BAO_EmailAlias::create($params);
-            CRM_Core_Session::setStatus('Email alias added!',
-                                        'Success', 'success');
-          } catch (Exception $e) {
-            CRM_Core_Session::setStatus('Failed to create email alias',
+        if(CRM_Memberdashboard_BAO_EmailAlias::findByLocalpart($localpart) == NULL) {
+          if($count < MEMBERDASHBOARD_MAX_EMAIL_ALIASES) {
+            try {
+              $params = array(
+                'contact_id' => $contactId,
+                'localpart' => $localpart,
+                'forward' => $forward
+              );
+              CRM_Memberdashboard_BAO_EmailAlias::create($params);
+              CRM_Core_Session::setStatus('Email alias added!',
+                                          'Success', 'success');
+            } catch (Exception $e) {
+              CRM_Core_Session::setStatus('Failed to create email alias',
+                                          'Error', 'error');
+            }
+          } else {
+            CRM_Core_Session::setStatus('You cannot have more than 5 email aliases',
                                         'Error', 'error');
           }
         } else {
-          CRM_Core_Session::setStatus('You cannot have more than 5 email aliases',
+          CRM_Core_Session::setStatus("Local part is already in use: $localpart",
                                       'Error', 'error');
         }
       } else {
@@ -121,9 +126,14 @@ class CRM_Memberdashboard_Page_Benefits extends CRM_Memberdashboard_Page {
           $error .= '<li>You cannot alter email aliases that don\'t belong to you!</li>';
         } else if(CRM_Utils_Rule::email($forward)) {
           if(CRM_Utils_Rule::email("$localpart@example.com")) {
-            $alias->localpart = $localpart;
-            $alias->forward = $forward;
-            $alias->save();
+            $existingAlias = CRM_Memberdashboard_BAO_EmailAlias::findByLocalpart($localpart);
+            if($existingAlias == NULL ||  $existingAlias->id == $id) {
+              $alias->localpart = $localpart;
+              $alias->forward = $forward;
+              $alias->save();
+            } else {
+              $error .= "<li>Local part already in use: $localpart</li>";
+            }
           } else {
             $error .= "<li>Invalid local part: $localpart</li>";
           }