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. < br ><br >Mit dem neuen Access-Schlüsselbestimmung, können Sie die alten Zugriffsschlüssel mit dem neuen in allen installierten Erweiterungen zu ersetzen haben. < br ><br >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.<br><br>With the new Access key provision, you have to replace the old access key with the new one in all installed extensions.<br><br>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.<br><br>With the new Access key provision, you have to replace the old access key with the new one in all installed extensions.<br><br>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. < br ><br >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. < br ><br >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. < br ><br >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. < br ><br >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. <br><br >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. <br><br >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. < br ><br >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. < br ><br >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. < br ><br >Con la nuova disposizione chiave di accesso, è necessario sostituire la chiave di accesso vecchio con quello nuovo in tutte le estensioni installate. < br ><br >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. < br ><br >Met de nieuwe Access belangrijkste bepaling, moet u de oude toegang toets met het nieuwe in alle geïnstalleerde extensies & lt vervangen;. Br ><br >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. < br ><br >Z nowego przepisu klucz dostÄ™pu, trzeba zastÄ…pić stary klucz dostÄ™pu z nowÄ… we wszystkich zainstalowanych rozszerzeÅ„. < br ><br >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. < br ><br >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. < br ><br >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. < br ><br >cu acces noua prevedere cheie, trebuie să înlocuiÈ›i cheia de acces vechi cu unul nou, în toate extensiile instalate. < br ><br >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 ><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 ><br >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> <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