From 998c864fb871bebfeaeb8b24a10759cd639ea8ac Mon Sep 17 00:00:00 2001 From: jitendrapurohit Date: Wed, 2 Dec 2015 14:09:04 +0530 Subject: [PATCH] 4.6 Backport Case Activity report fix --- CRM/Report/Form/Activity.php | 56 ++++++++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/CRM/Report/Form/Activity.php b/CRM/Report/Form/Activity.php index 49bdb737ae..07d6184521 100644 --- a/CRM/Report/Form/Activity.php +++ b/CRM/Report/Form/Activity.php @@ -49,13 +49,26 @@ class CRM_Report_Form_Activity extends CRM_Report_Form { $config = CRM_Core_Config::singleton(); $campaignEnabled = in_array("CiviCampaign", $config->enableComponents); + $caseEnabled = in_array("CiviCase", $config->enableComponents); if ($campaignEnabled) { $getCampaigns = CRM_Campaign_BAO_Campaign::getPermissionedCampaigns(NULL, NULL, TRUE, FALSE, TRUE); $this->activeCampaigns = $getCampaigns['campaigns']; asort($this->activeCampaigns); $this->engagementLevels = CRM_Campaign_PseudoConstant::engagementLevel(); } - $this->activityTypes = CRM_Core_PseudoConstant::activityType(TRUE, FALSE, FALSE, 'label', TRUE); + $components = CRM_Core_Component::getEnabledComponents(); + foreach ($components as $componentName => $componentInfo) { + if (CRM_Core_Permission::check("access $componentName")) { + $accessAllowed[] = $componentInfo->componentID; + } + } + + $include = ''; + if (!empty($accessAllowed)) { + $include = 'OR v.component_id IN (' . implode(', ', $accessAllowed) . ')'; + } + $condition = " AND ( v.component_id IS NULL {$include} )"; + $this->activityTypes = CRM_Core_OptionGroup::values('activity_type', FALSE, FALSE, FALSE, $condition); asort($this->activityTypes); $this->_columns = array( @@ -247,6 +260,16 @@ class CRM_Report_Form_Activity extends CRM_Report_Form { ), ) + $this->addressFields(TRUE); + if ($caseEnabled && CRM_Core_Permission::check('access all cases and activities')) { + $this->_columns['civicrm_activity']['filters']['include_case_activities'] = array( + 'name' => 'include_case_activities', + 'title' => ts('Include Case Activities'), + 'type' => CRM_Utils_Type::T_INT, + 'operatorType' => CRM_Report_Form::OP_SELECT, + 'options' => array('0' => ts('No'), '1' => ts('Yes')), + ); + } + if ($campaignEnabled) { // Add display column and filter for Survey Results, Campaign and Engagement Index if CiviCampaign is enabled @@ -509,10 +532,16 @@ class CRM_Report_Form_Activity extends CRM_Report_Form { CRM_Utils_Array::value("{$fieldName}_min", $this->_params), CRM_Utils_Array::value("{$fieldName}_max", $this->_params) ); + if ($field['name'] == 'include_case_activities') { + $clause = NULL; + } if ($fieldName == 'activity_type_id' && empty($this->_params['activity_type_id_value']) ) { - $actTypes = array_flip(CRM_Core_PseudoConstant::activityType(TRUE, FALSE, FALSE, 'label', TRUE)); + if (empty($this->_params['include_case_activities_value'])) { + $this->activityTypes = CRM_Core_PseudoConstant::activityType(TRUE, FALSE, FALSE, 'label', TRUE); + } + $actTypes = array_flip($this->activityTypes); $clause = "( {$this->_aliases['civicrm_activity']}.activity_type_id IN (" . implode(',', $actTypes) . ") )"; } @@ -635,6 +664,29 @@ GROUP BY civicrm_activity_id $having {$this->_orderBy}"; } } + /** + * @param $fields + * @param $files + * @param $self + * + * @return array + */ + public static function formRule($fields, $files, $self) { + $errors = array(); + $config = CRM_Core_Config::singleton(); + if (in_array("CiviCase", $config->enableComponents)) { + $caseActivityTypes = array_map('current', CRM_Case_PseudoConstant::caseActivityType()); + if (!empty($fields['activity_type_id_value']) && is_array($fields['activity_type_id_value']) && empty($fields['include_case_activities_value'])) { + foreach ($fields['activity_type_id_value'] as $activityTypeId) { + if (in_array($activityTypeId, $caseActivityTypes)) { + $errors['fields'] = ts("Please enable 'Include Case Activities' to filter with Case Activity types."); + } + } + } + } + return $errors; + } + public function postProcess() { $this->beginPostProcess(); -- 2.25.1