X-Git-Url: https://vcs.fsf.org/?a=blobdiff_plain;f=CRM%2FActivity%2FBAO%2FQuery.php;h=24ff055b14fb40ceacc48cc16c6ae2410505116a;hb=669c8ba631144c024a0838171c2f89a280471af7;hp=fe33396de03bc79532ecccd95ee474c7dac792ea;hpb=a755b1785b561f65aca4115b3c81209c2816435d;p=civicrm-core.git diff --git a/CRM/Activity/BAO/Query.php b/CRM/Activity/BAO/Query.php index fe33396de0..24ff055b14 100644 --- a/CRM/Activity/BAO/Query.php +++ b/CRM/Activity/BAO/Query.php @@ -2,9 +2,9 @@ /* +--------------------------------------------------------------------+ - | CiviCRM version 4.4 | + | CiviCRM version 4.5 | +--------------------------------------------------------------------+ - | Copyright CiviCRM LLC (c) 2004-2013 | + | Copyright CiviCRM LLC (c) 2004-2014 | +--------------------------------------------------------------------+ | This file is a part of CiviCRM. | | | @@ -29,7 +29,7 @@ /** * * @package CRM - * @copyright CiviCRM LLC (c) 2004-2013 + * @copyright CiviCRM LLC (c) 2004-2014 * $Id$ * */ @@ -42,13 +42,13 @@ class CRM_Activity_BAO_Query { * @access public */ static function select(&$query) { - if (CRM_Utils_Array::value('activity_id', $query->_returnProperties)) { + if (!empty($query->_returnProperties['activity_id'])) { $query->_select['activity_id'] = "civicrm_activity.id as activity_id"; $query->_element['activity_id'] = 1; $query->_tables['civicrm_activity'] = $query->_whereTables['civicrm_activity'] = 1; } - if (CRM_Utils_Array::value('activity_type_id', $query->_returnProperties)) { + if (!empty($query->_returnProperties['activity_type_id'])) { $query->_select['activity_type_id'] = "activity_type.id as activity_type_id"; $query->_element['activity_type_id'] = 1; $query->_tables['civicrm_activity'] = 1; @@ -57,7 +57,7 @@ class CRM_Activity_BAO_Query { $query->_whereTables['activity_type'] = 1; } - if (CRM_Utils_Array::value('activity_type', $query->_returnProperties)) { + if (!empty($query->_returnProperties['activity_type'])) { $query->_select['activity_type'] = "activity_type.label as activity_type"; $query->_element['activity_type'] = 1; $query->_tables['civicrm_activity'] = 1; @@ -66,19 +66,19 @@ class CRM_Activity_BAO_Query { $query->_whereTables['activity_type'] = 1; } - if (CRM_Utils_Array::value('activity_subject', $query->_returnProperties)) { + if (!empty($query->_returnProperties['activity_subject'])) { $query->_select['activity_subject'] = "civicrm_activity.subject as activity_subject"; $query->_element['activity_subject'] = 1; $query->_tables['civicrm_activity'] = $query->_whereTables['civicrm_activity'] = 1; } - if (CRM_Utils_Array::value('activity_date_time', $query->_returnProperties)) { + if (!empty($query->_returnProperties['activity_date_time'])) { $query->_select['activity_date_time'] = "civicrm_activity.activity_date_time as activity_date_time"; $query->_element['activity_date_time'] = 1; $query->_tables['civicrm_activity'] = $query->_whereTables['civicrm_activity'] = 1; } - if (CRM_Utils_Array::value('activity_status_id', $query->_returnProperties)) { + if (!empty($query->_returnProperties['activity_status_id'])) { $query->_select['activity_status_id'] = "activity_status.value as activity_status_id"; $query->_element['activity_status_id'] = 1; $query->_tables['civicrm_activity'] = 1; @@ -87,7 +87,7 @@ class CRM_Activity_BAO_Query { $query->_whereTables['activity_status'] = 1; } - if (CRM_Utils_Array::value('activity_status', $query->_returnProperties)) { + if (!empty($query->_returnProperties['activity_status'])) { $query->_select['activity_status'] = "activity_status.label as activity_status"; $query->_element['activity_status'] = 1; $query->_tables['civicrm_activity'] = 1; @@ -96,53 +96,59 @@ class CRM_Activity_BAO_Query { $query->_whereTables['activity_status'] = 1; } - if (CRM_Utils_Array::value('activity_duration', $query->_returnProperties)) { + if (!empty($query->_returnProperties['activity_duration'])) { $query->_select['activity_duration'] = "civicrm_activity.duration as activity_duration"; $query->_element['activity_duration'] = 1; $query->_tables['civicrm_activity'] = $query->_whereTables['civicrm_activity'] = 1; } - if (CRM_Utils_Array::value('activity_location', $query->_returnProperties)) { + if (!empty($query->_returnProperties['activity_location'])) { $query->_select['activity_location'] = "civicrm_activity.location as activity_location"; $query->_element['activity_location'] = 1; $query->_tables['civicrm_activity'] = $query->_whereTables['civicrm_activity'] = 1; } - if (CRM_Utils_Array::value('activity_details', $query->_returnProperties)) { + if (!empty($query->_returnProperties['activity_details'])) { $query->_select['activity_details'] = "civicrm_activity.details as activity_details"; $query->_element['activity_details'] = 1; $query->_tables['civicrm_activity'] = $query->_whereTables['civicrm_activity'] = 1; } - if (CRM_Utils_Array::value('source_record_id', $query->_returnProperties)) { + if (!empty($query->_returnProperties['source_record_id'])) { $query->_select['source_record_id'] = "civicrm_activity.source_record_id as source_record_id"; $query->_element['source_record_id'] = 1; $query->_tables['civicrm_activity'] = $query->_whereTables['civicrm_activity'] = 1; } - if (CRM_Utils_Array::value('activity_is_test', $query->_returnProperties)) { + if (!empty($query->_returnProperties['activity_is_test'])) { $query->_select['activity_is_test'] = "civicrm_activity.is_test as activity_is_test"; $query->_element['activity_is_test'] = 1; $query->_tables['civicrm_activity'] = $query->_whereTables['civicrm_activity'] = 1; } - if (CRM_Utils_Array::value('activity_campaign_id', $query->_returnProperties)) { + if (!empty($query->_returnProperties['activity_campaign_id'])) { $query->_select['activity_campaign_id'] = 'civicrm_activity.campaign_id as activity_campaign_id'; $query->_element['activity_campaign_id'] = 1; $query->_tables['civicrm_activity'] = $query->_whereTables['civicrm_activity'] = 1; } - if (CRM_Utils_Array::value('activity_engagement_level', $query->_returnProperties)) { + if (!empty($query->_returnProperties['activity_engagement_level'])) { $query->_select['activity_engagement_level'] = 'civicrm_activity.engagement_level as activity_engagement_level'; $query->_element['activity_engagement_level'] = 1; $query->_tables['civicrm_activity'] = $query->_whereTables['civicrm_activity'] = 1; } - if (CRM_Utils_Array::value('source_contact', $query->_returnProperties)) { + if (!empty($query->_returnProperties['source_contact'])) { $query->_select['source_contact'] = 'source_contact.sort_name as source_contact'; $query->_element['source_contact'] = 1; $query->_tables['source_contact'] = $query->_whereTables['source_contact'] = 1; } + + if (!empty($query->_returnProperties['activity_result'])) { + $query->_select['activity_result'] = 'civicrm_activity.result as activity_result'; + $query->_element['result'] = 1; + $query->_tables['civicrm_activity'] = $query->_whereTables['civicrm_activity'] = 1; + } } /** @@ -182,32 +188,18 @@ class CRM_Activity_BAO_Query { switch ($name) { case 'activity_type_id': + case 'activity_type': $types = CRM_Core_PseudoConstant::activityType(TRUE, TRUE, FALSE, 'label', TRUE); - //get the component activity types. $compActTypes = CRM_Core_PseudoConstant::activityType(TRUE, TRUE, FALSE, 'label', TRUE, TRUE); - - $clause = array(); - if (is_array($value)) { - foreach ($value as $id => $dontCare) { - if (array_key_exists($id, $types) && $dontCare) { - $clause[] = "'" . CRM_Utils_Type::escape($types[$id], 'String') . "'"; - if (array_key_exists($id, $compActTypes)) { - CRM_Contact_BAO_Query::$_considerCompActivities = TRUE; - } - } - } - $activityTypes = implode(',', array_keys($value)); - } - else { - $clause[] = "'" . CRM_Utils_Type::escape($value, 'String') . "'"; - $activityTypes = $value; - if (array_key_exists($value, $compActTypes)) { + $activityTypeIds = self::buildWhereAndQill($query, $value, $types, $op, $grouping, array('Activity Type', 'civicrm_activity.activity_type_id')); + + foreach ($activityTypeIds as $activityTypeId) { + if (array_key_exists($activityTypeId, $compActTypes)) { CRM_Contact_BAO_Query::$_considerCompActivities = TRUE; + break; } } - $query->_where[$grouping][] = ' civicrm_activity.activity_type_id IN (' . $activityTypes . ')'; - $query->_qill[$grouping][] = ts('Activity Type') . ' ' . implode(' ' . ts('or') . ' ', $clause); break; case 'activity_survey_id': @@ -255,19 +247,8 @@ class CRM_Activity_BAO_Query { case 'activity_status': $status = CRM_Core_PseudoConstant::activityStatus(); - $clause = array(); - if (is_array($value)) { - foreach ($value as $k => $v) { - if ($k) { - $clause[] = "'" . CRM_Utils_Type::escape($status[$k], 'String') . "'"; - } - } - } - else { - $clause[] = "'" . CRM_Utils_Type::escape($value, 'String') . "'"; - } - $query->_where[$grouping][] = ' civicrm_activity.status_id IN (' . implode(',', array_keys($value)) . ')'; - $query->_qill[$grouping][] = ts('Activity Status') . ' - ' . implode(' ' . ts('or') . ' ', $clause); + + $activityTypeIds = self::buildWhereAndQill($query, $value, $status, $op, $grouping, array('Activity Status', 'civicrm_activity.status_id')); break; case 'activity_subject': @@ -364,7 +345,17 @@ class CRM_Activity_BAO_Query { 'tableName' => 'civicrm_activity', ); CRM_Campaign_BAO_Query::componentSearchClause($campParams, $query); - return; + break; + case 'activity_result': + if(is_array($value)) { + $safe = NULL; + while(list(,$k) = each($value)) { + $safe[] = "'" . CRM_Utils_Type::escape($k, 'String') . "'"; + } + $query->_where[$grouping][] = "civicrm_activity.result IN (" . implode(',', $safe) . ")"; + $query->_qill[$grouping][] = ts("Activity Result - %1", array(1 => implode(' or ', $safe))); + } + break; } } @@ -429,6 +420,7 @@ class CRM_Activity_BAO_Query { * * @access public * + * @param $form CRM_Core_Form * @return void * @static */ @@ -453,13 +445,13 @@ class CRM_Activity_BAO_Query { 2 => ts('Assigned to'), 1 => ts('Added by'), ); - $form->addRadio('activity_role', NULL, $activityRoles); + $form->addRadio('activity_role', NULL, $activityRoles, array('allowClear' => TRUE)); $form->setDefaults(array('activity_role' => 3)); $activityStatus = CRM_Core_PseudoConstant::activityStatus(); foreach ($activityStatus as $activityStatusID => $activityStatusName) { $activity_status[] = $form->createElement('checkbox', $activityStatusID, NULL, $activityStatusName); } - $form->addGroup($activity_status, 'activity_status', ts('Activity Status')); + $form->addGroup($activity_status, 'activity_status', ts('Activity Status'), TRUE); $form->setDefaults(array('activity_status[1]' => 1, 'activity_status[2]' => 1)); $form->addElement('text', 'activity_subject', ts('Subject'), CRM_Core_DAO::getAttribute('CRM_Contact_DAO_Contact', 'sort_name')); $form->addYesNo('activity_test', ts('Activity is a Test?')); @@ -477,8 +469,8 @@ class CRM_Activity_BAO_Query { $surveys = CRM_Campaign_BAO_Survey::getSurveys(TRUE, FALSE, FALSE, TRUE); if ($surveys) $form->add('select', 'activity_survey_id', ts('Survey / Petition'), - array( - '' => ts('- none -')) + $surveys, FALSE + array('' => ts('- none -')) + $surveys, FALSE, + array('class' => 'crm-select2') ); $extends = array('Activity'); @@ -498,25 +490,44 @@ class CRM_Activity_BAO_Query { //add engagement level CRM-7775 $buildEngagementLevel = FALSE; + $buildSurveyResult = FALSE; if (CRM_Campaign_BAO_Campaign::isCampaignEnable() && CRM_Campaign_BAO_Campaign::accessCampaign() ) { $buildEngagementLevel = TRUE; - $form->add('select', 'activity_engagement_level', - ts('Engagement Index'), - array('' => ts('- any -')) + CRM_Campaign_PseudoConstant::engagementLevel() - ); + $form->addSelect('activity_engagement_level', array('entity' => 'activity', 'option_url' => NULL)); + + // Add survey result field. + $optionGroups = CRM_Campaign_BAO_Survey::getResultSets( 'name' ); + $resultOptions = array(); + foreach ( $optionGroups as $gid => $name ) { + if ( $name ) { + $value = array(); + $value = CRM_Core_OptionGroup::values($name); + if (!empty($value)) { + while(list($k,$v) = each($value)) { + $resultOptions[$v] = $v; + } + } + } + } + // If no survey result options have been created, don't build + // the field to avoid clutter. + if(count($resultOptions) > 0) { + $buildSurveyResult = TRUE; + asort($resultOptions); + $form->add('select', 'activity_result', ts("Survey Result"), + $resultOptions, FALSE, + array('id' => 'activity_result', 'multiple' => 'multiple', 'class' => 'crm-select2') + ); + } } - + $form->assign('buildEngagementLevel', $buildEngagementLevel); + $form->assign('buildSurveyResult', $buildSurveyResult); $form->setDefaults(array('activity_test' => 0)); } - static function addShowHide(&$showHide) { - $showHide->addHide('caseActivityForm'); - $showHide->addShow('caseActivityForm_show'); - } - static function defaultReturnProperties($mode, $includeCustomFields = TRUE) { $properties = NULL; if ($mode & CRM_Contact_BAO_Query::MODE_ACTIVITY) { @@ -537,6 +548,7 @@ class CRM_Activity_BAO_Query { 'source_record_id' => 1, 'activity_is_test' => 1, 'activity_campaign_id' => 1, + 'result' => 1, 'activity_engagement_level' => 1, ); @@ -553,5 +565,39 @@ class CRM_Activity_BAO_Query { return $properties; } + + static function buildWhereAndQill(&$query, $value, $pseudoconstantType, $op, $grouping, $params) { + $matches = $val = $clause = array(); + + if (is_array($value)) { + foreach ($value as $k => $v) { + if ($k) { + $val[] = $k; + } + } + + if (count($val) > 0) { + // Overwrite $op so it works with an IN where statement. + $op = 'IN'; + } + else { + // If we somehow have an empty array, just return + return; + } + $value = $matches[0] = $val; + } + else { + preg_match_all('/\d+/', $value, $matches); + } + foreach ($matches[0] as $qill) { + $clause[] = CRM_Utils_Array::value($qill, $pseudoconstantType); + } + + $query->_qill[$grouping][] = ts($params[0] . ' %1 ', array(1 => $op)) . implode(' ' . ts('or') . ' ', $clause); + $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause($params[1], + $op, $value, "Integer" + ); + return $matches[0]; + } }