RomanL 8 anni fa
parent
commit
68223a6cef

+ 1 - 0
modules/boonex/massmailer/classes/BxMassMailerConfig.php

@@ -47,6 +47,7 @@ class BxMassMailerConfig extends BxBaseModGeneralConfig
             'FIELD_LINK' => 'link',
             'FIELD_DATE_UNSUBSCRIBED' => 'unsubscribed',
             'FIELD_ACCOUNT_ID' => 'account_id',
+            'FIELD_PER_ACCOUNT' => 'is_one_per_account',
             
             // page URIs
             'URI_MANAGE_COMMON' => 'massmailer-campaigns',

+ 1 - 1
modules/boonex/massmailer/classes/BxMassMailerDb.php

@@ -24,7 +24,7 @@ class BxMassMailerDb extends BxBaseModGeneralDb
             'date_created' => time(),
             'copy_title' => _t('_bx_massmailer_txt_copy_title')
         );
-        $this->query("INSERT INTO `" . $CNF['TABLE_CAMPAIGNS'] . "` (`" . $CNF['FIELD_AUTHOR'] . "`, `" . $CNF['FIELD_TITLE'] . "`, `" . $CNF['FIELD_BODY'] . "`, `" . $CNF['FIELD_SEGMENTS'] . "`, `" . $CNF['FIELD_ADDED'] . "`, `" . $CNF['FIELD_SUBJECT'] . "`, `" . $CNF['FIELD_FROM_NAME'] . "`, `" . $CNF['FIELD_REPLY_TO'] . "`) SELECT `" . $CNF['FIELD_AUTHOR'] . "`, CONCAT(`" . $CNF['FIELD_TITLE'] . "`, :copy_title), `" . $CNF['FIELD_BODY'] . "`, `" . $CNF['FIELD_SEGMENTS'] . "`, :date_created, `" . $CNF['FIELD_SUBJECT'] . "`, `" . $CNF['FIELD_FROM_NAME'] . "`, `" . $CNF['FIELD_REPLY_TO'] . "` FROM `" . $CNF['TABLE_CAMPAIGNS'] . "` WHERE `" . $CNF['FIELD_ID'] . "` = :campaign_id", $aBindings);
+        $this->query("INSERT INTO `" . $CNF['TABLE_CAMPAIGNS'] . "` (`" . $CNF['FIELD_AUTHOR'] . "`, `" . $CNF['FIELD_TITLE'] . "`, `" . $CNF['FIELD_BODY'] . "`, `" . $CNF['FIELD_SEGMENTS'] . "`, `" . $CNF['FIELD_ADDED'] . "`, `" . $CNF['FIELD_SUBJECT'] . "`, `" . $CNF['FIELD_FROM_NAME'] . "`, `" . $CNF['FIELD_REPLY_TO'] . "`, `" . $CNF['FIELD_PER_ACCOUNT'] . "`) SELECT `" . $CNF['FIELD_AUTHOR'] . "`, CONCAT(`" . $CNF['FIELD_TITLE'] . "`, :copy_title), `" . $CNF['FIELD_BODY'] . "`, `" . $CNF['FIELD_SEGMENTS'] . "`, :date_created, `" . $CNF['FIELD_SUBJECT'] . "`, `" . $CNF['FIELD_FROM_NAME'] . "`, `" . $CNF['FIELD_REPLY_TO'] . "`, `" . $CNF['FIELD_PER_ACCOUNT'] . "` FROM `" . $CNF['TABLE_CAMPAIGNS'] . "` WHERE `" . $CNF['FIELD_ID'] . "` = :campaign_id", $aBindings);
         return $this->lastId();
     }
         

+ 11 - 0
modules/boonex/massmailer/classes/BxMassMailerFormEntry.php

@@ -21,6 +21,17 @@ class BxMassMailerFormCheckerHelper extends BxDolFormCheckerHelper
 
         return true;
     }
+    
+    static public function checkUnsubscribeUrl($s)
+    {
+        if (trim($s) == '')
+            return false;
+        
+        if (substr_count($s,'{unsubscribe_url}') == 0)
+            return false;
+        
+        return true;
+    }
 }
 
 /**

+ 8 - 0
modules/boonex/massmailer/classes/BxMassMailerGridCampaigns.php

@@ -118,6 +118,14 @@ class BxMassMailerGridCampaigns extends BxTemplGrid
         return parent::_getCellDefault($sValue, $sKey, $aField, $aRow);
     }
     
+    protected function _getCellIsOnePerAccount($mixedValue, $sKey, $aField, $aRow)
+    {
+        $sValue = _t('_bx_massmailer_grid_column_title_adm_is_one_per_account_no');
+        if ($mixedValue == '1')
+            $sValue = _t('_bx_massmailer_grid_column_title_adm_is_one_per_account_yes');
+        return parent::_getCellDefault($sValue, $sKey, $aField, $aRow);
+    }
+    
     protected function _getActionCopy($sType, $sKey, $a, $isSmall = false, $isDisabled = false, $aRow = array())
     {
         if(isset($aRow["date_sent"]) && $aRow["date_sent"] == '0')

+ 8 - 4
modules/boonex/massmailer/classes/BxMassMailerModule.php

@@ -473,7 +473,7 @@ class BxMassMailerModule extends BxBaseModGeneralModule
         if (!$aTemplate)
             return false;
         $this->_oDb->deleteCampaignData($iCampaignId);
-        $aAccounts = $this->getEmailsBySegment($aCampaign['segments']);
+        $aAccounts = $this->getEmailsBySegment($aCampaign['segments'], $aCampaign['is_one_per_account']);
         foreach ($aAccounts as $aAccountInfo){
             array_push($aEmails, $aAccountInfo['email']);
             $this->sendLetter($aAccountInfo['email'], $iCampaignId, $aCustomHeaders, $aAccountInfo['profile_id'], $aTemplate, true);
@@ -506,13 +506,17 @@ class BxMassMailerModule extends BxBaseModGeneralModule
     {
         $aTmp = $this->getDataForCampaign($iCampaignId);
         $aCampaign = $aTmp[2];
-        $aAccounts = $this->getEmailsBySegment($aCampaign['segments']);
+        $aAccounts = $this->getEmailsBySegment($aCampaign['segments'], $aCampaign['is_one_per_account']);
         return count($aAccounts);
     }
           
-    private function getEmailsBySegment($sSegment)
+    private function getEmailsBySegment($sSegment, $bIsOnePerAccount)
     {
-        return $this->_oDb->getAccountsByTerms($this->getSqlBySegment($sSegment));
+        $sTerms = $this->getSqlBySegment($sSegment);
+        if ($bIsOnePerAccount){
+            $sTerms .= "AND `tp`.`id` = `ta`.`profile_id` ";
+        }
+        return $this->_oDb->getAccountsByTerms($sTerms);
     }
     
     private function checkAllowed($isPerformAction = false)

+ 5 - 1
modules/boonex/massmailer/install/langs/en.xml

@@ -59,6 +59,9 @@
   <string name="_bx_massmailer_grid_action_title_adm_send_all"><![CDATA[Send All]]></string>
   <string name="_bx_massmailer_grid_action_title_adm_add"><![CDATA[Add new campaign]]></string>
   <string name="_bx_massmailer_grid_column_title_adm_segment"><![CDATA[Segment]]></string>
+  <string name="_bx_massmailer_grid_column_title_adm_is_one_per_account"><![CDATA[One per account]]></string>
+  <string name="_bx_massmailer_grid_column_title_adm_is_one_per_account_yes"><![CDATA[Yes]]></string>
+  <string name="_bx_massmailer_grid_column_title_adm_is_one_per_account_no"><![CDATA[No]]></string>
   
   <string name="_bx_massmailer_campaign_form_add_title"><![CDATA[New campaign]]></string>
   <string name="_bx_massmailer_campaign_form_edit_title"><![CDATA[Edit campaign]]></string>
@@ -76,7 +79,8 @@
   <string name="_bx_massmailer_form_campaign_input_title_err"><![CDATA[Campaign name can't be empty]]></string>
   <string name="_bx_massmailer_form_campaign_input_sys_body"><![CDATA[Body]]></string>
   <string name="_bx_massmailer_form_campaign_input_body"><![CDATA[Body]]></string>
-  <string name="_bx_massmailer_form_campaign_input_body_err"><![CDATA[Body can't be empty]]></string>
+  <string name="_bx_massmailer_form_campaign_input_body_err"><![CDATA[Body can't be empty and {unsubscribe_url} marker must be present]]></string>
+  <string name="_bx_massmailer_form_campaign_input_is_one_per_account"><![CDATA[One letter per one account]]></string>
   <string name="_bx_massmailer_form_campaign_input_sys_test_email"><![CDATA[Email]]></string>
   <string name="_bx_massmailer_form_campaign_input_email"><![CDATA[Email]]></string>
   <string name="_bx_massmailer_form_campaign_input_sys_segments"><![CDATA[Segments]]></string>

+ 6 - 5
modules/boonex/massmailer/install/sql/enable.sql

@@ -79,12 +79,13 @@ INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `fie
 
 INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `translatable`, `chars_limit`, `params`, `order`) VALUES
 ('bx_massmailer_campaigns', 'checkbox', '_sys_select', '2%', 0, '', '', 1),
-('bx_massmailer_campaigns', 'title', '_bx_massmailer_grid_column_title_adm_title', '30%', 0, '22', '', 2),
-('bx_massmailer_campaigns', 'author', '_bx_massmailer_grid_column_title_adm_author', '10%', 0, '22', '', 3),
+('bx_massmailer_campaigns', 'title', '_bx_massmailer_grid_column_title_adm_title', '26%', 0, '22', '', 2),
+('bx_massmailer_campaigns', 'author', '_bx_massmailer_grid_column_title_adm_author', '8%', 0, '22', '', 3),
 ('bx_massmailer_campaigns', 'segments', '_bx_massmailer_grid_column_title_adm_segment', '10%', 0, '22', '', 4),
-('bx_massmailer_campaigns', 'added', '_bx_massmailer_grid_column_title_adm_date_created', '14%', 0, '15', '', 5),
-('bx_massmailer_campaigns', 'date_sent', '_bx_massmailer_grid_column_title_adm_date_sent', '10%', 0, '22', '', 6),
-('bx_massmailer_campaigns', 'actions', '', '24%', 0, '', '', 7);
+('bx_massmailer_campaigns', 'is_one_per_account', '_bx_massmailer_grid_column_title_adm_is_one_per_account', '10%', 0, '0', '', 5),
+('bx_massmailer_campaigns', 'added', '_bx_massmailer_grid_column_title_adm_date_created', '10%', 0, '15', '', 6),
+('bx_massmailer_campaigns', 'date_sent', '_bx_massmailer_grid_column_title_adm_date_sent', '10%', 0, '22', '', 7),
+('bx_massmailer_campaigns', 'actions', '', '24%', 0, '', '', 8);
 
 INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `icon_only`, `confirm`, `order`) VALUES
 ('bx_massmailer_campaigns', 'bulk', 'delete', '_bx_massmailer_grid_action_title_adm_delete', '', 0, 1, 1),

+ 11 - 7
modules/boonex/massmailer/install/sql/install.sql

@@ -14,6 +14,7 @@ CREATE TABLE `bx_massmailer_campaigns` (
   `changed` int(11) NOT NULL default '0',
   `date_sent` int(11) NOT NULL default '0',
   `email_list` text DEFAULT NULL,
+  `is_one_per_account` smallint(1) NOT NULL,
   PRIMARY KEY (`id`),
   FULLTEXT KEY `title_text` (`title`, `subject`)
 );
@@ -95,7 +96,8 @@ INSERT INTO `sys_form_inputs` (`object`, `module`, `name`, `value`, `values`, `c
 (@sName, @sName, 'subject', '', '', 0, 'text', '_bx_massmailer_form_campaign_input_sys_subject', '_bx_massmailer_form_campaign_input_subject', '', 1, 0, 0, 2, '', '', '', 'Avail', '', '_bx_massmailer_form_campaign_input_subject_err', 'XssHtml', '', 1, 0),
 (@sName, @sName, 'from_name', '', '', 0, 'text', '_bx_massmailer_form_campaign_input_sys_from_name', '_bx_massmailer_form_campaign_input_from_name', '_bx_massmailer_form_campaign_input_from_name_info', 0, 0, 0, 2, '', '', '', '', '', '', 'XssHtml', '', 1, 0),
 (@sName, @sName, 'reply_to', '', '', 0, 'text', '_bx_massmailer_form_campaign_input_sys_reply_to', '_bx_massmailer_form_campaign_input_reply_to', '_bx_massmailer_form_campaign_input_reply_to_info', 0, 0, 0, 2, '', '', '', 'EmailOrEmpty', '', '_bx_massmailer_form_campaign_input_reply_to_err', 'XssHtml', '', 1, 0),
-(@sName, @sName, 'body', '', '', 0, 'textarea', '_bx_massmailer_form_campaign_input_sys_body', '_bx_massmailer_form_campaign_input_body', '', 1, 0, 0, 2, '', '', '', 'Avail', '', '_bx_massmailer_form_campaign_input_body_err', 'XssHtml', '', 1, 0),
+(@sName, @sName, 'body', '', '', 0, 'textarea', '_bx_massmailer_form_campaign_input_sys_body', '_bx_massmailer_form_campaign_input_body', '', 1, 0, 0, 2, '', '', '', 'UnsubscribeUrl', '', '_bx_massmailer_form_campaign_input_body_err', 'XssHtml', '', 1, 0),
+(@sName, @sName, 'is_one_per_account', '1', '', 1, 'switcher', '_bx_massmailer_form_campaign_input_sys_is_one_per_account', '_bx_massmailer_form_campaign_input_is_one_per_account', '', 0, 0, 0, 0, '', '', '', '', '', '', 'Int', '', 1, 0),
 (@sName, @sName, 'email', '', '', 0, 'text', '_bx_massmailer_form_campaign_input_sys_test_email', '_bx_massmailer_form_campaign_input_email', '', 1, 0, 0, 2, '', '', '', 'Email', '', '_sys_form_account_input_email_error', 'XssHtml', '', 1, 0),
 (@sName, @sName, 'campaign_info', '_bx_massmailer_form_campaign_input_from_name_info_value', '', 0, 'value', '_bx_massmailer_form_campaign_input_sys_campaign_info', '', '', 0, 0, 0, 2, '', '', '', '', '', '', 'XssHtml', '', 1, 0),
 (@sName, @sName, 'cancel', '_bx_massmailer_form_entry_input_cancel', '', 0, 'button', '_bx_dev_bp_btn_sys_block_cancel', '', '', 0, 0, 0, 0, 'a:2:{s:7:"onclick";s:45:"$(''.bx-popup-applied:visible'').dolPopupHide()";s:5:"class";s:22:"bx-def-margin-sec-left";}', '', '', 'Avail', '', '', '', '', 0, 0),
@@ -109,18 +111,20 @@ INSERT INTO `sys_form_display_inputs` (`display_name`, `input_name`, `visible_fo
 ('bx_massmailer_campaign_add', 'from_name', 2147483647, 1, 4),
 ('bx_massmailer_campaign_add', 'reply_to', 2147483647, 1, 5),
 ('bx_massmailer_campaign_add', 'body', 2147483647, 1, 6),
-('bx_massmailer_campaign_add', 'controls', 2147483647, 1, 7),
-('bx_massmailer_campaign_add', 'do_submit', 2147483647, 1, 8),
-('bx_massmailer_campaign_add', 'cancel', 2147483647, 1, 9),
+('bx_massmailer_campaign_add', 'is_one_per_account', 2147483647, 1, 7),
+('bx_massmailer_campaign_add', 'controls', 2147483647, 1, 8),
+('bx_massmailer_campaign_add', 'do_submit', 2147483647, 1, 9),
+('bx_massmailer_campaign_add', 'cancel', 2147483647, 1, 10),
 ('bx_massmailer_campaign_edit', 'title', 2147483647, 1, 1),
 ('bx_massmailer_campaign_edit', 'segments', 2147483647, 1, 2),
 ('bx_massmailer_campaign_edit', 'subject', 2147483647, 1, 3),
 ('bx_massmailer_campaign_edit', 'from_name', 2147483647, 1, 4),
 ('bx_massmailer_campaign_edit', 'reply_to', 2147483647, 1, 5),
 ('bx_massmailer_campaign_edit', 'body', 2147483647, 1, 6),
-('bx_massmailer_campaign_edit', 'controls', 2147483647, 1, 7),
-('bx_massmailer_campaign_edit', 'do_submit', 2147483647, 1, 8),
-('bx_massmailer_campaign_edit', 'cancel', 2147483647, 1, 9),
+('bx_massmailer_campaign_edit', 'is_one_per_account', 2147483647, 1, 7),
+('bx_massmailer_campaign_edit', 'controls', 2147483647, 1, 8),
+('bx_massmailer_campaign_edit', 'do_submit', 2147483647, 1, 9),
+('bx_massmailer_campaign_edit', 'cancel', 2147483647, 1, 10),
 ('bx_massmailer_campaign_send_test', 'email', 2147483647, 1, 1),
 ('bx_massmailer_campaign_send_test', 'controls2', 2147483647, 1, 2),
 ('bx_massmailer_campaign_send_test', 'do_send', 2147483647, 1, 3),

+ 4 - 5
modules/boonex/massmailer/template/campaign_info.html

@@ -1,9 +1,8 @@
+<!--<strong>__body_title__</strong>-->
+<div class="bx-content-padding-block bx-def-border-block bx-def-margin-bottom">
+    __body__
+</div>
 <strong>__subject_title__</strong> __subject__<br>
-
-<!--<strong>__body_title__</strong>
-<hr>
-__body__
-<hr><br>-->
 <bx_if:from_name>
     <strong>__from_name_title__</strong> __from_name__<br>
 </bx_if:from_name>