return $cachedContactCountry;
}
+ /**
+ * Provide list of Pinned countries.
+ *
+ * @param $availableCountries
+ * @return array
+ */
+ public static function pinnedContactCountries($availableCountries) {
+ if (!isset(Civi::$statics[__CLASS__]['cachedPinnedContactCountries'])) {
+ $pinnedContactCountries = Civi::settings()->get('pinnedContactCountries');
+ $pinnedCountries = [];
+ if (!empty($pinnedContactCountries)) {
+ foreach ($pinnedContactCountries as $pinnedContactCountry) {
+ // pinned country must exist in available country list.
+ if (array_key_exists($pinnedContactCountry, $availableCountries)) {
+ $pinnedCountries[$pinnedContactCountry] = $availableCountries[$pinnedContactCountry];
+ }
+ }
+ }
+ Civi::$statics[__CLASS__]['cachedPinnedContactCountries'] = $pinnedCountries;
+ }
+
+ return Civi::$statics[__CLASS__]['cachedPinnedContactCountries'];
+ }
+
+ /**
+ * Provide sorted list of countries with default country with first position
+ * then Pinned countries then rest of countries.
+ *
+ * @param $availableCountries
+ * @return array
+ */
+ public static function _defaultContactCountries($availableCountries) {
+ // localise the country names if in an non-en_US locale
+ $tsLocale = CRM_Core_I18n::getLocale();
+ if ($tsLocale != '' and $tsLocale != 'en_US') {
+ $i18n = CRM_Core_I18n::singleton();
+ $i18n->localizeArray($availableCountries, [
+ 'context' => 'country',
+ ]);
+ $availableCountries = CRM_Utils_Array::asort($availableCountries);
+ }
+ $pinnedContactCountries = CRM_Core_BAO_Country::pinnedContactCountries($availableCountries);
+ // if default country is set, percolate it to the top, then pinned countries and then remaining available countries.
+ if ($defaultContactCountry = Civi::settings()->get('defaultContactCountry')) {
+ $default = [$defaultContactCountry => $availableCountries[$defaultContactCountry] ?? NULL];
+ $availableCountries = $default + $pinnedContactCountries + $availableCountries;
+ }
+ elseif (!empty($pinnedContactCountries)) {
+ // if default country is missing then use only pinned countries at the top then rest of the countries.
+ $availableCountries = $pinnedContactCountries + $availableCountries;
+ }
+
+ return $availableCountries;
+ }
+
/**
* Provide cached default country name.
*