Merge pull request #10159 from colemanw/CRM-20425
authorcolemanw <coleman@civicrm.org>
Wed, 10 May 2017 16:53:37 +0000 (12:53 -0400)
committerGitHub <noreply@github.com>
Wed, 10 May 2017 16:53:37 +0000 (12:53 -0400)
CRM-20425 - Configure inbound email activity status

CRM/Admin/Form/MailSettings.php
CRM/Core/DAO/MailSettings.php
CRM/Upgrade/Incremental/php/FourSeven.php
CRM/Utils/DeprecatedUtils.php
CRM/Utils/Mail/EmailProcessor.php
templates/CRM/Admin/Form/MailSettings.tpl
xml/schema/Core/MailSettings.xml

index 2a325b2a1111d7c27abbf1895bc07d5f32a341e4..a40b3f2adcd21f5eae6a4b6be129d78a2a930d67 100644 (file)
@@ -85,6 +85,7 @@ class CRM_Admin_Form_MailSettings extends CRM_Admin_Form {
       0 => ts('Email-to-Activity Processing'),
     );
     $this->add('select', 'is_default', ts('Used For?'), $usedfor);
+    $this->addField('activity_status', array('placeholder' => FALSE));
   }
 
   /**
@@ -94,6 +95,26 @@ class CRM_Admin_Form_MailSettings extends CRM_Admin_Form {
     $this->addFormRule(array('CRM_Admin_Form_MailSettings', 'formRule'));
   }
 
+  public function getDefaultEntity() {
+    return 'MailSettings';
+  }
+
+  /**
+   * Add local and global form rules.
+   */
+  public function setDefaultValues() {
+    $defaults = parent::setDefaultValues();
+
+    // Set activity status to "Completed" by default.
+    if ($this->_action != CRM_Core_Action::DELETE &&
+      (!$this->_id || !CRM_Core_DAO::getFieldValue('CRM_Core_BAO_MailSettings', $this->_id, 'activity_status'))
+    ) {
+      $defaults['activity_status'] = 'Completed';
+    }
+
+    return $defaults;
+  }
+
   /**
    * Global validation rules for the form.
    *
@@ -140,6 +161,7 @@ class CRM_Admin_Form_MailSettings extends CRM_Admin_Form {
       'source',
       'is_ssl',
       'is_default',
+      'activity_status',
     );
 
     $params = array();
index 1af5ad9099eaffeaf5754bcde7cdb59f9af96daf..10b2a914df47ad80d232acc31a1470ff6598e952 100644 (file)
@@ -30,7 +30,7 @@
  *
  * Generated from xml/schema/CRM/Core/MailSettings.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:739e36d6ca1f8572f5f9eff77975765e)
+ * (GenCodeChecksum:86515d7cb55425fbad3a71d5aa000af0)
  */
 require_once 'CRM/Core/DAO.php';
 require_once 'CRM/Utils/Type.php';
@@ -134,6 +134,12 @@ class CRM_Core_DAO_MailSettings extends CRM_Core_DAO {
    * @var string
    */
   public $source;
+  /**
+   * Name of status to use when creating email to activity.
+   *
+   * @var string
+   */
+  public $activity_status;
   /**
    * Class constructor.
    */
@@ -336,6 +342,26 @@ class CRM_Core_DAO_MailSettings extends CRM_Core_DAO {
           'bao' => 'CRM_Core_BAO_MailSettings',
           'localizable' => 0,
         ) ,
+        'activity_status' => array(
+          'name' => 'activity_status',
+          'type' => CRM_Utils_Type::T_STRING,
+          'title' => ts('Activity Status') ,
+          'description' => 'Name of status to use when creating email to activity.',
+          'maxlength' => 255,
+          'size' => CRM_Utils_Type::HUGE,
+          'table_name' => 'civicrm_mail_settings',
+          'entity' => 'MailSettings',
+          'bao' => 'CRM_Core_BAO_MailSettings',
+          'localizable' => 0,
+          'html' => array(
+            'type' => 'Select',
+          ) ,
+          'pseudoconstant' => array(
+            'optionGroupName' => 'activity_status',
+            'keyColumn' => 'name',
+            'optionEditPath' => 'civicrm/admin/options/activity_status',
+          )
+        ) ,
       );
       CRM_Core_DAO_AllCoreTables::invoke(__CLASS__, 'fields_callback', Civi::$statics[__CLASS__]['fields']);
     }
index 1c764b3726625afa33cfbccd9bd014c4a6282643..c3f9319287ad09e0d0d094eef6d003021ee2ee83 100644 (file)
@@ -331,11 +331,13 @@ class CRM_Upgrade_Incremental_php_FourSeven extends CRM_Upgrade_Incremental_Base
    * @param string $rev
    */
   public function upgrade_4_7_19($rev) {
-    $query = "SELECT id FROM civicrm_financial_account WHERE opening_balance <> 0 OR current_period_opening_balance <> 0";
-    $result = CRM_Core_DAO::executeQuery($query);
-    if (!$result->N) {
-      $this->addTask('Drop Column current_period_opening_balance From civicrm_financial_account table.', 'dropColumn', 'civicrm_financial_account', 'current_period_opening_balance');
-      $this->addTask('Drop Column opening_balance From civicrm_financial_account table.', 'dropColumn', 'civicrm_financial_account', 'opening_balance');
+    if (CRM_Core_BAO_SchemaHandler::checkIfFieldExists('civicrm_financial_account', 'opening_balance')) {
+      $query = "SELECT id FROM civicrm_financial_account WHERE opening_balance <> 0 OR current_period_opening_balance <> 0";
+      $result = CRM_Core_DAO::executeQuery($query);
+      if (!$result->N) {
+        $this->addTask('Drop Column current_period_opening_balance From civicrm_financial_account table.', 'dropColumn', 'civicrm_financial_account', 'current_period_opening_balance');
+        $this->addTask('Drop Column opening_balance From civicrm_financial_account table.', 'dropColumn', 'civicrm_financial_account', 'opening_balance');
+      }
     }
     $this->addTask('CRM-19961 - Add domain_id column to civicrm_sms_provider', 'addColumn',
       'civicrm_sms_provider', 'domain_id', 'int(10) unsigned', "Which Domain is this sms provier for");
@@ -354,6 +356,8 @@ class CRM_Upgrade_Incremental_php_FourSeven extends CRM_Upgrade_Incremental_Base
   public function upgrade_4_7_20($rev) {
     $this->addtask('Fix Schema on civicrm_action_schedule', 'fixSchemaOnCiviCRMActionSchedule');
     $this->addTask(ts('Upgrade DB to %1: SQL', array(1 => $rev)), 'runSql', $rev);
+    $this->addTask('Add activity_status column to civicrm_mail_settings', 'addColumn',
+      'civicrm_mail_settings', 'activity_status', "varchar (255) DEFAULT NULL COMMENT 'Name of status to use when creating email to activity.'");
   }
 
   /*
index 8fd45498620848a74e3838f50e795b8d7a8c23c1..444365344649e73e5f52c977eab1e6b007dd365c 100644 (file)
@@ -1500,7 +1500,7 @@ function _civicrm_api3_deprecated_activity_buildmailparams($result, $activityTyp
 
   $params['activity_type_id'] = $activityTypeID;
 
-  $params['status_id'] = 2;
+  $params['status_id'] = 'Completed';
   if (!empty($result['from']['id'])) {
     $params['source_contact_id'] = $params['assignee_contact_id'] = $result['from']['id'];
   }
index 3acb4a68fb8433d8299b8bc60e1b9f7176022d4a..bb02bae3c912e2264c39a2fce9c02b84a043cdd4 100644 (file)
@@ -123,7 +123,7 @@ class CRM_Utils_Mail_EmailProcessor {
 
   /**
    * @param $civiMail
-   * @param CRM_Core_DAO $dao
+   * @param CRM_Core_DAO_MailSettings $dao
    * @param bool $is_create_activities
    *   Create activities.
    *
@@ -247,6 +247,9 @@ class CRM_Utils_Mail_EmailProcessor {
           $params = _civicrm_api3_deprecated_activity_buildmailparams($mailParams, $emailActivityTypeId);
 
           $params['version'] = 3;
+          if (!empty($dao->activity_status)) {
+            $params['status_id'] = $dao->activity_status;
+          }
           $result = civicrm_api('activity', 'create', $params);
 
           if ($result['is_error']) {
index 729c471c0093c427e07dd3312e5c921627f875a9..0175b060a0661550192c5b18b0d222013ee3439b 100644 (file)
 
   <tr class="crm-mail-settings-form-block-is_default"><td class="label">{$form.is_default.label}</td><td>{$form.is_default.html}</td></tr>
   <tr><td class="label">&nbsp;</td><td class="description">{ts}How this mail account will be used. Only one box may be used for bounce processing. It will also be used as the envelope email when sending mass mailings.{/ts}</td></tr>
+
+  <tr class="crm-mail-settings-form-block-activity_status"><td class="label">{$form.activity_status.label}</td><td>{$form.activity_status.html}</td></tr>
     </table>
   <div class="crm-submit-buttons">{include file="CRM/common/formButtons.tpl" location="bottom"}</div>
 {/if}
 </div>
+{literal}
+<script type="text/javascript">
+  CRM.$(function($) {
+    var $form = $('form.{/literal}{$form.formClass}{literal}');
+    function showActivityStatus() {
+      $('.crm-mail-settings-form-block-activity_status', $form).toggle($(this).val() === '0');
+    }
+    $('select[name=is_default]').each(showActivityStatus).change(showActivityStatus);
+  });
+</script>
+{/literal}
index cf13165d19659f25226cab2b21b63d5082b13854..0dea26c13b2a70b69035ba34bba08a2512cf559f 100644 (file)
     <comment>folder to poll from when using IMAP, path to poll from when using Maildir, etc.</comment>
     <add>2.2</add>
   </field>
+  <field>
+    <name>activity_status</name>
+    <title>Activity Status</title>
+    <type>varchar</type>
+    <length>255</length>
+    <comment>Name of status to use when creating email to activity.</comment>
+    <add>4.7</add>
+    <pseudoconstant>
+      <optionGroupName>activity_status</optionGroupName>
+      <keyColumn>name</keyColumn>
+    </pseudoconstant>
+    <html>
+      <type>Select</type>
+    </html>
+  </field>
 </table>