X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FMailing%2FBAO%2FMailingAB.php;h=a297aad6d106c2c0bd2374cda78b7ac2b0ae748b;hb=0479b4c8095005abb475f17c243d9ea4613db58c;hp=6e2cc44dba1b9e951349b0d055b0b524d6edd2dd;hpb=fd8431878836b9712234448a27a5e92f8d636436;p=civicrm-core.git diff --git a/CRM/Mailing/BAO/MailingAB.php b/CRM/Mailing/BAO/MailingAB.php index 6e2cc44dba..a297aad6d1 100644 --- a/CRM/Mailing/BAO/MailingAB.php +++ b/CRM/Mailing/BAO/MailingAB.php @@ -1,7 +1,7 @@ id = $id; - $mailingab->domain_id = CRM_Utils_Array::value('domain_id', $params, CRM_Core_Config::domainID()); + if (!$id) { + $mailingab->domain_id = CRM_Utils_Array::value('domain_id', $params, CRM_Core_Config::domainID()); + } $mailingab->copyValues($params); @@ -113,25 +116,53 @@ class CRM_Mailing_BAO_MailingAB extends CRM_Mailing_DAO_MailingAB { /** * Delete MailingAB and all its associated records * - * @param int $id id of the mail to delete + * @param int $id + * Id of the mail to delete. * * @return void - * @access public * @static */ public static function del($id) { if (empty($id)) { CRM_Core_Error::fatal(); } + CRM_Core_Transaction::create()->run(function() use ($id) { + CRM_Utils_Hook::pre('delete', 'MailingAB', $id, CRM_Core_DAO::$_nullArray); + + $dao = new CRM_Mailing_DAO_MailingAB(); + $dao->id = $id; + if ($dao->find(TRUE)) { + $mailing_ids = array($dao->mailing_id_a, $dao->mailing_id_b, $dao->mailing_id_c); + $dao->delete(); + foreach ($mailing_ids as $mailing_id) { + if ($mailing_id) { + CRM_Mailing_BAO_Mailing::del($mailing_id); + } + } + } + + CRM_Core_Session::setStatus(ts('Selected mailing has been deleted.'), ts('Deleted'), 'success'); + + CRM_Utils_Hook::post('delete', 'MailingAB', $id, $dao); + }); + } - CRM_Utils_Hook::pre('delete', 'MailingAB', $id, CRM_Core_DAO::$_nullArray); + /** + * Transfer recipients from the canonical mailing A to the other mailings. + * + * @param CRM_Mailing_DAO_MailingAB $dao + */ + public static function distributeRecipients(CRM_Mailing_DAO_MailingAB $dao) { + CRM_Mailing_BAO_Mailing::getRecipients($dao->mailing_id_a, $dao->mailing_id_a, NULL, NULL, TRUE); - $dao = new CRM_Mailing_DAO_MailingAB(); - $dao->id = $id; - $dao->delete(); + //calculate total number of random recipients for mail C from group_percentage selected + $totalCount = CRM_Mailing_BAO_Recipients::mailingSize($dao->mailing_id_a); + $totalSelected = max(1, round(($totalCount * $dao->group_percentage) / 100)); - CRM_Core_Session::setStatus(ts('Selected mailing has been deleted.'), ts('Deleted'), 'success'); + CRM_Mailing_BAO_Recipients::reassign($dao->mailing_id_a, array( + $dao->mailing_id_b => (2 * $totalSelected <= $totalCount) ? $totalSelected : $totalCount - $totalSelected, + $dao->mailing_id_c => max(0, $totalCount - $totalSelected - $totalSelected), + )); - CRM_Utils_Hook::post('delete', 'MailingAB', $id, $dao); } }