Remove activityChangeStatus.js
[civicrm-core.git] / CRM / Case / XMLProcessor.php
index c22f4e8aa7c838c6b5a510303467945e5867d2cd..eecedd51d6e6a0fc2624fcf7c7c1a4181cbddb0e 100644 (file)
@@ -36,10 +36,10 @@ class CRM_Case_XMLProcessor {
 
   static protected $_xml;
 
+  static protected $_hookCache = NULL;
+
   function retrieve($caseType) {
-    // trim all spaces from $caseType
-    $caseType = str_replace('_', ' ', $caseType);
-    $caseType = CRM_Utils_String::munge(ucwords($caseType), '', 0);
+    $caseType = self::mungeCaseType($caseType);
 
     if (!CRM_Utils_Array::value($caseType, self::$_xml)) {
       if (!self::$_xml) {
@@ -87,6 +87,17 @@ class CRM_Case_XMLProcessor {
             )
           );
         }
+
+        if (!file_exists($fileName)) {
+          if (self::$_hookCache === NULL) {
+            self::$_hookCache = array();
+            CRM_Utils_Hook::caseTypes(self::$_hookCache);
+          }
+          if (isset(self::$_hookCache[$caseType], self::$_hookCache[$caseType]['file'])) {
+            $fileName = self::$_hookCache[$caseType]['file'];
+          }
+        }
+
         if (!file_exists($fileName)) {
           return FALSE;
         }
@@ -101,6 +112,13 @@ class CRM_Case_XMLProcessor {
     return self::$_xml[$caseType];
   }
 
+  public static function mungeCaseType($caseType) {
+    // trim all spaces from $caseType
+    $caseType = str_replace('_', ' ', $caseType);
+    $caseType = CRM_Utils_String::munge(ucwords($caseType), '', 0);
+    return $caseType;
+  }
+
   function &allActivityTypes($indexName = TRUE, $all = FALSE) {
     static $activityTypes = NULL;
     if (!$activityTypes) {