Sfoglia il codice sorgente

Ticket #4044 - Invitations: Clean emails list after invitations were sent.

AntonLV 4 anni fa
parent
commit
001aab6bd0

+ 47 - 47
modules/boonex/invites/classes/BxInvModule.php

@@ -164,15 +164,12 @@ class BxInvModule extends BxDolModule
 
 
         $sResult = '';
         $sResult = '';
         $oForm->initChecker();
         $oForm->initChecker();
-        if($oForm->isSubmittedAndValid()) {
-            
-            $sResult = $this->processFormObjectInvite($oForm);
-            $sResult = MsgBox($sResult);
-        }
+        if($oForm->isSubmittedAndValid())
+            $sResult = MsgBox($this->processFormObjectInvite($oForm));
 
 
-        return array(
+        return [
             'content' => $sResult . $oForm->getCode()
             'content' => $sResult . $oForm->getCode()
-        );
+        ];
     }
     }
 
 
     /**
     /**
@@ -371,13 +368,13 @@ class BxInvModule extends BxDolModule
         $this->_oDb->attachAccountIdToInvite($iAccountId, $sKey);
         $this->_oDb->attachAccountIdToInvite($iAccountId, $sKey);
     }
     }
     
     
-    public function invite($sType, $sEmails, $sText, $mixedLimit = false, $oForm = null)
+    public function invite($sType, $aEmails, $sText, $mixedLimit)
     {
     {
-        $iProfileId = $this->getProfileId();
-        $iAccountId = $this->getAccountId($iProfileId);
+        if(empty($aEmails) || !is_array($aEmails))
+            return false;
 
 
         $oKeys = BxDolKey::getInstance();
         $oKeys = BxDolKey::getInstance();
-        if(!$oKeys || !in_array($sType, array(BX_INV_TYPE_FROM_MEMBER, BX_INV_TYPE_FROM_SYSTEM)))
+        if(!$oKeys || !in_array($sType, [BX_INV_TYPE_FROM_MEMBER, BX_INV_TYPE_FROM_SYSTEM]))
             return false;
             return false;
 
 
         $iKeyLifetime = $this->_oConfig->getKeyLifetime();
         $iKeyLifetime = $this->_oConfig->getKeyLifetime();
@@ -393,41 +390,38 @@ class BxInvModule extends BxDolModule
                 break;
                 break;
         }
         }
 
 
-        if(empty($oForm))
-            $oForm = $this->getFormObjectInvite();
-
+        $iDate = time();
+        $iProfileId = $this->getProfileId();
+        $iAccountId = $this->getAccountId($iProfileId);
         $aMessage = BxDolEmailTemplates::getInstance()->parseTemplate($sEmailTemplate, array(
         $aMessage = BxDolEmailTemplates::getInstance()->parseTemplate($sEmailTemplate, array(
             'text' => $sText
             'text' => $sText
         ), $iAccountId, $iProfileId);
         ), $iAccountId, $iProfileId);
 
 
-        $aAccountIds = array();
-        $iDate = time();
-        $aEmails = preg_split("/[\s\n,;]+/", $sEmails);
-        if(is_array($aEmails) && !empty($aEmails)){
-            foreach($aEmails as $sEmail) {
-                if($mixedLimit !== false && (int)$mixedLimit <= 0)
-                    break;
-
-                $sEmail = trim($sEmail);
-                if(empty($sEmail))
-                    continue;
-
-                $sKey = $oKeys->getNewKey(false, $iKeyLifetime);
-                if(sendMail($sEmail, $aMessage['Subject'], $aMessage['Body'], 0, array('join_url' => $this->getJoinLink($sKey), 'seen_image_url' => $this->getSeenImageUrl($sKey)), BX_EMAIL_SYSTEM)) {
-                    $iInviteId = (int)$this->_oDb->insertInvite($iAccountId, $iProfileId, $sKey, $sEmail, $iDate);
-                    array_push($aAccountIds, $iInviteId);
-                    
-                    $this->onInvite($iProfileId);
-                    
-                    if($mixedLimit !== false)
-                        $mixedLimit -= 1;
-                }
+        $aResults = [];
+        foreach($aEmails as $sEmail) {
+            if($mixedLimit !== false && (int)$mixedLimit <= 0)
+                break;
+
+            $sEmail = trim($sEmail);
+            if(empty($sEmail))
+                continue;
+
+            $sKey = $oKeys->getNewKey(false, $iKeyLifetime);
+            if(sendMail($sEmail, $aMessage['Subject'], $aMessage['Body'], 0, array('join_url' => $this->getJoinLink($sKey), 'seen_image_url' => $this->getSeenImageUrl($sKey)), BX_EMAIL_SYSTEM)) {
+                $iInviteId = (int)$this->_oDb->insertInvite($iAccountId, $iProfileId, $sKey, $sEmail, $iDate);
+
+                $this->onInvite($iProfileId);
+
+                $aResults[] = $sEmail;
+                if($mixedLimit !== false)
+                    $mixedLimit -= 1;
             }
             }
         }
         }
-        return $aAccountIds;
+
+        return $aResults;
     }
     }
     
     
-    public function processFormObjectInvite($oForm)
+    public function processFormObjectInvite(&$oForm)
     {
     {
         $iProfileId = $this->getProfileId();
         $iProfileId = $this->getProfileId();
         $iAccountId = $this->getAccountId($iProfileId);
         $iAccountId = $this->getAccountId($iProfileId);
@@ -438,20 +432,26 @@ class BxInvModule extends BxDolModule
 
 
         $mixedInvites = false;
         $mixedInvites = false;
         if(!isAdmin($iAccountId)) {
         if(!isAdmin($iAccountId)) {
-            if( $this->_oConfig->getCountPerUser() <= 0)
+            if(($mixedInvites = $this->_oConfig->getCountPerUser()) <= 0)
                 return _t('_bx_invites_err_limit_reached');
                 return _t('_bx_invites_err_limit_reached');
         }
         }
-        
+
         $sEmails = bx_process_input($oForm->getCleanValue('emails'));
         $sEmails = bx_process_input($oForm->getCleanValue('emails'));
+        $aEmails = preg_split("/[\s\n,;]+/", $sEmails);
+
         $sText = bx_process_pass($oForm->getCleanValue('text'));
         $sText = bx_process_pass($oForm->getCleanValue('text'));
 
 
-        $mixedResult = $this->invite(BX_INV_TYPE_FROM_MEMBER, $sEmails, $sText, $mixedInvites, $oForm);
-        if($mixedResult !== false)
-            $sResult = _t('_bx_invites_msg_invitation_sent', count($mixedResult));
-        else
-            $sResult = _t('_bx_invites_err_not_available');
-        
-        return  $sResult;
+        $sResult = _t('_bx_invites_err_not_available');
+        if(($aEmailsSent = $this->invite(BX_INV_TYPE_FROM_MEMBER, $aEmails, $sText, $mixedInvites)) !== false) {
+            $sEmailsResult = '';
+            if(count($aEmails) != count($aEmailsSent))
+                $sEmailsResult = implode('; ', array_diff($aEmails, $aEmailsSent));
+            $oForm->aInputs['emails']['value'] = $sEmailsResult;
+
+            $sResult = _t('_bx_invites_msg_invitation_sent', count($aEmailsSent));
+        }           
+
+        return $sResult;
     }
     }
 
 
     public function isAllowedInvite($iProfileId, $bPerform = false)
     public function isAllowedInvite($iProfileId, $bPerform = false)

+ 1 - 1
modules/boonex/invites/install/sql/enable.sql

@@ -105,7 +105,7 @@ INSERT INTO `sys_acl_matrix` (`IDLevel`, `IDAction`, `AllowedCount`) VALUES
 (@iPending, @iIdActionInvite, 5),
 (@iPending, @iIdActionInvite, 5),
 (@iSuspended, @iIdActionInvite, 5),
 (@iSuspended, @iIdActionInvite, 5),
 (@iModerator, @iIdActionInvite, 5),
 (@iModerator, @iIdActionInvite, 5),
-(@iAdministrator, @iIdActionInvite, 5),
+(@iAdministrator, @iIdActionInvite, NULL),
 (@iPremium, @iIdActionInvite, 5);
 (@iPremium, @iIdActionInvite, 5);
 
 
 -- GRIDS
 -- GRIDS