Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/develop' into globals/ui-package
Browse files Browse the repository at this point in the history
# Conflicts:
#	packages/rocketchat-authorization/client/index.js
#	packages/rocketchat-file-upload/package.js
#	packages/rocketchat-file-upload/server/index.js
#	packages/rocketchat-lib/client/MessageAction.js
#	packages/rocketchat-lib/lib/slashCommand.js
#	packages/rocketchat-lib/package.js
#	packages/rocketchat-ui-message/package.js
#	packages/rocketchat-ui-sidenav/package.js
#	packages/rocketchat-ui-utils/client/index.js
#	packages/rocketchat-ui-utils/client/lib/RoomManager.js
#	packages/rocketchat-ui-utils/lib/MessageProperties.js
#	packages/rocketchat-ui/client/lib/menu.js
#	packages/rocketchat-ui/client/views/app/room.js
#	packages/rocketchat-utils/lib/RoomTypeConfig.js
#	packages/rocketchat-utils/lib/slashCommand.js
  • Loading branch information
rodrigok committed Jan 15, 2019
2 parents 48b2095 + af96bd9 commit 259d2d0
Show file tree
Hide file tree
Showing 24 changed files with 104 additions and 375 deletions.
2 changes: 1 addition & 1 deletion packages/rocketchat-authorization/client/index.js
Expand Up @@ -11,7 +11,7 @@ import './views/permissionsRole';

export {
hasAllPermission,
hasPermission,
hasAtLeastOnePermission,
hasRole,
hasPermission,
};
Expand Up @@ -7,6 +7,7 @@ import moment from 'moment';
import s from 'underscore.string';
import { call, erase, hide, leave, RocketChat, RoomSettingsEnum } from 'meteor/rocketchat:lib';
import { modal, ChatRoom, popover } from 'meteor/rocketchat:ui';
import { hasPermission } from 'meteor/rocketchat:authorization';
import { t } from 'meteor/rocketchat:utils';

const common = {
Expand All @@ -22,7 +23,7 @@ const common = {
});

const roomType = room && room.t;
return roomType && RocketChat.roomTypes.roomTypes[roomType].canBeDeleted(room);
return roomType && RocketChat.roomTypes.roomTypes[roomType].canBeDeleted(hasPermission, room);
},
canEditRoom() {
const { _id } = Template.instance().room;
Expand Down
1 change: 1 addition & 0 deletions packages/rocketchat-channel-settings/package.js
Expand Up @@ -12,6 +12,7 @@ Package.onUse(function(api) {
'tracker',
'templating',
'rocketchat:lib',
'rocketchat:authorization',
'rocketchat:ui',
'rocketchat:utils',
]);
Expand Down
1 change: 1 addition & 0 deletions packages/rocketchat-file-upload/server/index.js
@@ -1,3 +1,4 @@
import '../lib/FileUploadBase';
import { FileUpload } from './lib/FileUpload';
import './lib/proxy';
import './lib/requests';
Expand Down
244 changes: 0 additions & 244 deletions packages/rocketchat-lib/client/MessageAction.js
@@ -1,247 +1,3 @@
import { Meteor } from 'meteor/meteor';
import { TAPi18n } from 'meteor/tap:i18n';
import { Session } from 'meteor/session';
import { t } from 'meteor/rocketchat:utils';
import { MessageAction } from 'meteor/rocketchat:ui-utils';
import moment from 'moment';
import toastr from 'toastr';

const success = function success(fn) {
return function(error, result) {
if (error) {
return handleError(error);
}
if (result) {
fn.call(this, result);
}
};
};

RocketChat.MessageAction = MessageAction;

Meteor.startup(function() {
RocketChat.MessageAction.addButton({
id: 'reply-message',
icon: 'message',
label: 'Reply',
context: ['message', 'message-mobile'],
action() {
const message = this._arguments[1];
const { input } = chatMessages[message.rid];
$(input)
.focus()
.data('mention-user', true)
.data('reply', message)
.trigger('dataChange');
},
condition(message) {
if (RocketChat.models.Subscriptions.findOne({ rid: message.rid }) == null) {
return false;
}

return true;
},
order: 1,
group: 'menu',
});

RocketChat.MessageAction.addButton({
id: 'edit-message',
icon: 'edit',
label: 'Edit',
context: ['message', 'message-mobile'],
action() {
const messageId = this._arguments[1]._id;
chatMessages[Session.get('openedRoom')].edit(document.getElementById(messageId));
},
condition(message) {
if (RocketChat.models.Subscriptions.findOne({
rid: message.rid,
}) == null) {
return false;
}
const hasPermission = RocketChat.authz.hasAtLeastOnePermission('edit-message', message.rid);
const isEditAllowed = RocketChat.settings.get('Message_AllowEditing');
const editOwn = message.u && message.u._id === Meteor.userId();
if (!(hasPermission || (isEditAllowed && editOwn))) {
return;
}
const blockEditInMinutes = RocketChat.settings.get('Message_AllowEditing_BlockEditInMinutes');
if (blockEditInMinutes) {
let msgTs;
if (message.ts != null) {
msgTs = moment(message.ts);
}
let currentTsDiff;
if (msgTs != null) {
currentTsDiff = moment().diff(msgTs, 'minutes');
}
return currentTsDiff < blockEditInMinutes;
} else {
return true;
}
},
order: 2,
group: 'menu',
});

RocketChat.MessageAction.addButton({
id: 'delete-message',
icon: 'trash',
label: 'Delete',
context: ['message', 'message-mobile'],
color: 'alert',
action() {
const message = this._arguments[1];
chatMessages[Session.get('openedRoom')].confirmDeleteMsg(message);
},
condition(message) {
if (RocketChat.models.Subscriptions.findOne({ rid: message.rid }) == null) {
return false;
}
const forceDelete = RocketChat.authz.hasAtLeastOnePermission('force-delete-message', message.rid);
const hasPermission = RocketChat.authz.hasAtLeastOnePermission('delete-message', message.rid);
const isDeleteAllowed = RocketChat.settings.get('Message_AllowDeleting');
const deleteOwn = message.u && message.u._id === Meteor.userId();
if (!(hasPermission || (isDeleteAllowed && deleteOwn) || forceDelete)) {
return;
}
const blockDeleteInMinutes = RocketChat.settings.get('Message_AllowDeleting_BlockDeleteInMinutes');
if (forceDelete) {
return true;
}
if (blockDeleteInMinutes != null && blockDeleteInMinutes !== 0) {
let msgTs;
if (message.ts != null) {
msgTs = moment(message.ts);
}
let currentTsDiff;
if (msgTs != null) {
currentTsDiff = moment().diff(msgTs, 'minutes');
}
return currentTsDiff < blockDeleteInMinutes;
} else {
return true;
}
},
order: 3,
group: 'menu',
});

RocketChat.MessageAction.addButton({
id: 'permalink',
icon: 'permalink',
label: 'Permalink',
classes: 'clipboard',
context: ['message', 'message-mobile'],
async action(event) {
const message = this._arguments[1];
const permalink = await RocketChat.MessageAction.getPermaLink(message._id);
if (Meteor.isCordova) {
cordova.plugins.clipboard.copy(permalink);
} else {
$(event.currentTarget).attr('data-clipboard-text', permalink);
}
toastr.success(TAPi18n.__('Copied'));
},
condition(message) {
if (RocketChat.models.Subscriptions.findOne({ rid: message.rid }) == null) {
return false;
}

return true;
},
order: 4,
group: 'menu',
});

RocketChat.MessageAction.addButton({
id: 'copy',
icon: 'copy',
label: 'Copy',
classes: 'clipboard',
context: ['message', 'message-mobile'],
action(event) {
const message = this._arguments[1].msg;
if (Meteor.isCordova) {
cordova.plugins.clipboard.copy(message);
} else {
$(event.currentTarget).attr('data-clipboard-text', message);
}
toastr.success(TAPi18n.__('Copied'));
},
condition(message) {
if (RocketChat.models.Subscriptions.findOne({ rid: message.rid }) == null) {
return false;
}

return true;
},
order: 5,
group: 'menu',
});

RocketChat.MessageAction.addButton({
id: 'quote-message',
icon: 'quote',
label: 'Quote',
context: ['message', 'message-mobile'],
action() {
const message = this._arguments[1];
const { input } = chatMessages[message.rid];
$(input)
.focus()
.data('mention-user', false)
.data('reply', message)
.trigger('dataChange');
},
condition(message) {
if (RocketChat.models.Subscriptions.findOne({ rid: message.rid }) == null) {
return false;
}

return true;
},
order: 6,
group: 'menu',
});


RocketChat.MessageAction.addButton({
id: 'ignore-user',
icon: 'ban',
label: t('Ignore'),
context: ['message', 'message-mobile'],
action() {
const [, { rid, u: { _id } }] = this._arguments;
Meteor.call('ignoreUser', { rid, userId:_id, ignore: true }, success(() => toastr.success(t('User_has_been_ignored'))));
},
condition(message) {
const subscription = RocketChat.models.Subscriptions.findOne({ rid: message.rid });

return Meteor.userId() !== message.u._id && !(subscription && subscription.ignored && subscription.ignored.indexOf(message.u._id) > -1);
},
order: 20,
group: 'menu',
});

RocketChat.MessageAction.addButton({
id: 'unignore-user',
icon: 'ban',
label: t('Unignore'),
context: ['message', 'message-mobile'],
action() {
const [, { rid, u: { _id } }] = this._arguments;
Meteor.call('ignoreUser', { rid, userId:_id, ignore: false }, success(() => toastr.success(t('User_has_been_unignored'))));

},
condition(message) {
const subscription = RocketChat.models.Subscriptions.findOne({ rid: message.rid });
return Meteor.userId() !== message.u._id && subscription && subscription.ignored && subscription.ignored.indexOf(message.u._id) > -1;
},
order: 20,
group: 'menu',
});


});
3 changes: 2 additions & 1 deletion packages/rocketchat-lib/client/lib/openRoom.js
Expand Up @@ -3,6 +3,7 @@ import { Tracker } from 'meteor/tracker';
import { FlowRouter } from 'meteor/kadira:flow-router';
import { BlazeLayout } from 'meteor/kadira:blaze-layout';
import { Session } from 'meteor/session';
import { RoomManager } from 'meteor/rocketchat:ui-utils';
import _ from 'underscore';

export let currentTracker = undefined;
Expand Down Expand Up @@ -68,7 +69,7 @@ openRoom = function(type, name) {
}

Session.set('openedRoom', room._id);
RocketChat.openedRoom = room._id;
RoomManager.openedRoom = room._id;

fireGlobalEvent('room-opened', _.omit(room, 'usernames'));

Expand Down
16 changes: 3 additions & 13 deletions packages/rocketchat-lib/lib/MessageProperties.js
@@ -1,17 +1,7 @@
import GraphemeSplitter from 'grapheme-splitter';
import { messageProperties } from 'meteor/rocketchat:ui-utils';

const splitter = new GraphemeSplitter();

export const messageProperties = {

length: ((message) => splitter.countGraphemes(message)),

messageWithoutEmojiShortnames: ((message) => message.replace(/:\w+:/gm, (match) => {
if (RocketChat.emoji.list[match] !== undefined) {
return ' ';
}
return match;
})),
export {
messageProperties,
};

// check for tests
Expand Down
19 changes: 0 additions & 19 deletions packages/rocketchat-lib/lib/slashCommand.js
@@ -1,22 +1,3 @@
import { Meteor } from 'meteor/meteor';
import { slashCommands } from 'meteor/rocketchat:utils';

RocketChat.slashCommands = slashCommands;

Meteor.methods({
slashCommand(command) {
if (!Meteor.userId()) {
throw new Meteor.Error('error-invalid-user', 'Invalid user', {
method: 'slashCommand',
});
}

if (!command || !command.cmd || !RocketChat.slashCommands.commands[command.cmd]) {
throw new Meteor.Error('error-invalid-command', 'Invalid Command Provided', {
method: 'executeSlashCommandPreview',
});
}

return RocketChat.slashCommands.run(command.cmd, command.params, command.msg);
},
});
18 changes: 0 additions & 18 deletions packages/rocketchat-lib/tests/server.tests.js
Expand Up @@ -4,7 +4,6 @@ import assert from 'assert';
import './server.mocks.js';

import PasswordPolicyClass from '../server/lib/PasswordPolicyClass';
import { messageProperties } from '../lib/MessageProperties';

describe('PasswordPolicyClass', () => {
describe('Default options', () => {
Expand Down Expand Up @@ -206,20 +205,3 @@ describe('PasswordPolicyClass', () => {
});
});
});

const messages = {
'Sample Message': 14,
'Sample 1 ⛳': 10,
'Sample 2 ❤': 10,
'Sample 3 ⛳❤⛳❤': 13,
};

describe('Message Properties', () => {
describe('Check Message Length', () => {
Object.keys(messages).forEach((objectKey) => {
it('should treat emojis as single characters', () => {
assert.equal(messageProperties.length(objectKey), messages[objectKey]);
});
});
});
});
2 changes: 1 addition & 1 deletion packages/rocketchat-models/server/models/Rooms.js
Expand Up @@ -820,4 +820,4 @@ export class Rooms extends Base {
}
}

export default new Rooms('rooms', true);
export default new Rooms('room', true);

0 comments on commit 259d2d0

Please sign in to comment.