123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250 |
- const usersPerPage = 25;
- BlazeComponent.extendComponent({
- mixins() {
- return [Mixins.InfiniteScrolling];
- },
- onCreated() {
- this.error = new ReactiveVar('');
- this.loading = new ReactiveVar(false);
- this.people = new ReactiveVar(true);
- this.findUsersOptions = new ReactiveVar({});
- this.number = new ReactiveVar(0);
- this.page = new ReactiveVar(1);
- this.loadNextPageLocked = false;
- this.callFirstWith(null, 'resetNextPeak');
- this.autorun(() => {
- const limit = this.page.get() * usersPerPage;
- this.subscribe('people', limit, () => {
- this.loadNextPageLocked = false;
- const nextPeakBefore = this.callFirstWith(null, 'getNextPeak');
- this.calculateNextPeak();
- const nextPeakAfter = this.callFirstWith(null, 'getNextPeak');
- if (nextPeakBefore === nextPeakAfter) {
- this.callFirstWith(null, 'resetNextPeak');
- }
- });
- });
- },
- events() {
- return [
- {
- 'click #searchButton'() {
- this.filterPeople();
- },
- 'keydown #searchInput'(event) {
- if (event.keyCode === 13 && !event.shiftKey) {
- this.filterPeople();
- }
- },
- },
- ];
- },
- filterPeople() {
- const value = $('#searchInput')
- .first()
- .val();
- if (value === '') {
- this.findUsersOptions.set({});
- } else {
- const regex = new RegExp(value, 'i');
- this.findUsersOptions.set({
- $or: [
- { username: regex },
- { 'profile.fullname': regex },
- { 'emails.address': regex },
- ],
- });
- }
- },
- loadNextPage() {
- if (this.loadNextPageLocked === false) {
- this.page.set(this.page.get() + 1);
- this.loadNextPageLocked = true;
- }
- },
- calculateNextPeak() {
- const element = this.find('.main-body');
- if (element) {
- const altitude = element.scrollHeight;
- this.callFirstWith(this, 'setNextPeak', altitude);
- }
- },
- reachNextPeak() {
- this.loadNextPage();
- },
- setError(error) {
- this.error.set(error);
- },
- setLoading(w) {
- this.loading.set(w);
- },
- peopleList() {
- const users = Users.find(this.findUsersOptions.get(), {
- fields: { _id: true },
- });
- this.number.set(users.count());
- return users;
- },
- peopleNumber() {
- return this.number.get();
- },
- }).register('people');
- Template.peopleRow.helpers({
- userData() {
- const userCollection = this.esSearch ? ESSearchResults : Users;
- return userCollection.findOne(this.userId);
- },
- });
- Template.editUserPopup.onCreated(function() {
- this.authenticationMethods = new ReactiveVar([]);
- this.errorMessage = new ReactiveVar('');
- Meteor.call('getAuthenticationsEnabled', (_, result) => {
- if (result) {
- // TODO : add a management of different languages
- // (ex {value: ldap, text: TAPi18n.__('ldap', {}, T9n.getLanguage() || 'en')})
- this.authenticationMethods.set([
- { value: 'password' },
- // Gets only the authentication methods availables
- ...Object.entries(result)
- .filter(e => e[1])
- .map(e => ({ value: e[0] })),
- ]);
- }
- });
- });
- Template.editUserPopup.helpers({
- user() {
- return Users.findOne(this.userId);
- },
- authentications() {
- return Template.instance().authenticationMethods.get();
- },
- isSelected(match) {
- const userId = Template.instance().data.userId;
- const selected = Users.findOne(userId).authenticationMethod;
- return selected === match;
- },
- isLdap() {
- const userId = Template.instance().data.userId;
- const selected = Users.findOne(userId).authenticationMethod;
- return selected === 'ldap';
- },
- errorMessage() {
- return Template.instance().errorMessage.get();
- },
- });
- BlazeComponent.extendComponent({
- onCreated() {},
- user() {
- return Users.findOne(this.userId);
- },
- events() {
- return [
- {
- 'click a.edit-user': Popup.open('editUser'),
- },
- ];
- },
- }).register('peopleRow');
- Template.editUserPopup.events({
- submit(event, templateInstance) {
- event.preventDefault();
- const user = Users.findOne(this.userId);
- const fullname = templateInstance.find('.js-profile-fullname').value.trim();
- const username = templateInstance.find('.js-profile-username').value.trim();
- const password = templateInstance.find('.js-profile-password').value;
- const isAdmin = templateInstance.find('.js-profile-isadmin').value.trim();
- const isActive = templateInstance.find('.js-profile-isactive').value.trim();
- const email = templateInstance.find('.js-profile-email').value.trim();
- const authentication = templateInstance
- .find('.js-authenticationMethod')
- .value.trim();
- const isChangePassword = password.length > 0;
- const isChangeUserName = username !== user.username;
- const isChangeEmail =
- email.toLowerCase() !== user.emails[0].address.toLowerCase();
- Users.update(this.userId, {
- $set: {
- 'profile.fullname': fullname,
- isAdmin: isAdmin === 'true',
- loginDisabled: isActive === 'true',
- authenticationMethod: authentication,
- },
- });
- if (isChangePassword) {
- Meteor.call('setPassword', password, this.userId);
- }
- if (isChangeUserName && isChangeEmail) {
- Meteor.call(
- 'setUsernameAndEmail',
- username,
- email.toLowerCase(),
- this.userId,
- function(error) {
- const usernameMessageElement = templateInstance.$('.username-taken');
- const emailMessageElement = templateInstance.$('.email-taken');
- if (error) {
- const errorElement = error.error;
- if (errorElement === 'username-already-taken') {
- usernameMessageElement.show();
- emailMessageElement.hide();
- } else if (errorElement === 'email-already-taken') {
- usernameMessageElement.hide();
- emailMessageElement.show();
- }
- } else {
- usernameMessageElement.hide();
- emailMessageElement.hide();
- Popup.close();
- }
- },
- );
- } else if (isChangeUserName) {
- Meteor.call('setUsername', username, this.userId, function(error) {
- const usernameMessageElement = templateInstance.$('.username-taken');
- if (error) {
- const errorElement = error.error;
- if (errorElement === 'username-already-taken') {
- usernameMessageElement.show();
- }
- } else {
- usernameMessageElement.hide();
- Popup.close();
- }
- });
- } else if (isChangeEmail) {
- Meteor.call('setEmail', email.toLowerCase(), this.userId, function(
- error,
- ) {
- const emailMessageElement = templateInstance.$('.email-taken');
- if (error) {
- const errorElement = error.error;
- if (errorElement === 'email-already-taken') {
- emailMessageElement.show();
- }
- } else {
- emailMessageElement.hide();
- Popup.close();
- }
- });
- } else Popup.close();
- },
- 'click #deleteButton'() {
- Users.remove(this.userId);
- Popup.close();
- },
- });
|