From f5911ac41443fe43da043f3d49fc69de0cb552b0 Mon Sep 17 00:00:00 2001
From: Jaap Jansma <jaap@edeveloper.nl>
Date: Tue, 27 Sep 2016 15:50:23 +0200
Subject: [PATCH] update case type condition was not compatible with civi 4.4

---
 .../Case/Form/SetDateField.php                |  3 +--
 .../Case/SetDateFieldOnCase.php               | 11 ++++----
 CRM/CivirulesConditions/Case/CaseType.php     | 27 +++++++++++++++----
 .../Form/Case/CaseType.php                    |  7 +----
 4 files changed, 30 insertions(+), 18 deletions(-)

diff --git a/CRM/CivirulesActions/Case/Form/SetDateField.php b/CRM/CivirulesActions/Case/Form/SetDateField.php
index 27b1168..6093f5c 100644
--- a/CRM/CivirulesActions/Case/Form/SetDateField.php
+++ b/CRM/CivirulesActions/Case/Form/SetDateField.php
@@ -35,12 +35,11 @@ class CRM_CivirulesActions_Case_Form_SetDateField extends CRM_CivirulesActions_F
    */
   public function setDefaultValues() {
     $defaultValues = parent::setDefaultValues();
-
+    $data = unserialize($this->ruleAction->action_params);
     if (!empty($data['field'])) {
       $defaultValues['field'] = $data['field'];
     }
 
-    $data = unserialize($this->ruleAction->action_params);
     foreach(CRM_Civirules_Delay_Factory::getAllDelayClasses() as $delay_class) {
       $delay_class->setDefaultValues($defaultValues, 'date', $this->rule);
     }
diff --git a/CRM/CivirulesActions/Case/SetDateFieldOnCase.php b/CRM/CivirulesActions/Case/SetDateFieldOnCase.php
index dc07d7b..61f60a6 100644
--- a/CRM/CivirulesActions/Case/SetDateFieldOnCase.php
+++ b/CRM/CivirulesActions/Case/SetDateFieldOnCase.php
@@ -29,15 +29,16 @@ class CRM_CivirulesActions_Case_SetDateFieldOnCase extends CRM_Civirules_Action
 
     if ($isCustomField) {
       if ($date instanceof DateTime) {
-        $params[$field] = $date->format('Ymd His');
+        $params[$field] = $date->format('Ymd');
         $params['entity_id'] = $case['id'];
-        civicrm_api('CustomValue', 'create', $params);
+        civicrm_api3('CustomValue', 'create', $params);
       }
-    } else {
+    }
+    else {
       if ($date instanceof DateTime) {
-        $params[$field] = $date->format('Ymd His');
+        $params[$field] = $date->format('Ymd');
         $params['id'] = $case['id'];
-        civicrm_api('Case', 'create', $params);
+        civicrm_api3('Case', 'create', $params);
       }
     }
   }
diff --git a/CRM/CivirulesConditions/Case/CaseType.php b/CRM/CivirulesConditions/Case/CaseType.php
index 98a7ba4..a2b1655 100644
--- a/CRM/CivirulesConditions/Case/CaseType.php
+++ b/CRM/CivirulesConditions/Case/CaseType.php
@@ -66,7 +66,7 @@ class CRM_CivirulesConditions_Case_CaseType extends CRM_Civirules_Condition {
    */
   public function userFriendlyConditionParams() {
     try {
-      $caseTypes = civicrm_api3('CaseType', 'Get', array('is_active' => 1));
+      $caseTypes = self::getCaseTypes();
       $operator = null;
       if ($this->conditionParams['operator'] == 0) {
         $operator = 'equals';
@@ -74,15 +74,32 @@ class CRM_CivirulesConditions_Case_CaseType extends CRM_Civirules_Condition {
       if ($this->conditionParams['operator'] == 1) {
         $operator = 'is not equal to';
       }
-      foreach ($caseTypes['values'] as $caseType) {
-        if ($caseType['id'] == $this->conditionParams['case_type_id']) {
-          return "Case Type ".$operator." ".$caseType['title'];
-        }
+      $case_type_id = $this->conditionParams['case_type_id'];
+      if (isset($caseTypes[$case_type_id])) {
+        return "Case Type ".$operator." ".$caseTypes[$case_type_id];
       }
     } catch (CiviCRM_API3_Exception $ex) {}
     return '';
   }
 
+  public static function getCaseTypes() {
+    $return = array();
+    $version = CRM_Core_BAO_Domain::version();
+    if (version_compare($version, '4.5', '<')) {
+      $option_group_id = civicrm_api3('OptionGroup', 'getvalue', array('return' => 'id', 'name' => 'case_type'));
+      $caseTypes = civicrm_api3('OptionValue', 'Get', array('option_group_id' => $option_group_id));
+      foreach ($caseTypes['values'] as $caseType) {
+        $return[$caseType['value']] = $caseType['label'];
+      }
+    } else {
+      $caseTypes = civicrm_api3('CaseType', 'Get', array('is_active' => 1));
+      foreach ($caseTypes['values'] as $caseType) {
+        $return[$caseType['id']] = $caseType['title'];
+      }
+    }
+    return $return;
+  }
+
   /**
    * Returns an array with required entity names
    *
diff --git a/CRM/CivirulesConditions/Form/Case/CaseType.php b/CRM/CivirulesConditions/Form/Case/CaseType.php
index d4b9f66..edfb5a5 100644
--- a/CRM/CivirulesConditions/Form/Case/CaseType.php
+++ b/CRM/CivirulesConditions/Form/Case/CaseType.php
@@ -4,12 +4,7 @@
 class CRM_CivirulesConditions_Form_Case_CaseType extends CRM_CivirulesConditions_Form_Form {
 
   protected function getCaseTypes() {
-    $caseTypes = civicrm_api3('CaseType', 'Get', array('is_active' => 1));
-    $return = array();
-    foreach($caseTypes['values'] as $caseType) {
-      $return[$caseType['id']] = $caseType['title'];
-    }
-    return $return;
+    return CRM_CivirulesConditions_Case_CaseType::getCaseTypes();
   }
 
   /**
-- 
GitLab