action audio and video

pull/7748/head
Guilherme Gazzo 8 years ago
parent d395d7a3dd
commit 1b385ad685
  1. 2
      .docker/Dockerfile
  2. 2
      .sandstorm/sandstorm-pkgdef.capnp
  3. 3
      .scripts/set-version.js
  4. 2
      .travis/snap.sh
  5. 2
      package.json
  6. 6
      packages/rocketchat-api/server/v1/users.js
  7. 8
      packages/rocketchat-channel-settings/client/startup/trackSettingsChange.js
  8. 33
      packages/rocketchat-channel-settings/client/views/channelSettings.js
  9. 34
      packages/rocketchat-channel-settings/server/functions/saveRoomName.js
  10. 464
      packages/rocketchat-i18n/i18n/ar.i18n.json
  11. 197
      packages/rocketchat-i18n/i18n/ca.i18n.json
  12. 201
      packages/rocketchat-i18n/i18n/cs.i18n.json
  13. 16
      packages/rocketchat-i18n/i18n/de.i18n.json
  14. 319
      packages/rocketchat-i18n/i18n/en.i18n.json
  15. 2
      packages/rocketchat-i18n/i18n/es.i18n.json
  16. 2
      packages/rocketchat-i18n/i18n/fr.i18n.json
  17. 697
      packages/rocketchat-i18n/i18n/it.i18n.json
  18. 3
      packages/rocketchat-i18n/i18n/mn.i18n.json
  19. 2
      packages/rocketchat-i18n/i18n/pt-BR.i18n.json
  20. 2
      packages/rocketchat-i18n/i18n/pt.i18n.json
  21. 707
      packages/rocketchat-i18n/i18n/ru.i18n.json
  22. 2
      packages/rocketchat-i18n/i18n/sq.i18n.json
  23. 57
      packages/rocketchat-i18n/i18n/th-TH.i18n.json
  24. 3
      packages/rocketchat-i18n/i18n/zh.i18n.json
  25. 46
      packages/rocketchat-lib/lib/getValidRoomName.js
  26. 3
      packages/rocketchat-lib/package.js
  27. 2
      packages/rocketchat-lib/rocketchat.info
  28. 29
      packages/rocketchat-lib/server/functions/createRoom.js
  29. 5
      packages/rocketchat-lib/server/functions/saveCustomFieldsWithoutValidation.js
  30. 11
      packages/rocketchat-lib/server/lib/loginErrorMessageOverride.js
  31. 44
      packages/rocketchat-lib/server/lib/sendNotificationsOnMessage.js
  32. 11
      packages/rocketchat-lib/server/methods/updateMessage.js
  33. 23
      packages/rocketchat-lib/server/models/Rooms.js
  34. 4
      packages/rocketchat-lib/server/models/Subscriptions.js
  35. 9
      packages/rocketchat-lib/server/models/Users.js
  36. 42
      packages/rocketchat-lib/server/startup/settings.js
  37. 68
      packages/rocketchat-lib/startup/defaultRoomTypes.js
  38. 21
      packages/rocketchat-livechat/app/i18n/ar.i18n.json
  39. 44
      packages/rocketchat-livechat/app/i18n/it.i18n.json
  40. 3
      packages/rocketchat-livechat/app/i18n/mn.i18n.json
  41. 8
      packages/rocketchat-livechat/app/i18n/ru.i18n.json
  42. 46
      packages/rocketchat-livechat/app/i18n/th-TH.i18n.json
  43. 4
      packages/rocketchat-livechat/app/i18n/zh.i18n.json
  44. 23
      packages/rocketchat-markdown/markdown.js
  45. 2
      packages/rocketchat-message-snippet/client/messageType.js
  46. 2
      packages/rocketchat-message-snippet/client/tabBar/views/snippetMessage.js
  47. 8
      packages/rocketchat-push-notifications/client/views/pushNotificationsFlexTab.html
  48. 35
      packages/rocketchat-push-notifications/client/views/pushNotificationsFlexTab.js
  49. 39
      packages/rocketchat-push-notifications/server/models/Subscriptions.js
  50. 23
      packages/rocketchat-theme/client/imports/general/base_old.css
  51. 18
      packages/rocketchat-theme/client/main.css
  52. 24
      packages/rocketchat-ui-account/client/accountPreferences.html
  53. 18
      packages/rocketchat-ui-account/client/accountPreferences.js
  54. 3
      packages/rocketchat-ui-master/client/main.js
  55. 2
      packages/rocketchat-ui-message/client/messageBox.js
  56. 2
      packages/rocketchat-ui-message/package.js
  57. 32
      packages/rocketchat-ui-message/startup/messageBoxActions.js
  58. 4
      packages/rocketchat-ui-sidenav/client/chatRoomItem.js
  59. 6
      packages/rocketchat-ui-sidenav/client/createCombinedFlex.js
  60. 27
      packages/rocketchat-ui-vrecord/client/VRecDialog.js
  61. 2
      packages/rocketchat-ui-vrecord/client/vrecord.html
  62. 3
      packages/rocketchat-ui-vrecord/client/vrecord.less
  63. 6
      packages/rocketchat-ui/client/lib/RoomManager.js
  64. 14
      packages/rocketchat-ui/client/lib/chatMessages.js
  65. 2
      packages/rocketchat-ui/client/lib/fileUpload.js
  66. 14
      packages/rocketchat-ui/client/views/app/createChannel.js
  67. 70
      packages/rocketchat-ui/client/views/app/room.js
  68. 7
      server/methods/saveUserPreferences.js
  69. 1
      server/publications/room.js

@ -1,6 +1,6 @@
FROM rocketchat/base:4
ENV RC_VERSION 0.58.0-develop
ENV RC_VERSION 0.59.0-develop
MAINTAINER buildmaster@rocket.chat

@ -21,7 +21,7 @@ const pkgdef :Spk.PackageDefinition = (
appVersion = 62, # Increment this for every release.
appMarketingVersion = (defaultText = "0.58.0-develop"),
appMarketingVersion = (defaultText = "0.59.0-develop"),
# Human-readable representation of appVersion. Should match the way you
# identify versions of your app in documentation and marketing.

@ -56,6 +56,9 @@ git.status()
if (status.current === 'master') {
return semver.inc(pkgJson.version, 'patch');
}
if (status.current === 'develop') {
return semver.inc(semver.inc(pkgJson.version, 'minor'), 'minor')+'-develop';
}
return Promise.reject(`No release action for branch ${ status.current }`);
})
.then(nextVersion => inquirer.prompt([{

@ -17,7 +17,7 @@ elif [[ $TRAVIS_TAG ]]; then
RC_VERSION=$TRAVIS_TAG
else
CHANNEL=edge
RC_VERSION=0.58.0-develop
RC_VERSION=0.59.0-develop
fi
echo "Preparing to trigger a snap release for $CHANNEL channel"

@ -1,7 +1,7 @@
{
"name": "Rocket.Chat",
"description": "The Ultimate Open Source WebChat Platform",
"version": "0.58.0-develop",
"version": "0.59.0-develop",
"author": {
"name": "Rocket.Chat",
"url": "https://rocket.chat/"

@ -195,7 +195,11 @@ RocketChat.API.v1.addRoute('users.resetAvatar', { authRequired: true }, {
RocketChat.API.v1.addRoute('users.setAvatar', { authRequired: true }, {
post() {
check(this.bodyParams, { avatarUrl: Match.Maybe(String), userId: Match.Maybe(String) });
check(this.bodyParams, Match.ObjectIncluding({
avatarUrl: Match.Maybe(String),
userId: Match.Maybe(String),
username: Match.Maybe(String)
}));
let user;
if (this.isUserFromParams()) {

@ -22,9 +22,11 @@ Meteor.startup(function() {
Tracker.nonreactive(() => {
if (msg.t === 'r') {
if (Session.get('openedRoom') === msg.rid) {
const type = FlowRouter.current().route.name === 'channel' ? 'c' : 'p';
RoomManager.close(type + FlowRouter.getParam('name'));
FlowRouter.go(FlowRouter.current().route.name, { name: msg.msg }, FlowRouter.current().queryParams);
const room = ChatRoom.findOne(msg.rid);
if (room.name !== FlowRouter.getParam('name')) {
RoomManager.close(room.t + FlowRouter.getParam('name'));
RocketChat.roomTypes.openRouteLink(room.t, room, FlowRouter.current().queryParams);
}
}
}
});

@ -16,6 +16,9 @@ Template.channelSettings.helpers({
}
return true;
}
if (this.$value.getValue) {
return this.$value.getValue(obj, key);
}
return obj && obj[key];
},
showSetting(setting, room) {
@ -152,22 +155,30 @@ Template.channelSettings.onCreated(function() {
canEdit(room) {
return RocketChat.authz.hasAllPermission('edit-room', room._id);
},
getValue(room) {
if (RocketChat.settings.get('UI_Allow_room_names_with_special_chars')) {
return room.fname || room.name;
}
return room.name;
},
save(value, room) {
let nameValidation;
if (!RocketChat.authz.hasAllPermission('edit-room', room._id) || (room.t !== 'c' && room.t !== 'p')) {
return toastr.error(t('error-not-allowed'));
}
try {
nameValidation = new RegExp(`^${ RocketChat.settings.get('UTF8_Names_Validation') }$`);
} catch (error1) {
nameValidation = new RegExp('^[0-9a-zA-Z-_.]+$');
}
if (!nameValidation.test(value)) {
return toastr.error(t('error-invalid-room-name', {
room_name: {
name: value
}
}));
if (!RocketChat.settings.get('UI_Allow_room_names_with_special_chars')) {
try {
nameValidation = new RegExp(`^${ RocketChat.settings.get('UTF8_Names_Validation') }$`);
} catch (error1) {
nameValidation = new RegExp('^[0-9a-zA-Z-_.]+$');
}
if (!nameValidation.test(value)) {
return toastr.error(t('error-invalid-room-name', {
room_name: {
name: value
}
}));
}
}
Meteor.call('saveRoomSettings', room._id, 'roomName', value, function(err) {
if (err) {

@ -1,35 +1,21 @@
RocketChat.saveRoomName = function(rid, name, user, sendMessage = true) {
RocketChat.saveRoomName = function(rid, displayName, user, sendMessage = true) {
const room = RocketChat.models.Rooms.findOneById(rid);
if (room.t !== 'c' && room.t !== 'p') {
throw new Meteor.Error('error-not-allowed', 'Not allowed', {
'function': 'RocketChat.saveRoomName'
'function': 'RocketChat.saveRoomdisplayName'
});
}
let nameValidation;
try {
nameValidation = new RegExp(`^${ RocketChat.settings.get('UTF8_Names_Validation') }$`);
} catch (error) {
nameValidation = new RegExp('^[0-9a-zA-Z-_.]+$');
}
if (!nameValidation.test(name)) {
throw new Meteor.Error('error-invalid-room-name', `${ name } is not a valid room name. Use only letters, numbers, hyphens and underscores`, {
'function': 'RocketChat.saveRoomName',
room_name: name
});
}
if (name === room.name) {
if (displayName === room.name) {
return;
}
if (RocketChat.models.Rooms.findOneByName(name)) {
throw new Meteor.Error('error-duplicate-channel-name', `A channel with name '${ name }' exists`, {
'function': 'RocketChat.saveRoomName',
channel_name: name
});
}
const update = RocketChat.models.Rooms.setNameById(rid, name) && RocketChat.models.Subscriptions.updateNameAndAlertByRoomId(rid, name);
const slugifiedRoomName = RocketChat.getValidRoomName(displayName, rid);
const update = RocketChat.models.Rooms.setNameById(rid, slugifiedRoomName, displayName) && RocketChat.models.Subscriptions.updateNameAndAlertByRoomId(rid, slugifiedRoomName, displayName);
if (update && sendMessage) {
RocketChat.models.Messages.createRoomRenamedWithRoomIdRoomNameAndUser(rid, name, user);
RocketChat.models.Messages.createRoomRenamedWithRoomIdRoomNameAndUser(rid, displayName, user);
}
return name;
return displayName;
};

File diff suppressed because it is too large Load Diff

@ -133,6 +133,7 @@
"Add_custom_oauth": "Afegeix OAuth personalitzat",
"Add_Domain": "Afegir domini",
"Add_manager": "Afegeix supervisor",
"Add_Role": "Afegeix rol",
"Add_user": "Afegeix usuari",
"Add_User": "Afegeix usuari",
"Add_users": "Afegeix usuaris",
@ -279,6 +280,7 @@
"Cancel": "Cancel·la",
"Cancel_message_input": "Cancel·la",
"Cannot_invite_users_to_direct_rooms": "No es pot convidar els usuaris a les sales directes",
"Cannot_open_conversation_with_yourself": "No es pot obrir una conversa amb un mateix",
"CAS_autoclose": "Tancar automàticament la finestra emergent d'inici de sessió",
"CAS_base_url": "Adreça URL SSO base",
"CAS_base_url_Description": "Adreça URL base del servei extern SSO. Ex: https://sso.example.undef/sso/",
@ -315,6 +317,7 @@
"Chat_button": "botó de xat",
"Chat_closed": "Xat tancat",
"Chat_closed_successfully": "Xat tancat correctament",
"Chat_Now": "Xateja ara",
"Chat_window": "finestra de xat",
"Chatops_Enabled": "Activa Chatops",
"Chatops_Title": "Tauler de Chatops",
@ -329,6 +332,8 @@
"Clear_all_unreads_question": "Esborrar tots els missatges no llegits?",
"Click_here": "Fes clic aquí",
"Click_here_for_more_info": "Fes clic aquí per a més informació",
"UI_Click_Direct_Message": "Clica per crear un missatge directe",
"UI_Click_Direct_Message_Description": "Evita obrir la pestanya del perfil, vés directe a la conversa",
"Client_ID": "Client ID",
"Client_Secret": "Client Secret",
"Clients_will_refresh_in_a_few_seconds": "Els clients es refrescaran en breus instants",
@ -413,10 +418,12 @@
"Desktop": "Escriptori",
"Desktop_Notification_Test": "Prova de notificació d'escriptori",
"Desktop_Notifications": "Notificacions d'escriptori",
"Desktop_Notifications_Default_Alert": "Alerta per defecte per a les notificacions d'escriptori",
"Desktop_Notifications_Disabled": "Les notificacions d'escriptori han estat desactivades. Canvia les preferències del navegador si vols tornar a activar-les.",
"Desktop_Notifications_Duration": "Durada de les notificacions d'escriptori",
"Desktop_Notifications_Duration_Description": "Segons de mostra de les notificacions d'escriptori. Això pot afectar al centre de notificacions del macOS. Introduïu 0 per utilitzar la configuració del navegador per defecte i no afectar al centre de notificacions.",
"Desktop_Notifications_Enabled": "Les notificacions d'escriptori estan activades",
"Different_Style_For_User_Mentions": "Estil diferent per les mencions d'usuari",
"Direct_message_someone": "Envia un missatge directe a algú",
"Direct_Messages": "Missatges directes",
"Disable_Notifications": "Desactiva notificacions",
@ -524,7 +531,7 @@
"error-invalid-redirectUri": "Redirecció URI invàlida",
"error-invalid-role": "Rol no vàlid",
"error-invalid-room": "Sala no vàlida",
"error-invalid-room-name": "<strong>__room_name__</strong> no és un nom de sala vàlid,<br/> utilitzeu només lletres, números, guions i guions baixos",
"error-invalid-room-name": "<strong>__room_name__</strong> no és un nom de sala vàlid",
"error-invalid-room-type": "<strong>__type__</strong> no és un tipus vàlid de sala.",
"error-invalid-settings": "La configuració proporcionada no és vàlida",
"error-invalid-subscription": "Subscripció no vàlida",
@ -592,10 +599,12 @@
"FileUpload_MediaTypeWhiteListDescription": "Llista de tipus d'arxiu separada per comes. Deixa-la en blanc per acceptar tots els tipus.",
"FileUpload_ProtectFiles": "Protegir els arxius pujats",
"FileUpload_ProtectFilesDescription": "Només els usuaris identificats hi tindran accés",
"FileUpload_S3_Acl": "Amazon S3 acl",
"FileUpload_S3_AWSAccessKeyId": "Amazon S3 AWSAccessKeyID",
"FileUpload_S3_AWSSecretAccessKey": "Amazon S3 AWSSecretAccessKey",
"FileUpload_S3_Bucket": "Amazon S3 BucketName",
"FileUpload_S3_Acl": "Acl",
"FileUpload_S3_AWSAccessKeyId": "Access Key",
"FileUpload_S3_AWSSecretAccessKey": "Secret Key",
"FileUpload_S3_Bucket": "Bucket Name",
"FileUpload_S3_SignatureVersion": "Signature Version",
"FileUpload_S3_ForcePathStyle": "Force Path Style",
"FileUpload_S3_BucketURL": "Bucket URL",
"FileUpload_S3_CDN": "Domini CDN per descàrregues",
"FileUpload_S3_Region": "Regió S3",
@ -634,6 +643,7 @@
"GoogleCloudStorage": "Emmagatzematge Google Cloud",
"GoogleNaturalLanguage_ServiceAccount_Description": "Arxiu JSON amb la clau del compte de servei (\"Service account key\"). Pots trobar més informació [aquí](https://cloud.google.com/natural-language/docs/common/auth#set_up_a_service_account)",
"GoogleTagManager_id": "ID de Google Tag Manager",
"Group_mentions_only": "Només mencions de grup",
"Guest_Pool": "Llista de clients",
"Hash": "Hash",
"Header": "Encapçalament",
@ -762,7 +772,7 @@
"Invalid_name": "El nom no ha d'estar buit",
"Invalid_notification_setting_s": "Configuració de notificació invàlida: %s",
"Invalid_pass": "La contrasenya no ha d'estar buida",
"Invalid_room_name": "<strong>%s</strong> no és un nom de sala vàlid,<br/> utilitza només lletres, números, guions i guions baixos",
"Invalid_room_name": "<strong>%s</strong> no és un nom de sala vàlid",
"Invalid_secret_URL_message": "L'adreça URL proporcionada no és vàlida.",
"Invalid_setting_s": "Opció invàlida: %s",
"Invalid_two_factor_code": "Codi de dos factors invàlid",
@ -807,6 +817,12 @@
"Join_default_channels": "Unir-se als canals predeterminats",
"Join_the_Community": "Uneix-te a la comunitat",
"Join_the_given_channel": "Unir-se al canal proporcionat",
"Show_the_keyboard_shortcut_list": "Mostra la llista de dreceres de teclat",
"Open_channel_user_search": "`%s` - Obre canal / Cerca usuari",
"Edit_previous_message": "`%s` - Edita el missatge anterior",
"Move_beginning_message": "`%s` - Anar al principi del missatge",
"Move_end_message": "`%s` - Anar al final del missatge",
"New_line_message_compose_input": "`%s` - Nova línia a l'entrada de missatge",
"Join_video_call": "Unir-se a la videotrucada",
"Joined": "Unit",
"Jump": "Vés",
@ -1006,6 +1022,7 @@
"Message_MaxAll": "Mida màxima de canal per al missatge ALL",
"Message_MaxAllowedSize": "Mida màxima de missatge",
"Message_pinning": "Fixació de missatges",
"Message_QuoteChainLimit": "Màxim nombre de cites encadenades",
"Message_removed": "Missatge eliminat",
"Message_SetNameToAliasEnabled": "Establir un nom d'usuari com àlies al missatge",
"Message_SetNameToAliasEnabled_Description": "Només si encara no s'ha establert àlies. Els àlies dels missatges antics no es canvien si l'usuari ha canviat el nom.",
@ -1032,6 +1049,7 @@
"Min_length_is": "La llargada mínima és %s",
"minutes": "minuts",
"Mobile": "Mòbil",
"Mobile_Notifications_Default_Alert": "Alerta per defecte notificacions mòbil",
"Monday": "dilluns",
"Monitor_history_for_changes_on": "Monitoritza l'historial per canvis a ",
"More_channels": "Més canals",
@ -1088,9 +1106,12 @@
"Not_found_or_not_allowed": "No trobat o no permès",
"Nothing": "Res",
"Nothing_found": "No s'ha trobat res",
"Notification_Desktop_Default_For": "Mostra notificacions d'escriptori per",
"Notification_Mobile_Default_For": "Notificacions push mòbil per",
"Notification_Duration": "Duració de la notificació",
"Notifications": "Notificacions",
"Notifications_Muted_Description": "Si esculls silenciar-ho tot, no veuràs la sala destacada a la llista quan hi hagi nous missatges, excepte si són mencions. Silenciar les notificacions sobreescriurà les opcions de notificació.",
"Notifications_Sound_Volume": "Volum del so de notificacions",
"Notify_all_in_this_room": "Notifica a tothom d'aquest canal",
"Notify_active_in_this_room": "Notifica als usuaris actius d'aquesta sala",
"Num_Agents": "# d'agents",
@ -1155,10 +1176,160 @@
"People": "Gent",
"Permalink": "Enllaç permanent (Permalink)",
"Permissions": "Permisos",
"access-mailer": "Accedir a la pantalla d'enviament",
"access-mailer_description": "Permís per enviar correu-e massiu a tots els usuaris",
"access-permissions": "Accés a la pantalla de permisos",
"access-permissions_description": "Modifica permisos per a diversos rols",
"add-oauth-service": "Afegir servei Oauth",
"add-oauth-service_description": "Permís per afegir nous serveis Oauth",
"add-user": "Afegir usuari",
"add-user_description": "Permís per afegir nous usuaris al servidor via la pantalla d'usuaris",
"add-user-to-any-c-room": "Afegir usuari a canal públic",
"add-user-to-any-c-room_description": "Permís per afegir un usuari a qualsevol canal públic",
"add-user-to-any-p-room": "Afegir usuari a canal privat",
"add-user-to-any-p-room_description": "Permís per afegir un usuari a qualsevol canal privat",
"add-user-to-joined-room": "Afegir usuari a canal on unit",
"add-user-to-joined-room_description": "Permís per afegir un usuari a un canal on està unit",
"archive-room": "Arxivar sala",
"archive-room_description": "Permís per arxivar un canal",
"assign-admin-role": "Assignar rol d'administrador",
"assign-admin-role_description": "Permís per assignar el rol d'administrador a altres usuaris",
"auto-translate": "Auto-traducció",
"auto-translate_description": "Permís per utilitzar l'eina d'auto-traducció",
"ban-user": "Banejar usuari",
"ban-user_description": "Permís per banejar un usuari d'un canal",
"bulk-create-c": "Crear canals en massa",
"bulk-create-c_description": "Permís per a crear canals en massa",
"bulk-register-user": "Crear canals en massa",
"bulk-register-user_description": "Permís per a crear canals en massa",
"clean-channel-history": "Esborrar l'historial de canal",
"clean-channel-history_description": "Permís per esborrar l'historial dels canals",
"close-livechat-room": "Tancar sala de xat en viu",
"close-livechat-room_description": "Permís per tancar el canal de xat en viu actiu",
"close-others-livechat-room": "Tancar sala de xat en viu",
"close-others-livechat-room_description": "Permís per tancar altres canals de xat en viu",
"create-c": "Crear canals públics",
"create-c_description": "Permís per crear canals públics",
"create-d": "Crear missatges directes",
"create-d_description": "Permís per a iniciar missatges directes",
"create-p": "Crear canals privats",
"create-p_description": "Permís per crear canals privats",
"create-user": "Crear usuari",
"create-user_description": "Permís per crear usuaris",
"delete-c": "Esborrar canals públics",
"delete-c_description": "Permís per esborrar canals públics",
"delete-d": "Esborrar missatges directes",
"delete-d_description": "Permís per esborrar missatges directes",
"delete-p": "Esborrar canals privats",
"delete-p_description": "Permís per esborrar canals privats",
"delete-message": "Esborrar missatge",
"delete-message_description": "Permís per esborrar un missatge d'una sala",
"delete-user": "Esborrar usuari",
"delete-user_description": "Permís per esborrar usuaris",
"edit-message": "Editar missatge",
"edit-message_description": "Permís per editar un missatge d'una sala",
"edit-other-user-active-status": "Editar l'estat actiu d'un altre usuari",
"edit-other-user-active-status_description": "Permís per activar o desactivar altres comptes",
"edit-other-user-info": "Editar la informació d'un altre usuari",
"edit-other-user-info_description": "Permís per canviar el nom, el nom d'usuari o l'adreça de correu-e d'altres usuaris",
"edit-other-user-password": "Editar la contrasenya d'un altre usuari",
"edit-other-user-password_description": "Permís per modificar la contrasenya d'altres usuaris. Requereix el permís edit-other-user-info.",
"edit-privileged-setting": "Editar opcions privilegiades",
"edit-privileged-setting_description": "Permís per editar la configuració",
"edit-room": "Editar sala",
"edit-room_description": "Permís per editar el nom d'una sala, el tema, el tipus (privada o pública) o l'estat (actiu o arxivat)",
"force-delete-message": "Forçar esborrar missatge",
"force-delete-message_description": "Permís per esborrar un missatge ignorant totes les restriccions",
"join-without-join-code": "Unir-se sense el codi",
"join-without-join-code_description": "Permís per unir-se a canals amb codi d'unió actiu sense tenir-lo",
"mail-messages": "Missatges via correu-e",
"mail-messages_description": "Permís per utilitzar l'opció d'enviament de missatges via correu-e",
"manage-assets": "Gestionar recursos",
"manage-assets_description": "Permís per gestionar els recursos del servidor",
"manage-emoji": "Gestionar emoticones",
"manage-emoji_description": "Permís per gestionar les emoticones del servidor",
"manage-integrations": "Gestionar les integracions",
"manage-integrations_description": "Permís per gestionar les integracions del servidor",
"manage-oauth-apps": "Gestionar apps Oauth",
"manage-oauth-apps_description": "Permís per gestionar les apps Oauth del servidor",
"manage-own-integrations": "Gestionar les pròpies integracions",
"manage-own-integrations_description": "Permís per permetre als usuaris crear i editar les seves pròpies integracions o webhooks",
"manage-sounds": "Gestionar sons",
"manage-sounds_description": "Permís per gestionar els sons del servidor",
"mention-all": "Mencionar tots",
"mention-all_description": "Permís per utilitzar la menció @all",
"mute-user": "Silenciar usuari",
"mute-user_description": "Permís per silenciar altres usuaris del mateix canal",
"pin-message": "Fixar missatge",
"pin-message_description": "Permís per fixar un missatge en un canal",
"post-readonly": "Publicar on només lectura",
"post-readonly_description": "Permís per publicar un missatge en canal de només lectura",
"preview-c-room": "Previsualitzar canal públic",
"preview-c-room_description": "Permís per veure els continguts d'un canal públic abans d'unir-s'hi",
"remove-user": "Expulsar usuari",
"remove-user_description": "Permís per expulsar un usuari d'una sala",
"run-import": "Executar importació",
"run-import_description": "Permís per executar els importadors",
"run-migration": "Executar migració",
"run-migration_description": "Permís per executar les migracions",
"save-others-livechat-room-info": "Guardar info altres xats en viu",
"save-others-livechat-room-info_description": "Permís per guardar informació d'altres canals de xat en viu",
"set-moderator": "Assignar moderador",
"set-moderator_description": "Permís per assignar altres usuaris com a moderadors d'un canal",
"set-owner": "Assignar propietari",
"set-owner_description": "Permís per assignar altres usuaris com a propietaris d'un canal",
"set-react-when-readonly": "Reaccions quan només lectura",
"set-react-when-readonly_description": "Permís per poder afegir reaccions a missatges en canals de només lectura",
"set-readonly": "Fer només lectura",
"set-readonly_description": "Permís per fer un canal de només lectura",
"snippet-message": "Retalls de missatge",
"snippet-message_description": "Permís per crear retalls de missatge",
"unarchive-room": "Desarxivar sala",
"unarchive-room_description": "Permís per desarxivar canals",
"user-generate-access-token": "Usuaris generen Access Tokens",
"user-generate-access-token_description": "Permís perquè els usuaris puguin generar access tokens",
"view-c-room": "Veure canal públic",
"view-c-room_description": "Permís per veure canals públics",
"view-d-room": "Veure missatges directes",
"view-d-room_description": "Permís per veure missatges directes",
"view-full-other-user-info": "Veure tota la info d'usuaris",
"view-full-other-user-info_description": "Permís per veure el perfil complet d'altres usuaris, incloent la data de creació del compte, el darrer accés, etcètera.",
"view-history": "Veure historial",
"view-history_description": "Permís per veure l'historial del canal",
"view-join-code": "Veure el codi per unir-se",
"view-join-code_description": "Permís per veure el codi per unir-se al canal",
"view-joined-room": "Veure sales on unit",
"view-joined-room_description": "Permís per veure els canals on actualment s'està unit",
"view-l-room": "Veure sales de xat en viu",
"view-l-room_description": "Permís per veure els canals de xat en viu",
"view-livechat-manager": "Veure el gestor de xats en viu",
"view-livechat-manager_description": "Permís per veure gestors d'altres xats en viu",
"view-livechat-rooms": "Veure xats en viu",
"view-livechat-rooms_description": "Permís per veure altres canals de xat en viu",
"view-logs": "Veure registres",
"view-logs_description": "Permís per veure els registres del servidor",
"view-p-room": "Veure sala privada",
"view-p-room_description": "Permís per veure canals privats",
"view-privileged-setting": "Veure opcions privilegiades",
"view-privileged-setting_description": "Permís per a veure la configuració",
"view-other-user-channels": "Veure canals d'altres usuaris",
"view-other-user-channels_description": "Permís per veure canals que pertanyen a altres usuaris",
"view-room-administration": "Veure administració de sala",
"view-room-administration_description": "Permís per veure estadístiques de missatges públics, privats i directes. No inclou veure converses o arxius",
"view-statistics": "Veure estadístiques",
"view-statistics_description": "Permís per veure estadístiques del sistema com el nombre d'usuaris autenticats, el nombre de sales o informació del sistema operatiu",
"view-user-administration": "Veure administració d'usuaris",
"view-user-administration_description": "Permís per veure una llista de només lectura parcial dels comptes d'usuari actualment autenticats al sistema. Amb aquest permís no és possible veure informació dels comptes d'usuari.",
"Pin_Message": "Fixa missatge",
"Pinned_a_message": "S'ha fixat un missatge:",
"Pinned_Messages": "Missatges fixats",
"PiwikAnalytics_siteId_Description": "L'ID de lloc a utilitzar per a la identificació d'aquest lloc. Exemple: 17",
"PiwikAdditionalTrackers": "Llocs piwik addicionals",
"PiwikAnalytics_prependDomain": "Prefixa domini",
"PiwikAnalytics_prependDomain_Description": "Prefixa el domini del lloc al títol de la pàgina",
"PiwikAnalytics_cookieDomain": "Tots els subdominis",
"PiwikAnalytics_cookieDomain_Description": "Segueix visitants per tots els subdominis",
"PiwikAnalytics_domains": "Amaga enllaços de sortida",
"PiwikAnalytics_url_Description": "L'adreça URL on es troba el Piwik, assegureu-vos d'incloure la barra del final. Exemple: //piwik.rocket.chat/",
"Placeholder_for_email_or_username_login_field": "Indicatiu per al camp d'inici de sessió (correu electrònic o nom d'usuari)",
"Placeholder_for_password_login_field": "Indicatiu per al camp de contrasenya (inici de sessió)",
@ -1242,6 +1413,7 @@
"Remove_Admin": "Treu admin",
"Remove_as_moderator": "Treu de moderador",
"Remove_as_owner": "Treu de propietari",
"Remove_as_leader": "Treure de líder",
"Remove_custom_oauth": "Esborra OAuth personalitzat",
"Remove_from_room": "Treu-lo de la sala",
"Remove_last_admin": "Eliminant el darrer admin",
@ -1296,6 +1468,7 @@
"Rooms": "Sales",
"Running_Instances": "Instàncies executant-se",
"S_new_messages_since_s": "%s nous des de: %s",
"Same_Style_For_Mentions": "Mateix estil per a mencions",
"SAML": "SAML",
"SAML_Custom_Cert": "Certificat personalitzat",
"SAML_Custom_Entry_point": "Punt d'entrada (Entry Point) personalitzat",
@ -1329,6 +1502,7 @@
"Select_an_avatar": "Selecciona un avatar",
"Select_file": "Selecciona un arxiu",
"Select_service_to_login": "Selecciona un servei per iniciar sessió i carregar la teva imatge o puja una foto del teu ordinador",
"Select_role": "Selecciona un rol",
"Select_user": "Selecciona usuari",
"Select_users": "Selecciona els usuaris",
"Selected_agents": "Agents seleccionats",
@ -1354,6 +1528,7 @@
"Service_account_key": "Service account key",
"Set_as_moderator": "Fes-lo moderador",
"Set_as_owner": "Fes-lo propietari",
"Set_as_leader": "Posar com a líder",
"Settings": "Configuració",
"Settings_updated": "S'ha actualitzat la configuració",
"Share_Location_Title": "Compartir localització?",
@ -1523,6 +1698,7 @@
"Two-factor_authentication_disabled": "Autenticació de dos factors desactivada",
"Two-factor_authentication_enabled": "Autenticació de dos factors activada",
"Two-factor_authentication_is_currently_disabled": "L'autenticació de dos factors actualment està desactivada",
"Two-factor_authentication_native_mobile_app_warning": "ATENCIÓ: Un cop activat això, no es podrà fer login des de les aplicacions mòbils natives (Rocket.Chat+) utilitzant la contrasenya fins que aquestes implementin el 2FA.",
"Thursday": "dijous",
"Time_in_seconds": "Temps en segons",
"Title": "Títol",
@ -1550,8 +1726,10 @@
"Type_your_message": "Introduïu el missatge",
"Type_your_name": "Escriu el teu nom",
"Type_your_new_password": "Escriu la nova contrasenya",
"UI_Allow_room_names_with_special_chars": "Permet caràcters especials als noms de sala",
"UI_DisplayRoles": "Mostra rols",
"UI_Merge_Channels_Groups": "Uneix grups privats amb canals",
"UI_Unread_Counter_Style": "Estil de comptador de no-llegits",
"UI_Use_Name_Avatar": "Utilitza les inicials del nom complet per generar l'avatar per defecte",
"UI_Use_Real_Name": "Utilitza el nom real",
"Unarchive": "Desarxiva",
@ -1560,6 +1738,7 @@
"Unmute_user": "Dóna veu a l'usuari",
"Unnamed": "Sense nom",
"Unpin_Message": "Desfixa el missatge",
"Unread_Count": "Comptador de no llegits",
"Unread_Tray_Icon_Alert": "Icona d'alerta de no llegits a la safata",
"Unread_Messages": "Missatges no llegits",
"Unread_Rooms": "Sales no llegides",
@ -1584,11 +1763,14 @@
"Use_User_Preferences_or_Global_Settings": "Usa les preferències d'usuari o la configuració global",
"User__username__is_now_a_moderator_of__room_name_": "L'usuari __username__ ara és moderador de la sala __room_name__",
"User__username__is_now_a_owner_of__room_name_": "L'usuari __username__ ara és un propietari de __room_name__",
"User__username__is_now_a_leader_of__room_name_": "L'usuari __username__ ara és líder de __room_name__",
"User__username__removed_from__room_name__moderators": "L'usuari __username__ ja no és moderador de la sala __room_name__",
"User__username__removed_from__room_name__owners": "L'usuari __username__ ja no és propietari de __room_name__",
"User__username__removed_from__room_name__leaders": "L'usuari __username__ ja no és líder de __room_name__",
"User_added": "Usuari afegit",
"User_added_by": "Usuari <em>__user_added__</em> afegit per <em>__user_by__</em>.",
"User_added_successfully": "Usuari afegit correctament",
"User_and_group_mentions_only": "Només mencions d'usuari i de grup",
"User_doesnt_exist": "No existeix cap usuari amb el nom `@%s`.",
"User_has_been_activated": "L'usuari s'ha activat",
"User_has_been_deactivated": "L'usuari s'ha desactivat",
@ -1609,6 +1791,7 @@
"User_left_male": "Ha sortit del canal.",
"User_logged_out": "L'usuari està desconnectat",
"User_management": "Administració d'usuaris",
"User_mentions_only": "Només mencions d'usuari",
"User_muted": "Usuari silenciat",
"User_muted_by": "Usuari <em>__user_muted__</em> silenciat per <em>__user_by__</em>.",
"User_not_found": "Usuari no trobat",
@ -1620,6 +1803,8 @@
"User_unmuted_by": "L'usuari <em>__user_by__</em> ha tornat la veu a <em>__user_unmuted__</em>.",
"User_unmuted_in_room": "L'usuari torna a tenir veu a la sala",
"User_updated_successfully": "L'usuari s'ha actualitzat correctament",
"User_uploaded_file": "Ha pujat un arxiu",
"User_uploaded_image": "Ha pujat una imatge",
"Username": "Nom d'usuari",
"Username_and_message_must_not_be_empty": "El nom d'usuari i el missatge no han d'estar buits.",
"Username_cant_be_empty": "El nom d'usuari no pot estar buit",

@ -10,7 +10,7 @@
"__username__is_no_longer__role__defined_by__user_by_": "__username__ již není __role__ (odebral/a __user_by__ )",
"__username__was_set__role__by__user_by_": "__username__ je nyní __role__ (nastavil/a __user_by__)",
"Accept": "Přijmout",
"Accept_incoming_livechat_requests_even_if_there_are_no_online_agents": "Přijímat livechat požadavky i pokud není online žádný operátor",
"Accept_incoming_livechat_requests_even_if_there_are_no_online_agents": "Přijímat LiveChat požadavky i pokud není online žádný operátor",
"Accept_with_no_online_agents": "Přijímat i bez aktivních operátorů",
"Access_not_authorized": "Přístup není povolen",
"Access_Token_URL": "Token přístupové adresy",
@ -279,6 +279,7 @@
"Cancel": "Zrušit",
"Cancel_message_input": "Zrušit",
"Cannot_invite_users_to_direct_rooms": "Do přímé konverzace nelze pozvat uživatele.",
"Cannot_open_conversation_with_yourself": "Nelze psát sám sobě",
"CAS_autoclose": "Automaticky zavřít přihlašovací popup",
"CAS_base_url": "SSO URL",
"CAS_base_url_Description": "Adresa vaší externí SSO služby např: https://sso.priklad.cz/sso/",
@ -592,10 +593,12 @@
"FileUpload_MediaTypeWhiteListDescription": "Čárkami oddělený seznam typů souborů. Pokud nechcete omezovat typy, ponechte pole prázdné.",
"FileUpload_ProtectFiles": "Chránit nahrané soubory",
"FileUpload_ProtectFilesDescription": "Pouze ověření uživatelé budou mít přístup",
"FileUpload_S3_Acl": "Amazon S3 acl",
"FileUpload_S3_AWSAccessKeyId": "Amazon S3 AWSAccessKeyId",
"FileUpload_S3_AWSSecretAccessKey": "Amazon S3 AWSSecretAccessKey",
"FileUpload_S3_Bucket": "Amazon S3 název bucketu",
"FileUpload_S3_Acl": "Acl",
"FileUpload_S3_AWSAccessKeyId": "Přístupový klíč",
"FileUpload_S3_AWSSecretAccessKey": "Tajný klíč",
"FileUpload_S3_Bucket": "Název bucketu",
"FileUpload_S3_SignatureVersion": "Verze Signature",
"FileUpload_S3_ForcePathStyle": "Vynutit Path Style",
"FileUpload_S3_BucketURL": "URL Bucketu",
"FileUpload_S3_CDN": "CDN doména",
"FileUpload_S3_Region": "Region",
@ -634,6 +637,7 @@
"GoogleCloudStorage": "Google Cloud Storage",
"GoogleNaturalLanguage_ServiceAccount_Description": "JSON klíč účtu služby. Více informací naleznete [zde](https://cloud.google.com/natural-language/docs/common/auth#set_up_a_service_account)",
"GoogleTagManager_id": "ID Google tag manageru",
"Group_mentions_only": "Pouze notifikace skupiny",
"Guest_Pool": "Skupina hostů",
"Hash": "Hash",
"Header": "Hlavička",
@ -697,7 +701,7 @@
"Importer_progress_error": "Nepodařilo se získat postup importu.",
"Importer_setup_error": "Při nastavování nástroje pro import došlo k chybě.",
"Importer_Source_File": "Výběr zdrojového souboru",
"Incoming_Livechats": "Příchozí požadavky na livechat",
"Incoming_Livechats": "Příchozí požadavky na LiveChat",
"inline_code": "vlozeny_kod",
"Install_Extension": "Nainstalovat rozšíření",
"Install_FxOs": "Nainstalovat Rocket.Chat do Vašeho Firefoxu",
@ -807,6 +811,12 @@
"Join_default_channels": "Připojit se k výchozím místnostem",
"Join_the_Community": "Zapojte se do komunity",
"Join_the_given_channel": "Přidejte se k dané místnosti",
"Show_the_keyboard_shortcut_list": "Zobrazit klávesové zkratky",
"Open_channel_user_search": "`%s` - Otevřít místnost / Hledat uživatele",
"Edit_previous_message": "`%s` - Editovat předchozí zprávu",
"Move_beginning_message": "`%s` - Přejít na začátek zprávy",
"Move_end_message": "`%s` - Přejít na konec zprávy",
"New_line_message_compose_input": "`%s` - Přidat řádek v editačním okně",
"Join_video_call": "Připojit k videohovoru",
"Joined": "Připojil",
"Jump": "Přejít",
@ -905,26 +915,26 @@
"line": "řádek",
"List_of_Channels": "Seznam místností",
"List_of_Direct_Messages": "Seznam přímých zpráv",
"Livechat_agents": "Livechat operátoři",
"Livechat_agents": "LiveChat operátoři",
"Livechat_AllowedDomainsList": "Povolené domény pro Livechat",
"Domains_allowed_to_embed_the_livechat_widget": "Čárkou oddělený seznam domén, kde se smí zobrazovat livechat. Pro povolení všech domén nechte prázdné",
"Livechat_Dashboard": "Livechat Přehled",
"Livechat_enabled": "Livechat povolen",
"Livechat_Dashboard": "LiveChat Přehled",
"Livechat_enabled": "LiveChat povolen",
"Livechat_forward_open_chats": "Předat otevřené chaty",
"Livechat_forward_open_chats_timeout": "Časový limit (v sekundách), pro předání chatů",
"Livechat_guest_count": "Počet hostů",
"Livechat_Inquiry_Already_Taken": "Požadavek již vyřízen",
"Livechat_managers": "Manažeři Livechatu",
"Livechat_Inquiry_Already_Taken": "LiveChat požadavek již vyřízen",
"Livechat_managers": "Manažeři LiveChat",
"Livechat_offline": "Livechat offline",
"Livechat_online": "Livechat online",
"Livechat_open_inquiery_show_connecting": "Zobrazit informaci o čekajícím připojení místo pole zprávy pokud uživatel ještě nebyl propojen s operátorem",
"Livechat_Queue": "Livechat fronta",
"Livechat_room_count": "Livechat počet místností",
"Livechat_Routing_Method": "Metoda rozřazení livechatů",
"Livechat_Queue": "LiveChat fronta",
"Livechat_room_count": "LiveChat počet místností",
"Livechat_Routing_Method": "Metoda rozřazení LiveChat",
"Livechat_Take_Confirm": "Chcete převzít tohoto klienta",
"Livechat_title": "Livechat název",
"Livechat_title_color": "Livechat Barva pozadí názvu",
"Livechat_Users": "Livechat Uživatelé",
"Livechat_title": "LiveChat název",
"Livechat_title_color": "LiveChat Barva pozadí názvu",
"Livechat_Users": "LiveChat Uživatelé",
"Load_more": "Načíst další",
"Loading...": "Načítání...",
"Loading_more_from_history": "Načítání více položek z historie",
@ -1006,6 +1016,7 @@
"Message_MaxAll": "Maximální velikost místnosti pro všechny zprávy",
"Message_MaxAllowedSize": "Maximální povolená velikost zprávy",
"Message_pinning": "Připnutí zprávy",
"Message_QuoteChainLimit": "Maximální počet navazujících citací",
"Message_removed": "Zpráva odstraněna",
"Message_SetNameToAliasEnabled": "Změnit uživatelské jméno ve zprávě na alias",
"Message_SetNameToAliasEnabled_Description": "Jen pokud již není nastaven alias. Alias u starých zpráv nebude změněn",
@ -1155,6 +1166,150 @@
"People": "Lidé",
"Permalink": "Trvalý odkaz",
"Permissions": "Oprávnění",
"access-mailer": "Přístup k maileru",
"access-mailer_description": "Právo rozesílat hromadný email na všechny uživatele.",
"access-permissions": "Přístup k nastavení práv",
"access-permissions_description": "Měnít práva pro jednotlivé uživatelské role.",
"add-oauth-service": "Přidat Oauth službu",
"add-oauth-service_description": "Právo přidat novou Oauth službu",
"add-user": "Přidat uživatele",
"add-user_description": "Právo přidat nového uživatele přes seznam uživatelů",
"add-user-to-any-c-room": "Přidat uživatele do veřejných místností",
"add-user-to-any-c-room_description": "Právo přidat uživatele do jakékoliv veřejné místnosti",
"add-user-to-any-p-room": "Přidat uživatele do soukromých místností",
"add-user-to-any-p-room_description": "Právo přidat uživatele do jakékoliv soukromé místnosti",
"add-user-to-joined-room": "Přidat uživatele do místností ve kterých jsem",
"add-user-to-joined-room_description": "Právo přidat uživatele do jakékoliv aktuálně připojené místnosti",
"archive-room": "Archivovat místnost",
"archive-room_description": "Právo archivovat místnost",
"assign-admin-role": "Přiřadit roli administrátora",
"assign-admin-role_description": "Právo přiřadit roli administrátora dalším uživatelům",
"auto-translate": "Auto překlad",
"auto-translate_description": "Právo používat automatické překládání",
"ban-user": "Zabanovat uživatele",
"ban-user_description": "Právo vykázat uživatele z místnosti",
"bulk-create-c": "Hromadné vytvoření místností",
"bulk-create-c_description": "Právo hromadné vytvářet místnosti",
"bulk-register-user": "Hromadné vytvoření místností",
"bulk-register-user_description": "Právo hromadné vytvářet místnosti",
"clean-channel-history": "Pročistit historii místnosti",
"clean-channel-history_description": "Právo pročistit historii místnosti",
"close-livechat-room": "Uzavřít LiveChat místnost (aktuální)",
"close-livechat-room_description": "Právo uzavřít svou LiveChat místnost",
"close-others-livechat-room": "Uzavřít LiveChat místnost (ostatní)",
"close-others-livechat-room_description": "Právo uzavřít ostatní LiveChat místnosti",
"create-c": "Vytvářet veřejné místnosti",
"create-c_description": "Právo vytvářet veřejné místnosti",
"create-d": "Vytvářet soukromé zprávy",
"create-d_description": "Právo odesílat soukromé zprávy",
"create-p": "Vytvářet soukromé místnosti",
"create-p_description": "Právo vytvářet soukromé místnosti",
"create-user": "Vytvořit uživatele",
"create-user_description": "Právo vytvořit uživatele",
"delete-c": "Smazat veřejné místnosti",
"delete-c_description": "Právo smazat veřejné místnosti",
"delete-d": "Smazat přímé zprávy",
"delete-d_description": "Právo smazat přímé zprávy",
"delete-p": "Smazat soukromé místnosti",
"delete-p_description": "Právo smazat soukromé místnosti",
"delete-message": "Smazat zprávu",
"delete-message_description": "Právo smazat zprávu v místnosti",
"delete-user": "Smazat uživatele",
"delete-user_description": "Právo smazat uživatele",
"edit-message": "Editovat zprávu",
"edit-message_description": "Právo editovat zprávu v místnosti",
"edit-other-user-active-status": "Právo měnit aktivaci uživatelů",
"edit-other-user-active-status_description": "Právo povolit nebo zakázat jiné uživatelské účty",
"edit-other-user-info": "Upravit informace uživatelů",
"edit-other-user-info_description": "Právo měnit jméno, uživatelské jméno nebo email jiným uživatelům",
"edit-other-user-password": "Měnit hesla uživatelů",
"edit-other-user-password_description": "Právo měnit heslo jiným uživatelům. Vyžaduje právo `Upravit informace uživatelů`",
"edit-privileged-setting": "Měnit nastavení",
"edit-privileged-setting_description": "Právo měnit nastavení",
"edit-room": "Upravit místnost",
"edit-room_description": "Právo měnit jméno, téma, typ (soukromá/veřejná) a stav (aktivní/archivovaná) místnosti",
"force-delete-message": "Smazat zprávu",
"force-delete-message_description": "Právo smazat zprávu přes všechna omezení",
"join-without-join-code": "Připojit se i do místností bez kódu",
"join-without-join-code_description": "Právo přeskočit připojit bez zadávání kódu do místností, které jej vyžadují",
"mail-messages": "Odeslat zprávy",
"mail-messages_description": "Právo odesílat zprávy",
"manage-assets": "Spravovat statické zdroje",
"manage-assets_description": "Právo upravovat serverové statické soubory",
"manage-emoji": "Spravovat emotikony",
"manage-emoji_description": "Právo měnit emotikony",
"manage-integrations": "Spravovat integrace",
"manage-integrations_description": "Právo měnit integrace",
"manage-oauth-apps": "Spravovat Oauth aplikace",
"manage-oauth-apps_description": "Právo měnit Oauth aplikace",
"manage-own-integrations": "Spravovat vlastní integrace",
"manage-own-integrations_description": "Právo pro uživatele vytvářet a editovat vlastní integrace a webhooky",
"manage-sounds": "Spravovat zvuky",
"manage-sounds_description": "Právo měnit zvuky",
"mention-all": "Zmínit všechny",
"mention-all_description": "Právo použít `@all` zmínku",
"mute-user": "Ztišit uživatele",
"mute-user_description": "Právo ztišit jiné uživatele v aktuální místnosti",
"pin-message": "Připnout zprávu",
"pin-message_description": "Právo připnout zprávu",
"post-readonly": "Napsat do místnosti pouze ke čtení",
"post-readonly_description": "Právo napsat do místnosti pouze ke čtení",
"preview-c-room": "Náhled veřejné místnosti",
"preview-c-room_description": "Právo zobrazit obsah veřejné místnosti před připojení do ní",
"remove-user": "Odebrat uživatele",
"remove-user_description": "Právo odebrat uživatele z místnosti",
"run-import": "Pustit import",
"run-import_description": "Právo spustit importovací proces",
"run-migration": "Pustit migraci",
"run-migration_description": "Právo spustit migraci",
"save-others-livechat-room-info": "Upravit informace LiveChat místnosti",
"save-others-livechat-room-info_description": "Právo upravit informace jiné LiveChat místnosti",
"set-moderator": "Nastavit moderátora",
"set-moderator_description": "Právo nastavit uživatele jako moderátora místnosti",
"set-owner": "Nastavit vlastníka",
"set-owner_description": "Právo nastavit uživatele jako vlastníka místnosti",
"set-react-when-readonly": "Reagovat na zprávy v místnostech ke čtení",
"set-react-when-readonly_description": "Právo reagovat na zprávy v místnostech pouze ke čtení",
"set-readonly": "Nastavit pouze ke čtení",
"set-readonly_description": "Právo změni místnost na pouze ke čtení",
"snippet-message": "Šablona zprávy",
"snippet-message_description": "Právo vytvořit šablonu zprávy",
"unarchive-room": "Odarchivovat místnost",
"unarchive-room_description": "Právo odarchivovat místnost",
"user-generate-access-token": "Přístupový token uživatelů",
"user-generate-access-token_description": "Právo vytvářet uživatelský přístupový token",
"view-c-room": "Zobrazit veřejné místnosti",
"view-c-room_description": "Právo zobrazit veřejnou místnost",
"view-d-room": "Zobrazit soukromé zprávy",
"view-d-room_description": "Právo zobrazit soukromé zprávy",
"view-full-other-user-info": "Zobrazit veškeré informace uživatele",
"view-full-other-user-info_description": "Právo zobrazit veškeré informace uživatele včetně data vytvoření, posledního přihlášení, atd.",
"view-history": "Zobrazit historii",
"view-history_description": "Právo zobrazit historii místnosti",
"view-join-code": "Zobrazit kód místnosti",
"view-join-code_description": "Právo zobrazit kód místnosti",
"view-joined-room": "Zobrazit připojené místnosti",
"view-joined-room_description": "Právo zobrazit aktuálně připojené místnosti",
"view-l-room": "Zobrazit LiveChat místnosti",
"view-l-room_description": "Právo zobrazit LiveChat místnosti",
"view-livechat-manager": "Zobrazit LiveChat manažera",
"view-livechat-manager_description": "Právo zobrazit ostatní LiveChat manažery",
"view-livechat-rooms": "Zobrazit ostatní LiveChat místnosti",
"view-livechat-rooms_description": "Právo zobrazit ostatní LiveChat místnosti",
"view-logs": "Zobrazit logy",
"view-logs_description": "Právo zobrazit serverové logy",
"view-p-room": "Zobrazit soukromou místnost",
"view-p-room_description": "Právo zobrazit soukromou místnost",
"view-privileged-setting": "Zobrazit nastavení",
"view-privileged-setting_description": "Právo zobrazit nastavení",
"view-other-user-channels": "Zobrazit místnosti uživatelů",
"view-other-user-channels_description": "Právo zobrazit místnosti vlastněné ostatními uživateli",
"view-room-administration": "Zobrazit administraci místností",
"view-room-administration_description": "Právo zobrazit statistiky veřejných i soukromých místností a přímých konverzací. Nezahrnuje právo zobrazit obsah nebo archiv.",
"view-statistics": "Zobrazit statistiky",
"view-statistics_description": "Právo zobrazit statistiky jako počet přihlášených uživatelů, počet místností, informace o operačním systému",
"view-user-administration": "Zobrazit administraci uživatelů",
"view-user-administration_description": "Zobrazit částečný seznam (pouze ke čtení) uživatelů přihlášených do systému. Přes toto právo nelze přistupovat k informacím ostatních uživatelů",
"Pin_Message": "Připnout zprávu",
"Pinned_a_message": "Připnuta zpráva:",
"Pinned_Messages": "Připnuté zprávy",
@ -1242,6 +1397,7 @@
"Remove_Admin": "Odebrat Správce",
"Remove_as_moderator": "Odebrat moderátora",
"Remove_as_owner": "Odebrat vlastníka",
"Remove_as_leader": "Odebrat pozici vedoucího",
"Remove_custom_oauth": "Odebrat vlastní OAuth",
"Remove_from_room": "Odebrat z místnosti",
"Remove_last_admin": "Odebrat posledního administrátora",
@ -1354,6 +1510,7 @@
"Service_account_key": "Klíč účty služby",
"Set_as_moderator": "Nastavit jako moderátora",
"Set_as_owner": "Nastavit jako vlastníka",
"Set_as_leader": "Nastavit vedoucícho",
"Settings": "Nastavení",
"Settings_updated": "Nastavení aktualizováno",
"Share_Location_Title": "Sdílet polohu",
@ -1523,6 +1680,7 @@
"Two-factor_authentication_disabled": "Dvoufázová ověření zakázáno",
"Two-factor_authentication_enabled": "Dvoufázové ověření povoleno",
"Two-factor_authentication_is_currently_disabled": "Dvoufázová ověření je momentálně zakázáno",
"Two-factor_authentication_native_mobile_app_warning": "UPOZORNĚNÍ: Pokud povolíte dvoufázové ověření, nebudete se moci přihlásit přes nativní mobilní aplikace (Rocket.Chat+) dokud v těchto nebude 2FA implementována.",
"Thursday": "Čtvrtek",
"Time_in_seconds": "Čas v sekundách",
"Title": "Název",
@ -1537,7 +1695,7 @@
"Travel_and_Places": "Cestování & Místa",
"Transcript_Enabled": "Zeptat se po skončení chatu, zda uživateli odeslat kopii konverzace",
"Transcript_message": "Zpráva kterou zobrazit jako dotaz zda odeslat kopii konverzace",
"Transcript_of_your_livechat_conversation": "Kopie Vaší livechat konverzace",
"Transcript_of_your_livechat_conversation": "Kopie Vaší LiveChat konverzace",
"Translated": "Přeloženo",
"Translations": "Překlady",
"Trigger_removed": "Trigger odstraněn",
@ -1560,6 +1718,7 @@
"Unmute_user": "Zrušit ztlumení uživatele",
"Unnamed": "Nepojmenovaný",
"Unpin_Message": "Odepnout Zprávu",
"Unread_Count": "Počet nepřečtených",
"Unread_Tray_Icon_Alert": "Ikona v oznamovací oblasti upozorňuje na nepřečtené zprávy",
"Unread_Messages": "Nepřečtěné zprávy",
"Unread_Rooms": "Nepřečtené místnosti",
@ -1584,11 +1743,14 @@
"Use_User_Preferences_or_Global_Settings": "Použít nastavení uživatele nebo obecné nastavení",
"User__username__is_now_a_moderator_of__room_name_": "Uživatel __username__ je nyní moderátorem __room_name__",
"User__username__is_now_a_owner_of__room_name_": "Uživatel __username__ je nyní vlastníkem __room_name__",
"User__username__is_now_a_leader_of__room_name_": "Uživatel __username__ je nyní vedoucím místnosti __room_name__",
"User__username__removed_from__room_name__moderators": "Uživatel __username__ odebrán z moderátorů __room_name__",
"User__username__removed_from__room_name__owners": "Uživatel __username__ odebrán z vlastníků __room_name__",
"User__username__removed_from__room_name__leaders": "Uživatel __username__ byl odebrán z vedoucích místnosti __room_name__",
"User_added": "Přidán uživatel",
"User_added_by": "<em>__user_by__</em> přidal uživatele <em>__user_added__</em>.",
"User_added_successfully": "Uživatel byl úspěšně přidán",
"User_and_group_mentions_only": "Pouze notifikace skupiny a uživatele",
"User_doesnt_exist": "Žádný uživatel `@%s`.",
"User_has_been_activated": "Uživatel byl aktivován",
"User_has_been_deactivated": "Uživatel byl deaktivován",
@ -1609,6 +1771,7 @@
"User_left_male": "Opustil místnost",
"User_logged_out": "Uživatel je odhlášen",
"User_management": "Správa uživatelů",
"User_mentions_only": "Pouze notifikace Uživatele",
"User_muted": "Uživatel ztišen",
"User_muted_by": "Uživatel <em>__user_muted__</em> ztlumen (uživatelem <em>__user_by__.</em>)",
"User_not_found": "Uživatel nenalezen",
@ -1699,7 +1862,7 @@
"You_can_search_using_RegExp_eg": "Můžete vyhledávat pomocí regulárních výrazů např.",
"You_can_use_an_emoji_as_avatar": "Můžete také použít emotikonu jako avatar.",
"You_can_use_webhooks_to_easily_integrate_livechat_with_your_CRM": "Webhooky můžete použít pro jednoduchou integraci s Vaším CRM",
"You_cant_leave_a_livechat_room_Please_use_the_close_button": "Livechat místnost nelze opustit. Použijte prosím tlačítko zavřít.",
"You_cant_leave_a_livechat_room_Please_use_the_close_button": "LiveChat místnost nelze opustit. Použijte prosím tlačítko zavřít.",
"You_have_been_muted": "Byli jste ztišeni a nemůžete v této místnosti mluvit",
"You_have_n_codes_remaining": "Zbývá vám __number__ kódů.",
"You_have_not_verified_your_email": "Neověřili jste svůj e-mail.",

@ -991,14 +991,14 @@
"Pinned_a_message": "hat eine Nachricht angeheftet:",
"Pinned_Messages": "Fixierte Nachrichten",
"PiwikAnalytics_siteId_Description": "Die Website-ID zur Identifizierung dieser Website. Beispiel: 17",
"PiwikAdditionalTrackers" : "Zusätzliche Piwik Websites",
"PiwikAdditionalTrackers_Description" : "Geben Sie hier weitere Piwik Website URLs und SiteIDs in folgendem Format an, wenn Sie dieselben Daten in verschiedene Piwik Instanzen tracken möchten: [ { \"trackerURL\" : \"https://my.piwik.domain2/\", \"siteId\" : 42 }, { \"trackerURL\" : \"https://my.piwik.domain3/\", \"siteId\" : 15 } ]",
"PiwikAnalytics_prependDomain" : "Domain voranstellen",
"PiwikAnalytics_prependDomain_Description" : "Domain der Seite beim Tracken dem Seitentitel voranstellen",
"PiwikAnalytics_cookieDomain" : "Alle Subdomains",
"PiwikAnalytics_cookieDomain_Description" : "Besucher aufzeichnen auf allen Subdomains",
"PiwikAnalytics_domains" : "Verberge ausgehende Links",
"PiwikAnalytics_domains_Description" : "Verberge im Bericht über 'ausgehende Verweise' alle Klicks auf bekannte Alias-URLs. Bitte tragen Sie pro Zeile einen Domainnamen ein, verwenden Sie dabei keine Trennzeichen.",
"PiwikAdditionalTrackers": "Zusätzliche Piwik Websites",
"PiwikAdditionalTrackers_Description": "Geben Sie hier weitere Piwik Website URLs und SiteIDs in folgendem Format an, wenn Sie dieselben Daten in verschiedene Piwik Instanzen tracken möchten: [ { \"trackerURL\" : \"https://my.piwik.domain2/\", \"siteId\" : 42 }, { \"trackerURL\" : \"https://my.piwik.domain3/\", \"siteId\" : 15 } ]",
"PiwikAnalytics_prependDomain": "Domain voranstellen",
"PiwikAnalytics_prependDomain_Description": "Domain der Seite beim Tracken dem Seitentitel voranstellen",
"PiwikAnalytics_cookieDomain": "Alle Subdomains",
"PiwikAnalytics_cookieDomain_Description": "Besucher aufzeichnen auf allen Subdomains",
"PiwikAnalytics_domains": "Verberge ausgehende Links",
"PiwikAnalytics_domains_Description": "Verberge im Bericht über 'ausgehende Verweise' alle Klicks auf bekannte Alias-URLs. Bitte tragen Sie pro Zeile einen Domainnamen ein, verwenden Sie dabei keine Trennzeichen.",
"PiwikAnalytics_url_Description": "Die Piwik URL benötigt ein trailing slash. Beispiel: //piwik.rocket.chat/",
"Placeholder_for_email_or_username_login_field": "Platzhalter für das Feld der E-Mail-Adresse und des Benutzernamen",
"Placeholder_for_password_login_field": "Platzhalter für das Feld des Anmeldepassworts",

@ -424,6 +424,7 @@
"Desktop": "Desktop",
"Desktop_Notification_Test": "Desktop Notification Test",
"Desktop_Notifications": "Desktop Notifications",
"Desktop_Notifications_Default_Alert": "Desktop Notifications Default Alert",
"Desktop_Notifications_Disabled": "Desktop Notifications are Disabled. Change your browser preferences if you need Notifications enabled.",
"Desktop_Notifications_Duration": "Desktop Notifications Duration",
"Desktop_Notifications_Duration_Description": "Seconds to display desktop notification. This may affect OS X Notification Center. Enter 0 to use default browser settings and not affect OS X Notification Center.",
@ -536,7 +537,7 @@
"error-invalid-redirectUri": "Invalid redirectUri",
"error-invalid-role": "Invalid role",
"error-invalid-room": "Invalid room",
"error-invalid-room-name": "<strong>__room_name__</strong> is not a valid room name,<br/> use only letters, numbers, hyphens and underscores",
"error-invalid-room-name": "<strong>__room_name__</strong> is not a valid room name",
"error-invalid-room-type": "<strong>__type__</strong> is not a valid room type.",
"error-invalid-settings": "Invalid settings provided",
"error-invalid-subscription": "Invalid subscription",
@ -778,7 +779,7 @@
"Invalid_name": "The name must not be empty",
"Invalid_notification_setting_s": "Invalid notification setting: %s",
"Invalid_pass": "The password must not be empty",
"Invalid_room_name": "<strong>%s</strong> is not a valid room name,<br/> use only letters, numbers, hyphens and underscores",
"Invalid_room_name": "<strong>%s</strong> is not a valid room name",
"Invalid_secret_URL_message": "The URL provided is invalid.",
"Invalid_setting_s": "Invalid setting: %s",
"Invalid_two_factor_code": "Invalid two factor code",
@ -1056,6 +1057,7 @@
"Min_length_is": "Min length is %s",
"minutes": "minutes",
"Mobile": "Mobile",
"Mobile_Notifications_Default_Alert": "Mobile Notifications Default Alert",
"Monday": "Monday",
"Monitor_history_for_changes_on": "Monitor history for changes on",
"More_channels": "More channels",
@ -1114,9 +1116,13 @@
"Not_found_or_not_allowed": "Not Found or Not Allowed",
"Nothing": "Nothing",
"Nothing_found": "Nothing found",
"Notification_Desktop_Default_For": "Show Desktop Notifications For",
"Notification_Mobile_Default_For": "Push Mobile Notifications For",
"Notification_Duration": "Notification Duration",
"Notifications": "Notifications",
"Notifications_Muted_Description": "If you choose to mute everything, you won't see the room highlight in the list when there are new messages, except for mentions. Muting notifications will override notifications settings.",
"Notifications_Max_Room_Members": "Max room members before disabling all message notifications",
"Notifications_Max_Room_Members_Description": "Max number of members in room when notifications for all messages gets disabled. Users can still change per room setting to receive all notifications on an individual basis. (0 to disable)",
"Notifications_Sound_Volume": "Notifications sound volume",
"Notify_all_in_this_room": "Notify all in this room",
"Notify_active_in_this_room": "Notify active users in this room",
@ -1182,162 +1188,162 @@
"People": "People",
"Permalink": "Permalink",
"Permissions": "Permissions",
"access-mailer":"Access Mailer Screen",
"access-mailer_description":"Permission to send mass email to all users.",
"access-permissions":"Access Permissions Screen",
"access-permissions_description":"Modify permissions for various roles.",
"add-oauth-service":"Add Oauth Service",
"add-oauth-service_description":"Permission to add a new Oauth service",
"add-user":"Add User",
"add-user_description":"Permission to add new users to the server via users screen",
"add-user-to-any-c-room":"Add User to Any Public Channel",
"add-user-to-any-c-room_description":"Permission to add a user to any public channel",
"add-user-to-any-p-room":"Add User to Any Private Channel",
"add-user-to-any-p-room_description":"Permission to add a user to any private channel",
"add-user-to-joined-room":"Add User to Any Joined Channel",
"add-user-to-joined-room_description":"Permission to add a user to a currently joined channel",
"archive-room":"Archive Room",
"archive-room_description":"Permission to archive a channel",
"assign-admin-role":"Assign Admin Role",
"assign-admin-role_description":"Permission to assign the admin role to other users",
"auto-translate":"Auto Translate",
"auto-translate_description":"Permission to use the auto translate tool",
"ban-user":"Ban User",
"ban-user_description":"Permission to ban a user from a channel",
"bulk-create-c":"Bulk Create Channels",
"bulk-create-c_description":"Permission to create channels in bulk",
"bulk-register-user":"Bulk Create Channels",
"bulk-register-user_description":"Permission to create channels in bulk",
"clean-channel-history":"Clean Channel History",
"clean-channel-history_description":"Permission to Clear the history from channels",
"close-livechat-room":"Close Livechat Room",
"close-livechat-room_description":"Permission to close the current LiveChat channel",
"close-others-livechat-room":"Close Livechat Room",
"close-others-livechat-room_description":"Permission to close other LiveChat channels",
"create-c":"Create Public Channels",
"create-c_description":"Permission to create public channels",
"create-d":"Create Direct Messages",
"create-d_description":"Permission to start direct messages",
"create-p":"Create Private Channels",
"create-p_description":"Permission to create private channels",
"create-user":"Create User",
"create-user_description":"Permission to create users",
"delete-c":"Delete Public Channels",
"delete-c_description":"Permission to delete public channels",
"delete-d":"Delete Direct Messages",
"delete-d_description":"Permission to delete direct messages",
"delete-p":"Delete Private Channels",
"delete-p_description":"Permission to delete private channels",
"delete-message":"Delete Message",
"delete-message_description":"Permission to delete a message within a room",
"delete-user":"Delete User",
"delete-user_description":"Permission to delete users",
"edit-message":"Edit Message",
"edit-message_description":"Permission to edit a message within a room",
"edit-other-user-active-status":"Edit Other User Active Status",
"edit-other-user-active-status_description":"Permission to enable or disable other accounts",
"edit-other-user-info":"Edit Other User Information",
"edit-other-user-info_description":"Permission to change other user’s name, username or email address.",
"edit-other-user-password":"Edit Other User Password",
"edit-other-user-password_description":"Permission to modify other user’s passwords. Requires edit-other-user-info permission.",
"edit-privileged-setting":"Edit privileged Setting",
"edit-privileged-setting_description":"Permission to edit settings",
"edit-room":"Edit Room",
"edit-room_description":"Permission to edit a room’s name, topic, type (private or public status) and status (active or archived)",
"force-delete-message":"Force Delete Message",
"force-delete-message_description":"Permission to delete a message bypassing all restrictions",
"join-without-join-code":"Join Without Join Code",
"join-without-join-code_description":"Permission to bypass the join code in channels with join code enabled",
"mail-messages":"Mail Messages",
"mail-messages_description":"Permission to use the mail messages option",
"manage-assets":"Manage Assets",
"manage-assets_description":"Permission to manage the server assets",
"manage-emoji":"Manage Emoji",
"manage-emoji_description":"Permission to manage the server emojis",
"manage-integrations":"Manage Integrations",
"manage-integrations_description":"Permission to manage the server integrations",
"manage-oauth-apps":"Manage Oauth Apps",
"manage-oauth-apps_description":"Permission to manage the server Oauth apps",
"manage-own-integrations":"Manage Own Integrations",
"manage-own-integrations_description":"Permition to allow users to create and edit their own integration or webhooks",
"manage-sounds":"Manage Sounds",
"manage-sounds_description":"Permission to manage the server sounds",
"mention-all":"Mention All",
"mention-all_description":"Permission to use the @all mention",
"mute-user":"Mute User",
"mute-user_description":"Permission to mute other users in the same channel",
"pin-message":"Pin Message",
"pin-message_description":"Permission to pin a message in a channel",
"post-readonly":"Post ReadOnly",
"post-readonly_description":"Permission to post a message in a read-only channel",
"preview-c-room":"Preview Public Channel",
"preview-c-room_description":"Permission to view the contents of a public channel before joining",
"remove-user":"Remove User",
"remove-user_description":"Permission to remove a user from a room",
"run-import":"Run Import",
"run-import_description":"Permission to run the importers",
"run-migration":"Run Migration",
"run-migration_description":"Permission to run the migrations",
"save-others-livechat-room-info":"Save Others Livechat Room Info",
"save-others-livechat-room-info_description":"Permission to save information from other livechat channels",
"set-moderator":"Set Moderator",
"set-moderator_description":"Permission to set other users as moderator of a channel",
"set-owner":"Set Owner",
"set-owner_description":"Permission to set other users as owner of a channel",
"set-react-when-readonly":"Set React When ReadOnly",
"set-react-when-readonly_description":"Permission to set the ability to react to messages in a read only channel",
"set-readonly":"Set ReadOnly",
"set-readonly_description":"Permission to set a channel to read only channel",
"snippet-message":"Snippet Message",
"snippet-message_description":"Permission to create snippet message",
"unarchive-room":"Unarchive Room",
"unarchive-room_description":"Permission to unarchive channels",
"user-generate-access-token":"User Generate Access Token",
"user-generate-access-token_description":"Permission for users to generate access tokens",
"view-c-room":"View Public Channel",
"view-c-room_description":"Permission to view public channels",
"view-d-room":"View Direct Messages",
"view-d-room_description":"Permission to view direct messages",
"view-full-other-user-info":"View Full Other User Info",
"view-full-other-user-info_description":"Permission to view full profile of other users including account creation date, last login, etc.",
"view-history":"View History",
"view-history_description":"Permission to view the channel history",
"view-join-code":"View Join Code",
"view-join-code_description":"Permission to view the channel join code",
"view-joined-room":"View Joined Room",
"view-joined-room_description":"Permission to view the currently joined channels",
"view-l-room":"View Livechat Rooms",
"view-l-room_description":"Permission to view livechat channels",
"view-livechat-manager":"View Livechat Manager",
"view-livechat-manager_description":"Permission to view other livechat managers",
"view-livechat-rooms":"View Livechat Rooms",
"view-livechat-rooms_description":"Permission to view other livechat channels",
"view-logs":"View Logs",
"view-logs_description":"Permission to view the server logs ",
"view-p-room":"View Private Room",
"view-p-room_description":"Permission to view private channels",
"view-privileged-setting":"View Privileged Setting",
"view-privileged-setting_description":"Permission to view settings",
"view-other-user-channels":"View Other User Channels",
"view-other-user-channels_description":"Permission to view channels owned by other users",
"view-room-administration":"View Room Administration",
"view-room-administration_description":"Permission to view public, private and direct message statistics. Does not include the ability to view conversations or archives",
"view-statistics":"View Statistics",
"view-statistics_description":"Permission o view system statistics such as number of users logged in, number of rooms, operating system information",
"view-user-administration":"View User Administration",
"view-user-administration_description":"Permission to partial, read-only list view of other user accounts currently logged into the system. No user account information is accessible with this permission",
"access-mailer": "Access Mailer Screen",
"access-mailer_description": "Permission to send mass email to all users.",
"access-permissions": "Access Permissions Screen",
"access-permissions_description": "Modify permissions for various roles.",
"add-oauth-service": "Add Oauth Service",
"add-oauth-service_description": "Permission to add a new Oauth service",
"add-user": "Add User",
"add-user_description": "Permission to add new users to the server via users screen",
"add-user-to-any-c-room": "Add User to Any Public Channel",
"add-user-to-any-c-room_description": "Permission to add a user to any public channel",
"add-user-to-any-p-room": "Add User to Any Private Channel",
"add-user-to-any-p-room_description": "Permission to add a user to any private channel",
"add-user-to-joined-room": "Add User to Any Joined Channel",
"add-user-to-joined-room_description": "Permission to add a user to a currently joined channel",
"archive-room": "Archive Room",
"archive-room_description": "Permission to archive a channel",
"assign-admin-role": "Assign Admin Role",
"assign-admin-role_description": "Permission to assign the admin role to other users",
"auto-translate": "Auto Translate",
"auto-translate_description": "Permission to use the auto translate tool",
"ban-user": "Ban User",
"ban-user_description": "Permission to ban a user from a channel",
"bulk-create-c": "Bulk Create Channels",
"bulk-create-c_description": "Permission to create channels in bulk",
"bulk-register-user": "Bulk Create Channels",
"bulk-register-user_description": "Permission to create channels in bulk",
"clean-channel-history": "Clean Channel History",
"clean-channel-history_description": "Permission to Clear the history from channels",
"close-livechat-room": "Close Livechat Room",
"close-livechat-room_description": "Permission to close the current LiveChat channel",
"close-others-livechat-room": "Close Livechat Room",
"close-others-livechat-room_description": "Permission to close other LiveChat channels",
"create-c": "Create Public Channels",
"create-c_description": "Permission to create public channels",
"create-d": "Create Direct Messages",
"create-d_description": "Permission to start direct messages",
"create-p": "Create Private Channels",
"create-p_description": "Permission to create private channels",
"create-user": "Create User",
"create-user_description": "Permission to create users",
"delete-c": "Delete Public Channels",
"delete-c_description": "Permission to delete public channels",
"delete-d": "Delete Direct Messages",
"delete-d_description": "Permission to delete direct messages",
"delete-p": "Delete Private Channels",
"delete-p_description": "Permission to delete private channels",
"delete-message": "Delete Message",
"delete-message_description": "Permission to delete a message within a room",
"delete-user": "Delete User",
"delete-user_description": "Permission to delete users",
"edit-message": "Edit Message",
"edit-message_description": "Permission to edit a message within a room",
"edit-other-user-active-status": "Edit Other User Active Status",
"edit-other-user-active-status_description": "Permission to enable or disable other accounts",
"edit-other-user-info": "Edit Other User Information",
"edit-other-user-info_description": "Permission to change other user’s name, username or email address.",
"edit-other-user-password": "Edit Other User Password",
"edit-other-user-password_description": "Permission to modify other user’s passwords. Requires edit-other-user-info permission.",
"edit-privileged-setting": "Edit privileged Setting",
"edit-privileged-setting_description": "Permission to edit settings",
"edit-room": "Edit Room",
"edit-room_description": "Permission to edit a room’s name, topic, type (private or public status) and status (active or archived)",
"force-delete-message": "Force Delete Message",
"force-delete-message_description": "Permission to delete a message bypassing all restrictions",
"join-without-join-code": "Join Without Join Code",
"join-without-join-code_description": "Permission to bypass the join code in channels with join code enabled",
"mail-messages": "Mail Messages",
"mail-messages_description": "Permission to use the mail messages option",
"manage-assets": "Manage Assets",
"manage-assets_description": "Permission to manage the server assets",
"manage-emoji": "Manage Emoji",
"manage-emoji_description": "Permission to manage the server emojis",
"manage-integrations": "Manage Integrations",
"manage-integrations_description": "Permission to manage the server integrations",
"manage-oauth-apps": "Manage Oauth Apps",
"manage-oauth-apps_description": "Permission to manage the server Oauth apps",
"manage-own-integrations": "Manage Own Integrations",
"manage-own-integrations_description": "Permition to allow users to create and edit their own integration or webhooks",
"manage-sounds": "Manage Sounds",
"manage-sounds_description": "Permission to manage the server sounds",
"mention-all": "Mention All",
"mention-all_description": "Permission to use the @all mention",
"mute-user": "Mute User",
"mute-user_description": "Permission to mute other users in the same channel",
"pin-message": "Pin Message",
"pin-message_description": "Permission to pin a message in a channel",
"post-readonly": "Post ReadOnly",
"post-readonly_description": "Permission to post a message in a read-only channel",
"preview-c-room": "Preview Public Channel",
"preview-c-room_description": "Permission to view the contents of a public channel before joining",
"remove-user": "Remove User",
"remove-user_description": "Permission to remove a user from a room",
"run-import": "Run Import",
"run-import_description": "Permission to run the importers",
"run-migration": "Run Migration",
"run-migration_description": "Permission to run the migrations",
"save-others-livechat-room-info": "Save Others Livechat Room Info",
"save-others-livechat-room-info_description": "Permission to save information from other livechat channels",
"set-moderator": "Set Moderator",
"set-moderator_description": "Permission to set other users as moderator of a channel",
"set-owner": "Set Owner",
"set-owner_description": "Permission to set other users as owner of a channel",
"set-react-when-readonly": "Set React When ReadOnly",
"set-react-when-readonly_description": "Permission to set the ability to react to messages in a read only channel",
"set-readonly": "Set ReadOnly",
"set-readonly_description": "Permission to set a channel to read only channel",
"snippet-message": "Snippet Message",
"snippet-message_description": "Permission to create snippet message",
"unarchive-room": "Unarchive Room",
"unarchive-room_description": "Permission to unarchive channels",
"user-generate-access-token": "User Generate Access Token",
"user-generate-access-token_description": "Permission for users to generate access tokens",
"view-c-room": "View Public Channel",
"view-c-room_description": "Permission to view public channels",
"view-d-room": "View Direct Messages",
"view-d-room_description": "Permission to view direct messages",
"view-full-other-user-info": "View Full Other User Info",
"view-full-other-user-info_description": "Permission to view full profile of other users including account creation date, last login, etc.",
"view-history": "View History",
"view-history_description": "Permission to view the channel history",
"view-join-code": "View Join Code",
"view-join-code_description": "Permission to view the channel join code",
"view-joined-room": "View Joined Room",
"view-joined-room_description": "Permission to view the currently joined channels",
"view-l-room": "View Livechat Rooms",
"view-l-room_description": "Permission to view livechat channels",
"view-livechat-manager": "View Livechat Manager",
"view-livechat-manager_description": "Permission to view other livechat managers",
"view-livechat-rooms": "View Livechat Rooms",
"view-livechat-rooms_description": "Permission to view other livechat channels",
"view-logs": "View Logs",
"view-logs_description": "Permission to view the server logs ",
"view-p-room": "View Private Room",
"view-p-room_description": "Permission to view private channels",
"view-privileged-setting": "View Privileged Setting",
"view-privileged-setting_description": "Permission to view settings",
"view-other-user-channels": "View Other User Channels",
"view-other-user-channels_description": "Permission to view channels owned by other users",
"view-room-administration": "View Room Administration",
"view-room-administration_description": "Permission to view public, private and direct message statistics. Does not include the ability to view conversations or archives",
"view-statistics": "View Statistics",
"view-statistics_description": "Permission o view system statistics such as number of users logged in, number of rooms, operating system information",
"view-user-administration": "View User Administration",
"view-user-administration_description": "Permission to partial, read-only list view of other user accounts currently logged into the system. No user account information is accessible with this permission",
"Pin_Message": "Pin Message",
"Pinned_a_message": "Pinned a message:",
"Pinned_Messages": "Pinned Messages",
"PiwikAnalytics_siteId_Description": "The site id to use for identifying this site. Example: 17",
"PiwikAdditionalTrackers" : "Additional piwik sites",
"PiwikAdditionalTrackers_Description" : "Enter addtitional Piwik website URLs and SiteIDs in the following format, if you wnat to track the same data into different websites: [ { \"trackerURL\" : \"https://my.piwik.domain2/\", \"siteId\" : 42 }, { \"trackerURL\" : \"https://my.piwik.domain3/\", \"siteId\" : 15 } ]",
"PiwikAnalytics_prependDomain" : "Prepend domain",
"PiwikAnalytics_prependDomain_Description" : "Prepend the site domain to the page title when tracking",
"PiwikAnalytics_cookieDomain" : "All subdomains",
"PiwikAnalytics_cookieDomain_Description" : "Track visitors across all subdomains",
"PiwikAnalytics_domains" : "Hide outgoing links",
"PiwikAnalytics_domains_Description" : "In the 'Outlinks' report, hide clicks to known alias URLs. Please insert one domain per line and do not use any separators.",
"PiwikAdditionalTrackers": "Additional piwik sites",
"PiwikAdditionalTrackers_Description": "Enter addtitional Piwik website URLs and SiteIDs in the following format, if you wnat to track the same data into different websites: [ { \"trackerURL\" : \"https://my.piwik.domain2/\", \"siteId\" : 42 }, { \"trackerURL\" : \"https://my.piwik.domain3/\", \"siteId\" : 15 } ]",
"PiwikAnalytics_prependDomain": "Prepend domain",
"PiwikAnalytics_prependDomain_Description": "Prepend the site domain to the page title when tracking",
"PiwikAnalytics_cookieDomain": "All subdomains",
"PiwikAnalytics_cookieDomain_Description": "Track visitors across all subdomains",
"PiwikAnalytics_domains": "Hide outgoing links",
"PiwikAnalytics_domains_Description": "In the 'Outlinks' report, hide clicks to known alias URLs. Please insert one domain per line and do not use any separators.",
"PiwikAnalytics_url_Description": "The url where the Piwik resides, be sure to include the trailing slash. Example: //piwik.rocket.chat/",
"Placeholder_for_email_or_username_login_field": "Placeholder for email or username login field",
"Placeholder_for_password_login_field": "Placeholder for password login field",
@ -1712,7 +1718,7 @@
"Two-factor_authentication_disabled": "Two-factor authentication disabled",
"Two-factor_authentication_enabled": "Two-factor authentication enabled",
"Two-factor_authentication_is_currently_disabled": "Two-factor authentication is currently disabled",
"Two-factor_authentication_native_mobile_app_warning" : "WARNING: Once you enable this, you will not be able to login on the native mobile apps (Rocket.Chat+) using your password until they implement the 2FA.",
"Two-factor_authentication_native_mobile_app_warning": "WARNING: Once you enable this, you will not be able to login on the native mobile apps (Rocket.Chat+) using your password until they implement the 2FA.",
"Thursday": "Thursday",
"Time_in_seconds": "Time in seconds",
"Title": "Title",
@ -1740,6 +1746,7 @@
"Type_your_message": "Type your message",
"Type_your_name": "Type your name",
"Type_your_new_password": "Type your new password",
"UI_Allow_room_names_with_special_chars": "Allow special chars on room names",
"UI_DisplayRoles": "Display Roles",
"UI_Merge_Channels_Groups": "Merge private groups with channels",
"UI_Unread_Counter_Style": "Unread counter style",
@ -1925,4 +1932,4 @@
"your_message_optional": "your message (optional)",
"Your_password_is_wrong": "Your password is wrong!",
"Your_push_was_sent_to_s_devices": "Your push was sent to %s devices"
}
}

@ -1363,4 +1363,4 @@
"Your_mail_was_sent_to_s": "Su correo electrónico fue enviado a %s",
"Your_password_is_wrong": "Su contraseña es incorrecta!",
"Your_push_was_sent_to_s_devices": "Su push fue enviado a los dispositivos %s"
}
}

@ -1129,12 +1129,14 @@
"Redirect_URI": "URI de redirection",
"Refresh_keys": "Rafraîchir les clefs",
"Refresh_your_page_after_install_to_enable_screen_sharing": "Actualisez votre page après l'installation pour permettre le partage d'écran",
"Regenerate_codes": "Regénérer les codes",
"Register": "Créer un nouveau compte",
"Registration": "Enregistrement",
"Registration_Succeeded": "Enregistrement réussi",
"Registration_via_Admin": "Enregistrement par un administrateur",
"Regular_Expressions": "Expressions régulières",
"Release": "Version",
"Reload": "Recharger",
"Remove": "Supprimer",
"Remove_Admin": "Supprimer administrateur",
"Remove_as_moderator": "Supprimer de la liste des modérateurs",

File diff suppressed because it is too large Load Diff

@ -0,0 +1,3 @@
{
"#channel": "#cуваг"
}

@ -1310,4 +1310,4 @@
"your_message_optional": "sua mensagem (opcional)",
"Your_password_is_wrong": "Sua senha está errada!",
"Your_push_was_sent_to_s_devices": "Sua natificação foi enviada para %s dispositivos"
}
}

@ -1353,4 +1353,4 @@
"your_message_optional": "sua mensagem (opcional)",
"Your_password_is_wrong": "Sua senha está errada!",
"Your_push_was_sent_to_s_devices": "Sua natificação foi enviada para %s dispositivos"
}
}

File diff suppressed because it is too large Load Diff

@ -1220,4 +1220,4 @@
"Your_mail_was_sent_to_s": "maili juaj u dërgua në %s",
"Your_password_is_wrong": "Fjalëkalimi juaj është e gabuar!",
"Your_push_was_sent_to_s_devices": "shtytje juaj u dërgua në pajisjet %s"
}
}

@ -0,0 +1,57 @@
{
"#channel": "ชองทาง",
"0_Errors_Only": "0 - แสดงขอผดพลาดเทานน",
"1_Errors_and_Information": "1 - แสดงขอผดพลาดและขอมล",
"2_Erros_Information_and_Debug": "2 - แสดงขอผดพลาด, ขอมลและการแกญหา",
"403": "ไมอนญาต",
"500": "เกดขอผดพลาดภายในเซฟเวอร",
"@username": "@ชอผใช",
"@username_message": "@ชอผใช <ขอความ0>",
"__username__is_no_longer__role__defined_by__user_by_": "_username_ ไมไช _role_by_user_by_",
"__username__was_set__role__by__user_by_": "_username_ was set _role_by_user_by",
"Accept": "ยอมรบ",
"Accept_incoming_livechat_requests_even_if_there_are_no_online_agents": "ยอมรบการรองขอ Livechat ถงแมจะไม Agents ออนไลน",
"Accept_with_no_online_agents": "ยอมรบโดยไม Agents ออนไลน",
"Access_not_authorized": "การเขาถงไมไดบอน",
"Access_Token_URL": "Access Token URL",
"Accessing_permissions": "กฏระเบยบการเขาถง",
"Account_SID": "บญช SID",
"Accounts": "บญช",
"Accounts_AllowAnonymousRead": "ยอมใหานแบบไมระบวตน",
"Accounts_AllowAnonymousWrite": "ยอมใหเขยนแบบไมระบวตน",
"Accounts_AllowDeleteOwnAccount": "ยอมใหใชลบบญชของตนเอง",
"Accounts_AllowedDomainsList": "รายชอ Domain ทยอมรบ",
"Accounts_AllowedDomainsList_Description": "รายชอ Domain ทยอมรบคนดวยคอมมา",
"Accounts_AllowEmailChange": "ยอมใหเปลยนอเมล",
"Accounts_AllowPasswordChange": "ยอมใหเปลยนพาสเวด",
"Accounts_AllowUserAvatarChange": "ยอมใหใชเปลยนรปประจำตว",
"Accounts_AllowUsernameChange": "ยอมใหใชเปลยนชอผใช",
"Accounts_AllowUserProfileChange": "ยอมใหแกไขขอมลผใช",
"Accounts_AvatarResize": "แกไขขนาดรปประจำตว",
"Accounts_AvatarSize": "ขนาดของรปประจำตว",
"Accounts_BlockedDomainsList": "รายชอ Domain ทไมยอมรบ",
"Accounts_BlockedDomainsList_Description": "รายชอ Domain ทไมยอมรบคนดวยคอมมา",
"Accounts_BlockedUsernameList": "รายชอผใชไมยอมรบ",
"Accounts_BlockedUsernameList_Description": "รายชอผใชไมยอมรบคนดวยคอมมา (ไมสนใจตวอกษร)",
"Accounts_CustomFields_Description": "คณจะเปน JSON ทกตองโดยม Keys เปนชอประกอบไปดวย Doctionary ของรายละเอยดของ Keys. ตวอยางเชน:<br/><code>{\n\"role\": {\n\"type\": \"select\",\n\"defaultValue\": \"student\",\n\"options\": [\"teacher\", \"student\"],\n\"required\": true,\n\"modifyRecordField\": {\n\"array\": true,\n\"field\": \"roles\"\n}\n},\n\"twitter\": {\n\"type\": \"text\",\n\"required\": true,\n\"minLength\": 2,\n\"maxLength\": 10\n}\n}</code> ",
"Accounts_DefaultUsernamePrefixSuggestion": "คำแนะนำสำหรบคาเรมตนของคำนำหนาชอผใช",
"Accounts_denyUnverifiedEmail": "ปฏเสธอเมลไมไดบการตรวจสอบ",
"Accounts_EmailVerification": "การตรวจสอบอเมล",
"Accounts_EmailVerification_Description": "ตองตงคา SMTP เพอใชงานฟเจอร",
"Accounts_Enrollment_Email": "การลงทะเบยนอเมล",
"Accounts_Enrollment_Email_Default": "<h2>ยนดอนรบสง <h1>[Site_Name]</h1></h2><p>ไปท [Site_URL] และทดลองใชงานโปรแกรมแชททดท ณ ปจจน</p>",
"Accounts_Enrollment_Email_Subject_Default": "ยนดอนรบสง [Site_Name]",
"Accounts_ForgetUserSessionOnWindowClose": "ลม session เมอปดหนาตาง",
"Accounts_Iframe_api_method": "Api Method",
"Accounts_Iframe_api_url": "API URL",
"Accounts_iframe_enabled": "เปดใชงานแลว",
"Accounts_iframe_url": "Iframe Url",
"Accounts_LoginExpiration": "การเขาระบบมอายเปนจำนวนวน",
"Accounts_ManuallyApproveNewUsers": "ตรวจสอบผใชใหมวยมอ",
"Accounts_OAuth_Custom_Authorize_Path": "Authorize Path",
"Accounts_OAuth_Custom_Button_Color": "สของปม",
"Accounts_OAuth_Custom_Button_Label_Color": "สของตวหนงสอบนปม",
"Accounts_OAuth_Custom_Button_Label_Text": "ตวหนงสอบนปม",
"Accounts_OAuth_Custom_Enable": "เปดใชงาน",
"Accounts_OAuth_Custom_id": "Id"
}

@ -17,6 +17,8 @@
"Accessing_permissions": "访问权限",
"Account_SID": "帐户 SID",
"Accounts": "帐户",
"Accounts_AllowAnonymousRead": "允许匿名阅读",
"Accounts_AllowAnonymousWrite": "允许匿名写入",
"Accounts_AllowDeleteOwnAccount": "允许用户销毁自己的帐号",
"Accounts_AllowedDomainsList": "允许的域名列表",
"Accounts_AllowedDomainsList_Description": "以逗号分隔的允许的域名列表",
@ -1418,6 +1420,7 @@
"Verification_Email_Subject": "[Site_Name] - 验证你的账户",
"Verification_Email": "<a href=\"[Verification_Url]\">点击这里</a> 验证你的账户。",
"Verified": "已验证",
"Verify": "验证",
"Version": "版本",
"Video_Chat_Window": "视频聊天",
"Video_Conference": "视频会议",

@ -0,0 +1,46 @@
RocketChat.getValidRoomName = function getValidRoomName(displayName, rid = '') {
let slugifiedName = displayName;
if (RocketChat.settings.get('UI_Allow_room_names_with_special_chars')) {
const room = RocketChat.models.Rooms.findOneByDisplayName(displayName);
if (room && room._id !== rid) {
if (room.archived) {
throw new Meteor.Error('error-archived-duplicate-name', `There's an archived channel with name ${ displayName }`, { function: 'RocketChat.getValidRoomName', channel_name: displayName });
} else {
throw new Meteor.Error('error-duplicate-channel-name', `A channel with name '${ displayName }' exists`, { function: 'RocketChat.getValidRoomName', channel_name: displayName });
}
}
slugifiedName = s.slugify(displayName);
}
let nameValidation;
try {
nameValidation = new RegExp(`^${ RocketChat.settings.get('UTF8_Names_Validation') }$`);
} catch (error) {
nameValidation = new RegExp('^[0-9a-zA-Z-_.]+$');
}
if (!nameValidation.test(slugifiedName)) {
throw new Meteor.Error('error-invalid-room-name', `${ slugifiedName } is not a valid room name.`, {
'function': 'RocketChat.getValidRoomName',
channel_name: slugifiedName
});
}
const room = RocketChat.models.Rooms.findOneByName(slugifiedName);
if (room && room._id !== rid) {
if (RocketChat.settings.get('UI_Allow_room_names_with_special_chars')) {
let tmpName = slugifiedName;
let next = 0;
while (RocketChat.models.Rooms.findOneByNameAndNotId(tmpName, rid)) {
tmpName = `${ slugifiedName }-${ ++next }`;
}
slugifiedName = tmpName;
} else if (room.archived) {
throw new Meteor.Error('error-archived-duplicate-name', `There's an archived channel with name ${ slugifiedName }`, { function: 'RocketChat.getValidRoomName', channel_name: slugifiedName });
} else {
throw new Meteor.Error('error-duplicate-channel-name', `A channel with name '${ slugifiedName }' exists`, { function: 'RocketChat.getValidRoomName', channel_name: slugifiedName });
}
}
return slugifiedName;
};

@ -55,6 +55,7 @@ Package.onUse(function(api) {
api.addFiles('lib/settings.js');
api.addFiles('lib/callbacks.js');
api.addFiles('lib/fileUploadRestrictions.js');
api.addFiles('lib/getValidRoomName.js');
api.addFiles('lib/placeholders.js');
api.addFiles('lib/promises.js');
api.addFiles('lib/roomTypesCommon.js');
@ -99,6 +100,7 @@ Package.onUse(function(api) {
api.addFiles('server/lib/configLogger.js', 'server');
api.addFiles('server/lib/PushNotification.js', 'server');
api.addFiles('server/lib/defaultBlockedDomainsList.js', 'server');
api.addFiles('server/lib/loginErrorMessageOverride.js', 'server');
api.addFiles('server/lib/notifyUsersOnMessage.js', 'server');
api.addFiles('server/lib/roomTypes.js', 'server');
api.addFiles('server/lib/sendEmailOnMessage.js', 'server');
@ -178,7 +180,6 @@ Package.onUse(function(api) {
// COMMON STARTUP
api.addFiles('lib/startup/settingsOnLoadSiteUrl.js');
api.addFiles('lib/startup/messageBoxActions.js', 'client');
// CLIENT LIB
api.addFiles('client/Notifications.js', 'client');

@ -1,3 +1,3 @@
{
"version": "0.58.0-develop"
"version": "0.59.0-develop"
}

@ -13,36 +13,18 @@ RocketChat.createRoom = function(type, name, owner, members, readOnly, extraData
throw new Meteor.Error('error-invalid-user', 'Invalid user', { function: 'RocketChat.createRoom' });
}
let nameValidation;
try {
nameValidation = new RegExp(`^${ RocketChat.settings.get('UTF8_Names_Validation') }$`);
} catch (error) {
nameValidation = new RegExp('^[0-9a-zA-Z-_.]+$');
}
if (!nameValidation.test(name)) {
throw new Meteor.Error('error-invalid-name', 'Invalid name', { function: 'RocketChat.createRoom' });
}
const slugifiedRoomName = RocketChat.getValidRoomName(name);
const now = new Date();
if (!_.contains(members, owner.username)) {
members.push(owner.username);
}
// avoid duplicate names
let room = RocketChat.models.Rooms.findOneByName(name);
if (room) {
if (room.archived) {
throw new Meteor.Error('error-archived-duplicate-name', `There's an archived channel with name ${ name }`, { function: 'RocketChat.createRoom', room_name: name });
} else {
throw new Meteor.Error('error-duplicate-channel-name', `A channel with name '${ name }' exists`, { function: 'RocketChat.createRoom', room_name: name });
}
}
if (type === 'c') {
RocketChat.callbacks.run('beforeCreateChannel', owner, {
t: 'c',
name,
name: slugifiedRoomName,
fname: name,
ts: now,
ro: readOnly === true,
sysMes: readOnly !== true,
@ -60,7 +42,7 @@ RocketChat.createRoom = function(type, name, owner, members, readOnly, extraData
sysMes: readOnly !== true
});
room = RocketChat.models.Rooms.createWithTypeNameUserAndUsernames(type, name, owner, members, extraData);
const room = RocketChat.models.Rooms.createWithTypeNameUserAndUsernames(type, slugifiedRoomName, name, owner, members, extraData);
for (const username of members) {
const member = RocketChat.models.Users.findOneByUsername(username, { fields: { username: 1 }});
@ -95,6 +77,7 @@ RocketChat.createRoom = function(type, name, owner, members, readOnly, extraData
}
return {
rid: room._id
rid: room._id,
name: slugifiedRoomName
};
};

@ -7,9 +7,8 @@ RocketChat.saveCustomFieldsWithoutValidation = function(userId, formData) {
throw new Meteor.Error('error-invalid-customfield-json', 'Invalid JSON for Custom Fields');
}
const customFields = formData;
// for fieldName, field of customFieldsMeta
const customFields = {};
Object.keys(customFieldsMeta).forEach(key => customFields[key] = formData[key]);
RocketChat.models.Users.setCustomFields(userId, customFields);
Object.keys(customFields).forEach((fieldName) => {

@ -0,0 +1,11 @@
// Do not disclose if user exists when password is invalid
const _runLoginHandlers = Accounts._runLoginHandlers;
Accounts._runLoginHandlers = function(methodInvocation, options) {
const result = _runLoginHandlers.call(Accounts, methodInvocation, options);
if (result.error && result.error.reason === 'Incorrect password') {
result.error = new Meteor.Error(403, 'User not found');
}
return result;
};

@ -144,20 +144,41 @@ RocketChat.callbacks.add('afterSaveMessage', function(message, room, userId) {
return (settings[types[type][0]].indexOf(id) === -1 || settings[types[type][1]].indexOf(id) !== -1);
}
const notificationPreferencesByRoom = RocketChat.models.Subscriptions.findNotificationPreferencesByRoom(room._id);
notificationPreferencesByRoom.forEach(function(subscription) {
// Don't fetch all users if room exceeds max members
const maxMembersForNotification = RocketChat.settings.get('Notifications_Max_Room_Members');
const disableAllMessageNotifications = room.usernames.length > maxMembersForNotification && maxMembersForNotification !== 0;
const subscriptions = RocketChat.models.Subscriptions.findNotificationPreferencesByRoom(room._id, disableAllMessageNotifications);
const userIds = [];
subscriptions.forEach((s) => {
userIds.push(s.u._id);
});
const userSettings = {};
RocketChat.models.Users.findUsersByIds(userIds, { fields: { 'settings.preferences.desktopNotifications': 1, 'settings.preferences.mobileNotifications': 1 } }).forEach((user) => {
userSettings[user._id] = user.settings;
});
subscriptions.forEach((subscription) => {
if (subscription.disableNotifications) {
settings.dontNotifyDesktopUsers.push(subscription.u._id);
settings.dontNotifyMobileUsers.push(subscription.u._id);
} else {
if (subscription.desktopNotifications === 'all') {
const preferences = userSettings[subscription.u._id] ? userSettings[subscription.u._id].preferences || {} : {};
const userDesktopNotificationPreference = preferences.desktopNotifications !== 'default' ? preferences.desktopNotifications : undefined;
const userMobileNotificationPreference = preferences.mobileNotifications !== 'default' ? preferences.mobileNotifications : undefined;
// Set defaults if they don't exist
const {
desktopNotifications = userDesktopNotificationPreference || RocketChat.settings.get('Desktop_Notifications_Default_Alert'),
mobilePushNotifications = userMobileNotificationPreference || RocketChat.settings.get('Mobile_Notifications_Default_Alert')
} = subscription;
if (desktopNotifications === 'all' && !disableAllMessageNotifications) {
settings.alwaysNotifyDesktopUsers.push(subscription.u._id);
} else if (subscription.desktopNotifications === 'nothing') {
} else if (desktopNotifications === 'nothing') {
settings.dontNotifyDesktopUsers.push(subscription.u._id);
}
if (subscription.mobilePushNotifications === 'all') {
if (mobilePushNotifications === 'all' && !disableAllMessageNotifications) {
settings.alwaysNotifyMobileUsers.push(subscription.u._id);
} else if (subscription.mobilePushNotifications === 'nothing') {
} else if (mobilePushNotifications === 'nothing') {
settings.dontNotifyMobileUsers.push(subscription.u._id);
}
}
@ -176,22 +197,17 @@ RocketChat.callbacks.add('afterSaveMessage', function(message, room, userId) {
}
});
let push_message;
let push_message = ' ';
//Set variables depending on Push Notification settings
if (RocketChat.settings.get('Push_show_message')) {
push_message = parseMessageText(message, userId);
} else {
push_message = ' ';
}
let push_username;
let push_room;
let push_username = '';
let push_room = '';
if (RocketChat.settings.get('Push_show_username_room')) {
push_username = user.username;
push_room = `#${ room.name }`;
} else {
push_username = '';
push_room = '';
}
if (room.t == null || room.t === 'd') {

@ -39,12 +39,11 @@ Meteor.methods({
}
}
if (originalMessage.attachments) {
if (originalMessage.attachments[0].description !== undefined) {
message.attachments = originalMessage.attachments;
message.attachments[0].description = message.msg;
message.msg = originalMessage.msg;
}
// It is possible to have an empty array as the attachments property, so ensure both things exist
if (originalMessage.attachments && originalMessage.attachments.length > 0 && originalMessage.attachments[0].description !== undefined) {
message.attachments = originalMessage.attachments;
message.attachments[0].description = message.msg;
message.msg = originalMessage.msg;
}
message.u = originalMessage.u;

@ -37,6 +37,21 @@ class ModelRooms extends RocketChat.models._Base {
return this.findOne(query, options);
}
findOneByNameAndNotId(name, rid) {
const query = {
_id: { $ne: rid },
name
};
return this.findOne(query);
}
findOneByDisplayName(fname, options) {
const query = {fname};
return this.findOne(query, options);
}
findOneByNameAndType(name, type, options) {
const query = {
name,
@ -490,12 +505,13 @@ class ModelRooms extends RocketChat.models._Base {
return this.update(query, update);
}
setNameById(_id, name) {
setNameById(_id, name, fname) {
const query = {_id};
const update = {
$set: {
name
name,
fname
}
};
@ -719,9 +735,10 @@ class ModelRooms extends RocketChat.models._Base {
}
// INSERT
createWithTypeNameUserAndUsernames(type, name, user, usernames, extraData) {
createWithTypeNameUserAndUsernames(type, name, fname, user, usernames, extraData) {
const room = {
name,
fname,
t: type,
usernames,
msgs: 0,

@ -283,13 +283,14 @@ class ModelSubscriptions extends RocketChat.models._Base {
return this.update(query, update);
}
updateNameAndAlertByRoomId(roomId, name) {
updateNameAndAlertByRoomId(roomId, name, fname) {
const query =
{rid: roomId};
const update = {
$set: {
name,
fname,
alert: true
}
};
@ -552,6 +553,7 @@ class ModelSubscriptions extends RocketChat.models._Base {
ts: room.ts,
rid: room._id,
name: room.name,
fname: room.fname,
t: room.t,
u: {
_id: user._id,

@ -229,6 +229,15 @@ class ModelUsers extends RocketChat.models._Base {
return this.find(query, options);
}
findUsersByIds(ids, options) {
const query = {
_id: {
$in: ids
}
};
return this.find(query, options);
}
// UPDATE
addImportIds(_id, importIds) {
importIds = [].concat(importIds);

@ -414,11 +414,47 @@ RocketChat.settings.addGroup('General', function() {
});
});
this.section('Notifications', function() {
return this.add('Desktop_Notifications_Duration', 0, {
this.add('Desktop_Notifications_Duration', 0, {
type: 'int',
'public': true,
i18nDescription: 'Desktop_Notification_Durations_Description'
});
this.add('Desktop_Notifications_Default_Alert', 'mentions', {
type: 'select',
values: [{
key: 'all',
i18nLabel: 'All_messages'
}, {
key: 'mentions',
i18nLabel: 'Mentions'
}, {
key: 'nothing',
i18nLabel: 'Nothing'
}],
public: true
});
this.add('Mobile_Notifications_Default_Alert', 'mentions', {
type: 'select',
values: [{
key: 'all',
i18nLabel: 'All_messages'
}, {
key: 'mentions',
i18nLabel: 'Mentions'
}, {
key: 'nothing',
i18nLabel: 'Nothing'
}],
public: true
});
this.add('Notifications_Max_Room_Members', 100, {
type: 'int',
public: true,
i18nDescription: 'Notifications_Max_Room_Members_Description'
});
});
this.section('REST API', function() {
return this.add('API_User_Limit', 500, {
@ -1057,6 +1093,10 @@ RocketChat.settings.addGroup('Layout', function() {
],
'public': true
});
this.add('UI_Allow_room_names_with_special_chars', false, {
type: 'boolean',
public: true
});
});
});

@ -54,6 +54,9 @@ RocketChat.roomTypes.add('c', 30, {
},
roomName(roomData) {
if (RocketChat.settings.get('UI_Allow_room_names_with_special_chars')) {
return roomData.fname || roomData.name;
}
return roomData.name;
},
@ -68,37 +71,6 @@ RocketChat.roomTypes.add('c', 30, {
}
});
// private
RocketChat.roomTypes.add('p', 40, {
icon: 'lock',
label: 'Private_Groups',
route: {
name: 'group',
path: '/group/:name',
action(params) {
return openRoom('p', params.name);
}
},
findRoom(identifier) {
const query = {
t: 'p',
name: identifier
};
return ChatRoom.findOne(query);
},
roomName(roomData) {
return roomData.name;
},
condition() {
const user = Meteor.user();
const preferences = (user && user.settings && user.settings.preferences && user.settings.preferences) || {};
return !preferences.roomsListExhibitionMode || ['unread', 'category'].includes(preferences.roomsListExhibitionMode) && !preferences.mergeChannels && RocketChat.authz.hasAllPermission('view-p-room');
}
});
// direct
RocketChat.roomTypes.add('d', 50, {
icon: false,
@ -158,3 +130,37 @@ RocketChat.roomTypes.add('d', 50, {
return Session.get(`user_${ subscription.name }_status`);
}
});
// private
RocketChat.roomTypes.add('p', 40, {
icon: 'icon-lock',
label: 'Private_Groups',
route: {
name: 'group',
path: '/group/:name',
action(params) {
return openRoom('p', params.name);
}
},
findRoom(identifier) {
const query = {
t: 'p',
name: identifier
};
return ChatRoom.findOne(query);
},
roomName(roomData) {
if (RocketChat.settings.get('UI_Allow_room_names_with_special_chars')) {
return roomData.fname || roomData.name;
}
return roomData.name;
},
condition() {
const user = Meteor.user();
const preferences = (user && user.settings && user.settings.preferences && user.settings.preferences) || {};
return !preferences.roomsListExhibitionMode || ['unread', 'category'].includes(preferences.roomsListExhibitionMode) && !preferences.mergeChannels && RocketChat.authz.hasAllPermission('view-p-room');
}
});

@ -1,17 +1,31 @@
{
"Additional_Feedback": "ملاحظات إضافية",
"Appearance": "المظهر",
"Conversation_finished": "المحادثة الانتهاء",
"Are_you_sure_do_you_want_end_this_chat": "هل تُؤكّد إنهاء هذه الدردشة؟",
"Are_you_sure_do_you_want_end_this_chat_and_switch_department": "هل تُؤكّد إنهاء هذه الدردشة وتغيير الفرع؟",
"Cancel": "إلغاء",
"Change": "تغيير",
"Chat_ended": "تم إنهاء الدردشة!",
"Choose_a_new_department": "اختيار فرع جديد",
"Close_menu": "إغلاق القائمة",
"Conversation_finished": "تم إنهاء المحادثة",
"End_chat": "إنهاء الدردشة",
"How_friendly_was_the_chat_agent": "كيف ودية وكان وكيل الدردشة؟",
"How_knowledgeable_was_the_chat_agent": "معرفة كيف كان وكيل الدردشة؟",
"How_responsive_was_the_chat_agent": "كيف تستجيب كان وكيل الدردشة؟",
"How_satisfied_were_you_with_this_chat": "ما مدى رضاك مع هذه الدردشة؟",
"Installation": "تركيب",
"Installation": نصيب",
"New_messages": "رسائل جديدة",
"No": "لا",
"Options": "خيارات",
"Please_answer_survey": "يرجى ان نتوقف لحظة للرد على مسح سريع حول هذه الدردشة",
"Please_choose_a_department": "الرجاء اختيار فرع",
"Please_fill_name_and_email": "الرجاء إدخال الإسم والبريد الإلكتروني",
"Powered_by": "مشغل بواسطة",
"Request_video_chat": "طلب دردشة عبر الفيديو",
"Select_a_department": "حدد القسم",
"Switch_department": "تغيير الفرع",
"Department_switched": "تم تغيير الفرع",
"Send": "إرسال",
"Skip": "تخطي",
"Start_Chat": "بدأ الدردشة",
@ -19,11 +33,14 @@
"Survey_instructions": "معدل كل سؤال وفقا لالارتياح الخاص بك، 1 وهذا يعني أنك غير راضي تماما و 5 يعني كنت راضيا تماما.",
"Thank_you_for_your_feedback": "شكرا لأفادتك",
"Thanks_We_ll_get_back_to_you_soon": "شكر! سوف نعود إليك قريبا.",
"transcript_sent": "تم إرسال رسالة النسخ السماعي",
"Type_your_email": "اكتب بريدك الالكتروني",
"Type_your_message": "اكتب رسالتك",
"Type_your_name": "اكتب اسمك",
"User_joined": "العضو انضم",
"User_left": "اليسار المستخدم",
"We_are_offline_Sorry_for_the_inconvenience": "نحن حاليا. آسف للإزعاج.",
"Yes": "نعم",
"You": "أنت",
"You_must_complete_all_fields": "يجب عليك إكمال جميع الحقول"
}

@ -1,43 +1,45 @@
{
"Additional_Feedback": "Feedback aggiuntivi",
"Additional_Feedback": "Feedback Aggiuntivi",
"Appearance": "Aspetto",
"Are_you_sure_do_you_want_end_this_chat": "Sei sicuro di voler chiudere questa chat?",
"Are_you_sure_do_you_want_end_this_chat_and_switch_department": "Sei sicuro di voler terminare la conversazione e cambiare dipartimento?",
"Cancel": "Cancella",
"Are_you_sure_do_you_want_end_this_chat": "Sei sicuro di voler terminare questa chat?",
"Are_you_sure_do_you_want_end_this_chat_and_switch_department": "Sei sicuro di voler terminare la chat e cambiare dipartimento?",
"Cancel": "Annulla",
"Change": "Cambia",
"Chat_ended": "Chat chiusa!",
"Chat_ended": "Chat terminata!",
"Choose_a_new_department": "Seleziona un nuovo dipartimento",
"Close_menu": "Chiudi menu",
"Conversation_finished": "conversazione finito",
"End_chat": "Chiusura chat",
"How_friendly_was_the_chat_agent": "Il servizio chat é stato funzionale?",
"How_knowledgeable_was_the_chat_agent": "Quanto é stato semplice il servizio chat?",
"How_responsive_was_the_chat_agent": "Quanto é stato reattivo il servizio chat?",
"How_satisfied_were_you_with_this_chat": "Quanto sei soddisfatto con questa chat?",
"Conversation_finished": "Conversazione terminata",
"End_chat": "Termina chat",
"How_friendly_was_the_chat_agent": "Quanto amichevole era l'operatore?",
"How_knowledgeable_was_the_chat_agent": "Quanto ben informato era l'operatore?",
"How_responsive_was_the_chat_agent": "Quanto efficiente era l'operatore?",
"How_satisfied_were_you_with_this_chat": "Quanto sei soddisfatto di questa chat?",
"Installation": "Installazione",
"New_messages": "Nuovi messaggi",
"No": "No",
"Options": "Opzioni",
"Please_answer_survey": "Hai un momento per rispondere a un rapido sondaggio su questa chat?",
"Please_choose_a_department": "Prego scegliere un dipartimento",
"Please_fill_name_and_email": "Compila nome e indirizzo e-mail",
"Powered_by": "Powered by",
"Please_choose_a_department": "Si prega di scegliere un dipartimento",
"Please_fill_name_and_email": "Si prega di compilare il nome e l'email",
"Powered_by": "Tecnologia di",
"Request_video_chat": "Richiedi video chat",
"Select_a_department": "Seleziona un reparto",
"Switch_department": "Cambia dipartimento",
"Department_switched": "Dipartimento cambiato",
"Send": "Invia",
"Skip": "Salta",
"Start_Chat": "Avvia chat",
"Survey": "Sondaggio",
"Survey_instructions": "Vota ogni domanda secondo la tua soddisfazione, 1 significa che sei completamente insoddisfatto e 5 significa che sei completamente soddisfatto.",
"Survey_instructions": "Vota ogni domanda secondo il tuo senso di soddisfazione, 1 significa che sei completamente insoddisfatto e 5 significa che sei completamente soddisfatto.",
"Thank_you_for_your_feedback": "Grazie per il tuo feedback",
"Thanks_We_ll_get_back_to_you_soon": "Grazie! Torneremo al più presto.",
"transcript_sent": "Invio trascrizione",
"Type_your_email": "Inserisci la tua e-mail",
"transcript_sent": "Trascrizione inviata",
"Type_your_email": "Inserisci la tua email",
"Type_your_message": "Inserisci il tuo messaggio",
"Type_your_name": "Scrivi il tuo nome",
"User_joined": "é entrato",
"User_left": "Utente ha lasciato",
"We_are_offline_Sorry_for_the_inconvenience": "Non siamo in linea. Ci dispiace per l'inconveniente.",
"Type_your_name": "Inserisci il tuo nome",
"User_joined": "L'utente si è unito",
"User_left": "L'utente ha abbandonato",
"We_are_offline_Sorry_for_the_inconvenience": "Siamo offline. Ci dispiace per l'inconveniente.",
"Yes": "Si",
"You": "Tu",
"You_must_complete_all_fields": "È necessario completare tutti i campi"

@ -0,0 +1,3 @@
{
"Additional_Feedback": "Нэмэлт санал хүсэлт"
}

@ -4,7 +4,9 @@
"Are_you_sure_do_you_want_end_this_chat": "Вы уверены что хотите завершить этот чат?",
"Are_you_sure_do_you_want_end_this_chat_and_switch_department": "Вы действительно хотите завершить этот чат и сменить отдел?",
"Cancel": "Отмена",
"Change": "Изменить",
"Chat_ended": "Чат закончен!",
"Choose_a_new_department": "Выберите новый отдел",
"Close_menu": "Закрыть меню",
"Conversation_finished": "Разговор закончен",
"End_chat": "Закончить чат",
@ -18,10 +20,12 @@
"Options": "Параметры",
"Please_answer_survey": "Пожалуйста, уделите время, чтобы ответить на несколько вопросов об этом чате",
"Please_choose_a_department": "Пожалуйста, выберете отдел",
"Please_fill_name_and_email": "Введите имя и электронный адрес",
"Please_fill_name_and_email": "Введите имя и адрес электронной почты",
"Powered_by": "Представлен",
"Request_video_chat": "Запрос чата с видео",
"Select_a_department": "Выберите группу",
"Select_a_department": "Выберите отдел",
"Switch_department": "Сменить отдел",
"Department_switched": "Отдел сменён",
"Send": "Отправить",
"Skip": "Пропустить",
"Start_Chat": "Начать чат",

@ -0,0 +1,46 @@
{
"Additional_Feedback": "ความคดเหนเพมเตม",
"Appearance": "ลกษณะภายนอก",
"Are_you_sure_do_you_want_end_this_chat": "คณตองการทจะจบการสนทนาไชหรอไม",
"Are_you_sure_do_you_want_end_this_chat_and_switch_department": "คณตองการทจะจบการสนทนาและเปลยนแผนกไชหรอไม",
"Cancel": "ยกเลก",
"Change": "เปลยน",
"Chat_ended": "การสนทนาจบสนแลว!",
"Choose_a_new_department": "เลอกแผนกใหม",
"Close_menu": "ปดตวเลอก",
"Conversation_finished": "การสนทนาเสรจสนแลว",
"End_chat": "จบการสนทนา",
"How_friendly_was_the_chat_agent": "Chat agent เปนมตรแคไหน?",
"How_knowledgeable_was_the_chat_agent": "Chat agent มความฉลาดแคไหน?",
"How_responsive_was_the_chat_agent": "Chat agent ตอบสนองดแคไหน?",
"How_satisfied_were_you_with_this_chat": "คณพงพอใจใน Chat นแคไหน?",
"Installation": "การตดตง",
"New_messages": "ขอความใหม",
"No": "ไม",
"Options": "ตวเลอก",
"Please_answer_survey": "กรณาสละเวลาตอบแบบสอบถามเกยวกบ Chat น",
"Please_choose_a_department": "กรณาเลอกแผนก",
"Please_fill_name_and_email": "กรณากรอกชอและอเมล",
"Powered_by": "ถกสรางโดย",
"Request_video_chat": "รองขอการสนทนาแบบวโอ",
"Select_a_department": "เลอกแผนก",
"Switch_department": "เปลยนแผนก",
"Department_switched": "แผนกถกเปลยนแลว",
"Send": "สง",
"Skip": "ขาม",
"Start_Chat": "เรมการสนทนา",
"Survey": "แบบสอบถาม",
"Survey_instructions": "ใหคะแนนคำถามตามความพอใจ, 1 แปลวาไมพอใจอยางมากและ 5 แปลวาพอใจอยางทด",
"Thank_you_for_your_feedback": "ขอบคณสำหรบความคดเหน",
"Thanks_We_ll_get_back_to_you_soon": "ขอบคณ! เราจะตดตอกลบโดยเรว",
"transcript_sent": "สำเนาถกสงแลว",
"Type_your_email": "พมอเมลของคณ",
"Type_your_message": "พมขอความของคณ",
"Type_your_name": "พมชอของคณ",
"User_joined": "ผใชงานเขารวมแลว",
"User_left": "ผใชงานออกแลว",
"We_are_offline_Sorry_for_the_inconvenience": "เรากำลงออฟไลน ขออภยในความไมสะดวก",
"Yes": "ไช",
"You": "คณ",
"You_must_complete_all_fields": "คณตองกรอกขอมลทกชอง"
}

@ -2,8 +2,11 @@
"Additional_Feedback": "额外反馈",
"Appearance": "外观",
"Are_you_sure_do_you_want_end_this_chat": "你确定要结束这个聊天?",
"Are_you_sure_do_you_want_end_this_chat_and_switch_department": "你确定你要结束这个聊天并且切换部门?",
"Cancel": "取消",
"Change": "改变",
"Chat_ended": "对话已结束!",
"Choose_a_new_department": "选择一个新部门",
"Close_menu": "关闭菜单",
"Conversation_finished": "对话已结束",
"End_chat": "结束对话",
@ -16,6 +19,7 @@
"No": "否",
"Options": "选项",
"Please_answer_survey": "请花几分钟来反馈这次交谈的体验",
"Please_choose_a_department": "请选择一个新部门",
"Please_fill_name_and_email": "请填写姓名和电子邮箱地址",
"Powered_by": "提供:",
"Request_video_chat": "请求视频聊天",

@ -8,7 +8,11 @@ class MarkdownClass {
return this.parseNotEscaped(_.escapeHTML(text));
}
parseNotEscaped(msg) {
parseNotEscaped(msg, message) {
if (message && message.tokens == null) {
message.tokens = [];
}
const schemes = RocketChat.settings.get('Markdown_SupportSchemesForLink').split(',').join('|');
if (RocketChat.settings.get('Markdown_Headers')) {
@ -53,7 +57,20 @@ class MarkdownClass {
// Support ![alt text](http://image url)
msg = msg.replace(new RegExp(`!\\[([^\\]]+)\\]\\(((?:${ schemes }):\\/\\/[^\\)]+)\\)`, 'gm'), function(match, title, url) {
const target = url.indexOf(Meteor.absoluteUrl()) === 0 ? '' : '_blank';
return `<a href="${ _.escapeHTML(url) }" title="${ _.escapeHTML(title) }" target="${ _.escapeHTML(target) }" ref="noopener noreferrer"><div class="inline-image" style="background-image: url(${ _.escapeHTML(url) });"></div></a>`;
const html = `<a href="${ _.escapeHTML(url) }" title="${ _.escapeHTML(title) }" target="${ _.escapeHTML(target) }" ref="noopener noreferrer"><div class="inline-image" style="background-image: url(${ _.escapeHTML(url) });"></div></a>`;
if (message && message.tokens) {
const token = `=!=${ Random.id() }=!=`;
message.tokens.push({
token,
text: html
});
return token;
}
return html;
});
// Support [Text](http://link)
@ -80,7 +97,7 @@ RocketChat.Markdown = Markdown;
// renderMessage already did html escape
const MarkdownMessage = (message) => {
if (_.trim(message != null ? message.html : undefined)) {
message.html = Markdown.parseNotEscaped(message.html);
message.html = Markdown.parseNotEscaped(message.html, message);
}
return message;

@ -4,7 +4,7 @@ Meteor.startup(function() {
system: true,
message: 'Snippeted_a_message',
data(message) {
const snippetLink = `<a href="/snippet/${ message.snippetId }/${ message.snippetName }">${ message.snippetName }</a>`;
const snippetLink = `<a href="/snippet/${ message.snippetId }/${ encodeURIComponent(message.snippetName) }">${ _.escapeHTML(message.snippetName) }</a>`;
return { snippetLink };
}
});

@ -13,6 +13,6 @@ Template.snippetMessage.helpers({
}
},
body() {
return `<a href="/snippet/${ this._id }/${ this.snippetName }">${ this.snippetName }</a>`;
return `<a href="/snippet/${ this._id }/${ encodeURIComponent(this.snippetName) }">${ _.escapeHTML(this.snippetName) }</a>`;
}
});

@ -38,12 +38,13 @@
<label>{{_ "Desktop"}}</label>
<div>
{{#if editing 'desktopNotifications'}}
<label><input type="radio" name="desktopNotifications" value="default" checked="{{$eq desktopNotifications 'default'}}" /> {{_ "Default"}} ({{_ defaultDesktopNotification}})</label>
<label><input type="radio" name="desktopNotifications" value="all" checked="{{$eq desktopNotifications 'all'}}" /> {{_ "All_messages"}}</label>
<label><input type="radio" name="desktopNotifications" value="mentions" checked="{{$eq desktopNotifications 'mentions'}}" /> {{_ "Mentions_default"}}</label>
<label><input type="radio" name="desktopNotifications" value="mentions" checked="{{$eq desktopNotifications 'mentions'}}" /> {{_ "Mentions"}}</label>
<label><input type="radio" name="desktopNotifications" value="nothing" checked="{{$eq desktopNotifications 'nothing'}}" /> {{_ "Nothing"}}</label>
<br />
{{#if desktopNotificationDuration}}
<label>{{_ "Duration"}} ({{_ "seconds"}}) <input type="number" name="duration" min="0" value="{{desktopNotificationDuration}}"></label>
<label>{{_ "Duration"}} ({{_ "seconds"}}) <input type="number" name="duration" min="0" value="{{desktopNotificationDuration}}" class="content-background-color"></label>
{{else}}
<label>{{_ "Duration"}} ({{_ "seconds"}}) <input type="number" name="duration" min="0" value="" placeholder="{{_ "Use_User_Preferences_or_Global_Settings"}}"></label>
{{/if}}
@ -67,8 +68,9 @@
<label>{{_ "Mobile"}}</label>
<div>
{{#if editing 'mobilePushNotifications'}}
<label><input type="radio" name="mobilePushNotifications" value="default" checked="{{$eq mobilePushNotifications 'default'}}" /> {{_ "Default"}} ({{_ defaultMobileNotification}})</label>
<label><input type="radio" name="mobilePushNotifications" value="all" checked="{{$eq mobilePushNotifications 'all'}}" /> {{_ "All_messages"}}</label>
<label><input type="radio" name="mobilePushNotifications" value="mentions" checked="{{$eq mobilePushNotifications 'mentions'}}" /> {{_ "Mentions_default"}}</label>
<label><input type="radio" name="mobilePushNotifications" value="mentions" checked="{{$eq mobilePushNotifications 'mentions'}}" /> {{_ "Mentions"}}</label>
<label><input type="radio" name="mobilePushNotifications" value="nothing" checked="{{$eq mobilePushNotifications 'nothing'}}" /> {{_ "Nothing"}}</label>
<button type="button" class="button cancel">{{_ "Cancel"}}</button>
<button type="button" class="button primary save">{{_ "Save"}}</button>

@ -1,6 +1,17 @@
import toastr from 'toastr';
/* globals ChatSubscription */
const notificationLabels = {
all: 'All_messages',
mentions: 'Mentions',
nothing: 'Nothing'
};
function getUserPreference(preference) {
const user = Meteor.user();
return user && user.settings && user.settings.preferences && user.settings.preferences[preference];
}
Template.pushNotificationsFlexTab.helpers({
audioAssets() {
return RocketChat.CustomSounds && RocketChat.CustomSounds.getList && RocketChat.CustomSounds.getList() || [];
@ -43,7 +54,7 @@ Template.pushNotificationsFlexTab.helpers({
desktopNotifications: 1
}
});
return sub ? sub.desktopNotifications : '';
return sub ? sub.desktopNotifications || 'default' : 'default';
},
mobilePushNotifications() {
const sub = ChatSubscription.findOne({
@ -53,7 +64,7 @@ Template.pushNotificationsFlexTab.helpers({
mobilePushNotifications: 1
}
});
return sub ? sub.mobilePushNotifications : '';
return sub ? sub.mobilePushNotifications || 'default' : 'default';
},
emailNotifications() {
const sub = ChatSubscription.findOne({
@ -144,11 +155,7 @@ Template.pushNotificationsFlexTab.helpers({
case 'mentions':
return t('Mentions');
default:
if (field === 'emailNotifications') {
return t('Use_account_preference');
} else {
return t('Mentions');
}
return t('Use_account_preference');
}
}
},
@ -171,6 +178,20 @@ Template.pushNotificationsFlexTab.helpers({
},
emailVerified() {
return Meteor.user().emails && Meteor.user().emails[0] && Meteor.user().emails[0].verified;
},
defaultDesktopNotification() {
let preference = getUserPreference('desktopNotifications');
if (preference === 'default' || preference == null) {
preference = RocketChat.settings.get('Desktop_Notifications_Default_Alert');
}
return notificationLabels[preference];
},
defaultMobileNotification() {
let preference = getUserPreference('mobileNotifications');
if (preference === 'default' || preference == null) {
preference = RocketChat.settings.get('Mobile_Notifications_Default_Alert');
}
return notificationLabels[preference];
}
});

@ -17,11 +17,13 @@ RocketChat.models.Subscriptions.updateDesktopNotificationsById = function(_id, d
_id
};
const update = {
$set: {
desktopNotifications
}
};
const update = {};
if (desktopNotifications === 'default') {
update.$unset = { desktopNotifications: 1 };
} else {
update.$set = { desktopNotifications };
}
return this.update(query, update);
};
@ -45,11 +47,13 @@ RocketChat.models.Subscriptions.updateMobilePushNotificationsById = function(_id
_id
};
const update = {
$set: {
mobilePushNotifications
}
};
const update = {};
if (mobilePushNotifications === 'default') {
update.$unset = { mobilePushNotifications: 1 };
} else {
update.$set = { mobilePushNotifications };
}
return this.update(query, update);
};
@ -146,20 +150,23 @@ RocketChat.models.Subscriptions.findDontNotifyMobileUsersByRoomId = function(roo
return this.find(query);
};
RocketChat.models.Subscriptions.findNotificationPreferencesByRoom = function(roomId) {
RocketChat.models.Subscriptions.findNotificationPreferencesByRoom = function(roomId, explicit) {
const query = {
rid: roomId,
'u._id': {$exists: true},
$or: [
'u._id': {$exists: true}
};
if (explicit) {
query.$or = [
{audioNotification: {$exists: true}},
{desktopNotifications: {$exists: true}},
{desktopNotificationDuration: {$exists: true}},
{mobilePushNotifications: {$exists: true}},
{disableNotifications: {$exists: true}}
]
};
];
}
return this.find(query);
return this.find(query, { fields: { 'u._id': 1, desktopNotificationDuration: 1, desktopNotifications: 1, mobilePushNotifications: 1 } });
};
RocketChat.models.Subscriptions.findWithSendEmailByRoomId = function(roomId) {

@ -1463,11 +1463,8 @@
flex-flow: row nowrap;
padding: 0 10px 0 20px;
border-width: 0 0 1px;
z-index: 100;
top: 0;
left: 0;
width: 100%;
height: calc(var(--header-min-height) + 1px);
flex-shrink: 0;
&.visible h2 {
overflow: visible;
@ -2022,15 +2019,14 @@
.rc-old .messages-container {
position: relative;
height: 100%;
width: 100%;
top: 0;
left: 0;
z-index: 1;
flex: 1;
display: flex;
flex-direction: column;
&-wrapper {
height: calc(100% - 61px);
display: flex;
flex-grow: 1;
}
&-main {
@ -2064,6 +2060,11 @@
-webkit-overflow-scrolling: touch;
}
& .footer {
border-width: 1px 0 0;
flex-shrink: 0;
}
& .message-form {
margin-bottom: 18px;
@ -2415,8 +2416,7 @@
.rc-old .messages-box {
position: relative;
overflow: hidden;
width: 100%;
flex: 1 1 100%;
flex-grow: 1;
& .message-cog-container .message-action.jump-to-search-message {
display: none !important;
@ -3154,7 +3154,6 @@ body:not(.is-cordova) {
&.opened .flex-tab {
display: block;
height: calc(100% - 61px); /* --header-height */
}
}

@ -32,3 +32,21 @@
animation-name: fadeInDown;
animation-duration: 0.3s;
}
@keyframes pulse {
from {
transform: scale3d(0.9, 0.9, 0.9);
}
50% {
transform: scale3d(1.1, 1.1, 1.1);
}
to {
transform: scale3d(0.9, 0.9, 0.9);
}
}
.pulse {
animation: pulse 1s infinite;
}

@ -48,10 +48,32 @@
{{#if desktopNotificationDuration}}
<input type="number" name="desktopNotificationDuration" min="0" value="{{desktopNotificationDuration}}">
{{else}}
<input type="number" name="desktopNotificationDuration" min="0" value="" placeholder="{{_ "Use_Global_Settings"}}">
<input type="number" name="desktopNotificationDuration" min="0" value="" placeholder="{{_ "Use_Global_Settings"}} ({{defaultDesktopNotificationDuration}})">
{{/if}}
</div>
</div>
<div class="input-line double-col" id="desktopNotifications">
<label>{{_ "Notification_Desktop_Default_For"}}</label>
<div>
<select class="input-monitor" name="desktopNotifications">
<option value="default" selected="{{selected 'desktopNotifications' 'default' true}}">{{_ "Default"}} ({{_ defaultDesktopNotification}})</option>
<option value="all" selected="{{selected 'desktopNotifications' 'all' false}}">{{_ "All_messages"}}</option>
<option value="mentions" selected="{{selected 'desktopNotifications' 'mentions' false}}">{{_ "Mentions"}}</option>
<option value="nothing" selected="{{selected 'desktopNotifications' 'nothing' false}}">{{_ "Nothing"}}</option>
</select>
</div>
</div>
<div class="input-line double-col" id="mobileNotifications">
<label>{{_ "Notification_Mobile_Default_For"}}</label>
<div>
<select class="input-monitor" name="mobileNotifications">
<option value="default" selected="{{selected 'mobileNotifications' 'default' true}}">{{_ "Default"}} ({{_ defaultMobileNotification}})</option>
<option value="all" selected="{{selected 'mobileNotifications' 'all' false}}">{{_ "All_messages"}}</option>
<option value="mentions" selected="{{selected 'mobileNotifications' 'mentions' false}}">{{_ "Mentions"}}</option>
<option value="nothing" selected="{{selected 'mobileNotifications' 'nothing' false}}">{{_ "Nothing"}}</option>
</select>
</div>
</div>
<div class="input-line double-col" id="unreadAlert">
<label>{{_ "Unread_Tray_Icon_Alert"}}</label>
<div>

@ -1,5 +1,12 @@
/*globals defaultUserLanguage, KonchatNotification */
import toastr from 'toastr';
const notificationLabels = {
all: 'All_messages',
mentions: 'Mentions',
nothing: 'Nothing'
};
Template.accountPreferences.helpers({
showMergedChannels() {
return ['category', 'unread'].includes(Template.instance().roomsListExhibitionMode.get()) ? '' : 'disabled';
@ -69,6 +76,15 @@ Template.accountPreferences.helpers({
const user = Meteor.user();
return user && user.settings && user.settings.preferences && user.settings.preferences.desktopNotificationDuration;
},
defaultDesktopNotificationDuration() {
return RocketChat.settings.get('Desktop_Notifications_Duration');
},
defaultDesktopNotification() {
return notificationLabels[RocketChat.settings.get('Desktop_Notifications_Default_Alert')];
},
defaultMobileNotification() {
return notificationLabels[RocketChat.settings.get('Mobile_Notifications_Default_Alert')];
},
showRoles() {
return RocketChat.settings.get('UI_DisplayRoles');
},
@ -135,6 +151,8 @@ Template.accountPreferences.onCreated(function() {
return _.trim(e);
}));
data.desktopNotificationDuration = $('input[name=desktopNotificationDuration]').val();
data.desktopNotifications = $('#desktopNotifications').find('select').val();
data.mobileNotifications = $('#mobileNotifications').find('select').val();
data.unreadAlert = $('#unreadAlert').find('input:checked').val();
data.notificationsSoundVolume = parseInt($('#notificationsSoundVolume').val());

@ -139,7 +139,8 @@ Template.main.helpers({
subsReady() {
const routerReady = FlowRouter.subsReady('userData', 'activeUsers');
const subscriptionsReady = CachedChatSubscription.ready.get();
const ready = (Meteor.userId() == null) || (routerReady && subscriptionsReady);
const settingsReady = RocketChat.settings.cachedCollection.ready.get();
const ready = (Meteor.userId() == null) || (routerReady && subscriptionsReady && settingsReady);
RocketChat.CachedCollectionManager.syncEnabled = ready;
return ready;
},

@ -361,7 +361,7 @@ function firefoxPasteUpload(fn) {
Template.messageBox.events({
'click .js-message-actions .rc-popover__item'(event, instance) {
this.action.apply(this, [{rid: Template.parentData()._id, messageBox: instance.find('.js-input-message'), element: event.target, event}]);
this.action.apply(this, [{rid: Template.parentData()._id, messageBox: instance.find('.rc-message-box'), element: $(event.target).parent('.rc-popover__item')[0], event}]);
},
'click .join'(event) {
event.stopPropagation();

@ -41,5 +41,7 @@ Package.onUse(function(api) {
api.addFiles('client/renderMessageBody.js', 'client');
api.addFiles('startup/messageBoxActions.js', 'client');
api.export('renderMessageBody');
});

@ -1,23 +1,45 @@
/* globals fileUpload popover */
/* globals fileUpload popover chatMessages AudioRecorder */
import mime from 'mime-type/with-db';
import {VRecDialog} from 'meteor/rocketchat:ui-vrecord';
RocketChat.messageBox.actions.add('Create_new', 'Video_message', {
icon: 'video',
condition: () => RocketChat.settings.get('FileUpload_Enabled') && RocketChat.settings.get('Message_VideoRecorderEnabled') && ((navigator.getUserMedia != null) || (navigator.webkitGetUserMedia != null)) && (!RocketChat.settings.get('FileUpload_MediaTypeWhiteList') || RocketChat.settings.get('FileUpload_MediaTypeWhiteList').match(/video\/webm|video\/\*/i)),
action() {
return;
action({event, messageBox}) {
return VRecDialog.opened ? VRecDialog.close() : VRecDialog.open(messageBox);
}
});
RocketChat.messageBox.actions.add('Create_new', 'Audio_message', {
icon: 'audio',
condition: () => RocketChat.settings.get('FileUpload_Enabled') && RocketChat.settings.get('Message_AudioRecorderEnabled') && ((navigator.getUserMedia != null) || (navigator.webkitGetUserMedia != null)) && (!RocketChat.settings.get('FileUpload_MediaTypeWhiteList') || RocketChat.settings.get('FileUpload_MediaTypeWhiteList').match(/audio\/wav|audio\/\*/i)),
action() {
return;
action({event, element}) {
event.preventDefault();
const icon = element.querySelector('.rc-popover__icon');
if (chatMessages[RocketChat.openedRoom].recording) {
return AudioRecorder.stop(function(blob) {
icon.style.color = '';
icon.classList.remove('pulse');
chatMessages[RocketChat.openedRoom].recording = false;
return fileUpload([
{
file: blob,
type: 'audio',
name: `${ TAPi18n.__('Audio record') }.wav`
}
]);
});
}
icon.classList.add('pulse');
icon.style.color = 'red';
chatMessages[RocketChat.openedRoom].recording = true;
return AudioRecorder.start(function() {
});
}
});
RocketChat.messageBox.actions.add('Add_files_from', 'Computer', {
icon: 'computer',
condition: () => RocketChat.settings.get('FileUpload_Enabled'),

@ -3,7 +3,9 @@
Template.chatRoomItem.helpers({
roomData() {
let name = this.name;
if (RocketChat.settings.get('UI_Use_Real_Name') && this.fname) {
const realNameForDirectMessages = RocketChat.settings.get('UI_Use_Real_Name') && this.t === 'd';
const realNameForChannel = RocketChat.settings.get('UI_Allow_room_names_with_special_chars') && this.t !== 'd';
if ((realNameForDirectMessages || realNameForChannel) && this.fname) {
name = this.fname;
}

@ -111,7 +111,7 @@ Template.createCombinedFlex.events({
if (!err) {
return Meteor.call(createRoute, name, instance.selectedUsers.get(), readOnly, function(err, result) {
if (err) {
if (err.error === 'error-invalid-name') {
if (err.error === 'error-invalid-room-name') {
instance.error.set({ invalid: true });
return;
}
@ -130,10 +130,10 @@ Template.createCombinedFlex.events({
SideNav.closeFlex(() => instance.clearForm());
if (!privateGroup) {
RocketChat.callbacks.run('aftercreateCombined', { _id: result.rid, name });
RocketChat.callbacks.run('aftercreateCombined', { _id: result.rid, name: result.name });
}
return FlowRouter.go(successRoute, { name }, FlowRouter.current().queryParams);
return FlowRouter.go(successRoute, { name: result.name }, FlowRouter.current().queryParams);
});
} else {
return instance.error.set({ fields: err });

@ -15,14 +15,14 @@ export const VRecDialog = new class {
return Blaze.render(Template.vrecDialog, document.body);
}
open(source) {
open(source, options = {}) {
if (!this.initiated) {
this.init();
}
this.source = source;
const dialog = $('.vrec-dialog');
this.setPosition(dialog, source);
this.setPosition(dialog, source, options.anchor);
dialog.addClass('show');
this.opened = true;
@ -38,19 +38,26 @@ export const VRecDialog = new class {
}
}
setPosition(dialog, source) {
setPosition(dialog, source, anchor = 'left') {
const sourcePos = $(source).offset();
let left = (sourcePos.left - this.width) + 100;
let top = sourcePos.top - this.height - 40;
if (left < 0) {
left = 10;
}
let top = sourcePos.top - this.height - 0;
if (top < 0) {
top = 10;
}
if (anchor === 'left') {
let right = window.innerWidth - (sourcePos.left + source.offsetWidth - 25);
if (right < 0) {
right = 10;
}
return dialog.css({ top: `${ top }px`, right: `${ right }px` });
} else {
let left = (sourcePos.left - this.width) + 100;
if (left < 0) {
left = 10;
}
return dialog.css({ top: `${ top }px`, left: `${ left }px` });
}
return dialog.css({ top: `${ top }px`, left: `${ left }px` });
}
initializeCamera() {

@ -1,5 +1,5 @@
<template name="vrecDialog">
<div class="vrec-dialog secondary-background-color">
<div class="rc-old vrec-dialog secondary-background-color">
<div class="video-container">
<video width="320" height="240" src=""></video>
</div>

@ -41,6 +41,9 @@
.video-container {
padding: 5px;
transform: scaleX(-1);
filter: FlipH;
-ms-filter: "FlipH";
}
}

@ -49,8 +49,10 @@ const RoomManager = new function() {
].map(e => e.roles);
msg.roles = _.union.apply(_.union, roles);
ChatMessage.upsert({ _id: msg._id }, msg);
msg.t = typeName[0];
msg.recipient = typeName.substr(1, typeName.length);
msg.room = {
type,
name
};
}
msg.name = room.name;
Meteor.defer(() => RoomManager.updateMentionsMarksOfRoom(typeName));

@ -13,13 +13,6 @@ this.ChatMessages = class ChatMessages {
this.bindEvents();
}
resize() {
let dif = (RocketChat.Layout.isEmbedded() ? 0 : 60) + $('.messages-container').find('footer').outerHeight();
dif += $('.announcement').length > 0 ? 40 : 0;
return $('.messages-box').css({
height: `calc(100% - ${ dif }px)`});
}
getEditingIndex(element) {
const msgs = this.wrapper.get(0).querySelectorAll('.own:not(.system)');
let index = 0;
@ -368,11 +361,7 @@ this.ChatMessages = class ChatMessages {
bindEvents() {
if (this.wrapper && this.wrapper.length) {
return $('.input-message').autogrow({
postGrowCallback: () => {
return this.resize();
}
});
$('.input-message').autogrow();
}
}
@ -423,7 +412,6 @@ this.ChatMessages = class ChatMessages {
const input = event.currentTarget;
// const $input = $(input);
const k = event.which;
this.resize(input);
if (k === 13) {
if (sendOnEnter == null || sendOnEnter === 'normal' || sendOnEnter === 'desktop' && Meteor.Device.isDesktop()) {

@ -56,7 +56,7 @@ fileUpload = function(filesToUpload) {
return;
}
if (!RocketChat.fileUploadIsValidContentType(file.file.type)) {
if (!file.file.type || !RocketChat.fileUploadIsValidContentType(file.file.type)) {
swal({
title: t('FileUpload_MediaType_NotAccepted'),
text: file.file.type || `*.${ s.strRightBack(file.file.name, '.') }`,

@ -24,10 +24,18 @@ const acEvents = {
};
const validateChannelName = (name) => {
if (RocketChat.settings.get('UI_Allow_room_names_with_special_chars')) {
return true;
}
const reg = new RegExp(`^${ RocketChat.settings.get('UTF8_Names_Validation') }$`);
return name.length === 0 || reg.test(name);
};
const filterNames = (old) => {
if (RocketChat.settings.get('UI_Allow_room_names_with_special_chars')) {
return old;
}
const reg = new RegExp(`^${ RocketChat.settings.get('UTF8_Names_Validation') }$`);
return [...old.replace(' ', '').toLocaleLowerCase()].filter(f => reg.test(f)).splice(0, 22).join('');
};
@ -137,6 +145,7 @@ Template.createChannel.events({
if (instance.invalid.get() || instance.inUse.get()) {
return e.target.name.focus();
}
Meteor.call(isPrivate ? 'createPrivateGroup' : 'createChannel', name, instance.selectedUsers.get().map(user => user.username), readOnly, function(err, result) {
if (err) {
if (err.error === 'error-invalid-name') {
@ -148,9 +157,10 @@ Template.createChannel.events({
return;
}
if (!isPrivate) {
RocketChat.callbacks.run('aftercreateCombined', { _id: result.rid, name });
RocketChat.callbacks.run('aftercreateCombined', { _id: result.rid, name: result.name });
}
return FlowRouter.go(isPrivate ? 'group' : 'channel', { name }, FlowRouter.current().queryParams);
return FlowRouter.go(isPrivate ? 'group' : 'channel', { name: result.name }, FlowRouter.current().queryParams);
});
return false;
}

@ -10,23 +10,45 @@ const isSubscribed = _id => ChatSubscription.find({ rid: _id }).count() > 0;
const favoritesEnabled = () => RocketChat.settings.get('Favorite_Rooms');
const userCanDrop = _id => !RocketChat.roomTypes.readOnly(_id, Meteor.user());
const openProfileTab = (e, instance, data) => {
const roomData = Session.get(`roomData${ data.rid }`);
const openProfileTab = (e, instance, username) => {
const roomData = Session.get(`roomData${ Session.get('openedRoom') }`);
if (RocketChat.Layout.isEmbedded()) {
fireGlobalEvent('click-user-card-message', { username: data.u.username });
fireGlobalEvent('click-user-card-message', { username });
e.preventDefault();
e.stopPropagation();
return;
}
if (['c', 'p', 'd'].includes(roomData.t)) {
instance.setUserDetail(data.u.username);
instance.setUserDetail(username);
}
instance.tabBar.setTemplate('membersList');
return instance.tabBar.open();
};
const openProfileTabOrOpenDM = (e, instance, username) => {
if (RocketChat.settings.get('UI_Click_Direct_Message')) {
return Meteor.call('createDirectMessage', username, (error, result) => {
if (error) {
if (error.isClientSafe) {
openProfileTab(e, instance, username);
} else {
return handleError(error);
}
}
if ((result != null ? result.rid : undefined) != null) {
return FlowRouter.go('direct', { username }, FlowRouter.current().queryParams);
}
});
} else {
openProfileTab(e, instance, username);
}
};
Template.room.helpers({
isTranslated() {
const sub = ChatSubscription.findOne({ rid: this._id }, { fields: { autoTranslate: 1, autoTranslateLanguage: 1 } });
@ -153,11 +175,6 @@ Template.room.helpers({
showAnnouncement() {
const roomData = Session.get(`roomData${ this._id }`);
if (!roomData) { return false; }
Meteor.defer(() => {
if (window.chatMessages && window.chatMessages[roomData._id]) {
return window.chatMessages[roomData._id].resize();
}
});
return (roomData.announcement !== undefined) && (roomData.announcement !== '');
},
messageboxData() {
@ -477,31 +494,18 @@ Template.room.events({
if (!Meteor.userId()) {
return;
}
instance.tabBar.open();
return instance.setUserDetail(this.user.username);
openProfileTabOrOpenDM(e, instance, this.user.username);
},
'click .user-card-message'(e, instance) {
if (!Meteor.userId() || !this._arguments) {
return;
}
if (RocketChat.settings.get('UI_Click_Direct_Message')) {
return Meteor.call('createDirectMessage', this._arguments[1].u.username, (error, result) => {
if (error) {
if (error.isClientSafe) {
openProfileTab(e, instance, this._arguments[1]);
} else {
return handleError(error);
}
}
if ((result != null ? result.rid : undefined) != null) {
return FlowRouter.go('direct', { username: this._arguments[1].u.username }, FlowRouter.current().queryParams);
}
});
} else {
openProfileTab(e, instance, this._arguments[1]);
}
const username = this._arguments[1].u.username;
openProfileTabOrOpenDM(e, instance, username);
},
'scroll .wrapper': _.throttle(function(e, t) {
@ -573,17 +577,9 @@ Template.room.events({
return;
}
if (RocketChat.Layout.isEmbedded()) {
fireGlobalEvent('click-mention-link', { username: $(e.currentTarget).data('username') });
e.stopPropagation();
e.preventDefault();
return;
}
instance.tabBar.setTemplate('membersList');
instance.setUserDetail($(e.currentTarget).data('username'));
const username = $(e.currentTarget).data('username');
return instance.tabBar.open();
openProfileTabOrOpenDM(e, instance, username);
},
'click .image-to-download'(event) {

@ -63,6 +63,13 @@ Meteor.methods({
preferences.notificationsSoundVolume = settings.notificationsSoundVolume;
}
if (settings.desktopNotifications) {
preferences.desktopNotifications = settings.desktopNotifications;
}
if (settings.mobileNotifications) {
preferences.mobileNotifications = settings.mobileNotifications;
}
preferences.desktopNotificationDuration = settings.desktopNotificationDuration - 0;
preferences.viewMode = settings.viewMode || 0;
preferences.hideUsernames = settings.hideUsernames === '1';

@ -2,6 +2,7 @@ const options = {
fields: {
_id: 1,
name: 1,
fname: 1,
t: 1,
cl: 1,
u: 1,

Loading…
Cancel
Save