/**
  * Trigger a rule for this trigger
  *
  * @param $op
  * @param $objectName
  * @param $objectId
  * @param $objectRef
  */
 public function triggerTrigger($op, $objectName, $objectId, $objectRef)
 {
     $t = $this->getTriggerDataFromPost($op, $objectName, $objectId, $objectRef);
     //trigger for each client
     $clients = CRM_Case_BAO_Case::getCaseClients($objectId);
     foreach ($clients as $client) {
         $triggerData = clone $t;
         $triggerData->setEntityData('Relationship', null);
         $triggerData->setContactId($client);
         CRM_Civirules_Engine::triggerRule($this, $triggerData);
     }
     //trigger for each case role
     $relatedContacts = CRM_Case_BAO_Case::getRelatedContacts($objectId);
     foreach ($relatedContacts as $contact) {
         $triggerData = clone $t;
         $relationshipData = null;
         $relationship = new CRM_Contact_BAO_Relationship();
         $relationship->contact_id_b = $contact['contact_id'];
         $relationship->case_id = $objectId;
         if ($relationship->find(true)) {
             CRM_Core_DAO::storeValues($relationship, $relationshipData);
         }
         $triggerData->setEntityData('Relationship', $relationshipData);
         $triggerData->setContactId($contact['contact_id']);
         CRM_Civirules_Engine::triggerRule($this, $triggerData);
     }
 }
/**
 * Internal function to retrieve a case.
 *
 * @param int $caseId
 *
 * @return array (reference) case object
 *
 */
function _civicrm_api3_case_read($caseId, $options)
{
    $return = CRM_Utils_Array::value('return', $options, array());
    $dao = new CRM_Case_BAO_Case();
    $dao->id = $caseId;
    if ($dao->find(TRUE)) {
        $case = array();
        _civicrm_api3_object_to_array($dao, $case);
        // Legacy support for client_id - TODO: in apiv4 remove 'client_id'
        $case['client_id'] = $case['contact_id'] = $dao->retrieveContactIdsByCaseId($caseId);
        //handle multi-value case type
        $sep = CRM_Core_DAO::VALUE_SEPARATOR;
        $case['case_type_id'] = trim(str_replace($sep, ',', $case['case_type_id']), ',');
        if (!empty($return['contacts'])) {
            //get case contacts
            $contacts = CRM_Case_BAO_Case::getcontactNames($caseId);
            $relations = CRM_Case_BAO_Case::getRelatedContacts($caseId);
            $case['contacts'] = array_merge($contacts, $relations);
        }
        if (!empty($return['activities'])) {
            //get case activities
            $case['activities'] = array();
            $query = "SELECT activity_id FROM civicrm_case_activity WHERE case_id = {$caseId}";
            $dao = CRM_Core_DAO::executeQuery($query);
            while ($dao->fetch()) {
                $case['activities'][] = $dao->activity_id;
            }
        }
        return $case;
    }
}
Exemple #3
0
/**
 * Augment a case with extra data.
 *
 * @param array $case
 * @param array $options
 */
function _civicrm_api3_case_read(&$case, $options)
{
    if (empty($options['return']) || !empty($options['return']['contact_id'])) {
        // Legacy support for client_id - TODO: in apiv4 remove 'client_id'
        $case['client_id'] = $case['contact_id'] = CRM_Case_BAO_Case::retrieveContactIdsByCaseId($case['id']);
    }
    if (!empty($options['return']['contacts'])) {
        //get case contacts
        $contacts = CRM_Case_BAO_Case::getcontactNames($case['id']);
        $relations = CRM_Case_BAO_Case::getRelatedContacts($case['id']);
        $case['contacts'] = array_merge($contacts, $relations);
    }
    if (!empty($options['return']['activities'])) {
        //get case activities
        $case['activities'] = array();
        $query = "SELECT activity_id FROM civicrm_case_activity WHERE case_id = %1";
        $dao = CRM_Core_DAO::executeQuery($query, array(1 => array($case['id'], 'Integer')));
        while ($dao->fetch()) {
            $case['activities'][] = $dao->activity_id;
        }
    }
}
Exemple #4
0
/**
 * Internal function to retrieve a case.
 *
 * @param int $caseId
 *
 * @param array $options
 *
 * @param bool $checkPermission
 *
 * @return array
 *   case object
 */
function _civicrm_api3_case_read($caseId, $options, $checkPermission)
{
    $return = CRM_Utils_Array::value('return', $options, array());
    $dao = new CRM_Case_BAO_Case();
    $dao->id = $caseId;
    if ($dao->find(TRUE)) {
        $case = array();
        _civicrm_api3_object_to_array($dao, $case);
        _civicrm_api3_custom_data_get($case, $checkPermission, 'Case', $caseId);
        // Legacy support for client_id - TODO: in apiv4 remove 'client_id'
        $case['client_id'] = $case['contact_id'] = $dao->retrieveContactIdsByCaseId($caseId);
        if (!empty($return['contacts'])) {
            //get case contacts
            $contacts = CRM_Case_BAO_Case::getcontactNames($caseId);
            $relations = CRM_Case_BAO_Case::getRelatedContacts($caseId);
            $case['contacts'] = array_merge($contacts, $relations);
        }
        if (!empty($return['activities'])) {
            //get case activities
            $case['activities'] = array();
            $query = "SELECT activity_id FROM civicrm_case_activity WHERE case_id = {$caseId}";
            $dao = CRM_Core_DAO::executeQuery($query);
            while ($dao->fetch()) {
                $case['activities'][] = $dao->activity_id;
            }
        }
        return $case;
    }
}
/**
* Get details of a particular case, or search for cases, depending on params
*
* Please provide one (and only one) of the four get/search parameters:
*
* @param array(
   'case_id'    => if set, will get all available info about a case, including contacts and activities
*
* // if no case_id provided, this function will use one of the following search parameters:
* 'client_id'   => finds all cases with a specific client
* 'activity_id' => returns the case containing a specific activity
* 'contact_id'  => finds all cases associated with a contact (in any role, not just client)
*
* {@getfields case_get}
*
* @return (get mode, case_id provided): Array with case details, case roles, case activity ids, (search mode, case_id not provided): Array of cases found
* @access public
* @todo Eileen McNaughton 13 Oct 2011 No unit test
* @todo Erik Hommel 16 dec 2010 check if all DB fields are returned
*/
function civicrm_api3_case_get($params)
{
    // Get mode
    if (!($caseId = CRM_Utils_Array::value('id', $params))) {
        $caseId = CRM_Utils_Array::value('case_id', $params);
    }
    if ($caseId) {
        // Validate param
        if (!is_numeric($caseId)) {
            return civicrm_api3_create_error('Invalid parameter: case_id. Must provide a numeric value.');
        }
        $case = _civicrm_api3_case_read($caseId);
        if ($case) {
            //get case contacts
            $contacts = CRM_Case_BAO_Case::getcontactNames($caseId);
            $relations = CRM_Case_BAO_Case::getRelatedContacts($caseId);
            $case['contacts'] = array_merge($contacts, $relations);
            //get case activities
            $query = "SELECT activity_id FROM civicrm_case_activity WHERE case_id = {$caseId}";
            $dao = CRM_Core_DAO::executeQuery($query);
            $case['activities'] = array();
            while ($dao->fetch()) {
                $case['activities'][] = $dao->activity_id;
            }
            $cases = array($caseId => $case);
            return civicrm_api3_create_success($cases);
        } else {
            return civicrm_api3_create_success(array());
        }
    }
    //search by client
    if ($client = CRM_Utils_Array::value('client_id', $params)) {
        $ids = array();
        foreach ((array) $client as $cid) {
            if (is_numeric($cid)) {
                $ids = array_merge($ids, CRM_Case_BAO_Case::retrieveCaseIdsByContactId($cid, TRUE));
            }
        }
        if (empty($ids)) {
            return civicrm_api3_create_success(array());
        }
        $cases = array();
        foreach ($ids as $id) {
            $cases[$id] = _civicrm_api3_case_read($id);
        }
        return civicrm_api3_create_success($cases);
    }
    //search by activity
    if ($act = CRM_Utils_Array::value('activity_id', $params)) {
        if (!is_numeric($act)) {
            return civicrm_api3_create_error('Invalid parameter: activity_id. Must provide a numeric value.');
        }
        $caseId = CRM_Case_BAO_Case::getCaseIdByActivityId($act);
        if (!$caseId) {
            return civicrm_api3_create_success(array());
        }
        $case = array($caseId => _civicrm_api3_case_read($caseId));
        return civicrm_api3_create_success($case);
    }
    //search by contacts
    if ($contact = CRM_Utils_Array::value('contact_id', $params)) {
        if (!is_numeric($contact)) {
            return civicrm_api3_create_error('Invalid parameter: contact_id.  Must provide a numeric value.');
        }
        $sql = "\nSELECT DISTINCT case_id\n  FROM civicrm_relationship\n WHERE (contact_id_a = {$contact}\n    OR contact_id_b = {$contact})\n   AND case_id IS NOT NULL";
        $dao =& CRM_Core_DAO::executeQuery($sql);
        $cases = array();
        while ($dao->fetch()) {
            $cases[$dao->case_id] = _civicrm_api3_case_read($dao->case_id);
        }
        return civicrm_api3_create_success($cases);
    }
    return civicrm_api3_create_error('Missing required parameter. Must provide case_id, client_id, activity_id, or contact_id.');
}