*/
public static $activityTypes = NULL;
- /**
- * FIXME: This does *NOT* belong in a static property, but we're too late in
- * the 4.5-cycle to do the necessary cleanup.
- *
- * Format is array(int $id => string $relTypeCname).
- *
- * @var array|null
- */
- public static $relationshipTypes = NULL;
-
- /**
- * 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';
-
/**
* @param $caseType
*
}
/**
+ * Get all relationship type display labels (not machine names)
+ *
+ * @param bool $fromXML
+ * TODO: This parameter is always FALSE now so no longer needed.
+ * Is this to be used for lookup of values from XML?
+ * Relationships are recorded in XML from the perspective of the non-client
+ * while relationships in the UI and everywhere else are from the
+ * perspective of the client. Since the XML can't be expected to be
+ * switched, the direction needs to be translated.
* @return array
*/
- public function &allRelationshipTypes() {
- if (self::$relationshipTypes === NULL) {
- $relationshipInfo = CRM_Core_PseudoConstant::relationshipType('label', TRUE);
+ public function &allRelationshipTypes($fromXML = FALSE) {
+ if (!isset(Civi::$statics[__CLASS__]['reltypes'][$fromXML])) {
+ // Note this now includes disabled types too. The only place this
+ // function is being used is for comparison against a list, not
+ // displaying a dropdown list or something like that, so we need
+ // to include disabled.
+ $relationshipInfo = civicrm_api3('RelationshipType', 'get', [
+ 'options' => ['limit' => 0],
+ ]);
- self::$relationshipTypes = [];
- foreach ($relationshipInfo as $id => $info) {
- self::$relationshipTypes[$id] = $info[CRM_Case_XMLProcessor::REL_TYPE_CNAME];
+ Civi::$statics[__CLASS__]['reltypes'][$fromXML] = [];
+ foreach ($relationshipInfo['values'] as $id => $info) {
+ Civi::$statics[__CLASS__]['reltypes'][$fromXML][$id . '_b_a'] = ($fromXML) ? $info['label_a_b'] : $info['label_b_a'];
+ /**
+ * Exclude if bidirectional
+ * (Why? I'm thinking this was for consistency with the dropdown
+ * in ang/crmCaseType.js where it would be needed to avoid seeing
+ * duplicates in the dropdown. Not sure if needed here but keeping
+ * as-is.)
+ */
+ if ($info['label_b_a'] !== $info['label_a_b']) {
+ Civi::$statics[__CLASS__]['reltypes'][$fromXML][$id . '_a_b'] = ($fromXML) ? $info['label_b_a'] : $info['label_a_b'];
+ }
}
}
- return self::$relationshipTypes;
+ return Civi::$statics[__CLASS__]['reltypes'][$fromXML];
}
/**
*/
public static function flushStaticCaches() {
self::$activityTypes = NULL;
- self::$relationshipTypes = NULL;
+ unset(Civi::$statics[__CLASS__]['reltypes']);
}
}