Merge remote-tracking branch 'upstream/4.5' into 4.5-master-2014-11-24-15-59-25
[civicrm-core.git] / CRM / Activity / BAO / Query.php
index 39dca577a9e6e83846cc54493f2ddfd1e10304fb..e378efe51d8390975174709584c5f86c1b7514ef 100644 (file)
@@ -51,7 +51,7 @@ class CRM_Activity_BAO_Query {
     }
 
     if (!empty($query->_returnProperties['activity_type_id'])) {
-      $query->_select['activity_type_id'] = "activity_type.id as activity_type_id";
+      $query->_select['activity_type_id'] = "activity_type.value as activity_type_id";
       $query->_element['activity_type_id'] = 1;
       $query->_tables['civicrm_activity'] = 1;
       $query->_tables['activity_type'] = 1;
@@ -60,8 +60,7 @@ class CRM_Activity_BAO_Query {
     }
 
     if (!empty($query->_returnProperties['activity_type'])) {
-      $query->_select['activity_type'] = "activity_type.label as activity_type,
-        civicrm_activity.activity_type_id as activity_type_id";
+      $query->_select['activity_type'] = "activity_type.label as activity_type";
       $query->_element['activity_type'] = 1;
       $query->_tables['civicrm_activity'] = 1;
       $query->_tables['activity_type'] = 1;
@@ -91,7 +90,8 @@ class CRM_Activity_BAO_Query {
     }
 
     if (!empty($query->_returnProperties['activity_status'])) {
-      $query->_select['activity_status'] = "activity_status.label as activity_status";
+      $query->_select['activity_status'] = "activity_status.label as activity_status,
+      civicrm_activity.status_id as status_id";
       $query->_element['activity_status'] = 1;
       $query->_tables['civicrm_activity'] = 1;
       $query->_tables['activity_status'] = 1;
@@ -152,6 +152,12 @@ class CRM_Activity_BAO_Query {
       $query->_element['result'] = 1;
       $query->_tables['civicrm_activity'] = $query->_whereTables['civicrm_activity'] = 1;
     }
+
+    if (CRM_Utils_Array::value('parent_id', $query->_returnProperties)) {
+      $query->_tables['parent_id'] = 1;
+      $query->_whereTables['parent_id'] = 1;
+      $query->_element['parent_id'] = 1;
+    }
   }
 
   /**
@@ -214,7 +220,7 @@ class CRM_Activity_BAO_Query {
           break;
         }
         $value = CRM_Utils_Type::escape($value, 'Integer');
-        $query->_where[$grouping][] = " source_record_id = $value";
+        $query->_where[$grouping][] = " civicrm_activity.source_record_id = $value";
         $query->_qill[$grouping][] = ts('Survey') . ' - ' . CRM_Core_DAO::getFieldValue('CRM_Campaign_DAO_Survey', $value, 'title');
         break;
 
@@ -363,9 +369,38 @@ class CRM_Activity_BAO_Query {
           $query->_qill[$grouping][] = ts("Activity Result - %1", array(1 => implode(' or ', $safe)));
         }
         break;
+
+      case 'parent_id':
+        if ($value == 1) {
+          $query->_where[$grouping][] = "parent_id.parent_id IS NOT NULL";
+          $query->_qill[$grouping][] = ts('Activities which have Followup Activities');
+        }
+        elseif ($value == 2) {
+          $query->_where[$grouping][] = "parent_id.parent_id IS NULL";
+          $query->_qill[$grouping][] = ts('Activities without Followup Activities');
+        }
+        break;
+
+      case 'followup_parent_id':
+        if ($value == 1) {
+          $query->_where[$grouping][] = "civicrm_activity.parent_id IS NOT NULL";
+          $query->_qill[$grouping][] = ts('Activities which are Followup Activities');
+        }
+        elseif ($value == 2) {
+          $query->_where[$grouping][] = "civicrm_activity.parent_id IS NULL";
+         $query->_qill[$grouping][] = ts('Activities which are not Followup Activities');
+        }
+        break;
     }
   }
 
+  /**
+   * @param $name
+   * @param $mode
+   * @param $side
+   *
+   * @return null|string
+   */
   static function from($name, $mode, $side) {
     $from = NULL;
     switch ($name) {
@@ -407,6 +442,10 @@ class CRM_Activity_BAO_Query {
                       ON ( ac.activity_id = civicrm_activity_contact.activity_id AND ac.record_type_id = {$sourceID})
         INNER JOIN civicrm_contact source_contact ON (ac.contact_id = source_contact.id)";
         break;
+
+      case 'parent_id':
+        $from = "$side JOIN civicrm_activity AS parent_id ON civicrm_activity.id = parent_id.parent_id";
+        break;
     }
 
     return $from;
@@ -446,7 +485,12 @@ class CRM_Activity_BAO_Query {
     }
 
     CRM_Core_Form_Date::buildDateRange($form, 'activity_date', 1, '_low', '_high', ts('From'), FALSE, FALSE);
-
+    $followUpActivity = array(
+      1 => ts('Yes'),
+      2 => ts('No'),
+    );
+    $form->addRadio('parent_id', NULL, $followUpActivity, array('allowClear' => TRUE));
+    $form->addRadio('followup_parent_id', NULL, $followUpActivity, array('allowClear' => TRUE));
     $activityRoles = array(
       3 => ts('With'),
       2 => ts('Assigned to'),
@@ -458,7 +502,7 @@ class CRM_Activity_BAO_Query {
     foreach ($activityStatus as $activityStatusID => $activityStatusName) {
       $activity_status[] = $form->createElement('checkbox', $activityStatusID, NULL, $activityStatusName);
     }
-    $form->addGroup($activity_status, 'activity_status', ts('Activity Status'), TRUE);
+    $form->addGroup($activity_status, 'activity_status', ts('Activity Status'));
     $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?'));
@@ -535,6 +579,12 @@ class CRM_Activity_BAO_Query {
     $form->setDefaults(array('activity_test' => 0));
   }
 
+  /**
+   * @param $mode
+   * @param bool $includeCustomFields
+   *
+   * @return array|null
+   */
   static function defaultReturnProperties($mode, $includeCustomFields = TRUE) {
     $properties = NULL;
     if ($mode & CRM_Contact_BAO_Query::MODE_ACTIVITY) {
@@ -558,6 +608,7 @@ class CRM_Activity_BAO_Query {
         'activity_campaign_id' => 1,
         'result' => 1,
         'activity_engagement_level' => 1,
+        'parent_id' => 1,
       );
 
       if ($includeCustomFields) {
@@ -574,6 +625,16 @@ class CRM_Activity_BAO_Query {
     return $properties;
   }
 
+  /**
+   * @param $query
+   * @param $value
+   * @param $pseudoconstantType
+   * @param $op
+   * @param $grouping
+   * @param $params
+   *
+   * @return array
+   */
   static function buildWhereAndQill(&$query, $value, $pseudoconstantType, $op, $grouping, $params) {
     $matches = $val = $clause = array();