diff --git a/CRM/Mailing/BAO/Mailing.php b/CRM/Mailing/BAO/Mailing.php index 98bb54e6bc20..75157dfb651e 100644 --- a/CRM/Mailing/BAO/Mailing.php +++ b/CRM/Mailing/BAO/Mailing.php @@ -1639,21 +1639,25 @@ public static function create(&$params, $ids = array()) { // Create parent job if not yet created. // Condition on the existence of a scheduled date. if (!empty($params['scheduled_date']) && $params['scheduled_date'] != 'null' && empty($params['_skip_evil_bao_auto_schedule_'])) { + $jobParams = [ + 'mailing_id' => $mailing->id, + // If we are creating a new Completed mailing (e.g. import from another system) set the job to completed. + // Keeping former behaviour when an id is present is precautionary and may warrant reconsideration later. + 'status' => ((empty($params['is_completed']) || !empty($params['id'])) ? 'Scheduled' : 'Complete'), + 'is_test' => 0, + '_skip_evil_bao_auto_recipients_' => TRUE, + ]; $job = new CRM_Mailing_BAO_MailingJob(); - $job->mailing_id = $mailing->id; - // If we are creating a new Completed mailing (e.g. import from another system) set the job to completed. - // Keeping former behaviour when an id is present is precautionary and may warrant reconsideration later. - $job->status = ((empty($params['is_completed']) || !empty($params['id'])) ? 'Scheduled' : 'Complete'); - $job->is_test = 0; + $job->copyValues($jobParams); if (!$job->find(TRUE)) { // Don't schedule job until we populate the recipients. - $job->scheduled_date = NULL; - $job->save(); + $jobParams['scheduled_date'] = NULL; + $jobParams['id'] = CRM_Mailing_BAO_MailingJob::create($jobParams)->id; } // Schedule the job now that it has recipients. - $job->scheduled_date = $params['scheduled_date']; - $job->save(); + $jobParams['scheduled_date'] = $params['scheduled_date']; + CRM_Mailing_BAO_MailingJob::create($jobParams); } // Populate the recipients. diff --git a/CRM/Mailing/BAO/MailingJob.php b/CRM/Mailing/BAO/MailingJob.php index 9b2a80b2079c..818da9635fb3 100644 --- a/CRM/Mailing/BAO/MailingJob.php +++ b/CRM/Mailing/BAO/MailingJob.php @@ -72,7 +72,7 @@ static public function create($params) { $jobDAO = new CRM_Mailing_BAO_MailingJob(); $jobDAO->copyValues($params, TRUE); $jobDAO->save(); - if (!empty($params['mailing_id'])) { + if (!empty($params['mailing_id']) && empty($params['_skip_evil_bao_auto_recipients_'])) { CRM_Mailing_BAO_Mailing::getRecipients($params['mailing_id']); } CRM_Utils_Hook::post($op, 'MailingJob', $jobDAO->id, $jobDAO); @@ -165,7 +165,6 @@ public static function runJobs($testParams = NULL, $mode = NULL) { } /* Queue up recipients for the child job being launched */ - if ($job->status != 'Running') { $transaction = new CRM_Core_Transaction(); @@ -283,11 +282,11 @@ public static function runJobs_post($mode = NULL) { $transaction = new CRM_Core_Transaction(); - $saveJob = new CRM_Mailing_DAO_MailingJob(); - $saveJob->id = $job->id; - $saveJob->end_date = date('YmdHis'); - $saveJob->status = 'Complete'; - $saveJob->save(); + self::create([ + 'id' => $job->id, + 'end_date' => date('YmdHis'), + 'status' => 'Complete', + ]); $mailing->reset(); $mailing->id = $job->mailing_id; diff --git a/CRM/Mailing/BAO/Spool.php b/CRM/Mailing/BAO/Spool.php index e7c9a6ba1021..ed32cf70599c 100644 --- a/CRM/Mailing/BAO/Spool.php +++ b/CRM/Mailing/BAO/Spool.php @@ -87,26 +87,23 @@ public function send($recipient, $headers, $body, $job_id = NULL) { return PEAR::raiseError('Unable to create spooled mailing.'); } - $job = new CRM_Mailing_BAO_MailingJob(); - $job->is_test = 0; // if set to 1 it doesn't show in the UI - $job->status = 'Complete'; - $job->scheduled_date = CRM_Utils_Date::processDate(date('Y-m-d'), date('H:i:s')); - $job->start_date = $job->scheduled_date; - $job->end_date = $job->scheduled_date; - $job->mailing_id = $mailing->id; - $job->save(); - $job_id = $job->id; // need this for parent_id below + $saveJob = new CRM_Mailing_DAO_MailingJob(); - $job = new CRM_Mailing_BAO_MailingJob(); - $job->is_test = 0; - $job->status = 'Complete'; - $job->scheduled_date = CRM_Utils_Date::processDate(date('Y-m-d'), date('H:i:s')); - $job->start_date = $job->scheduled_date; - $job->end_date = $job->scheduled_date; - $job->mailing_id = $mailing->id; - $job->parent_id = $job_id; - $job->job_type = 'child'; - $job->save(); + $jobParams = array( + 'is_test' => 0, + 'scheduled_date' => date('YmdHis'), + 'start_date' => date('YmdHis'), + 'end_date' => date('YmdHis'), + 'mailing_id' => $mailing->id, + 'status' => 'Complete', + ); + $job = CRM_Mailing_BAO_MailingJob::create($jobParams); + + $jobParams = array_merge($jobParams, array( + 'parent_id' => $job->id, + 'job_type' => 'child', + )); + $job = CRM_Mailing_BAO_MailingJob::create($jobParams); $job_id = $job->id; // this is the one we want for the spool if (is_array($recipient)) {