dev/core#4411 fix issue with user language
authorJaap Jansma <jaap.jansma@civicoop.org>
Sun, 3 Dec 2023 21:22:31 +0000 (22:22 +0100)
committerJaap Jansma <jaap.jansma@civicoop.org>
Sun, 3 Dec 2023 21:22:31 +0000 (22:22 +0100)
ext/standaloneusers/CRM/Standaloneusers/BAO/User.php
ext/standaloneusers/CRM/Standaloneusers/DAO/User.php
ext/standaloneusers/Civi/Standalone/Security.php
ext/standaloneusers/ang/afformEditUserAccount.aff.html
ext/standaloneusers/standaloneusers.php
ext/standaloneusers/xml/schema/CRM/Standaloneusers/User.xml

index 70f96fd1fb1ba57b5b88396951e2655507d6bc82..2522b9d91f77803bff906cd39beea75e0eb25288 100644 (file)
@@ -29,4 +29,8 @@ class CRM_Standaloneusers_BAO_User extends CRM_Standaloneusers_DAO_User implemen
     $sess->set('lastAccess', time());
   }
 
+  public static function getPreferredLanguages(): array {
+    return CRM_Core_I18n::uiLanguages(FALSE);
+  }
+
 }
index 8ebd081ab473257194cef4018a2f8b3fa228a3d8..b1e6f21b31ee4a50e4cb3549f2dfe5e0b61e69fe 100644 (file)
@@ -6,7 +6,7 @@
  *
  * Generated from standaloneusers/xml/schema/CRM/Standaloneusers/User.xml
  * DO NOT EDIT.  Generated by CRM_Core_CodeGen
- * (GenCodeChecksum:0b0cd1d01573ad0e5adc1a3e92f9638b)
+ * (GenCodeChecksum:bb2c741901a689ff804ab65d05c7795b)
  */
 use CRM_Standaloneusers_ExtensionUtil as E;
 
@@ -526,6 +526,12 @@ class CRM_Standaloneusers_DAO_User extends CRM_Core_DAO {
           'entity' => 'User',
           'bao' => 'CRM_Standaloneusers_DAO_User',
           'localizable' => 0,
+          'html' => [
+            'type' => 'Select',
+          ],
+          'pseudoconstant' => [
+            'callback' => 'CRM_Standaloneusers_BAO_User::getPreferredLanguages',
+          ],
           'add' => '2.1',
         ],
         'password_reset_token' => [
index 34b4efca4ea14a2a4c64f1ad96a571f5d438a74e..2f041d671b1cb1f69eff9d137864e60121d72b96 100644 (file)
@@ -210,6 +210,8 @@ class Security {
       return FALSE;
     }
 
+    $this->applyLocaleFromUser($user);
+
     // Note: random_int is more appropriate for cryptographical use than mt_rand
     // The long number is the max 32 bit value.
     return [$user['contact_id'], $user['id'], random_int(0, 2147483647)];
@@ -235,6 +237,7 @@ class Security {
       ])['values'][0]['contact_id'] ?? NULL;
       // Confusingly, Civi stores it's *Contact* ID as *userID* on the session.
       $session->set('userID', $contactID);
+      $this->applyLocaleFromUser($user);
     }
   }
 
@@ -452,4 +455,17 @@ class Security {
     return $workflowMessage;
   }
 
+  /**
+   * Applies the locale from the user record.
+   *
+   * @param array $user
+   * @return void
+   */
+  private function applyLocaleFromUser(array $user) {
+    $session = CRM_Core_Session::singleton();
+    if (!empty($user['language'])) {
+      $session->set('lcMessages', $user['language']);
+    }
+  }
+
 }
index 53e67473d1961f194334bb0fd0ffc4088b7b7627..209509dde5da1945e21ffc01caea2ac63d94155b 100644 (file)
@@ -6,7 +6,7 @@
     <af-field name="uf_name" />
     <af-field name="is_active" />
     <af-field name="timezone" />
-    <af-field name="language" />
+    <af-field name="language" defn="{help_pre: ts('Set the user interface language of this user. You can also leave it empty to use the default system language.'), input_attrs: {placeholder: ts('System default language')}}" />
   </fieldset>
   <button class="af-button btn btn-primary" crm-icon="fa-check" ng-click="afform.submit()">Submit</button>
 </af-form>
index 2b7b2e793125a47c886ed16e0457d5ef6de427cd..fda5e61e7233a2bc12170aa58aeeea0687d0fb65 100644 (file)
@@ -10,6 +10,22 @@ require_once 'standaloneusers.civix.php';
 use CRM_Standaloneusers_ExtensionUtil as E;
 // phpcs:enable
 
+/**
+ * Hide the inherit CMS language on the Settings - Localization form.
+ *
+ * Implements hook_civicrm_buildForm().
+ *
+ * @link https://docs.civicrm.org/dev/en/latest/hooks/hook_civicrm_buildForm/
+ */
+function standaloneusers_civicrm_buildForm($formName, CRM_Core_Form $form) {
+  // Administer / Localization / Languages, Currency, Locations
+  if ($formName == 'CRM_Admin_Form_Setting_Localization') {
+    if ($inheritLocaleElement = $form->getElement('inheritLocale')) {
+      $inheritLocaleElement->freeze();
+    }
+  }
+}
+
 /**
  * Implements hook_civicrm_config().
  *
index fb5fd1ab21174f4b4a5d60df902f02cf034ffb19..8b9917f48c5425d556dfa47fea8ea271b9ecc719 100644 (file)
     <type>varchar</type>
     <length>5</length>
     <comment>UI language preferred by the given user/contact</comment>
+    <pseudoconstant>
+      <callback>CRM_Standaloneusers_BAO_User::getPreferredLanguages</callback>
+    </pseudoconstant>
+    <html>
+      <type>Select</type>
+    </html>
     <add>2.1</add>
   </field>
   <index>