CRM-14476 - CRM_Case_BAO_CaseType - In array-based definition, represent true boolean...
authorTim Otten <totten@civicrm.org>
Tue, 3 Jun 2014 04:04:47 +0000 (21:04 -0700)
committerTim Otten <totten@civicrm.org>
Tue, 3 Jun 2014 06:19:12 +0000 (23:19 -0700)
CRM/Case/BAO/CaseType.php
tests/phpunit/CRM/Case/BAO/CaseTypeTest.php

index 6fea8d02f46e18215cbe3fcde72b881c9763f137..2fef389b8bc3056dc8428e25ee8635da4ac06b40 100644 (file)
@@ -108,21 +108,28 @@ class CRM_Case_BAO_CaseType extends CRM_Case_DAO_CaseType {
       foreach ($definition['activitySets'] as $k => $val) {
         $xmlFile .= "<ActivitySet>\n";
         foreach ($val as $index => $setVal) {
-          if ($index == 'activityTypes') {
-            if (!empty($setVal)) {
-              $xmlFile .= "<ActivityTypes>\n";
-              foreach ($setVal as $values) {
-                $xmlFile .= "<ActivityType>\n";
-                foreach ($values as $key => $value) {
-                  $xmlFile .= "<{$key}>{$value}</{$key}>\n";
+          switch ($index) {
+            case 'activityTypes':
+              if (!empty($setVal)) {
+                $xmlFile .= "<ActivityTypes>\n";
+                foreach ($setVal as $values) {
+                  $xmlFile .= "<ActivityType>\n";
+                  foreach ($values as $key => $value) {
+                    $xmlFile .= "<{$key}>{$value}</{$key}>\n";
+                  }
+                  $xmlFile .= "</ActivityType>\n";
                 }
-                $xmlFile .= "</ActivityType>\n";
+                $xmlFile .= "</ActivityTypes>\n";
               }
-              $xmlFile .= "</ActivityTypes>\n";
-            }
-          }
-          else {
-            $xmlFile .= "<{$index}>{$setVal}</{$index}>\n";
+              break;
+            case 'sequence': // passthrough
+            case 'timeline':
+              if ($setVal) {
+                $xmlFile .= "<{$index}>true</{$index}>\n";
+              }
+              break;
+            default:
+              $xmlFile .= "<{$index}>{$setVal}</{$index}>\n";
           }
         }
 
@@ -173,10 +180,16 @@ class CRM_Case_BAO_CaseType extends CRM_Case_DAO_CaseType {
       $definition['activitySets'] = array();
       foreach ($xml->ActivitySets->ActivitySet as $activitySetXML) {
         // parse basic properties
-        $activitySet = json_decode(json_encode($activitySetXML), TRUE);
-        unset($activitySet['ActivityTypes']); // not parsed reliably (eg single-tag vs multi-tag)
+        $activitySet = array();
+        $activitySet['name'] = (string) $activitySetXML->name;
+        $activitySet['label'] = (string) $activitySetXML->label;
+        if ('true' == (string) $activitySetXML->timeline) {
+          $activitySet['timeline'] = 1;
+        }
+        if ('true' == (string) $activitySetXML->sequence) {
+          $activitySet['sequence'] = 1;
+        }
 
-        // parse activity-types
         if (isset($activitySetXML->ActivityTypes)) {
           $activitySet['activityTypes'] = array();
           foreach ($activitySetXML->ActivityTypes->ActivityType as $activityTypeXML) {
index d26c9ddd326ee6a02f825e408f41143f812343d1..aceffd46903b5879ba9e22dc1454b1803538020f 100644 (file)
@@ -47,7 +47,7 @@ class CRM_Case_BAO_CaseTypeTest extends CiviUnitTestCase {
           array(
             'name' => 'set1',
             'label' => 'Label 1',
-            'timeline' => 'true',
+            'timeline' => 1,
             'activityTypes' => array(
               array('name' => 'Open Case', 'status' => 'Completed'),
             ),
@@ -99,7 +99,7 @@ class CRM_Case_BAO_CaseTypeTest extends CiviUnitTestCase {
           array(
             'name' => 'set1',
             'label' => 'Label 1',
-            'timeline' => 'true',
+            'timeline' => 1,
             'activityTypes' => array(
               array('name' => 'Open Case', 'status' => 'Completed'),
               array(
@@ -113,7 +113,7 @@ class CRM_Case_BAO_CaseTypeTest extends CiviUnitTestCase {
           array(
             'name' => 'set2',
             'label' => 'Label 2',
-            'sequence' => 'true',
+            'sequence' => 1,
             'activityTypes' => array(
               array('name' => 'First act'),
               array('name' => 'Second act'),