Activity cleanup
authormonishdeb <monish.deb@webaccessglobal.com>
Tue, 25 Nov 2014 12:45:05 +0000 (18:15 +0530)
committermonishdeb <monish.deb@webaccessglobal.com>
Wed, 28 Jan 2015 07:40:01 +0000 (13:10 +0530)
CRM/Activity/BAO/Activity.php
CRM/Activity/BAO/Query.php
CRM/Activity/Form/Search.php
CRM/Contact/BAO/Query.php
CRM/Contact/Form/Search/Advanced.php
CRM/Contribute/BAO/Query.php
CRM/Contribute/Form/Search.php
CRM/Core/BAO/Mapping.php
templates/CRM/Activity/Form/Search/Common.tpl
xml/schema/Activity/Activity.xml

index 02bda6fb3537666338b416ecb235e0dca5ef16ae..d3f1a8441fd0b9863baf97fc52ea02fce06601f6 100644 (file)
@@ -2180,8 +2180,8 @@ AND cl.modified_id  = c.id
 
 
         $Activityfields = array(
-          'activity_type' => array('title' => ts('Activity Type'), 'type' => CRM_Utils_Type::T_STRING),
-          'activity_status' => array('title' => ts('Activity Status'), 'type' => CRM_Utils_Type::T_STRING),
+          'activity_type' => array('title' => ts('Activity Type'), 'name' => 'activity_type', 'type' => CRM_Utils_Type::T_STRING),
+          'activity_status' => array('title' => ts('Activity Status'), 'name' => 'activity_status', 'type' => CRM_Utils_Type::T_STRING),
         );
         $fields = array_merge($Activityfields, $exportableFields);
       }
index 243200697c958cf189d381d3cd26785e25da9f46..3007e30e8e0f6ce73ba081dfe558907a2c2d7ad7 100644 (file)
@@ -190,6 +190,7 @@ class CRM_Activity_BAO_Query {
   public static function whereClauseSingle(&$values, &$query) {
     list($name, $op, $value, $grouping, $wildcard) = $values;
 
+    $fields = CRM_Activity_BAO_Activity::exportableFields();
     $strtolower = function_exists('mb_strtolower') ? 'mb_strtolower' : 'strtolower';
     $query->_tables['civicrm_activity'] = $query->_whereTables['civicrm_activity'] = 1;
     if ($query->_mode & CRM_Contact_BAO_Query::MODE_ACTIVITY) {
@@ -199,20 +200,35 @@ 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);
-        $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;
-          }
+      case 'activity_status_id':
+      case 'activity_status':
+      case 'activity_engagement_level':
+      case 'activity_subject':
+      case 'activity_id':
+        if (!$value) {
+          break;
+        }
+        $qillName = $name;
+        if (in_array($name, array('activity_type_id'))) {
+          $name = $qillName = $name . '_id';
+        }
+        if (in_array($name, array('activity_engagement_level', 'activity_id'))) {
+          $name = $qillName = str_replace('activity_', '', $name);
         }
+        if (in_array($name, array('activity_status_id', 'activity_subject'))) {
+          $name = str_replace('activity_', '', $name);
+          $qillName = str_replace('_id', '', $qillName);
+        }
+        $dataType = !empty($fields[$qillName]['type']) ? CRM_Utils_Type::typeToString($fields[$qillName]['type']) : 'String';
+
+        if (in_array($name, array('activity_type', 'activity_status'))) {
+          $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause("$name.label", $op, $value, $dataType);
+        }
+        else {
+          $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause("civicrm_activity.$name", $op, $value, $dataType);
+        }
+        list($op, $value) = CRM_Contact_BAO_Query::buildQillForFieldValue('CRM_Activity_DAO_Activity', $name, $value, $op);
+        $query->_qill[$grouping][] = ts('%1 %2 %3', array(1 => $fields[$qillName]['title'], 2 => $op, 3 => $value));
         break;
 
       case 'activity_survey_id':
@@ -224,16 +240,6 @@ class CRM_Activity_BAO_Query {
         $query->_qill[$grouping][] = ts('Survey') . ' - ' . CRM_Core_DAO::getFieldValue('CRM_Campaign_DAO_Survey', $value, 'title');
         break;
 
-      case 'activity_engagement_level':
-        if (!$value) {
-          break;
-        }
-
-        $value = CRM_Utils_Type::escape($value, 'Integer');
-        $query->_where[$grouping][] = " engagement_level = $value";
-        $query->_qill[$grouping][] = ts('Engagement Index') . ' - ' . CRM_Core_OptionGroup::getLabel('engagement_index', $value);
-        break;
-
       case 'activity_role':
         CRM_Contact_BAO_Query::$_activityRole = $values[2];
         $activityContacts = CRM_Core_OptionGroup::values('activity_contacts', FALSE, FALSE, FALSE, NULL, 'name');
@@ -258,36 +264,6 @@ class CRM_Activity_BAO_Query {
         }
         break;
 
-      case 'activity_status':
-        $status = CRM_Core_PseudoConstant::activityStatus();
-
-        $activityTypeIds = self::buildWhereAndQill($query, $value, $status, $op, $grouping, array(
-            'Activity Status',
-            'civicrm_activity.status_id'
-          ));
-        break;
-
-      case 'activity_subject':
-        $n = trim($value);
-        $value = strtolower(CRM_Core_DAO::escapeString($n));
-        if ($wildcard) {
-          if (strpos($value, '%') !== FALSE) {
-            // only add wild card if not there
-            $value = "'$value'";
-          }
-          else {
-            $value = "'%$value%'";
-          }
-          $op = 'LIKE';
-        }
-        else {
-          $value = "'$value'";
-        }
-        $wc = ($op != 'LIKE') ? "LOWER(civicrm_activity.subject)" : "civicrm_activity.subject";
-        $query->_where[$grouping][] = " $wc $op $value";
-        $query->_qill[$grouping][] = ts('Subject') . " $op - '$n'";
-        break;
-
       case 'activity_test':
         // We dont want to include all tests for sql OR CRM-7827
         if (!$value || $query->getOperator() != 'OR') {
@@ -306,23 +282,6 @@ class CRM_Activity_BAO_Query {
         );
         break;
 
-      case 'activity_id':
-        if (empty($value)) {
-          break;
-        }
-
-        if (is_array($value)) {
-          foreach ($value as $k => $v) {
-            $value[$k] = CRM_Utils_Type::escape($v, 'Integer');
-          }
-        }
-        else {
-          $value = array(CRM_Utils_Type::escape($value, 'Integer'));
-        }
-        $query->_where[$grouping][] = "civicrm_activity.id IN (" . implode(",", $value) . ")";
-        $query->_qill[$grouping][] = ts('Activity Id(s)  %1', array(1 => implode($value)));
-        break;
-
       case 'activity_taglist':
         $taglist = $value;
         $value = array();
@@ -474,17 +433,9 @@ class CRM_Activity_BAO_Query {
    */
   public static function buildSearchForm(&$form) {
     $activityOptions = CRM_Core_PseudoConstant::activityType(TRUE, TRUE, FALSE, 'label', TRUE);
-    asort($activityOptions);
-    foreach ($activityOptions as $activityID => $activity) {
-      $form->_activityElement =&
-        $form->addElement(
-          'checkbox',
-          "activity_type_id[$activityID]",
-          NULL,
-          $activity,
-          array('onClick' => 'showCustomData( this.id );')
-        );
-    }
+    $form->addSelect('activity_type_id',
+      array('entity' => 'activity', 'label' => 'Activity Type(s)', 'multiple' => 'multiple', 'option_url' => NULL, 'placeholder' => ts('- any -'))
+    );
 
     CRM_Core_Form_Date::buildDateRange($form, 'activity_date', 1, '_low', '_high', ts('From'), FALSE, FALSE);
     $followUpActivity = array(
@@ -500,12 +451,11 @@ class CRM_Activity_BAO_Query {
     );
     $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->setDefaults(array('activity_status[1]' => 1, 'activity_status[2]' => 1));
+    $activityStatus = CRM_Core_PseudoConstant::get('CRM_Activity_DAO_Activity', 'status_id', array('flip' => 1, 'labelColumn' => 'name'));
+    $form->addSelect('status_id',
+      array('entity' => 'activity', 'multiple' => 'multiple', 'option_url' => NULL, 'placeholder' => ts('- any -'))
+    );
+    $form->setDefaults(array('status_id' => array($activityStatus['Completed'], $activityStatus['Scheduled'])));
     $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?'));
     $activity_tags = CRM_Core_BAO_Tag::getTags('civicrm_activity');
@@ -626,48 +576,4 @@ class CRM_Activity_BAO_Query {
 
     return $properties;
   }
-
-  /**
-   * @param $query
-   * @param $value
-   * @param $pseudoconstantType
-   * @param $op
-   * @param $grouping
-   * @param array $params
-   *
-   * @return array
-   */
-  public 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];
-  }
 }
index f1b566bd3876419bf136dacff6c656cab2b9959b..9503298887c9b5a5aff43e1190ef06a044a16964 100644 (file)
@@ -207,6 +207,21 @@ class CRM_Activity_Form_Search extends CRM_Core_Form_Search {
 
     if (!empty($_POST)) {
       $this->_formValues = $this->controller->exportValues($this->_name);
+      foreach (array('activity_type_id', 'status_id', 'activity_subject') as $element) {
+        $value = CRM_Utils_Array::value($element, $this->_formValues);
+        if ($value) {
+          if (is_array($value)) {
+            if ($element == 'status_id') {
+              unset($this->_formValues[$element]);
+              $element = 'activity_' . $element;
+            }
+            $this->_formValues[$element] = array('IN' => $value);
+          }
+          else {
+            $this->_formValues[$element] = array('LIKE' => "%$value%");
+          }
+        }
+      }
     }
 
     $this->fixFormValues();
index 9b799de3704ab1153f45534b130c174add70aba1..dfa13d4bf33b6332b731287dcd3e5ce25c6f50f0 100644 (file)
@@ -1735,9 +1735,11 @@ class CRM_Contact_BAO_Query {
       case 'activity_date_low':
       case 'activity_date_high':
       case 'activity_role':
+      case 'activity_status_id':
       case 'activity_status':
       case 'followup_parent_id':
       case 'parent_id':
+      case 'source_contact_id':
       case 'activity_subject':
       case 'test_activities':
       case 'activity_type_id':
@@ -5634,4 +5636,37 @@ AND   displayRelType.is_active = 1
 
     return array($presentClause, $presentSimpleFromClause);
   }
+
+  static function buildQillForFieldValue($daoName, $fieldName, $fieldValue, $op, $pseduoExtraParam = array()) {
+    $pseduoOptions = CRM_Core_PseudoConstant::get($daoName, $fieldName, $pseduoExtraParam = array());
+    if ($fieldName == 'activity_type_id') {
+      $pseduoOptions = CRM_Core_PseudoConstant::activityType(TRUE, TRUE, FALSE, 'label', TRUE);
+    }
+
+    //For those $fieldName which don't have any associated pseudoconstant defined
+    if (empty($pseduoOptions)) {
+      if (is_array($fieldValue)) {
+        $op = key($fieldValue);
+        $fieldValue = $fieldValue[$op];
+      }
+      return array($op, $fieldValue);
+    }
+    elseif (is_array($fieldValue)) {
+      $qillString = array();
+      if (in_array(key($fieldValue), CRM_Core_DAO::acceptedSQLOperators())) {
+        $op = key($fieldValue);
+        $fieldValue = $fieldValue[$op];
+      }
+      foreach ((array)$fieldValue as $val) {
+        $qillString[] = $pseduoOptions[$val];
+      }
+      return array($op, implode(', ', $qillString));
+    }
+    else {
+      if (array_key_exists($fieldValue, $pseduoOptions)) {
+        $fieldValue = $pseduoOptions[$fieldValue];
+      }
+      return array($op, $fieldValue);
+    }
+  }
 }
index 1437662b394d8748f47996baf96cacd6a2dece76..963efef85ab832fd9a88080885a58231563d6bb1 100644 (file)
@@ -364,18 +364,22 @@ class CRM_Contact_Form_Search_Advanced extends CRM_Contact_Form_Search {
       }
     }
 
-    foreach (array('financial_type_id', 'contribution_soft_credit_type_id', 'contribution_status') as $element) {
+    foreach (array('financial_type_id', 'contribution_soft_credit_type_id', 'contribution_status', 'contribution_source', 'contribution_trxn_id', 'activity_type_id', 'status_id', 'activity_subject') as $element) {
       $value = CRM_Utils_Array::value($element, $this->_formValues);
-      if ($value && is_array($value)) {
-        $this->_formValues[$element] = array('IN' => $value);
+      if ($value) {
+        if (is_array($value)) {
+          if ($element == 'status_id') {
+            unset($this->_formValues[$element]);
+            $element = 'activity_' . $element;
+          }
+          $this->_formValues[$element] = array('IN' => $value);
+        }
+        else {
+          $this->_formValues[$element] = array('LIKE' => "%$value%");
+        }
       }
     }
 
-    foreach (array('contribution_source', 'contribution_trxn_id') as $element) {
-      $value = CRM_Utils_Array::value($element, $this->_formValues);
-      $this->_formValues[$element] = array('LIKE' => "%$value%");
-    }
-
     $taglist = CRM_Utils_Array::value('contact_taglist', $this->_formValues);
 
     if ($taglist && is_array($taglist)) {
index 9b8564d5431b29d8fca0074ae8bbd6c2360e19a9..4948fff5541fa3e6bd0da8419b90ec8c73048def 100644 (file)
@@ -354,14 +354,14 @@ class CRM_Contribute_BAO_Query {
         $dataType = !empty($fields[$qillName]['type']) ? CRM_Utils_Type::typeToString($fields[$qillName]['type']) : 'String';
 
         $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause("civicrm_contribution.$name", $op, $value, $dataType);
-        list($op, $value) = self::buildQillForFieldValue('CRM_Contribute_DAO_Contribution', $name, $value, $op, $pseudoExtraParam);
+        list($op, $value) = CRM_Contact_BAO_Query::buildQillForFieldValue('CRM_Contribute_DAO_Contribution', $name, $value, $op, $pseudoExtraParam);
         $query->_qill[$grouping][] = ts('%1 %2 %3', array(1 => $fields[$qillName]['title'], 2 => $op, 3 => $value));
         $query->_tables['civicrm_contribution'] = $query->_whereTables['civicrm_contribution'] = 1;
         return;
 
       case 'contribution_page':
         $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause($fields[$name]['where'], $op, $value, 'String');
-        list($op, $value) = self::buildQillForFieldValue('CRM_Contribute_DAO_Contribution', $name, $value, $op);
+        list($op, $value) = CRM_Contact_BAO_Query::buildQillForFieldValue('CRM_Contribute_DAO_Contribution', $name, $value, $op);
         $query->_qill[$grouping][] = ts('%1 %2 %3', array(1 => $fields[$name]['title'], 2 => $op, 3 => $value));
         $query->_tables['civicrm_contribution_page'] = $query->_whereTables['civicrm_contribution_page'] = 1;
         $query->_tables['civicrm_contribution'] = $query->_whereTables['civicrm_contribution'] = 1;
@@ -382,7 +382,7 @@ class CRM_Contribute_BAO_Query {
         $query->_where[$grouping][] = CRM_Contact_BAO_Query::buildClause("civicrm_contribution_soft.$name",
           $op, $value, CRM_Utils_Type::typeToString($fields[$qillName]['type'])
         );
-        list($op, $value) = self::buildQillForFieldValue('CRM_Contribute_DAO_ContributionSoft', $name, $value, $op);
+        list($op, $value) = CRM_Contact_BAO_Query::buildQillForFieldValue('CRM_Contribute_DAO_ContributionSoft', $name, $value, $op);
         $query->_qill[$grouping][] = ts('%1 %2 %3', array(1 => $fields[$qillName]['title'], 2 => $op, 3 => $value));
         $query->_tables['civicrm_contribution_soft'] = $query->_whereTables['civicrm_contribution_soft'] = 1;
         return;
@@ -1028,34 +1028,4 @@ class CRM_Contribute_BAO_Query {
       'contribution_recur_failure_retry_date' => ts('Failed Recurring Contribution Retry Date'),
     );
   }
-
-  static function buildQillForFieldValue($daoName, $fieldName, $fieldValue, $op, $pseduoExtraParam = array()) {
-    $pseduoOptions = CRM_Core_PseudoConstant::get($daoName, $fieldName, $pseduoExtraParam = array());
-
-    //For those $fieldName which don't have any associated pseudoconstant defined
-    if (empty($pseduoOptions)) {
-      if (is_array($fieldValue)) {
-        $op = key($fieldValue);
-        $fieldValue = $fieldValue[$op];
-      }
-      return array($op, $fieldValue);
-    }
-    elseif (is_array($fieldValue)) {
-      $qillString = array();
-      if (in_array(key($fieldValue), CRM_Core_DAO::acceptedSQLOperators())) {
-        $op = key($fieldValue);
-        $fieldValue = $fieldValue[$op];
-      }
-      foreach ((array)$fieldValue as $val) {
-        $qillString[] = $pseduoOptions[$val];
-      }
-      return array($op, implode(', ', $qillString));
-    }
-    else {
-      if (array_key_exists($fieldValue, $pseduoOptions)) {
-        $fieldValue = $pseduoOptions[$fieldValue];
-      }
-      return array($op, $fieldValue);
-    }
-  }
 }
index b8bafbf584f6fbf56df665282642b0b804eb41b4..d70a2f8533e45a7ab91f88abbc7106d44edeaf7a 100644 (file)
@@ -269,16 +269,14 @@ class CRM_Contribute_Form_Search extends CRM_Core_Form_Search {
 
     $config = CRM_Core_Config::singleton();
     if (!empty($_POST)) {
-      foreach (array('financial_type_id', 'contribution_soft_credit_type_id', 'contribution_status') as $element) {
-        $value = CRM_Utils_Array::value($element, $this->_formValues);
-        if ($value && is_array($value)) {
-          $this->_formValues[$element] = array('IN' => $value);
-        }
-      }
-
-      foreach (array('contribution_source', 'contribution_trxn_id') as $element) {
+      foreach (array('financial_type_id', 'contribution_soft_credit_type_id', 'contribution_status', 'contribution_source', 'contribution_trxn_id') as $element) {
         $value = CRM_Utils_Array::value($element, $this->_formValues);
         if ($value) {
+          if (is_array($value)) {
+            $this->_formValues[$element] = array('IN' => $value);
+          }
+        }
+        else {
           $this->_formValues[$element] = array('LIKE' => "%$value%");
         }
       }
index d44fee1f761b4155c421d50693931128d5467f00..4d202a00ae9a994e75cc97ff7d8482ce1e241265 100644 (file)
@@ -403,7 +403,9 @@ class CRM_Core_BAO_Mapping extends CRM_Core_DAO_Mapping {
     if (($mappingType == 'Search Builder') || ($exportMode == CRM_Export_Form_Select::CONTRIBUTE_EXPORT)) {
       if (CRM_Core_Permission::access('CiviContribute')) {
         $fields['Contribution'] = CRM_Contribute_BAO_Contribution::exportableFields();
-        unset($fields['Contribution']['contribution_contact_id']);
+        foreach (array('contribution_contact_id', 'contribution_soft_credit_name', 'contribution_soft_credit_amount', 'contribution_soft_credit_type', 'contribution_soft_credit_contribution_id') as $element) {
+          unset($fields['Contribution'][$element]);
+        }
         $compArray['Contribution'] = ts('Contribution');
       }
     }
index 23ce31adfbe351b18aa800d5adf431958ed3451d..4b3813a6e3a3b14ae0af6e3fca83426abf1a6421 100644 (file)
 </tr>
 <tr>
   {if $form.activity_type_id}
-    <td><label>{ts}Activity Type(s){/ts}</label>
-      <div id="Activity" class="listing-box">
-        {foreach from=$form.activity_type_id item="activity_type_val"}
-          <div class="{cycle values='odd-row,even-row'}">
-            {$activity_type_val.html}
-          </div>
-        {/foreach}
-      </div>
+    <td><label>{$form.activity_type_id.label}</label>
+       <br />
+       {$form.activity_type_id.html}
     </td>
   {else}
     <td>&nbsp;</td>
     {$form.activity_subject.html|crmAddClass:big}
   </td>
   <td colspan="2">
-    {$form.activity_status.label}<br/>
-    {$form.activity_status.html}
+    {$form.status_id.label}<br/>
+    {$form.status_id.html}
   </td>
 </tr>
 <tr>
index 9fbc397894d6110a8a2755499237c6093d4890d6..4e742852a2f957e460f8e4d2e221151dba09cc0b 100644 (file)
   </index>
   <field>
     <name>activity_type_id</name>
-    <title>Activity Type</title>
+    <title>Activity Type ID</title>
     <import>true</import>
     <type>int unsigned</type>
     <required>true</required>
-    <export>false</export>
+    <export>true</export>
     <default>1</default>
     <headerPattern>/(activity.)?type(.id$)/i</headerPattern>
     <comment>FK to civicrm_option_value.id, that has to be valid, registered activity type.</comment>