CRM-14798 - Allow loading CiviCase XML files even if case-type name is malformed
authorTim Otten <totten@civicrm.org>
Tue, 12 Aug 2014 03:52:11 +0000 (20:52 -0700)
committerTim Otten <totten@civicrm.org>
Tue, 12 Aug 2014 03:52:11 +0000 (20:52 -0700)
For case-types registered via GUI in old (pre-4.5) versions, the
autogenerated machine names were often ucky, and there was no way to clean
them up.  We'll allow backward-compatibility in 4.5 -- and also provide
warnings/tools to facilitate cleanup.

CRM/Case/BAO/CaseType.php
CRM/Case/XMLRepository.php

index ff2979ead13003cbdcb40b2193a0936a53e9d17d..4b33515613a3b884266bf16b37c9c96ccc7573e8 100644 (file)
@@ -70,8 +70,10 @@ class CRM_Case_BAO_CaseType extends CRM_Case_DAO_CaseType {
     if (!$nameParam && empty($params['id'])) {
       $params['name'] = CRM_Utils_String::titleToVar($params['title']);
     }
-    if (!empty($params['name']) && !CRM_Case_BAO_CaseType::isValidName($params['name'])) {
-      throw new CRM_Core_Exception("Cannot create caseType with malformed name [{$params['name']}]");
+
+    // Old case-types (pre-4.5) may keep their ucky names, but new case-types must satisfy isValidName()
+    if (empty($params['id']) && !empty($params['name']) && !CRM_Case_BAO_CaseType::isValidName($params['name'])) {
+      throw new CRM_Core_Exception("Cannot create new case-type with malformed name [{$params['name']}]");
     }
 
     // function to format definition column
index 5193f468c6ea024a317c58006e90ceec38333478..8560e022c6c0730e25637df6e38973e186181507 100644 (file)
@@ -84,16 +84,21 @@ class CRM_Case_XMLRepository {
       return simplexml_load_string($definition);
     }
 
-    if (!CRM_Case_BAO_CaseType::isValidName($caseType)) {
-      // perhaps caller provider a the label instead of the name?
-      throw new CRM_Core_Exception("Cannot load caseType with malformed name [$caseType]");
-    }
+    // TODO In 4.6 or 5.0, remove support for weird machine-names
+    //if (!CRM_Case_BAO_CaseType::isValidName($caseType)) {
+    //  // perhaps caller provider a the label instead of the name?
+    //  throw new CRM_Core_Exception("Cannot load caseType with malformed name [$caseType]");
+    //}
 
     if (!CRM_Utils_Array::value($caseType, $this->xml)) {
-      // Search for a file based directly on the $caseType name
-      $fileName = $this->findXmlFile($caseType);
+      $fileName = NULL;
+
+      if (CRM_Case_BAO_CaseType::isValidName($caseType)) {
+        // Search for a file based directly on the $caseType name
+        $fileName = $this->findXmlFile($caseType);
+      }
 
-      // For backward compatibility, also search for double-mungd file names
+      // For backward compatibility, also search for double-munged file names
       // TODO In 4.6 or 5.0, remove support for loading double-munged file names
       if (!$fileName || !file_exists($fileName)) {
         $fileName = $this->findXmlFile(CRM_Case_XMLProcessor::mungeCaseType($caseType));