Merge pull request #7608 from colemanw/CRM-16353
[civicrm-core.git] / CRM / Case / ManagedEntities.php
CommitLineData
32e74b94
TO
1<?php
2
cd5823ae
EM
3/**
4 * Class CRM_Case_ManagedEntities
5 */
32e74b94
TO
6class CRM_Case_ManagedEntities {
7
8 /**
9 * Get a list of managed-entities representing auto-generated case-types
10 * using hook_civicrm_caseTypes.
11 *
12 * @return array
13 * @see CRM_Utils_Hook::managed
14 * @throws CRM_Core_Exception
15 */
16 public static function createManagedCaseTypes() {
17 $entities = array();
18
19 // Use hook_civicrm_caseTypes to build a list of OptionValues
20 // In the long run, we may want more specialized logic for this, but
21 // this design is fairly convenient and will allow us to replace it
22 // without changing the hook_civicrm_caseTypes interface.
23
24 $caseTypes = array();
25 CRM_Utils_Hook::caseTypes($caseTypes);
26
27 $proc = new CRM_Case_XMLProcessor();
28 foreach ($caseTypes as $name => $caseType) {
29 $xml = $proc->retrieve($name);
30 if (!$xml) {
31 throw new CRM_Core_Exception("Failed to load XML for case type (" . $name . ")");
32 }
33
34 if (isset($caseType['module'], $caseType['name'], $caseType['file'])) {
35 $entities[] = array(
36 'module' => $caseType['module'],
37 'name' => $caseType['name'],
38 'entity' => 'CaseType',
39 'params' => array(
40 'version' => 3,
41 'name' => $caseType['name'],
42 'title' => (string) $xml->name,
43 'description' => (string) $xml->description,
44 'is_reserved' => 1,
45 'is_active' => 1,
46 'weight' => $xml->weight ? $xml->weight : 1,
47 ),
48 );
49 }
50 else {
51 throw new CRM_Core_Exception("Invalid case type");
52 }
53 }
54 return $entities;
55 }
56
57 /**
3bdf1f3a 58 * Get a list of managed activity-types by searching CiviCase XML files.
59 *
60 * @param \CRM_Case_XMLRepository $xmlRepo
61 * @param \CRM_Core_ManagedEntities $me
32e74b94
TO
62 *
63 * @return array
64 * @see CRM_Utils_Hook::managed
32e74b94
TO
65 */
66 public static function createManagedActivityTypes(CRM_Case_XMLRepository $xmlRepo, CRM_Core_ManagedEntities $me) {
67 $result = array();
68 $validActTypes = CRM_Core_PseudoConstant::activityType(TRUE, TRUE, TRUE, 'name');
69
70 $actTypes = $xmlRepo->getAllDeclaredActivityTypes();
71 foreach ($actTypes as $actType) {
72 $managed = array(
73 'module' => 'civicrm',
74 'name' => "civicase:act:$actType",
75 'entity' => 'OptionValue',
76 'update' => 'never',
77 'cleanup' => 'unused',
78 'params' => array(
79 'version' => 3,
80 'option_group_id' => 'activity_type',
81 'label' => $actType,
82 'name' => $actType,
83 'description' => $actType,
84 'component_id' => 'CiviCase',
21dfd5f5 85 ),
32e74b94
TO
86 );
87
88 // We'll create managed-entity if this record doesn't exist yet
89 // or if we previously decided to manage this record.
90 if (!in_array($actType, $validActTypes)) {
91 $result[] = $managed;
92 }
93 elseif ($me->get($managed['module'], $managed['name'])) {
94 $result[] = $managed;
95 }
96 }
97
98 return $result;
99 }
100
101 /**
ad37ac8e 102 * Get a list of managed relationship-types by searching CiviCase XML files.
103 *
104 * @param \CRM_Case_XMLRepository $xmlRepo
105 * @param \CRM_Core_ManagedEntities $me
32e74b94
TO
106 *
107 * @return array
108 * @see CRM_Utils_Hook::managed
32e74b94
TO
109 */
110 public static function createManagedRelationshipTypes(CRM_Case_XMLRepository $xmlRepo, CRM_Core_ManagedEntities $me) {
111 $result = array();
112
113 $p = new CRM_Case_XMLProcessor();
114 $validRelTypes = $p->allRelationshipTypes();
115
116 $relTypes = $xmlRepo->getAllDeclaredRelationshipTypes();
117 foreach ($relTypes as $relType) {
118 $managed = array(
119 'module' => 'civicrm',
120 'name' => "civicase:rel:$relType",
121 'entity' => 'RelationshipType',
122 'update' => 'never',
123 'cleanup' => 'unused',
124 'params' => array(
125 'version' => 3,
126 'name_a_b' => "$relType is",
127 'name_b_a' => $relType,
128 'label_a_b' => "$relType is",
129 'label_b_a' => $relType,
130 'description' => $relType,
131 'contact_type_a' => 'Individual',
132 'contact_type_b' => 'Individual',
133 'contact_sub_type_a' => NULL,
134 'contact_sub_type_b' => NULL,
21dfd5f5 135 ),
32e74b94
TO
136 );
137
138 // We'll create managed-entity if this record doesn't exist yet
139 // or if we previously decided to manage this record.
140 if (!in_array($relType, $validRelTypes)) {
141 $result[] = $managed;
142 }
143 elseif ($me->get($managed['module'], $managed['name'])) {
144 $result[] = $managed;
145 }
146 }
147
148 return $result;
149 }
96025800 150
ef10e0b5 151}