Mailing.create API - Remove default value 'api.mailing_job.create'=>1
authorTim Otten <totten@civicrm.org>
Mon, 9 Feb 2015 00:03:14 +0000 (16:03 -0800)
committerTim Otten <totten@civicrm.org>
Mon, 9 Feb 2015 13:24:37 +0000 (05:24 -0800)
When scheduling a blast, one creates a duplicate job by default (once via
API chaining and once via BAO).  This removes the API chaining one as well
as work-aronds which had been necessary to disable it.

http://forum.civicrm.org/index.php?topic=35567.new;topicseen#new

api/v3/Mailing.php
js/angular-crmMailing/services.js
tests/phpunit/CiviTest/CiviUnitTestCase.php
tests/phpunit/api/v3/JobProcessMailingTest.php
tests/phpunit/api/v3/MailingTest.php

index b1711efdf94cc1816c6753932755ed07634da2a7..7c8e443ad29db9f02cce14f81875161f89d3690d 100755 (executable)
@@ -105,8 +105,6 @@ function civicrm_api3_mailing_get_token($params) {
 function _civicrm_api3_mailing_create_spec(&$params) {
   $params['created_id']['api.required'] = 1;
   $params['created_id']['api.default'] = 'user_contact_id';
-  $params['api.mailing_job.create']['api.default'] = 1;
-  $params['api.mailing_job.create']['title'] = 'Schedule Mailing?';
 
   $params['override_verp']['api.default'] = !CRM_Core_BAO_Setting::getItem(CRM_Core_BAO_Setting::MAILING_PREFERENCES_NAME,
     'track_civimail_replies', NULL, FALSE
@@ -194,9 +192,6 @@ function civicrm_api3_mailing_submit($params) {
   $updateParams = array();
   $updateParams['id'] = $params['id'];
 
-  // The BAO will auto-create the job - note: exact match to API default.
-  $updateParams['api.mailing_job.create'] = 0;
-
   // Note: we'll pass along scheduling/approval fields, but they may get ignored
   // if we don't have permission.
   if (isset($params['scheduled_date'])) {
index 398d6a0582e050eb046720d24938661d85b659e8..205915f7dc2940d5fec145958ca761e45d5852f0 100644 (file)
       // @param mailing Object (per APIv3)
       // @return Promise
       save: function(mailing) {
-        var params = angular.extend({}, mailing, {
-          'api.mailing_job.create': 0 // note: exact match to API default
-        });
+        var params = angular.extend({}, mailing);
 
         // Angular ngModel sometimes treats blank fields as undefined.
         angular.forEach(mailing, function(value, key) {
index 7e007b38dbae1acf1a33b76b862e380d099de2a0..7f4f3b509050f0f5d3a22aeb6daf82ce6c9ca03c 100755 (executable)
@@ -3229,7 +3229,6 @@ AND    ( TABLE_NAME LIKE 'civicrm_value_%' )
       'body_text' => 'bdkfhdskfhduew',
       'name' => 'mailing name' . rand(),
       'created_id' => 1,
-      'api.mailing_job.create' => 0,
     );
 
     $result = $this->callAPISuccess('Mailing', 'create', $params);
index c8e53a916d4c1a6104e6143d9ba651debf7898b4..1dcb37b551cf51627ea7542f814f9e538c5f284b 100644 (file)
@@ -68,6 +68,7 @@ class api_v3_JobProcessMailingTest extends CiviUnitTestCase {
       'name' => 'mailing name',
       'created_id' => 1,
       'groups' => array('include' => array($this->_groupID)),
+      'scheduled_date' => 'now',
     );
     $this->_mut = new CiviMailUtils($this, TRUE);
     $this->callAPISuccess('mail_settings', 'get', array('api.mail_settings.create' => array('domain' => 'chaos.org')));
index 1f6cdd95acf1e2c313d28b9afa1a31bf2615e066..aadcc8bac73879518cb475ae7176fc54b9f3ab25 100755 (executable)
@@ -66,7 +66,7 @@ class api_v3_MailingTest extends CiviUnitTestCase {
    * Test civicrm_mailing_create.
    */
   public function testMailerCreateSuccess() {
-    $result = $this->callAPIAndDocument('mailing', 'create', $this->_params, __FUNCTION__, __FILE__);
+    $result = $this->callAPIAndDocument('mailing', 'create', $this->_params + array('scheduled_date' => 'now'), __FUNCTION__, __FILE__);
     $jobs = $this->callAPISuccess('mailing_job', 'get', array('mailing_id' => $result['id']));
     $this->assertEquals(1, $jobs['count']);
     unset($this->_params['created_id']); // return isn't working on this in getAndCheck so lets not check it for now
@@ -106,6 +106,7 @@ class api_v3_MailingTest extends CiviUnitTestCase {
     $createParams['groups']['exclude'] = array();
     $createParams['mailings']['include'] = array();
     $createParams['mailings']['exclude'] = array();
+    $createParams['api.mailing_job.create'] = 1;
     $createResult = $this->callAPISuccess('Mailing', 'create', $createParams);
     $getGroup1 = $this->callAPISuccess('MailingGroup', 'get', array('mailing_id' => $createResult['id']));
     $getGroup1_ids = array_values(CRM_Utils_Array::collect('entity_id', $getGroup1['values']));
@@ -206,6 +207,7 @@ class api_v3_MailingTest extends CiviUnitTestCase {
     $params['mailings']['include'] = array();
     $params['mailings']['exclude'] = array();
     $params['options']['force_rollback'] = 1;
+    $params['api.mailing_job.create'] = 1;
     $params['api.MailingRecipients.get'] = array(
       'mailing_id' => '$value.id',
       'api.contact.getvalue' => array(
@@ -540,7 +542,6 @@ SELECT event_queue_id, time_stamp FROM mail_{$type}_temp";
    */
   public function createDraftMailing($params = array()) {
     $createParams = array_merge($this->_params, $params);
-    $createParams['api.mailing_job.create'] = 0; // note: exact match to API default
     $createResult = $this->callAPISuccess('mailing', 'create', $createParams, __FUNCTION__, __FILE__);
     $this->assertTrue(is_numeric($createResult['id']));
     $this->assertDBQuery(0, 'SELECT count(*) FROM civicrm_mailing_job WHERE mailing_id = %1', array(