CRM_Case_XMLRepository -- Add getAllDeclaredActivityTypes() & getAllDeclaredRelations...
authorTim Otten <totten@civicrm.org>
Sat, 24 May 2014 00:08:25 +0000 (17:08 -0700)
committerTim Otten <totten@civicrm.org>
Mon, 26 May 2014 20:04:27 +0000 (13:04 -0700)
CRM/Case/XMLRepository.php
tests/phpunit/CRM/Case/XMLRepositoryTest.php

index 0214254bef118b4a275bb291bd83c29468ab084f..698393eb569bed467b366c9a62f7eb0ca742369c 100644 (file)
@@ -32,6 +32,8 @@
  * $Id$
  *
  * The XMLRepository is responsible for loading XML for case-types.
+ * It includes any bulk operations that apply across the list of all XML
+ * documents of all case-types.
  */
 class CRM_Case_XMLRepository {
   private static $singleton;
@@ -165,6 +167,40 @@ class CRM_Case_XMLRepository {
     return $this->allCaseTypes;
   }
 
+  /**
+   * @return array<string> symbolic-names of activity-types
+   */
+  public function getAllDeclaredActivityTypes() {
+    $result = array();
+
+    $p = new CRM_Case_XMLProcessor_Process();
+    foreach ($this->getAllCaseTypes() as $caseTypeName) {
+      $caseTypeXML = $this->retrieve($caseTypeName);
+      $result = array_merge($result, $p->getDeclaredActivityTypes($caseTypeXML));
+    }
+
+    $result = array_unique($result);
+    sort($result);
+    return $result;
+  }
+
+  /**
+   * @return array<string> symbolic-names of relationship-types
+   */
+  public function getAllDeclaredRelationshipTypes() {
+    $result = array();
+
+    $p = new CRM_Case_XMLProcessor_Process();
+    foreach ($this->getAllCaseTypes() as $caseTypeName) {
+      $caseTypeXML = $this->retrieve($caseTypeName);
+      $result = array_merge($result, $p->getDeclaredRelationshipTypes($caseTypeXML));
+    }
+
+    $result = array_unique($result);
+    sort($result);
+    return $result;
+  }
+
   /**
    * Determine the number of times a particular activity-type is
    * referenced in CiviCase XML.
index be2a6d9d66a070b079a7d934c656d3f6a4254d9a..cde2164f4b1d2e736f0f90a17cf0934eef8b36fe 100644 (file)
@@ -97,12 +97,45 @@ class CRM_Case_XMLRepositoryTest extends CiviUnitTestCase {
 
   }
 
+  function testGetAllDeclaredActivityTypes() {
+    $repo = new CRM_Case_XMLRepository(
+      array('CaseTypeWithTwoActivityTypes', 'CaseTypeWithThreeActivityTypes'),
+      array(
+        'CaseTypeWithTwoActivityTypes' => new SimpleXMLElement($this->fixtures['CaseTypeWithTwoActivityTypes']),
+        'CaseTypeWithThreeActivityTypes' => new SimpleXMLElement($this->fixtures['CaseTypeWithThreeActivityTypes']),
+        /* healthful noise: */
+        'CaseTypeWithSingleRole' => new SimpleXMLElement($this->fixtures['CaseTypeWithSingleRole']),
+      )
+    );
+
+    // omitted: 'Single Activity Type'
+    $expected = array('First Activity Type', 'Second Activity Type', 'Third Activity Type');
+    $actual = $repo->getAllDeclaredActivityTypes();
+    $this->assertEquals($expected, $actual);
+  }
+
+  function testGetAllDeclaredRelationshipTypes() {
+    $repo = new CRM_Case_XMLRepository(
+      array('CaseTypeWithTwoRoles', 'CaseTypeWithThreeRoles', 'CaseTypeWithSingleActivityType'),
+      array(
+        'CaseTypeWithTwoRoles' => new SimpleXMLElement($this->fixtures['CaseTypeWithTwoRoles']),
+        'CaseTypeWithThreeRoles' => new SimpleXMLElement($this->fixtures['CaseTypeWithThreeRoles']),
+        /* healthful noise: */
+        'CaseTypeWithSingleActivityType' => new SimpleXMLElement($this->fixtures['CaseTypeWithSingleActivityType']),
+      )
+    );
+    // omitted: 'Single Role'
+    $expected = array('First Role', 'Second Role', 'Third Role');
+    $actual = $repo->getAllDeclaredRelationshipTypes();
+    $this->assertEquals($expected, $actual);
+  }
+
   function testGetActivityReferenceCount_1() {
     $repo = new CRM_Case_XMLRepository(
       array('CaseTypeWithSingleActivityType'),
       array(
         'CaseTypeWithSingleActivityType' => new SimpleXMLElement($this->fixtures['CaseTypeWithSingleActivityType']),
-        /* noise: */
+        /* healthful noise: */
         'CaseTypeWithSingleRole' => new SimpleXMLElement($this->fixtures['CaseTypeWithSingleRole']),
       )
     );
@@ -135,7 +168,7 @@ class CRM_Case_XMLRepositoryTest extends CiviUnitTestCase {
       array('CaseTypeWithSingleRole', 'CaseTypeWithSingleActivityType'),
       array(
         'CaseTypeWithSingleRole' => new SimpleXMLElement($this->fixtures['CaseTypeWithSingleRole']),
-        /* noise: */
+        /* healthful noise: */
         'CaseTypeWithSingleActivityType' => new SimpleXMLElement($this->fixtures['CaseTypeWithSingleActivityType']),
       )
     );
@@ -152,7 +185,7 @@ class CRM_Case_XMLRepositoryTest extends CiviUnitTestCase {
       array(
         'CaseTypeWithTwoRoles' => new SimpleXMLElement($this->fixtures['CaseTypeWithTwoRoles']),
         'CaseTypeWithThreeRoles' => new SimpleXMLElement($this->fixtures['CaseTypeWithThreeRoles']),
-        /* noise: */
+        /* healthful noise: */
         'CaseTypeWithSingleActivityType' => new SimpleXMLElement($this->fixtures['CaseTypeWithSingleActivityType']),
       )
     );