System.get API - Return system details (PHP+MySQL version, ad nauseum)
[civicrm-core.git] / api / v3 / Mailing.php
index 0739b9aea87ecc3d65b2c52e356adaa9f6df5058..46c97b86d82c2313b3f8f8dcdf2f86988f5767b4 100755 (executable)
@@ -161,6 +161,54 @@ function _civicrm_api3_mailing_create_spec(&$params) {
   }
 }
 
+function _civicrm_api3_mailing_clone_spec(&$spec) {
+  $mailingFields = CRM_Mailing_DAO_Mailing::fields();
+  $spec['id'] = $mailingFields['id'];
+  $spec['id']['api.required'] = 1;
+}
+
+function civicrm_api3_mailing_clone($params) {
+  $BLACKLIST = array(
+    'id',
+    'is_completed',
+    'created_id',
+    'created_date',
+    'scheduled_id',
+    'scheduled_date',
+    'approver_id',
+    'approval_date',
+    'approval_status_id',
+    'approval_note',
+    'is_archived',
+    'hash',
+  );
+
+  $get = civicrm_api3('Mailing', 'getsingle', array('id' => $params['id']));
+
+  $newParams = array();
+  $newParams['debug'] = CRM_Utils_Array::value('debug', $params);
+  $newParams['groups']['include'] = array();
+  $newParams['groups']['exclude'] = array();
+  $newParams['mailings']['include'] = array();
+  $newParams['mailings']['exclude'] = array();
+  foreach ($get as $field => $value) {
+    if (!in_array($field, $BLACKLIST)) {
+      $newParams[$field] = $value;
+    }
+  }
+
+  $dao = new CRM_Mailing_DAO_MailingGroup();
+  $dao->mailing_id = $params['id'];
+  $dao->find();
+  while ($dao->fetch()) {
+    // CRM-11431; account for multi-lingual
+    $entity = (substr($dao->entity_table, 0, 15) == 'civicrm_mailing') ? 'mailings' : 'groups';
+    $newParams[$entity][strtolower($dao->group_type)][] = $dao->entity_id;
+  }
+
+  return civicrm_api3('Mailing', 'create', $newParams);
+}
+
 /**
  * Handle a delete event.
  *