Merge pull request #21965 from civicrm/5.43
[civicrm-core.git] / CRM / Core / I18n.php
index ce8175324c3644b27a49da45ffffc5cc102222b9..e4653d3be758c29a2155fd532ada40e183024ac9 100644 (file)
@@ -184,8 +184,11 @@ class CRM_Core_I18n {
     static $enabled = NULL;
 
     if (!$all) {
-      $all = CRM_Contact_BAO_Contact::buildOptions('preferred_language');
+      // Use `getValues`, not `buildOptions` to bypass hook_civicrm_fieldOptions.  See core#1132.
+      CRM_Core_OptionValue::getValues(['name' => 'languages'], $optionValues, 'weight', TRUE);
+      $all = array_column($optionValues, 'label', 'name');
 
+      // FIXME: How is this not duplicative of the lines above?
       // get labels
       $rows = [];
       $labels = [];
@@ -586,12 +589,22 @@ class CRM_Core_I18n {
   /**
    * Is the current CiviCRM domain in multilingual mode.
    *
-   * @return Bool
+   * @return bool
    *   True if CiviCRM is in multilingual mode.
    */
   public static function isMultilingual() {
-    $domainId = CRM_Core_Config::domainID();
-    return (bool) CRM_Core_DAO::getFieldValue('CRM_Core_DAO_Domain', $domainId, 'locales');
+    $domain = CRM_Core_BAO_Domain::getDomain();
+    return (bool) $domain->locales;
+  }
+
+  /**
+   * Returns languages if domain is in multilingual mode.
+   *
+   * @return array|bool
+   */
+  public static function getMultilingual() {
+    $domain = CRM_Core_BAO_Domain::getDomain();
+    return $domain->locales ? CRM_Core_DAO::unSerializeField($domain->locales, CRM_Core_DAO::SERIALIZE_SEPARATOR_TRIMMED) : FALSE;
   }
 
   /**
@@ -600,7 +613,7 @@ class CRM_Core_I18n {
    * @param $language
    *   Language (for example 'en_US', or 'fr_CA').
    *
-   * @return Bool
+   * @return bool
    *   True if it is an RTL language.
    */
   public static function isLanguageRTL($language) {