Merge remote-tracking branch 'origin/abtest' into master-abtest
[civicrm-core.git] / CRM / Case / BAO / Case.php
index 7002f030e8887d3f72ca84bae3a7369cf6bf0bc7..39823568ebe26d6af7fca940f8e40d62e7e05bed 100644 (file)
@@ -47,6 +47,9 @@ class CRM_Case_BAO_Case extends CRM_Case_DAO_Case {
    */
   static $_exportableFields = NULL;
 
+  /**
+   *
+   */
   function __construct() {
     parent::__construct();
   }
@@ -324,7 +327,7 @@ WHERE civicrm_case.id = %1";
    *
    * @param bool $moveToTrash
    *
-   * @return void
+   * @return bool is successful
    * @access public
    * @static
    */
@@ -550,6 +553,14 @@ WHERE cc.contact_id = %1 AND civicrm_case_type.name = '{$caseType}'";
     return $caseArray;
   }
 
+  /**
+   * @param string $type
+   * @param null $userID
+   * @param null $condition
+   * @param int $isDeleted
+   *
+   * @return string
+   */
   static function getCaseActivityQuery($type = 'upcoming', $userID = NULL, $condition = NULL, $isDeleted = 0) {
     if (!$userID) {
       $session = CRM_Core_Session::singleton();
@@ -1296,10 +1307,10 @@ SELECT case_status.label AS case_status, status_id, civicrm_case_type.title AS c
 
       //check for operations.
       if (self::checkPermission($dao->id, 'Move To Case', $dao->activity_type_id)) {
-        $url .= ' <a ' . $css . ' href="#" onClick="Javascript:fileOnCase( \'move\',' . $dao->id . ', ' . $caseID . ' ); return false;">' . ts('Move To Case') . '</a> ';
+        $url .= ' <a ' . $css . ' href="#" onClick="Javascript:fileOnCase( \'move\',' . $dao->id . ', ' . $caseID . ', this ); return false;">' . ts('Move To Case') . '</a> ';
       }
       if (self::checkPermission($dao->id, 'Copy To Case', $dao->activity_type_id)) {
-        $url .= ' <a ' . $css . ' href="#" onClick="Javascript:fileOnCase( \'copy\',' . $dao->id . ',' . $caseID . ' ); return false;">' . ts('Copy To Case') . '</a> ';
+        $url .= ' <a ' . $css . ' href="#" onClick="Javascript:fileOnCase( \'copy\',' . $dao->id . ',' . $caseID . ', this ); return false;">' . ts('Copy To Case') . '</a> ';
       }
       // if there are file attachments we will return how many and, if only one, add a link to it
       if (!empty($dao->attachment_ids)) {
@@ -1358,19 +1369,24 @@ SELECT case_status.label AS case_status, status_id, civicrm_case_type.title AS c
    * @param int $caseID case id
    * @param boolean $skipDetails if true include details of contacts
    *
-   * @return returns $searchRows array of returnproperties
+   * @return array $searchRows array of return properties
    *
    * @static
    */
   static function getRelatedContacts($caseID, $skipDetails = FALSE) {
     $values = array();
-    $query = 'SELECT cc.display_name as name, cc.sort_name as sort_name, cc.id, crt.label_b_a as role, ce.email
- FROM civicrm_relationship cr
- LEFT JOIN civicrm_relationship_type crt ON crt.id = cr.relationship_type_id
- LEFT JOIN civicrm_contact cc ON cc.id = cr.contact_id_b
- LEFT JOIN civicrm_email   ce ON ce.contact_id = cc.id
- WHERE cr.case_id =  %1 AND ce.is_primary= 1
- GROUP BY cc.id';
+    $query = '
+      SELECT cc.display_name as name, cc.sort_name as sort_name, cc.id, crt.label_b_a as role, ce.email
+      FROM civicrm_relationship cr
+      LEFT JOIN civicrm_relationship_type crt
+        ON crt.id = cr.relationship_type_id
+      LEFT JOIN civicrm_contact cc
+        ON cc.id = cr.contact_id_b
+      LEFT JOIN civicrm_email ce
+        ON ce.contact_id = cc.id
+        AND ce.is_primary= 1
+      WHERE cr.case_id =  %1
+      GROUP BY cc.id';
 
     $params = array(1 => array($caseID, 'Integer'));
     $dao = CRM_Core_DAO::executeQuery($query, $params);
@@ -1757,6 +1773,16 @@ SELECT case_status.label AS case_status, status_id, civicrm_case_type.title AS c
     return TRUE;
   }
 
+  /**
+   * @param $groupInfo
+   * @param null $sort
+   * @param null $showLinks
+   * @param bool $returnOnlyCount
+   * @param int $offset
+   * @param int $rowCount
+   *
+   * @return array
+   */
   static function getGlobalContacts(&$groupInfo, $sort = NULL, $showLinks = NULL, $returnOnlyCount = FALSE, $offset = 0, $rowCount = 25) {
     $globalContacts = array();
 
@@ -1793,6 +1819,11 @@ SELECT case_status.label AS case_status, status_id, civicrm_case_type.title AS c
   /*
    * Convenience function to get both case contacts and global in one array
    */
+  /**
+   * @param $caseId
+   *
+   * @return array
+   */
   static function getRelatedAndGlobalContacts($caseId) {
     $relatedContacts = self::getRelatedContacts($caseId);
 
@@ -2012,9 +2043,9 @@ SELECT civicrm_contact.id as casemanager_id,
    *
    * @return array of case and related data keyed on case id
    */
-  static function getUnclosedCases($params = array(), $excludeCaseIds = array(), $excludeDeleted = TRUE) {
+  static function getUnclosedCases($params = array(), $excludeCaseIds = array(), $excludeDeleted = TRUE, $includeClosed = FALSE) {
     //params from ajax call.
-    $where = array('( ca.end_date is null )');
+    $where = array($includeClosed ? '(1)' : '(ca.end_date is null)');
     if ($caseType = CRM_Utils_Array::value('case_type', $params)) {
       $where[] = "( civicrm_case_type.title LIKE '%$caseType%' )";
     }
@@ -2023,6 +2054,9 @@ SELECT civicrm_contact.id as casemanager_id,
       $search = ($config->includeWildCardInName) ? "%$sortName%" : "$sortName%";
       $where[] = "( sort_name LIKE '$search' )";
     }
+    if ($cid = CRM_Utils_Array::value('contact_id', $params)) {
+      $where[] = " c.id = $cid ";
+    }
     if (is_array($excludeCaseIds) &&
       !CRM_Utils_System::isNull($excludeCaseIds)
     ) {
@@ -2053,15 +2087,19 @@ SELECT civicrm_contact.id as casemanager_id,
             ca.id,
             ca.subject as case_subject,
             civicrm_case_type.title as case_type,
-            ca.start_date as start_date
+            ca.start_date as start_date,
+            ca.end_date as end_date,
+            ca.status_id
       FROM  civicrm_case ca INNER JOIN civicrm_case_contact cc ON ca.id=cc.case_id
  INNER JOIN  civicrm_contact c ON cc.contact_id=c.id
  INNER JOIN  civicrm_case_type ON ca.case_type_id = civicrm_case_type.id
      WHERE  {$whereClause}
-  ORDER BY  c.sort_name
+  ORDER BY  c.sort_name, ca.end_date
             {$limitClause}
 ";
     $dao = CRM_Core_DAO::executeQuery($query);
+    $statuses = CRM_Case_BAO_Case::buildOptions('status_id', 'create');
+
     $unclosedCases = array();
     while ($dao->fetch()) {
       if ($doFilterCases && !array_key_exists($dao->id, $filterCases)) {
@@ -2072,7 +2110,9 @@ SELECT civicrm_contact.id as casemanager_id,
         'case_type' => $dao->case_type,
         'contact_id' => $dao->contact_id,
         'start_date' => $dao->start_date,
+        'end_date' => $dao->end_date,
         'case_subject' => $dao->case_subject,
+        'case_status' => $statuses[$dao->status_id],
       );
     }
     $dao->free();
@@ -2080,6 +2120,12 @@ SELECT civicrm_contact.id as casemanager_id,
     return $unclosedCases;
   }
 
+  /**
+   * @param null $contactId
+   * @param bool $excludeDeleted
+   *
+   * @return null|string
+   */
   static function caseCount($contactId = NULL, $excludeDeleted = TRUE) {
     $whereConditions = array();
     if ($excludeDeleted) {
@@ -2289,7 +2335,7 @@ INNER JOIN  civicrm_case_contact ON ( civicrm_case.id = civicrm_case_contact.cas
    *
    * @param bool $changeClient
    *
-   * @return void.
+   * @return integer|NULL
    * @static
    */
   static function mergeCases($mainContactId, $mainCaseId = NULL, $otherContactId = NULL,