summaryrefslogtreecommitdiffstats
path: root/client/components/settings/settingBody.js
diff options
context:
space:
mode:
authorlkisme <lkisme@me.com>2017-02-24 22:10:38 +0800
committerlkisme <lkisme@me.com>2017-02-24 22:10:38 +0800
commit1dfb6ef477dba4d0faf4bf86026647f43fb2f5f6 (patch)
tree2c97395901ac5789975a65d5efc6eaf0e37c1e5d /client/components/settings/settingBody.js
parent29fdfb9c886f1a906a27398fd546ad6cdb929ff9 (diff)
downloadwekan-1dfb6ef477dba4d0faf4bf86026647f43fb2f5f6.tar.gz
wekan-1dfb6ef477dba4d0faf4bf86026647f43fb2f5f6.tar.bz2
wekan-1dfb6ef477dba4d0faf4bf86026647f43fb2f5f6.zip
Admin panel:
Only invited user can register in strict mode, Set mail server in admin panel, Switch strict mode in admin panel, Invite people to system in admin panel
Diffstat (limited to 'client/components/settings/settingBody.js')
-rw-r--r--client/components/settings/settingBody.js126
1 files changed, 126 insertions, 0 deletions
diff --git a/client/components/settings/settingBody.js b/client/components/settings/settingBody.js
new file mode 100644
index 00000000..047bbd1c
--- /dev/null
+++ b/client/components/settings/settingBody.js
@@ -0,0 +1,126 @@
+Meteor.subscribe('setting');
+Meteor.subscribe('mailServer');
+
+BlazeComponent.extendComponent({
+ onCreated() {
+ this.error = new ReactiveVar('');
+ this.loading = new ReactiveVar(false);
+ this.generalSetting = new ReactiveVar(true);
+ this.emailSetting = new ReactiveVar(false);
+ },
+
+ 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: ['title'],
+ });
+ },
+ toggleStrictMode(){
+ this.setLoading(true);
+ const isStrictMode = this.currentSetting().strict;
+ Settings.update(Settings.findOne()._id, {$set:{strict: !isStrictMode}});
+ this.setLoading(false);
+ if(isStrictMode){
+ $('.invite-people').slideUp();
+ }else{
+ $('.invite-people').slideDown();
+ }
+ },
+
+ 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('general-setting' === targetID);
+ this.emailSetting.set('email-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(){
+ this.setLoading(true);
+ const emails = $('#email-to-invite').val().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());
+ }
+ });
+ 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 = this.checkField('#mail-server-username');
+ const password = this.checkField('#mail-server-password');
+ const from = this.checkField('#mail-server-from');
+ Settings.update(Settings.findOne()._id, {$set:{'mailServer.host':host, 'mailServer.port': port, 'mailServer.username': username,
+ 'mailServer.password': password, 'mailServer.from': from}});
+ } catch (e) {
+ return;
+ } finally {
+ this.setLoading(false);
+ }
+
+ },
+
+ events(){
+ return [{
+ 'click a.js-toggle-strict-mode': this.toggleStrictMode,
+ '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,
+ }];
+ },
+}).register('setting');