From 50b96ca1bf60f0709ac87e6cb8b203f2664ae478 Mon Sep 17 00:00:00 2001 From: Erik Hommel <hommel@ee-atwork.nl> Date: Wed, 19 Oct 2016 09:50:37 +0200 Subject: [PATCH] fix activity type condition for case activity --- CRM/Civirules/Config.php | 1 + CRM/CivirulesConditions/Activity/Type.mgd.php | 2 +- CRM/CivirulesConditions/Activity/Type.php | 40 ++++++++++++++----- .../Form/Activity/Type.php | 4 +- CRM/CivirulesConditions/Membership/Status.php | 1 - CRM/CivirulesPostTrigger/CaseActivity.php | 1 + .../Form/Activity/Type.tpl | 15 +++++-- 7 files changed, 49 insertions(+), 15 deletions(-) diff --git a/CRM/Civirules/Config.php b/CRM/Civirules/Config.php index a7a9a0f..e4a0cfd 100644 --- a/CRM/Civirules/Config.php +++ b/CRM/Civirules/Config.php @@ -72,6 +72,7 @@ class CRM_Civirules_Config 'Activity', 'Address', 'Case', + 'CaseActivity', 'Contact', 'Contribution', 'ContributionRecur', diff --git a/CRM/CivirulesConditions/Activity/Type.mgd.php b/CRM/CivirulesConditions/Activity/Type.mgd.php index 0864888..ded5e6f 100644 --- a/CRM/CivirulesConditions/Activity/Type.mgd.php +++ b/CRM/CivirulesConditions/Activity/Type.mgd.php @@ -9,7 +9,7 @@ return array ( array ( 'version' => 3, 'name' => 'contact_has_activity_of_type', - 'label' => 'Contact has an activity of type xxx', + 'label' => 'Activity is of type', 'class_name' => 'CRM_CivirulesConditions_Activity_Type', 'is_active' => 1 ), diff --git a/CRM/CivirulesConditions/Activity/Type.php b/CRM/CivirulesConditions/Activity/Type.php index a0fdb26..b92bda6 100644 --- a/CRM/CivirulesConditions/Activity/Type.php +++ b/CRM/CivirulesConditions/Activity/Type.php @@ -38,11 +38,20 @@ class CRM_CivirulesConditions_Activity_Type extends CRM_Civirules_Condition { * @access public */ public function isConditionValid(CRM_Civirules_TriggerData_TriggerData $triggerData) { + $isConditionValid = FALSE; $activity = $triggerData->getEntityData('Activity'); - if ($activity['activity_type_id'] == $this->conditionParams['activity_type_id']) { - return true; + switch ($this->conditionParams['operator']) { + case 0: + if (in_array($activity['activity_type_id'], $this->conditionParams['activity_type_id'])) { + $isConditionValid = TRUE; + } + break; + case 1: + if (!in_array($activity['activity_type_id'], $this->conditionParams['activity_type_id'])) { + $isConditionValid = TRUE; + } + break; } - return false; } /** * Returns a user friendly text explaining the condition params @@ -52,12 +61,25 @@ class CRM_CivirulesConditions_Activity_Type extends CRM_Civirules_Condition { * @access public */ public function userFriendlyConditionParams() { - $activityTypeLabel = CRM_Civirules_Utils::getOptionLabelWithValue(CRM_Civirules_Utils::getOptionGroupIdWithName('activity_type'), - $this->conditionParams['activity_type_id']); - if (!empty($activityTypeLabel)) { - return 'Activity type is '.$activityTypeLabel; + $friendlyText = ""; + if ($this->conditionParams['operator'] == 0) { + $friendlyText = 'Activity Type is one of: '; } - return ''; + if ($this->conditionParams['operator'] == 1) { + $friendlyText = 'Activity Type is NOT one of: '; + } + $actText = array(); + foreach ($this->conditionParams['activity_type_id'] as $actTypeId) { + $actText[] = civicrm_api3('OptionValue', 'getvalue', array( + 'option_group_id' => 'activity_type', + 'value' => $actTypeId, + 'return' => 'label' + )); + } + if (!empty($actText)) { + $friendlyText .= implode(", ", $actText); + } + return $friendlyText; } /** @@ -68,7 +90,7 @@ class CRM_CivirulesConditions_Activity_Type extends CRM_Civirules_Condition { */ public function requiredEntities() { return array( - 'Activity' + 'Activity', 'CaseActivity' ); } } \ No newline at end of file diff --git a/CRM/CivirulesConditions/Form/Activity/Type.php b/CRM/CivirulesConditions/Form/Activity/Type.php index 6d7285d..f1eee2f 100644 --- a/CRM/CivirulesConditions/Form/Activity/Type.php +++ b/CRM/CivirulesConditions/Form/Activity/Type.php @@ -19,7 +19,9 @@ class CRM_CivirulesConditions_Form_Activity_Type extends CRM_CivirulesConditions $activityTypeList = array('- select -') + CRM_Civirules_Utils::getActivityTypeList(); asort($activityTypeList); - $this->add('select', 'activity_type_id', 'Activity Type', $activityTypeList, true); + $this->add('select', 'activity_type_id', ts('Activity Type(s)'), $activityTypeList, true, + array('id' => 'activity_type_ids', 'multiple' => 'multiple','class' => 'crm-select2')); + $this->add('select', 'operator', ts('Operator'), array('is one of', 'is NOT one of'), true); $this->addButtons(array( array('type' => 'next', 'name' => ts('Save'), 'isDefault' => TRUE,), diff --git a/CRM/CivirulesConditions/Membership/Status.php b/CRM/CivirulesConditions/Membership/Status.php index 31c882b..f33023c 100644 --- a/CRM/CivirulesConditions/Membership/Status.php +++ b/CRM/CivirulesConditions/Membership/Status.php @@ -27,7 +27,6 @@ class CRM_CivirulesConditions_Membership_Status extends CRM_Civirules_Condition public function isConditionValid(CRM_Civirules_TriggerData_TriggerData $triggerData) { $isConditionValid = FALSE; $membership = $triggerData->getEntityData('Membership'); - CRM_Core_Error::debug('membership', $membership); switch ($this->conditionParams['operator']) { case 0: if ($membership['status_id'] == $this->conditionParams['membership_status_id']) { diff --git a/CRM/CivirulesPostTrigger/CaseActivity.php b/CRM/CivirulesPostTrigger/CaseActivity.php index e1ebd54..e7e6ad6 100644 --- a/CRM/CivirulesPostTrigger/CaseActivity.php +++ b/CRM/CivirulesPostTrigger/CaseActivity.php @@ -77,6 +77,7 @@ class CRM_CivirulesPostTrigger_CaseActivity extends CRM_CivirulesPostTrigger_Act protected function getAdditionalEntities() { $entities = parent::getAdditionalEntities(); $entities[] = new CRM_Civirules_TriggerData_EntityDefinition('Case', 'Case', 'CRM_Case_DAO_Case' , 'Case'); + $entities[] = new CRM_Civirules_TriggerData_EntityDefinition('CaseActivity', 'CaseActivity', 'CRM_Case_DAO_CaseActivity' , 'CaseActivity'); return $entities; } } diff --git a/templates/CRM/CivirulesConditions/Form/Activity/Type.tpl b/templates/CRM/CivirulesConditions/Form/Activity/Type.tpl index 4deb563..98eabe4 100644 --- a/templates/CRM/CivirulesConditions/Form/Activity/Type.tpl +++ b/templates/CRM/CivirulesConditions/Form/Activity/Type.tpl @@ -1,8 +1,17 @@ <h3>{$ruleConditionHeader}</h3> -<div class="crm-block crm-form-block crm-civirule-rule_condition-block-activity-type"> +<div class="crm-block crm-form-block crm-civirule-rule_condition-block-contribution_activitytype"> <div class="crm-section"> - <div class="label">{$form.activity_type_id.label}</div> - <div class="content">{$form.activity_type_id.html}</div> + <div class="label">{$form.operator.label}</div> + <div class="content">{$form.operator.html}</div> + <div class="clear"></div> + </div> + <div class="crm-section sector-section"> + <div class="label"> + <label for="financial_type-select">{ts}Activity Type(s){/ts}</label> + </div> + <div class="content crm-select-container" id="activity_type_block"> + {$form.activity_type_id.html} + </div> <div class="clear"></div> </div> </div> -- GitLab