<?php
/*
+--------------------------------------------------------------------+
- | CiviCRM version 4.5 |
+ | CiviCRM version 4.6 |
+--------------------------------------------------------------------+
| Copyright CiviCRM LLC (c) 2004-2014 |
+--------------------------------------------------------------------+
/**
* class constructor
*/
- function __construct() {
+ public function __construct() {
parent::__construct();
}
/**
* Construct a new mailingab object
*
- * @params array $params Form values
+ * @params array $params
+ * Form values.
*
* @param $params
* @param array $ids
*
* @return object $mailingab The new mailingab object
- * @access public
* @static
*/
public static function create(&$params, $ids = array()) {
/**
* function to add the mailings
*
- * @param array $params reference array contains the values submitted by the form
- * @param array $ids reference array contains the id
+ * @param array $params
+ * Reference array contains the values submitted by the form.
+ * @param array $ids
+ * Reference array contains the id.
*
- * @access public
* @static
*
* @return object
*/
- static function add(&$params, $ids = array()) {
+ public static function add(&$params, $ids = array()) {
$id = CRM_Utils_Array::value('mailingab_id', $ids, CRM_Utils_Array::value('id', $params));
if ($id) {
$mailingab = new CRM_Mailing_DAO_MailingAB();
$mailingab->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);
/**
* 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);
}
}