From 168f458e6e4c9758013b5b504dcc641365383d2f Mon Sep 17 00:00:00 2001 From: Tim Otten Date: Fri, 23 May 2014 15:11:53 -0700 Subject: [PATCH] CRM-14478 - Count references to activity-types and relationship-types in CiviCase XML --- CRM/Case/Info.php | 35 +++++++++++++++++++++++++++++++++++ CRM/Case/XMLProcessor.php | 12 +++++++++++- 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/CRM/Case/Info.php b/CRM/Case/Info.php index 3f191b04f1..842a3b5669 100644 --- a/CRM/Case/Info.php +++ b/CRM/Case/Info.php @@ -128,6 +128,41 @@ class CRM_Case_Info extends CRM_Core_Component_Info { ); } + /** + * {@inheritdoc} + */ + public function getReferenceCounts($dao) { + $result = array(); + if ($dao instanceof CRM_Core_DAO_OptionValue) { + /** @var $dao CRM_Core_DAO_OptionValue */ + $activity_type_gid = CRM_Core_DAO::getFieldValue('CRM_Core_DAO_OptionGroup', 'activity_type', 'id', 'name'); + if ($activity_type_gid == $dao->option_group_id) { + $count = CRM_Case_XMLRepository::singleton() + ->getActivityReferenceCount($dao->name); + if ($count > 0) { + $result[] = array( + 'name' => 'casetypexml:activities', + 'type' => 'casetypexml', + 'count' => $count, + ); + } + } + } + elseif ($dao instanceof CRM_Contact_DAO_RelationshipType) { + /** @var $dao CRM_Contact_DAO_RelationshipType */ + $count = CRM_Case_XMLRepository::singleton() + ->getRelationshipReferenceCount($dao->{CRM_Case_XMLProcessor::REL_TYPE_CNAME}); + if ($count > 0) { + $result[] = array( + 'name' => 'casetypexml:relationships', + 'type' => 'casetypexml', + 'count' => $count, + ); + } + } + return $result; + } + // docs inherited from interface public function getUserDashboardElement() { return array(); diff --git a/CRM/Case/XMLProcessor.php b/CRM/Case/XMLProcessor.php index 30968014a5..04e4c83a5a 100644 --- a/CRM/Case/XMLProcessor.php +++ b/CRM/Case/XMLProcessor.php @@ -34,6 +34,16 @@ */ class CRM_Case_XMLProcessor { + /** + * Relationship-types have four name fields (name_a_b, name_b_a, label_a_b, + * label_b_a), but CiviCase XML refers to reltypes by a single name. + * REL_TYPE_CNAME identifies the canonical name field as used by CiviCase XML. + * + * This appears to be "label_b_a", but IMHO "name_b_a" would be more + * sensible. + */ + const REL_TYPE_CNAME = 'label_b_a'; + public function retrieve($caseType) { return CRM_Case_XMLRepository::singleton()->retrieve($caseType); } @@ -61,7 +71,7 @@ class CRM_Case_XMLProcessor { $relationshipTypes = array(); foreach ($relationshipInfo as $id => $info) { - $relationshipTypes[$id] = $info['label_b_a']; + $relationshipTypes[$id] = $info[CRM_Case_XMLProcessor::REL_TYPE_CNAME]; } } -- 2.25.1