/** * Delete MailingAB and all its associated records. * * @param int $id * Id of the mail to delete. */ 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); }); }
/** * Send A/B mail to A/B recipients respectively. * * @param array $params * * @return array * @throws API_Exception */ function civicrm_api3_mailing_a_b_submit($params) { civicrm_api3_verify_mandatory($params, 'CRM_Mailing_DAO_MailingAB', array('id', 'status')); if (!isset($params['scheduled_date']) && !isset($updateParams['approval_date'])) { throw new API_Exception("Missing parameter scheduled_date and/or approval_date"); } $dao = new CRM_Mailing_DAO_MailingAB(); $dao->id = $params['id']; if (!$dao->find(TRUE)) { throw new API_Exception("Failed to locate A/B test by ID"); } if (empty($dao->mailing_id_a) || empty($dao->mailing_id_b) || empty($dao->mailing_id_c)) { throw new API_Exception("Missing mailing IDs for A/B test"); } $submitParams = CRM_Utils_Array::subset($params, array('scheduled_date', 'approval_date', 'approval_note', 'approval_status_id')); switch ($params['status']) { case 'Testing': if (!empty($dao->status) && $dao->status != 'Draft') { throw new API_Exception("Cannot transition to state 'Testing'"); } civicrm_api3('Mailing', 'submit', $submitParams + array('id' => $dao->mailing_id_a, '_skip_evil_bao_auto_recipients_' => 0)); civicrm_api3('Mailing', 'submit', $submitParams + array('id' => $dao->mailing_id_b, '_skip_evil_bao_auto_recipients_' => 1)); CRM_Mailing_BAO_MailingAB::distributeRecipients($dao); break; case 'Final': if ($dao->status != 'Testing') { throw new API_Exception("Cannot transition to state 'Final'"); } civicrm_api3('Mailing', 'submit', $submitParams + array('id' => $dao->mailing_id_c, '_skip_evil_bao_auto_recipients_' => 1)); break; default: throw new API_Exception("Unrecognized submission status"); } return civicrm_api3('MailingAB', 'create', array('id' => $dao->id, 'status' => $params['status'], 'options' => array('reload' => 1))); }
/** * Returns the list of fields that can be exported * * @param bool $prefix * * @return array */ static function &export($prefix = false) { if (!self::$_export) { self::$_export = array(); $fields = self::fields(); foreach ($fields as $name => $field) { if (CRM_Utils_Array::value('export', $field)) { if ($prefix) { self::$_export['mailing_abtest'] =& $fields[$name]; } else { self::$_export[$name] =& $fields[$name]; } } } } return self::$_export; }