| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334 | BlazeComponent.extendComponent({  onCreated() {    this.error = new ReactiveVar('');    this.loading = new ReactiveVar(false);    this.generalSetting = new ReactiveVar(true);    this.emailSetting = new ReactiveVar(false);    this.accountSetting = new ReactiveVar(false);    this.announcementSetting = new ReactiveVar(false);    this.layoutSetting = new ReactiveVar(false);    this.webhookSetting = new ReactiveVar(false);    Meteor.subscribe('setting');    Meteor.subscribe('mailServer');    Meteor.subscribe('accountSettings');    Meteor.subscribe('announcements');    Meteor.subscribe('globalwebhooks');  },  setError(error) {    this.error.set(error);  },  setLoading(w) {    this.loading.set(w);  },  checkField(selector) {    const value = $(selector).val();    if (!value || value.trim() === '') {      $(selector)        .parents('li.smtp-form')        .addClass('has-error');      throw Error('blank field');    } else {      return value;    }  },  currentSetting() {    return Settings.findOne();  },  boards() {    return Boards.find(      {        archived: false,        'members.userId': Meteor.userId(),        'members.isAdmin': true,      },      {        sort: { sort: 1 /* boards default sorting */ },      },    );  },  toggleRegistration() {    this.setLoading(true);    const registrationClosed = this.currentSetting().disableRegistration;    Settings.update(Settings.findOne()._id, {      $set: { disableRegistration: !registrationClosed },    });    this.setLoading(false);    if (registrationClosed) {      $('.invite-people').slideUp();    } else {      $('.invite-people').slideDown();    }  },  toggleTLS() {    $('#mail-server-tls').toggleClass('is-checked');  },  toggleHideLogo() {    $('#hide-logo').toggleClass('is-checked');  },  toggleDisplayAuthenticationMethod() {    $('#display-authentication-method').toggleClass('is-checked');  },  switchMenu(event) {    const target = $(event.target);    if (!target.hasClass('active')) {      $('.side-menu li.active').removeClass('active');      target.parent().addClass('active');      const targetID = target.data('id');      this.generalSetting.set('registration-setting' === targetID);      this.emailSetting.set('email-setting' === targetID);      this.accountSetting.set('account-setting' === targetID);      this.announcementSetting.set('announcement-setting' === targetID);      this.layoutSetting.set('layout-setting' === targetID);      this.webhookSetting.set('webhook-setting' === targetID);    }  },  checkBoard(event) {    let target = $(event.target);    if (!target.hasClass('js-toggle-board-choose')) {      target = target.parent();    }    const checkboxId = target.attr('id');    $(`#${checkboxId} .materialCheckBox`).toggleClass('is-checked');    $(`#${checkboxId}`).toggleClass('is-checked');  },  inviteThroughEmail() {    const emails = $('#email-to-invite')      .val()      .toLowerCase()      .trim()      .split('\n')      .join(',')      .split(',');    const boardsToInvite = [];    $('.js-toggle-board-choose .materialCheckBox.is-checked').each(function() {      boardsToInvite.push($(this).data('id'));    });    const validEmails = [];    emails.forEach(email => {      if (email && SimpleSchema.RegEx.Email.test(email.trim())) {        validEmails.push(email.trim());      }    });    if (validEmails.length) {      this.setLoading(true);      Meteor.call('sendInvitation', validEmails, boardsToInvite, () => {        // if (!err) {        //   TODO - show more info to user        // }        this.setLoading(false);      });    }  },  saveMailServerInfo() {    this.setLoading(true);    $('li').removeClass('has-error');    try {      const host = this.checkField('#mail-server-host');      const port = this.checkField('#mail-server-port');      const username = $('#mail-server-username')        .val()        .trim();      const password = $('#mail-server-password')        .val()        .trim();      const from = this.checkField('#mail-server-from');      const tls = $('#mail-server-tls.is-checked').length > 0;      Settings.update(Settings.findOne()._id, {        $set: {          'mailServer.host': host,          'mailServer.port': port,          'mailServer.username': username,          'mailServer.password': password,          'mailServer.enableTLS': tls,          'mailServer.from': from,        },      });    } catch (e) {      return;    } finally {      this.setLoading(false);    }  },  saveLayout() {    this.setLoading(true);    $('li').removeClass('has-error');    const productName = $('#product-name')      .val()      .trim();    const hideLogoChange = $('input[name=hideLogo]:checked').val() === 'true';    const displayAuthenticationMethod =      $('input[name=displayAuthenticationMethod]:checked').val() === 'true';    const defaultAuthenticationMethod = $('#defaultAuthenticationMethod').val();    try {      Settings.update(Settings.findOne()._id, {        $set: {          productName,          hideLogo: hideLogoChange,          displayAuthenticationMethod,          defaultAuthenticationMethod,        },      });    } catch (e) {      return;    } finally {      this.setLoading(false);    }    DocHead.setTitle(productName);  },  sendSMTPTestEmail() {    Meteor.call('sendSMTPTestEmail', (err, ret) => {      if (!err && ret) {        const message = `${TAPi18n.__(ret.message)}: ${ret.email}`;        alert(message);      } else {        const reason = err.reason || '';        const message = `${TAPi18n.__(err.error)}\n${reason}`;        alert(message);      }    });  },  events() {    return [      {        'click a.js-toggle-registration': this.toggleRegistration,        'click a.js-toggle-tls': this.toggleTLS,        'click a.js-setting-menu': this.switchMenu,        'click a.js-toggle-board-choose': this.checkBoard,        'click button.js-email-invite': this.inviteThroughEmail,        'click button.js-save': this.saveMailServerInfo,        'click button.js-send-smtp-test-email': this.sendSMTPTestEmail,        'click a.js-toggle-hide-logo': this.toggleHideLogo,        'click button.js-save-layout': this.saveLayout,        'click a.js-toggle-display-authentication-method': this          .toggleDisplayAuthenticationMethod,      },    ];  },}).register('setting');BlazeComponent.extendComponent({  saveAccountsChange() {    const allowEmailChange =      $('input[name=allowEmailChange]:checked').val() === 'true';    const allowUserNameChange =      $('input[name=allowUserNameChange]:checked').val() === 'true';    const allowUserDelete =      $('input[name=allowUserDelete]:checked').val() === 'true';    AccountSettings.update('accounts-allowEmailChange', {      $set: { booleanValue: allowEmailChange },    });    AccountSettings.update('accounts-allowUserNameChange', {      $set: { booleanValue: allowUserNameChange },    });    AccountSettings.update('accounts-allowUserDelete', {      $set: { booleanValue: allowUserDelete },    });  },  allowEmailChange() {    return AccountSettings.findOne('accounts-allowEmailChange').booleanValue;  },  allowUserNameChange() {    return AccountSettings.findOne('accounts-allowUserNameChange').booleanValue;  },  allowUserDelete() {    return AccountSettings.findOne('accounts-allowUserDelete').booleanValue;  },  events() {    return [      {        'click button.js-accounts-save': this.saveAccountsChange,      },    ];  },}).register('accountSettings');BlazeComponent.extendComponent({  onCreated() {    this.loading = new ReactiveVar(false);  },  setLoading(w) {    this.loading.set(w);  },  currentSetting() {    return Announcements.findOne();  },  saveMessage() {    const message = $('#admin-announcement')      .val()      .trim();    Announcements.update(Announcements.findOne()._id, {      $set: { body: message },    });  },  toggleActive() {    this.setLoading(true);    const isActive = this.currentSetting().enabled;    Announcements.update(Announcements.findOne()._id, {      $set: { enabled: !isActive },    });    this.setLoading(false);    if (isActive) {      $('.admin-announcement').slideUp();    } else {      $('.admin-announcement').slideDown();    }  },  events() {    return [      {        'click a.js-toggle-activemessage': this.toggleActive,        'click button.js-announcement-save': this.saveMessage,      },    ];  },}).register('announcementSettings');Template.selectAuthenticationMethod.onCreated(function() {  this.authenticationMethods = 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.selectAuthenticationMethod.helpers({  authentications() {    return Template.instance().authenticationMethods.get();  },  isSelected(match) {    return Template.instance().data.authenticationMethod === match;  },});
 |