From cc32b9a3c23c6f2159639ab47920ee4f51735553 Mon Sep 17 00:00:00 2001
From: satish <satish.dvnk@vtiger.com>
Date: Thu, 28 Jul 2016 15:40:12 +0530
Subject: [PATCH] #227 - Allow user to change access key

---
 includes/runtime/Controller.php               |   3 ++
 languages/de_de/Users.php                     |   8 ++++-
 languages/en_gb/Users.php                     |   8 ++++-
 languages/en_us/Users.php                     |   5 +++
 languages/es_es/Users.php                     |  10 ++++--
 languages/es_mx/Users.php                     |   8 ++++-
 languages/fr_fr/Users.php                     |   8 ++++-
 languages/hu_hu/Users.php                     |  10 ++++--
 languages/it_it/Users.php                     |   8 ++++-
 languages/nl_nl/Users.php                     |   8 ++++-
 languages/pl_pl/Users.php                     |   8 ++++-
 languages/pt_br/Users.php                     |   8 ++++-
 languages/ro_ro/Users.php                     |   8 ++++-
 languages/ru_ru/Users.php                     |   8 ++++-
 languages/tr_tr/Users.php                     |   8 ++++-
 .../Users/PreferenceDetailViewHeader.tpl      |  14 ++++++++
 .../vlayout/modules/Users/resources/Detail.js |  26 +++++++++++++-
 modules/Users/actions/SaveAjax.php            |  32 ++++++++++++++++-
 modules/Users/models/DetailView.php           |  33 +++++++++---------
 modules/Users/models/Record.php               |   9 +++++
 packages/vtiger/optional/Arabic_ar_ae.zip     | Bin 87189 -> 89096 bytes
 .../Arabic_ar_ae/modules/Users.php            |   9 +++--
 22 files changed, 204 insertions(+), 35 deletions(-)

diff --git a/includes/runtime/Controller.php b/includes/runtime/Controller.php
index c2207916..3b32b85c 100644
--- a/includes/runtime/Controller.php
+++ b/includes/runtime/Controller.php
@@ -286,6 +286,9 @@ abstract class Vtiger_View_Controller extends Vtiger_Action_Controller {
 	 */
 	function getJSLanguageStrings(Vtiger_Request $request) {
 		$moduleName = $request->getModule(false);
+		if ($moduleName === 'Settings:Users') {
+			$moduleName = 'Users';
+		} 
 		return Vtiger_Language_Handler::export($moduleName, 'jsLanguageStrings');
 	}
 }
\ No newline at end of file
diff --git a/languages/de_de/Users.php b/languages/de_de/Users.php
index 9cc2d698..da118619 100644
--- a/languages/de_de/Users.php
+++ b/languages/de_de/Users.php
@@ -175,6 +175,9 @@ $languageStrings = array(
 	'LBL_CHANGE_PASSWORD'	       => 'Change Password',
 	'LBL_NEW_PASSWORD'			   => 'New Password',
 	'LBL_CONFIRM_PASSWORD'		   => 'Confirm Password',
+	'LBL_CHANGE_ACCESS_KEY' => 'Ändern Access Key',
+	'LBL_ACCESS_KEY_UPDATED_SUCCESSFULLY' => 'Zugriffsschlüssel aktualisiert erfolgreich',
+	'LBL_FAILED_TO_UPDATE_ACCESS_KEY' => 'Fehlgeschlagen Zugriffsschlüssel zu aktualisieren',
 	'LBL_TRANSFER_OWNERSHIP' => 'Transfer Owner',
 	'LBL_LOGIN_AS' => 'Login as ',
 	'LBL_USER_DELETED_SUCCESSFULLY' => 'Benutzer erfolgreich gelöscht',
@@ -204,8 +207,8 @@ $languageStrings = array(
 		'LBL_DATE_FORMAT'		=> 'Datumsformat',
 		'LBL_CHOOSE_DATE_FORMAT'=> 'Wählen Sie Datumsformat',
 		'LBL_PHONE'	=> 'Telefon',
-);
 
+);
 $jsLanguageStrings = array(
 	//Curency separator validation messages
 	'JS_DECIMAL_SEPARATOR_AND_GROUPING_SEPARATOR_CANT_BE_SAME' => 'Decimal separator and Grouping separator cant be same',
@@ -217,4 +220,7 @@ $jsLanguageStrings = array(
 	'JS_PASSWORD_CHANGE_FAILED_1'=>'User password change failed for ',
 	'JS_PASSWORD_CHANGE_FAILED_2'=>' failed.  The new password must be set.',
 	'JS_PASSWORD_INCORRECT_OLD'=>'Incorrect old password specified. Re-enter password information.',
+
+	'JS_NEW_ACCESS_KEY_REQUESTED' => 'Neue Zugriffsschlüssel angefordert',
+	'JS_CHANGE_ACCESS_KEY_CONFIRMATION' => 'Sie haben für einen neuen Zugriffsschlüssel angefordert. &lt; br &gt;&lt;br &gt;Mit dem neuen Access-Schlüsselbestimmung, können Sie die alten Zugriffsschlüssel mit dem neuen in allen installierten Erweiterungen zu ersetzen haben. &lt; br &gt;&lt;br &gt;Do Sie wollen weitermachen?',
 );
\ No newline at end of file
diff --git a/languages/en_gb/Users.php b/languages/en_gb/Users.php
index edbf3790..6796a4e9 100644
--- a/languages/en_gb/Users.php
+++ b/languages/en_gb/Users.php
@@ -173,6 +173,9 @@ $languageStrings = array(
 	'LBL_CHANGE_PASSWORD'	       => 'Change Password',
 	'LBL_NEW_PASSWORD'			   => 'New Password',
 	'LBL_CONFIRM_PASSWORD'		   => 'Confirm Password',
+	'LBL_CHANGE_ACCESS_KEY' => 'Change Access Key',
+	'LBL_ACCESS_KEY_UPDATED_SUCCESSFULLY' => 'Access key updated successfully',
+	'LBL_FAILED_TO_UPDATE_ACCESS_KEY' => 'Failed to update access key',
 	'LBL_TRANSFER_OWNERSHIP' => 'Transfer Owner',
 	'LBL_LOGIN_AS' => 'Login as ',
 	'LBL_USER_DELETED_SUCCESSFULLY' => 'User deleted successfully',
@@ -202,8 +205,8 @@ $languageStrings = array(
 		'LBL_DATE_FORMAT'		=> 'Date Format',
 		'LBL_CHOOSE_DATE_FORMAT'=> 'Choose Date Format',
 		'LBL_PHONE'	=> 'Phone',
-);
 
+);
 $jsLanguageStrings = array(
 	//Curency separator validation messages
 	'JS_DECIMAL_SEPARATOR_AND_GROUPING_SEPARATOR_CANT_BE_SAME' => 'Decimal separator and Grouping separator can\'t be the same',
@@ -215,4 +218,7 @@ $jsLanguageStrings = array(
 	'JS_PASSWORD_CHANGE_FAILED_1'=>'User password change failed for ',
 	'JS_PASSWORD_CHANGE_FAILED_2'=>' failed.  The new password must be set.',
 	'JS_PASSWORD_INCORRECT_OLD'=>'Incorrect old password specified. Re-enter password information.',
+
+	'JS_NEW_ACCESS_KEY_REQUESTED' => 'New Access key requested',
+	'JS_CHANGE_ACCESS_KEY_CONFIRMATION' => 'You have requested for a new Access key.&lt;br&gt;&lt;br&gt;With the new Access key provision, you have to replace the old access key with the new one in all installed extensions.&lt;br&gt;&lt;br&gt;Do you want to continue?',
 );
\ No newline at end of file
diff --git a/languages/en_us/Users.php b/languages/en_us/Users.php
index eab9b65b..bd16d6a6 100644
--- a/languages/en_us/Users.php
+++ b/languages/en_us/Users.php
@@ -40,6 +40,9 @@ $languageStrings = array(
 	'LBL_CHOOSE_TIMEZONE'	=> 'Choose Timezone',
 	'LBL_COMPANY_SIZE'		=> 'Company Size',
 	'LBL_CONFIRM_PASSWORD' => 'Confirm Password',
+	'LBL_CHANGE_ACCESS_KEY' => 'Change Access Key',
+	'LBL_ACCESS_KEY_UPDATED_SUCCESSFULLY' => 'Access key updated successfully',
+	'LBL_FAILED_TO_UPDATE_ACCESS_KEY' => 'Failed to update access key',
 	'LBL_CONNECT_WITH_US' => 'Connect with US',
 	'LBL_CURRENCY_CONFIGURATION' =>  'Currency and Number Field Configuration',
 	'LBL_DATE_FORMAT'		=> 'Date Format',
@@ -261,4 +264,6 @@ $jsLanguageStrings = array(
 	'JS_PASSWORD_CHANGE_FAILED_2'=>' failed.  The new password must be set.',
 	'JS_PASSWORD_INCORRECT_OLD'=>'Incorrect old password specified. Re-enter password information.',
 	'JS_REENTER_PASSWORDS'=>'Please re-enter passwords.  The \"new password\" and \"confirm password\" values do not match.',
+	'JS_NEW_ACCESS_KEY_REQUESTED' => 'New Access key requested', 
+ 	'JS_CHANGE_ACCESS_KEY_CONFIRMATION' => 'You have requested for a new Access key.&lt;br&gt;&lt;br&gt;With the new Access key provision, you have to replace the old access key with the new one in all installed extensions.&lt;br&gt;&lt;br&gt;Do you want to continue?',
 );
diff --git a/languages/es_es/Users.php b/languages/es_es/Users.php
index bf38d605..777b1112 100644
--- a/languages/es_es/Users.php
+++ b/languages/es_es/Users.php
@@ -85,6 +85,9 @@ $languageStrings = array(
 	'LBL_CHANGE_PASSWORD' => 'Cambiar Contraseña',
 	'LBL_NEW_PASSWORD' => 'Nueva Contraseña',
 	'LBL_CONFIRM_PASSWORD' => 'Confirmar Contraseña',
+	'LBL_CHANGE_ACCESS_KEY' => 'Cambiar la clave de acceso',
+	'LBL_ACCESS_KEY_UPDATED_SUCCESSFULLY' => 'Tecla de acceso actualizado correctamente',
+	'LBL_FAILED_TO_UPDATE_ACCESS_KEY' => 'No se pudo actualizar la clave de acceso',
 
 	'Kwajalein'                    => '(UTC-12:00) International Date Line West',
 	'Pacific/Midway'               => '(UTC-11:00) Coordinated Universal Time-11',
@@ -210,8 +213,8 @@ $languageStrings = array(
 	'LBL_DATE_FORMAT'		=> 'Formato de la fecha',
 	'LBL_CHOOSE_DATE_FORMAT'=> 'Seleccione Formato de fecha',
 	'LBL_PHONE'	=> 'Teléfono',
-);
 
+);
 $jsLanguageStrings = array(
 	'JS_ENTER_OLD_PASSWORD'=>'Introduce tu contraseña actual.',
 	'JS_ENTER_NEW_PASSWORD'=>'Introduce tu contraseña nueva.',
@@ -221,4 +224,7 @@ $jsLanguageStrings = array(
 	'JS_PASSWORD_CHANGE_FAILED_1'=>'No se ha podido cambiar la contraseña de ',
 	'JS_PASSWORD_CHANGE_FAILED_2'=>' La nueva contraseña debe ser definida.',
 	'JS_PASSWORD_INCORRECT_OLD'=>'Contraseña actual incorrecta. Introduce de nuevo la información de las contraseñas.',
-);
+
+	'JS_NEW_ACCESS_KEY_REQUESTED' => 'Nueva clave de acceso solicitado',
+	'JS_CHANGE_ACCESS_KEY_CONFIRMATION' => 'Ha solicitado una nueva clave de acceso. &lt; br &gt;&lt;br &gt;Con la nueva disposición clave de acceso, lo que tiene que sustituir la clave de acceso antiguo por uno nuevo en todas las extensiones instaladas. &lt; br &gt;&lt;br &gt;Do desea continuar?',
+);
\ No newline at end of file
diff --git a/languages/es_mx/Users.php b/languages/es_mx/Users.php
index 689b6e00..d4990cdf 100644
--- a/languages/es_mx/Users.php
+++ b/languages/es_mx/Users.php
@@ -196,8 +196,11 @@ $languageStrings = array(
 	'LBL_DATE_FORMAT'		=> 'Formato de la fecha',
 	'LBL_CHOOSE_DATE_FORMAT'=> 'Seleccione Formato de fecha',
 	'LBL_PHONE'	=> 'Teléfono',
-);
 
+	'LBL_CHANGE_ACCESS_KEY' => 'Cambiar la clave de acceso',
+	'LBL_ACCESS_KEY_UPDATED_SUCCESSFULLY' => 'Tecla de acceso actualizado correctamente',
+	'LBL_FAILED_TO_UPDATE_ACCESS_KEY' => 'No se pudo actualizar la clave de acceso',
+);
 $jsLanguageStrings = array(
 		
 	//Curency separator validation messages
@@ -210,4 +213,7 @@ $jsLanguageStrings = array(
 	'JS_PASSWORD_CHANGE_FAILED_1'=>'User password change failed for ',
 	'JS_PASSWORD_CHANGE_FAILED_2'=>' failed.  The new password must be set.',
 	'JS_PASSWORD_INCORRECT_OLD'=>'Incorrect old password specified. Re-enter password information.',
+
+	'JS_NEW_ACCESS_KEY_REQUESTED' => 'Nueva clave de acceso solicitado',
+	'JS_CHANGE_ACCESS_KEY_CONFIRMATION' => 'Ha solicitado una nueva clave de acceso. &lt; br &gt;&lt;br &gt;Con la nueva disposición clave de acceso, lo que tiene que sustituir la clave de acceso antiguo por uno nuevo en todas las extensiones instaladas. &lt; br &gt;&lt;br &gt;Do desea continuar?',
 );
\ No newline at end of file
diff --git a/languages/fr_fr/Users.php b/languages/fr_fr/Users.php
index 93ef8d8d..51bb4575 100644
--- a/languages/fr_fr/Users.php
+++ b/languages/fr_fr/Users.php
@@ -196,8 +196,11 @@ $languageStrings = array(
 	'LBL_DATE_FORMAT'		=> 'Format de la date',
 	'LBL_CHOOSE_DATE_FORMAT'=> 'Choisissez Format de date',
 	'LBL_PHONE'	=> 'Téléphone',
-);
 
+	'LBL_CHANGE_ACCESS_KEY' => "Changer la clé d'accès",
+	'LBL_ACCESS_KEY_UPDATED_SUCCESSFULLY' => "Clé d'accès mis à jour avec succès",
+	'LBL_FAILED_TO_UPDATE_ACCESS_KEY' => "Impossible de mettre à jour la clé d'accès",
+);
 $jsLanguageStrings = array(
 		
 	//Curency separator validation messages
@@ -210,4 +213,7 @@ $jsLanguageStrings = array(
 	'JS_PASSWORD_CHANGE_FAILED_1'=>'User password change failed for ',
 	'JS_PASSWORD_CHANGE_FAILED_2'=>' failed.  The new password must be set.',
 	'JS_PASSWORD_INCORRECT_OLD'=>'Incorrect old password specified. Re-enter password information.',
+
+	'JS_NEW_ACCESS_KEY_REQUESTED' => 'clé New Access demandé',
+	'JS_CHANGE_ACCESS_KEY_CONFIRMATION' => "Vous avez demandé une nouvelle clé d'accès. &lt;br&gt;&lt;br &gt;Avec la nouvelle disposition clé d'accès, vous devez remplacer la clé d'accès ancien et le nouveau dans toutes les extensions installées. &lt;br&gt;&lt;br &gt;Do vous voulez continuer?",
 );
\ No newline at end of file
diff --git a/languages/hu_hu/Users.php b/languages/hu_hu/Users.php
index aa234831..fba53440 100644
--- a/languages/hu_hu/Users.php
+++ b/languages/hu_hu/Users.php
@@ -40,6 +40,9 @@ $languageStrings = array(
 	'LBL_CHOOSE_TIMEZONE'	       => 'Válasszon időzónát'            ,
 	'LBL_COMPANY_SIZE'		       => 'Cég méret'                     ,
 	'LBL_CONFIRM_PASSWORD'         => 'Jelszó megerősítése'           ,
+	'LBL_CHANGE_ACCESS_KEY' => 'Hozzáférés módosítása Key',
+	'LBL_ACCESS_KEY_UPDATED_SUCCESSFULLY' => 'Hozzáférési kulcs sikeresen frissítve',
+	'LBL_FAILED_TO_UPDATE_ACCESS_KEY' => 'Nem sikerült frissíteni a hozzáférési kulcs',
 	'LBL_CONNECT_WITH_US'          => 'Lépjen kapcsolatba velünk: '   ,
 	'LBL_CURRENCY_CONFIGURATION'   => 'Pénznem beállításai'           ,
 	'LBL_DATE_FORMAT'		       => 'Dátum formátum'                ,
@@ -215,8 +218,8 @@ $languageStrings = array(
 	'Pacific/Auckland'             => '(UTC+12:00) Auckland'        ,
 	'Asia/Magadan'                 => '(UTC+12:00) Magadan'         ,
 	'Pacific/Tongatapu'            => '(UTC+13:00) Nukualofa'       ,
-);
 
+);
 $jsLanguageStrings = array(
 	//Curency separator validation messages
 	'JS_DECIMAL_SEPARATOR_AND_GROUPING_SEPARATOR_CANT_BE_SAME' => 'A tizedesjel és az ezres elválasztó nem lehet ugyanaz.',
@@ -228,4 +231,7 @@ $jsLanguageStrings = array(
 	'JS_PASSWORD_CHANGE_FAILED_2'=>' sikertelen. Új jelszót kell megadnia.',
 	'JS_PASSWORD_INCORRECT_OLD'=>'Helytelen régi jelszó lett megadva. Adja meg újra a jelszó információkat.',
 	'JS_REENTER_PASSWORDS'=>'Kérjük, hogy adja meg újra a jelszót.  Az \"új jelszó\" és a \"jelszó megerősítése\" értékek nem egyeznek meg.',
-);
+
+	'JS_NEW_ACCESS_KEY_REQUESTED' => 'Új hozzáférési kulcsot kért',
+	'JS_CHANGE_ACCESS_KEY_CONFIRMATION' => 'Azt kérte, egy új hozzáférési kulcsot. &lt; br &gt;&lt;br &gt;Az új hozzáférési kulcsot rendelkezés, ki kell cserélni a régi hozzáférési kulcsot az újat minden telepített bővítmények. &lt; br &gt;&lt;br &gt;Do szeretné folytatni?',
+);
\ No newline at end of file
diff --git a/languages/it_it/Users.php b/languages/it_it/Users.php
index 6e4994b7..2b68b6cd 100644
--- a/languages/it_it/Users.php
+++ b/languages/it_it/Users.php
@@ -196,8 +196,11 @@ $languageStrings = array(
 	'LBL_DATE_FORMAT'		=> 'Data Format',
 	'LBL_CHOOSE_DATE_FORMAT'=> 'Scegli la Data Format',
 	'LBL_PHONE'	=> 'Telefono',
-);
 
+	'LBL_CHANGE_ACCESS_KEY' => 'Cambio Accessibilità',
+	'LBL_ACCESS_KEY_UPDATED_SUCCESSFULLY' => 'Chiave di accesso aggiornato con successo',
+	'LBL_FAILED_TO_UPDATE_ACCESS_KEY' => 'Impossibile aggiornare chiave di accesso',
+);
 $jsLanguageStrings = array(
 		
 	//Curency separator validation messages
@@ -210,4 +213,7 @@ $jsLanguageStrings = array(
 	'JS_PASSWORD_CHANGE_FAILED_1'=>'User password change failed for ',
 	'JS_PASSWORD_CHANGE_FAILED_2'=>' failed.  The new password must be set.',
 	'JS_PASSWORD_INCORRECT_OLD'=>'Incorrect old password specified. Re-enter password information.',
+
+	'JS_NEW_ACCESS_KEY_REQUESTED' => 'nuova chiave di accesso richiesto',
+	'JS_CHANGE_ACCESS_KEY_CONFIRMATION' => 'Hai richiesto per una nuova chiave di accesso. &lt; br &gt;&lt;br &gt;Con la nuova disposizione chiave di accesso, è necessario sostituire la chiave di accesso vecchio con quello nuovo in tutte le estensioni installate. &lt; br &gt;&lt;br &gt;Do si desidera continuare?',
 );
\ No newline at end of file
diff --git a/languages/nl_nl/Users.php b/languages/nl_nl/Users.php
index fd22a75f..8f281410 100644
--- a/languages/nl_nl/Users.php
+++ b/languages/nl_nl/Users.php
@@ -196,8 +196,11 @@ $languageStrings = array(
 	'LBL_DATE_FORMAT'		=> 'Date Format',
 	'LBL_CHOOSE_DATE_FORMAT'=> 'Kies datumnotatie',
 	'LBL_PHONE'	=> 'Telefoon',
-);
 
+	'LBL_CHANGE_ACCESS_KEY' => 'Toegang Change Key',
+	'LBL_ACCESS_KEY_UPDATED_SUCCESSFULLY' => 'Access key bijgewerkt',
+	'LBL_FAILED_TO_UPDATE_ACCESS_KEY' => 'Mislukt toegangssleutel actualiseren',
+);
 $jsLanguageStrings = array(
 		
 	//Curency separator validation messages
@@ -210,4 +213,7 @@ $jsLanguageStrings = array(
 	'JS_PASSWORD_CHANGE_FAILED_1'=>'User password change failed for ',
 	'JS_PASSWORD_CHANGE_FAILED_2'=>' failed.  The new password must be set.',
 	'JS_PASSWORD_INCORRECT_OLD'=>'Incorrect old password specified. Re-enter password information.',
+
+	'JS_NEW_ACCESS_KEY_REQUESTED' => 'New Access key gevraagd',
+	'JS_CHANGE_ACCESS_KEY_CONFIRMATION' => 'U heeft gevraagd voor een nieuwe Access key. &lt; br &gt;&lt;br &gt;Met de nieuwe Access belangrijkste bepaling, moet u de oude toegang toets met het nieuwe in alle geïnstalleerde extensies & lt vervangen;. Br &gt;&lt;br &gt;Do u wilt doorgaan?',
 );
\ No newline at end of file
diff --git a/languages/pl_pl/Users.php b/languages/pl_pl/Users.php
index 7c3abe08..b99aa8aa 100644
--- a/languages/pl_pl/Users.php
+++ b/languages/pl_pl/Users.php
@@ -188,6 +188,9 @@ $languageStrings = array(
 	'LBL_CHANGE_PASSWORD' => 'Zmień hasło',
 	'LBL_NEW_PASSWORD' => 'Nowe hasło',
 	'LBL_CONFIRM_PASSWORD' => 'Potwierdź hasło',
+	'LBL_CHANGE_ACCESS_KEY' => 'Zmień Access Key',
+	'LBL_ACCESS_KEY_UPDATED_SUCCESSFULLY' => 'Klawisz pomyślnie zaktualizowane',
+	'LBL_FAILED_TO_UPDATE_ACCESS_KEY' => 'Nie udało się zaktualizować klucz dostępu',
 	
 	//Login strings
 	'LBL_TO_CRM' => 'Zaloguj do Vtiger CRM',
@@ -227,8 +230,8 @@ $languageStrings = array(
 	'LBL_DATE_FORMAT'		=> 'Format daty',
 	'LBL_CHOOSE_DATE_FORMAT'=> 'Wybierz format daty',
 	'LBL_PHONE'	=> 'Telefon',
-);
 
+);
 $jsLanguageStrings = array(
 		
 	//Curency separator validation messages
@@ -241,4 +244,7 @@ $jsLanguageStrings = array(
 	'JS_PASSWORD_CHANGE_FAILED_1'=>'Nie udało się zmienic hasła dla ',
 	'JS_PASSWORD_CHANGE_FAILED_2'=>' niepowodzenie. Nowe hasło musi zostać ustawione.',
 	'JS_PASSWORD_INCORRECT_OLD'=>'Podano niepoprawne stare hasło. Wpisz ponownie.',
+
+	'JS_NEW_ACCESS_KEY_REQUESTED' => 'Nowy klucz dostępu wymagane',
+	'JS_CHANGE_ACCESS_KEY_CONFIRMATION' => 'Zażądano nowego klucza dostępowego. &lt; br &gt;&lt;br &gt;Z nowego przepisu klucz dostępu, trzeba zastąpić stary klucz dostępu z nową we wszystkich zainstalowanych rozszerzeń. &lt; br &gt;&lt;br &gt;chcesz kontynuować?',
 );
\ No newline at end of file
diff --git a/languages/pt_br/Users.php b/languages/pt_br/Users.php
index 41bd301d..45f23c5b 100644
--- a/languages/pt_br/Users.php
+++ b/languages/pt_br/Users.php
@@ -196,8 +196,11 @@ $languageStrings = array(
 	'LBL_DATE_FORMAT'		=> 'Formato de data',
 	'LBL_CHOOSE_DATE_FORMAT'=> 'Escolha Formato de data',
 	'LBL_PHONE'	=> 'Telefone',
-);
 
+	'LBL_CHANGE_ACCESS_KEY' => 'Alterar Chave de Acesso',
+	'LBL_ACCESS_KEY_UPDATED_SUCCESSFULLY' => 'chave de acesso atualizado com sucesso',
+	'LBL_FAILED_TO_UPDATE_ACCESS_KEY' => 'Falha ao atualizar a chave de acesso',
+);
 $jsLanguageStrings = array(
 		
 	//Curency separator validation messages
@@ -210,4 +213,7 @@ $jsLanguageStrings = array(
 	'JS_PASSWORD_CHANGE_FAILED_1'=>'User password change failed for ',
 	'JS_PASSWORD_CHANGE_FAILED_2'=>' failed.  The new password must be set.',
 	'JS_PASSWORD_INCORRECT_OLD'=>'Incorrect old password specified. Re-enter password information.',
+
+	'JS_NEW_ACCESS_KEY_REQUESTED' => 'chave New Access solicitado',
+	'JS_CHANGE_ACCESS_KEY_CONFIRMATION' => 'Você pediu para uma nova chave de acesso. &lt; br &gt;&lt;br &gt;Com a nova disposição fundamental Access, você tem que substituir a chave de acesso antigo com o novo, em todas as extensões instaladas. &lt; br &gt;&lt;br &gt;Do você quer continuar?',
 );
\ No newline at end of file
diff --git a/languages/ro_ro/Users.php b/languages/ro_ro/Users.php
index c61524dd..e7e12c0d 100644
--- a/languages/ro_ro/Users.php
+++ b/languages/ro_ro/Users.php
@@ -196,8 +196,11 @@ $languageStrings = array(
 	'LBL_DATE_FORMAT'		=> 'Format dată',
 	'LBL_CHOOSE_DATE_FORMAT'=> 'Alegeți Format dată',
 	'LBL_PHONE'	=> 'Telefon',
-);
 
+	'LBL_CHANGE_ACCESS_KEY' => 'Schimbare cheie de acces',
+	'LBL_ACCESS_KEY_UPDATED_SUCCESSFULLY' => 'Cheia de acces a fost actualizat',
+	'LBL_FAILED_TO_UPDATE_ACCESS_KEY' => 'Actualizarea nu a reușit cheie de acces',
+);
 $jsLanguageStrings = array(
 		
 	//Curency separator validation messages
@@ -210,4 +213,7 @@ $jsLanguageStrings = array(
 	'JS_PASSWORD_CHANGE_FAILED_1'=>'User password change failed for ',
 	'JS_PASSWORD_CHANGE_FAILED_2'=>' failed.  The new password must be set.',
 	'JS_PASSWORD_INCORRECT_OLD'=>'Incorrect old password specified. Re-enter password information.',
+
+	'JS_NEW_ACCESS_KEY_REQUESTED' => 'Tasta de acces nou solicitat',
+	'JS_CHANGE_ACCESS_KEY_CONFIRMATION' => 'Ați solicitat o nouă cheie de acces. &lt; br &gt;&lt;br &gt;cu acces noua prevedere cheie, trebuie să înlocuiți cheia de acces vechi cu unul nou, în toate extensiile instalate. &lt; br &gt;&lt;br &gt;Do doriți să continuați?',
 );
\ No newline at end of file
diff --git a/languages/ru_ru/Users.php b/languages/ru_ru/Users.php
index 7cde4578..a88a742f 100644
--- a/languages/ru_ru/Users.php
+++ b/languages/ru_ru/Users.php
@@ -196,8 +196,11 @@ $languageStrings = array(
 	'LBL_DATE_FORMAT'		=> 'Формат даты',
 	'LBL_CHOOSE_DATE_FORMAT'=> 'Выберите формат даты',
 	'LBL_PHONE'	=> 'Телефон',
-);
 
+	'LBL_CHANGE_ACCESS_KEY' => 'Изменение ключа доступа',
+	'LBL_ACCESS_KEY_UPDATED_SUCCESSFULLY' => 'Ключ доступа успешно обновлен',
+	'LBL_FAILED_TO_UPDATE_ACCESS_KEY' => 'Не удалось обновить ключ доступа',
+);
 $jsLanguageStrings = array(
 		
 	//Curency separator validation messages
@@ -210,4 +213,7 @@ $jsLanguageStrings = array(
 	'JS_PASSWORD_CHANGE_FAILED_1'=>'User password change failed for ',
 	'JS_PASSWORD_CHANGE_FAILED_2'=>' failed.  The new password must be set.',
 	'JS_PASSWORD_INCORRECT_OLD'=>'Incorrect old password specified. Re-enter password information.',
+
+	'JS_NEW_ACCESS_KEY_REQUESTED' => 'Ключ доступа Новый просил',
+	'JS_CHANGE_ACCESS_KEY_CONFIRMATION' => 'Вы запросили для нового ключа доступа & л;. Бр & GT; & л; BR & GT; с новым ключом предоставления доступа, вы должны заменить старый ключ доступа с новым во всех установленных расширений и ЛТ;. Бр & GT; & л; BR & GT; Do вы хотите продолжить?',
 );
\ No newline at end of file
diff --git a/languages/tr_tr/Users.php b/languages/tr_tr/Users.php
index bb94df39..9c6e3c3d 100644
--- a/languages/tr_tr/Users.php
+++ b/languages/tr_tr/Users.php
@@ -196,8 +196,11 @@ $languageStrings = array(
 		'LBL_DATE_FORMAT'		=> 'Tarih Biçimi',
 		'LBL_CHOOSE_DATE_FORMAT'=> 'Tarih Biçimi seçin',
 		'LBL_PHONE'	=> 'Telefon',
-);
 
+	'LBL_CHANGE_ACCESS_KEY' => 'Değişim Erişim Anahtarı',
+	'LBL_ACCESS_KEY_UPDATED_SUCCESSFULLY' => 'Erişim tuşu başarıyla güncellendi',
+	'LBL_FAILED_TO_UPDATE_ACCESS_KEY' => 'erişim anahtarı güncellenemedi',
+);
 $jsLanguageStrings = array(
 		
 	//Curency separator validation messages
@@ -210,4 +213,7 @@ $jsLanguageStrings = array(
 	'JS_PASSWORD_CHANGE_FAILED_1'=>'User password change failed for ',
 	'JS_PASSWORD_CHANGE_FAILED_2'=>' failed.  The new password must be set.',
 	'JS_PASSWORD_INCORRECT_OLD'=>'Incorrect old password specified. Re-enter password information.',
+
+	'JS_NEW_ACCESS_KEY_REQUESTED' => 'Yeni Erişim anahtarı talep',
+	'JS_CHANGE_ACCESS_KEY_CONFIRMATION' => 'Yeni Erişim anahtarı için istenen & lt olması,. Br &gt;&lt;br & gt;. Yeni Erişim tuşu hüküm ile, yeni yüklü tüm uzantıları biri & lt eski erişim anahtarı değiştirmek zorunda; br &gt;&lt;br &gt;Do devam etmek istiyor musunuz?',
 );
\ No newline at end of file
diff --git a/layouts/vlayout/modules/Users/PreferenceDetailViewHeader.tpl b/layouts/vlayout/modules/Users/PreferenceDetailViewHeader.tpl
index 95fea5ce..d6fd6e29 100644
--- a/layouts/vlayout/modules/Users/PreferenceDetailViewHeader.tpl
+++ b/layouts/vlayout/modules/Users/PreferenceDetailViewHeader.tpl
@@ -49,6 +49,20 @@
                                     </button>
                                 </div>
                             {/foreach}
+							{if $DETAILVIEW_LINKS['DETAILVIEW']|@count gt 0}
+								<span class="btn-group">
+									<button class="btn dropdown-toggle" data-toggle="dropdown" href="javascript:void(0);">
+										<strong>{vtranslate('LBL_MORE', $MODULE_NAME)}</strong>&nbsp;&nbsp;<i class="caret"></i>
+									</button>
+									<ul class="dropdown-menu pull-right">
+										{foreach item=DETAIL_VIEW_LINK from=$DETAILVIEW_LINKS['DETAILVIEW']}
+											<li id="{$MODULE_NAME}_detailView_moreAction_{Vtiger_Util_Helper::replaceSpaceWithUnderScores($DETAIL_VIEW_LINK->getLabel())}">
+												<a href={$DETAIL_VIEW_LINK->getUrl()} >{vtranslate($DETAIL_VIEW_LINK->getLabel(), $MODULE_NAME)}</a>
+											</li>
+										{/foreach}
+									</ul>
+								</span>
+							{/if}
                         </div>
                     </div>
                 </div>
diff --git a/layouts/vlayout/modules/Users/resources/Detail.js b/layouts/vlayout/modules/Users/resources/Detail.js
index 0fa19b6c..2493ef1b 100644
--- a/layouts/vlayout/modules/Users/resources/Detail.js
+++ b/layouts/vlayout/modules/Users/resources/Detail.js
@@ -171,7 +171,31 @@ Vtiger_Detail_Js("Users_Detail_Js",{
 				}
 			}
 		);
-	}
+	},
+
+	triggerChangeAccessKey: function (url) {
+		var title = app.vtranslate('JS_NEW_ACCESS_KEY_REQUESTED');
+		var message = app.vtranslate('JS_CHANGE_ACCESS_KEY_CONFIRMATION');
+		Vtiger_Helper_Js.showConfirmationBox({'title': title,'message': message}).then(function (data) {
+			AppConnector.request(url).then(function(data) {
+				var params = {};
+				if(data['success']) {
+					data = data.result;
+					params['type'] = 'success';
+					message = app.vtranslate(data.message);
+					var accessKeyEle = jQuery('#Users_detailView_fieldValue_accesskey');
+					if (accessKeyEle.length) {
+						accessKeyEle.find('.value').html(data.accessKey);
+					}
+				} else {
+					message = app.vtranslate(data['error']['message']);
+				}
+				params['text'] = message;
+				Vtiger_Helper_Js.showPnotify(params);
+			});
+		});
+	},
+
 },{
 	
 	usersEditInstance : false,
diff --git a/modules/Users/actions/SaveAjax.php b/modules/Users/actions/SaveAjax.php
index d4568076..f66745de 100644
--- a/modules/Users/actions/SaveAjax.php
+++ b/modules/Users/actions/SaveAjax.php
@@ -15,6 +15,7 @@ class Users_SaveAjax_Action extends Vtiger_SaveAjax_Action {
 		parent::__construct();
 		$this->exposeMethod('userExists');
 		$this->exposeMethod('savePassword');
+		$this->exposeMethod('changeAccessKey');
                 $this->exposeMethod('restoreUser');
 	}
 
@@ -144,4 +145,33 @@ class Users_SaveAjax_Action extends Vtiger_SaveAjax_Action {
 		$response->setResult(array('message'=>vtranslate('LBL_USER_RESTORED_SUCCESSFULLY', $moduleName), 'listViewUrl' => $listViewUrl));
 		$response->emit();
         }
-        }
+	
+	public function changeAccessKey(Vtiger_Request $request) {
+		$recordId = $request->get('record');
+		$moduleName = $request->getModule();
+
+		$response = new Vtiger_Response();
+		try {
+			$recordModel = Users_Record_Model::getInstanceById($recordId, $moduleName);
+			$oldAccessKey = $recordModel->get('accesskey');
+
+			$entity = $recordModel->getEntity();
+			$entity->createAccessKey();
+
+			require_once('modules/Users/CreateUserPrivilegeFile.php');
+			createUserPrivilegesfile($recordId);
+
+			$recordModel = Users_Record_Model::getInstanceFromPreferenceFile($recordId);
+			$newAccessKey = $recordModel->get('accesskey');
+
+			if ($newAccessKey != $oldAccessKey) {
+				$response->setResult(array('message' => vtranslate('LBL_ACCESS_KEY_UPDATED_SUCCESSFULLY', $moduleName), 'accessKey' => $newAccessKey));
+			} else {
+				$response->setError(vtranslate('LBL_FAILED_TO_UPDATE_ACCESS_KEY', $moduleName));
+			}
+		} catch (Exception $ex) {
+			$response->setError($ex->getMessage());
+		}
+		$response->emit();
+	}
+}
diff --git a/modules/Users/models/DetailView.php b/modules/Users/models/DetailView.php
index 2e787426..368b8014 100644
--- a/modules/Users/models/DetailView.php
+++ b/modules/Users/models/DetailView.php
@@ -22,6 +22,7 @@ class Users_DetailView_Model extends Vtiger_DetailView_Model {
 		$recordModel = $this->getRecord();
 		$recordId = $recordModel->getId();
 
+		$linkModelList = array();
 		if (($currentUserModel->isAdminUser() == true || $currentUserModel->get('id') == $recordId) && $recordModel->get('status') == 'Active' ) {
 			$recordModel = $this->getRecord();
 
@@ -32,12 +33,6 @@ class Users_DetailView_Model extends Vtiger_DetailView_Model {
 				'linkurl' => $recordModel->getEditViewUrl(),
 				'linkicon' => ''
 				),
-				array(
-					'linktype' => 'DETAILVIEWBASIC',
-					'linklabel' => 'LBL_CHANGE_PASSWORD',
-					'linkurl' => "javascript:Users_Detail_Js.triggerChangePassword('index.php?module=Users&view=EditAjax&mode=changePassword&recordId=$recordId','Users')",
-					'linkicon' => ''
-				)
 			);
 
 			foreach ($detailViewLinks as $detailViewLink) {
@@ -45,12 +40,6 @@ class Users_DetailView_Model extends Vtiger_DetailView_Model {
 			}
 			
 			$detailViewPreferenceLinks = array(
-				array(
-					'linktype' => 'DETAILVIEWPREFERENCE',
-					'linklabel' => 'LBL_CHANGE_PASSWORD',
-					'linkurl' => "javascript:Users_Detail_Js.triggerChangePassword('index.php?module=Users&view=EditAjax&mode=changePassword&recordId=$recordId','Users')",
-					'linkicon' => ''
-				),
 				array(
 					'linktype' => 'DETAILVIEWPREFERENCE',
 					'linklabel' => 'LBL_EDIT',
@@ -72,12 +61,24 @@ class Users_DetailView_Model extends Vtiger_DetailView_Model {
 						'linkicon' => ''
 					)
 				);
+			}
+			$detailViewActionLinks[] = array(
+						'linktype' => 'DETAILVIEW',
+						'linklabel' => 'LBL_CHANGE_PASSWORD',
+						'linkurl' => "javascript:Users_Detail_Js.triggerChangePassword('index.php?module=Users&view=EditAjax&mode=changePassword&recordId=$recordId','Users')",
+						'linkicon' => ''
+			);
+			$detailViewActionLinks[] = array(
+						'linktype'	=> 'DETAILVIEW',
+						'linklabel' => 'LBL_CHANGE_ACCESS_KEY',
+						'linkurl'	=> "javascript:Users_Detail_Js.triggerChangeAccessKey('index.php?module=Users&action=SaveAjax&mode=changeAccessKey&record=$recordId')",
+						'linkicon'	=> ''
+			);
 
-				foreach ($detailViewActionLinks as $detailViewLink) {
-					$linkModelList['DETAILVIEW'][] = Vtiger_Link_Model::getInstanceFromValues($detailViewLink);
-				}
+			foreach ($detailViewActionLinks as $detailViewLink) {
+				$linkModelList['DETAILVIEW'][] = Vtiger_Link_Model::getInstanceFromValues($detailViewLink);
 			}
-			return $linkModelList;
 		}
+		return $linkModelList;
 	}
 }
\ No newline at end of file
diff --git a/modules/Users/models/Record.php b/modules/Users/models/Record.php
index e45c90ec..c2fcd094 100644
--- a/modules/Users/models/Record.php
+++ b/modules/Users/models/Record.php
@@ -165,6 +165,15 @@ class Users_Record_Model extends Vtiger_Record_Model {
 		return new self();
 	}
 
+	/**
+	 * Function to return user object from preference file.
+	 */
+	public static function getInstanceFromPreferenceFile($userId) {
+		$focusObj = new Users();
+		$focusObj->retrieveCurrentUserInfoFromFile($userId);
+		return self::getInstanceFromUserObject($focusObj);
+	}
+
 	/**
 	 * Static Function to get the instance of the User Record model from the given Users object
 	 * @return Users_Record_Model instance
diff --git a/packages/vtiger/optional/Arabic_ar_ae.zip b/packages/vtiger/optional/Arabic_ar_ae.zip
index feea19561325060f26489f3712474333e0bfd9f2..84cdd0d97e0637365fe04dd568f772b89a60ac2e 100644
GIT binary patch
delta 13387
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

delta 11764
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
EKhdDe6aWAK

diff --git a/pkg/vtiger/translations/Arabic_ar_ae/modules/Users.php b/pkg/vtiger/translations/Arabic_ar_ae/modules/Users.php
index 7b6cd873..6dc5338a 100644
--- a/pkg/vtiger/translations/Arabic_ar_ae/modules/Users.php
+++ b/pkg/vtiger/translations/Arabic_ar_ae/modules/Users.php
@@ -186,8 +186,11 @@ $languageStrings = array(
     'LBL_DELETE_USER_PERMANENTLY' => 'حذف العضو بشكل دائم',
     'LBL_RESTORE' => 'استعادة',
     'LBL_USER_RESTORED_SUCCESSFULLY' => 'المستخدم استعادة بنجاح',
-);
 
+	'LBL_CHANGE_ACCESS_KEY' => 'تغيير مفتاح الوصول',
+	'LBL_ACCESS_KEY_UPDATED_SUCCESSFULLY' => 'مفتاح الوصول بنجاح تحديث',
+	'LBL_FAILED_TO_UPDATE_ACCESS_KEY' => 'فشل تحديث مفتاح الوصول',
+);
 $jsLanguageStrings = array(
 		
 	//Curency separator validation messages
@@ -200,5 +203,7 @@ $jsLanguageStrings = array(
 	'JS_PASSWORD_CHANGE_FAILED_1'=>'User password change failed for ',
 	'JS_PASSWORD_CHANGE_FAILED_2'=>' failed.  The new password must be set.',
 	'JS_PASSWORD_INCORRECT_OLD'=>'Incorrect old password specified. Re-enter password information.',
-);
 
+	'JS_NEW_ACCESS_KEY_REQUESTED' => 'طلب مفتاح وصول جديدة',
+	'JS_CHANGE_ACCESS_KEY_CONFIRMATION' => 'لقد طلبت للحصول على مفتاح وصول جديد العلامة & lt؛ BR & GT؛ & اللفتنانت؛ ر & GT؛ مع وصول الحكم الرئيسي الجديد، لديك ليحل محل مفتاح الوصول القديم مع واحدة جديدة في جميع ملحقات تثبيت العلامة & lt؛ BR & GT؛ & اللفتنانت؛ ر & GT، هل هل ترغب في الاستمرار؟',
+);
\ No newline at end of file
-- 
GitLab