CRM-13922 - Campaign - release respondents assigned to any interviewer
authorJamie McClelland <jm@mayfirst.org>
Fri, 6 Dec 2013 21:04:01 +0000 (16:04 -0500)
committerJamie McClelland <jm@mayfirst.org>
Fri, 6 Dec 2013 21:04:01 +0000 (16:04 -0500)
----------------------------------------
* CRM-13922: release respondent search doesn't allow you to find contacts reserved to a different interviewer
  http://issues.civicrm.org/jira/browse/CRM-13922

CRM/Campaign/BAO/Survey.php
CRM/Campaign/Form/Search.php

index 38d88e778be1cd5e5fee41fd02b8abe214fb8cf5..05f84988be0d4e6e6a2f19a835787bb6a3a5bf4b 100644 (file)
@@ -510,16 +510,12 @@ Group By  contact.id";
       $whereClause = ' AND ( activity.status_id IN ( ' . implode(',', array_values($statusIds)) . ' ) )';
     }
 
-    if (!$interviewerId) {
-      $session = CRM_Core_Session::singleton();
-      $interviewerId = $session->get('userID');
-    }
-
     $targetContactIds = ' ( ' . implode(',', $voterIds) . ' ) ';
     $activityContacts = CRM_Core_OptionGroup::values('activity_contacts', FALSE, FALSE, FALSE, NULL, 'name');
     $assigneeID = CRM_Utils_Array::key('Activity Assignees', $activityContacts);
     $targetID = CRM_Utils_Array::key('Activity Targets', $activityContacts);
 
+    $params[1] = array($surveyId, 'Integer');
     $query = "
     SELECT  activity.id, activity.status_id,
             activityTarget.contact_id as voter_id,
@@ -530,14 +526,14 @@ INNER JOIN  civicrm_activity_contact activityTarget
 INNER JOIN  civicrm_activity_contact activityAssignment
   ON ( activityAssignment.activity_id = activity.id AND activityAssignment.record_type_id = $assigneeID )
      WHERE  activity.source_record_id = %1
-       AND  ( activity.is_deleted IS NULL OR activity.is_deleted = 0 )
-       AND  activityAssignment.contact_id = %2
-       AND  activityTarget.contact_id IN {$targetContactIds}
+     AND  ( activity.is_deleted IS NULL OR activity.is_deleted = 0 ) ";
+    if(!empty($interviewerId)) {
+      $query .= "AND activityAssignment.contact_id = %2 ";
+      $params[2] = array($interviewerId, 'Integer');
+    }
+    $query .= "AND  activityTarget.contact_id IN {$targetContactIds}
             $whereClause";
-
-    $activity = CRM_Core_DAO::executeQuery($query, array(1 => array($surveyId, 'Integer'),
-        2 => array($interviewerId, 'Integer'),
-      ));
+    $activity = CRM_Core_DAO::executeQuery($query, $params); 
     while ($activity->fetch()) {
       $activityDetails[$activity->voter_id] = array(
         'voter_id' => $activity->voter_id,
index fdd4b67d0d68a37c4f1fe5de9c64b5ee976efe69..ff7089ff47e64a36aa06392c64d5c8551a087f04 100755 (executable)
@@ -434,17 +434,15 @@ class CRM_Campaign_Form_Search extends CRM_Core_Form {
 
   function formatParams() {
     $interviewerId = CRM_Utils_Array::value('survey_interviewer_id', $this->_formValues);
-    if (!$interviewerId) {
-      $session = CRM_Core_Session::singleton();
-      $this->_formValues['survey_interviewer_id'] = $interviewerId = $session->get('userID');
-    }
-    $this->set('interviewerId', $interviewerId);
-    if (!CRM_Utils_Array::value('survey_interviewer_name', $this->_formValues)) {
-      $this->_formValues['survey_interviewer_name'] = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact',
-        $interviewerId,
-        'sort_name',
-        'id'
-      );
+    if ($interviewerId) {
+      $this->set('interviewerId', $interviewerId);
+      if (!CRM_Utils_Array::value('survey_interviewer_name', $this->_formValues)) {
+        $this->_formValues['survey_interviewer_name'] = CRM_Core_DAO::getFieldValue('CRM_Contact_DAO_Contact',
+          $interviewerId,
+          'sort_name',
+          'id'
+        );
+      }
     }
 
     //format multi-select group and contact types.