From 040073c941da40ac8d36f069eab1c4b5b39556c8 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Thu, 13 Apr 2017 11:05:32 -0400 Subject: [PATCH] CRM-20425 - Configure inbound email activity status --- CRM/Admin/Form/MailSettings.php | 22 ++++++++++++++++++ CRM/Core/DAO/MailSettings.php | 28 ++++++++++++++++++++++- CRM/Upgrade/Incremental/php/FourSeven.php | 14 ++++++++---- CRM/Utils/DeprecatedUtils.php | 2 +- CRM/Utils/Mail/EmailProcessor.php | 5 +++- templates/CRM/Admin/Form/MailSettings.tpl | 13 +++++++++++ xml/schema/Core/MailSettings.xml | 15 ++++++++++++ 7 files changed, 91 insertions(+), 8 deletions(-) diff --git a/CRM/Admin/Form/MailSettings.php b/CRM/Admin/Form/MailSettings.php index 2a325b2a11..a40b3f2adc 100644 --- a/CRM/Admin/Form/MailSettings.php +++ b/CRM/Admin/Form/MailSettings.php @@ -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(); diff --git a/CRM/Core/DAO/MailSettings.php b/CRM/Core/DAO/MailSettings.php index 1af5ad9099..10b2a914df 100644 --- a/CRM/Core/DAO/MailSettings.php +++ b/CRM/Core/DAO/MailSettings.php @@ -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']); } diff --git a/CRM/Upgrade/Incremental/php/FourSeven.php b/CRM/Upgrade/Incremental/php/FourSeven.php index cbfbc839a7..30e9931a7f 100644 --- a/CRM/Upgrade/Incremental/php/FourSeven.php +++ b/CRM/Upgrade/Incremental/php/FourSeven.php @@ -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.'"); } /* diff --git a/CRM/Utils/DeprecatedUtils.php b/CRM/Utils/DeprecatedUtils.php index 8fd4549862..4443653446 100644 --- a/CRM/Utils/DeprecatedUtils.php +++ b/CRM/Utils/DeprecatedUtils.php @@ -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']; } diff --git a/CRM/Utils/Mail/EmailProcessor.php b/CRM/Utils/Mail/EmailProcessor.php index 3acb4a68fb..bb02bae3c9 100644 --- a/CRM/Utils/Mail/EmailProcessor.php +++ b/CRM/Utils/Mail/EmailProcessor.php @@ -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']) { diff --git a/templates/CRM/Admin/Form/MailSettings.tpl b/templates/CRM/Admin/Form/MailSettings.tpl index 729c471c00..0175b060a0 100644 --- a/templates/CRM/Admin/Form/MailSettings.tpl +++ b/templates/CRM/Admin/Form/MailSettings.tpl @@ -67,7 +67,20 @@ {$form.is_default.label}{$form.is_default.html}  {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} + + {$form.activity_status.label}{$form.activity_status.html}
{include file="CRM/common/formButtons.tpl" location="bottom"}
{/if} +{literal} + +{/literal} diff --git a/xml/schema/Core/MailSettings.xml b/xml/schema/Core/MailSettings.xml index cf13165d19..0dea26c13b 100644 --- a/xml/schema/Core/MailSettings.xml +++ b/xml/schema/Core/MailSettings.xml @@ -135,4 +135,19 @@ folder to poll from when using IMAP, path to poll from when using Maildir, etc. 2.2 + + activity_status + Activity Status + varchar + 255 + Name of status to use when creating email to activity. + 4.7 + + activity_status + name + + + Select + + -- 2.25.1