diff options
author | Romulus Tsai 蔡仲明 <urakagi@gmail.com> | 2020-05-08 09:35:11 +0800 |
---|---|---|
committer | Romulus Tsai 蔡仲明 <urakagi@gmail.com> | 2020-05-08 09:35:11 +0800 |
commit | cfcc73724fcd394150d1b815d0a7a4c466e216b5 (patch) | |
tree | a9648255f14cd8b0e1ad8eee1f8d42337a0668bc /client/components/settings | |
parent | a3658993128bdddd5d40f792c19281dc5eac51f5 (diff) | |
parent | 533bc045d06269dba2f42cdfe61817a1b3407974 (diff) | |
download | wekan-cfcc73724fcd394150d1b815d0a7a4c466e216b5.tar.gz wekan-cfcc73724fcd394150d1b815d0a7a4c466e216b5.tar.bz2 wekan-cfcc73724fcd394150d1b815d0a7a4c466e216b5.zip |
Merge branch 'master' of https://github.com/wekan/wekan
Diffstat (limited to 'client/components/settings')
-rw-r--r-- | client/components/settings/informationBody.jade | 8 | ||||
-rw-r--r-- | client/components/settings/peopleBody.jade | 67 | ||||
-rw-r--r-- | client/components/settings/peopleBody.js | 95 | ||||
-rw-r--r-- | client/components/settings/peopleBody.styl | 2 | ||||
-rw-r--r-- | client/components/settings/settingBody.jade | 31 | ||||
-rw-r--r-- | client/components/settings/settingBody.js | 10 | ||||
-rw-r--r-- | client/components/settings/settingBody.styl | 5 |
7 files changed, 189 insertions, 29 deletions
diff --git a/client/components/settings/informationBody.jade b/client/components/settings/informationBody.jade index 2c615ffd..0f85dd9c 100644 --- a/client/components/settings/informationBody.jade +++ b/client/components/settings/informationBody.jade @@ -4,12 +4,16 @@ template(name='information') | {{_ 'error-notAuthorized'}} else .content-title - span {{_ 'info'}} + span + i.fa.fa-info-circle + | {{_ 'info'}} .content-body .side-menu ul li.active - a.js-setting-menu(data-id="information-display") {{_ 'info'}} + a.js-setting-menu(data-id="information-display") + i.fa.fa-info-circle + | {{_ 'info'}} .main-body +statistics diff --git a/client/components/settings/peopleBody.jade b/client/components/settings/peopleBody.jade index d8f672b0..fef1067e 100644 --- a/client/components/settings/peopleBody.jade +++ b/client/components/settings/peopleBody.jade @@ -5,16 +5,22 @@ template(name="people") else .content-title.ext-box .ext-box-left - span {{_ 'people'}} + span + i.fa.fa-users + | {{_ 'people'}} input#searchInput(placeholder="{{_ 'search'}}") - button#searchButton {{_ 'search'}} + button#searchButton + i.fa.fa-search + | {{_ 'search'}} .ext-box-right span {{_ 'people-number'}} #{peopleNumber} .content-body .side-menu ul li.active - a.js-setting-menu(data-id="people-setting") {{_ 'people'}} + a.js-setting-menu(data-id="people-setting") + i.fa.fa-users + | {{_ 'people'}} .main-body if loading.get +spinner @@ -34,9 +40,15 @@ template(name="peopleGeneral") th {{_ 'active'}} th {{_ 'authentication-method'}} th + +newUserRow each user in peopleList +peopleRow(userId=user._id) +template(name="newUserRow") + a.new-user + i.fa.fa-edit + | {{_ 'new'}} + template(name="peopleRow") tr if userData.loginDisabled @@ -90,6 +102,7 @@ template(name="peopleRow") td {{_ userData.authenticationMethod }} td a.edit-user + i.fa.fa-edit | {{_ 'edit'}} template(name="editUserPopup") @@ -97,7 +110,7 @@ template(name="editUserPopup") label.hide.userId(type="text" value=user._id) label | {{_ 'fullname'}} - input.js-profile-fullname(type="text" value=user.profile.fullname autofocus) + input.js-profile-fullname(type="text" value=user.profile.fullname) label | {{_ 'username'}} span.error.hide.username-taken @@ -141,3 +154,49 @@ template(name="editUserPopup") // div // input#deleteButton.primary.wide(type="button" value="{{_ 'delete'}}") +template(name="newUserPopup") + form + //label.hide.userId(type="text" value=user._id) + label + | {{_ 'fullname'}} + input.js-profile-fullname(type="text" value="") + label + | {{_ 'username'}} + span.error.hide.username-taken + | {{_ 'error-username-taken'}} + //if isLdap + // input.js-profile-username(type="text" value=user.username readonly) + //else + input.js-profile-username(type="text" value="") + label + | {{_ 'email'}} + span.error.hide.email-taken + | {{_ 'error-email-taken'}} + //if isLdap + // input.js-profile-email(type="email" value="{{user.emails.[0].address}}" readonly) + //else + input.js-profile-email(type="email" value="") + label + | {{_ 'admin'}} + select.select-role.js-profile-isadmin + option(value="false" selected="selected") {{_ 'no'}} + option(value="true") {{_ 'yes'}} + label + | {{_ 'active'}} + select.select-active.js-profile-isactive + option(value="false" selected="selected") {{_ 'yes'}} + option(value="true") {{_ 'no'}} + label + | {{_ 'authentication-type'}} + select.select-authenticationMethod.js-authenticationMethod + each authentications + if isSelected value + option(value="{{value}}" selected) {{_ value}} + else + option(value="{{value}}") {{_ value}} + hr + label + | {{_ 'password'}} + input.js-profile-password(type="password") + div.buttonsContainer + input.primary.wide(type="submit" value="{{_ 'save'}}") diff --git a/client/components/settings/peopleBody.js b/client/components/settings/peopleBody.js index 8610034e..186afd58 100644 --- a/client/components/settings/peopleBody.js +++ b/client/components/settings/peopleBody.js @@ -39,6 +39,9 @@ BlazeComponent.extendComponent({ this.filterPeople(); } }, + 'click #newUserButton'() { + Popup.open('newUser'); + }, }, ]; }, @@ -141,6 +144,47 @@ Template.editUserPopup.helpers({ }, }); +Template.newUserPopup.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.newUserPopup.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() { @@ -155,6 +199,16 @@ BlazeComponent.extendComponent({ }, }).register('peopleRow'); +BlazeComponent.extendComponent({ + events() { + return [ + { + 'click a.new-user': Popup.open('newUser'), + }, + ]; + }, +}).register('newUserRow'); + Template.editUserPopup.events({ submit(event, templateInstance) { event.preventDefault(); @@ -248,3 +302,44 @@ Template.editUserPopup.events({ Popup.close(); }), }); + +Template.newUserPopup.events({ + submit(event, templateInstance) { + event.preventDefault(); + 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(); + + Meteor.call( + 'setCreateUser', + fullname, + username, + password, + isAdmin, + isActive, + email.toLowerCase(), + 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(); + } + }, + ); + Popup.close(); + }, +}); diff --git a/client/components/settings/peopleBody.styl b/client/components/settings/peopleBody.styl index 80387611..c223e181 100644 --- a/client/components/settings/peopleBody.styl +++ b/client/components/settings/peopleBody.styl @@ -33,7 +33,7 @@ table padding: 0; button - min-width: 60px; + min-width: 90px; .content-wrapper margin-top: 10px diff --git a/client/components/settings/settingBody.jade b/client/components/settings/settingBody.jade index 04b635e8..835a3b81 100644 --- a/client/components/settings/settingBody.jade +++ b/client/components/settings/settingBody.jade @@ -4,22 +4,35 @@ template(name="setting") | {{_ 'error-notAuthorized'}} else .content-title + i.fa.fa-cog span {{_ 'settings'}} .content-body .side-menu ul li.active - a.js-setting-menu(data-id="registration-setting") {{_ 'registration'}} + a.js-setting-menu(data-id="registration-setting") + i.fa.fa-sign-in + | {{_ 'registration'}} li - a.js-setting-menu(data-id="email-setting") {{_ 'email'}} + a.js-setting-menu(data-id="email-setting") + i.fa.fa-envelope + | {{_ 'email'}} li - a.js-setting-menu(data-id="account-setting") {{_ 'accounts'}} + a.js-setting-menu(data-id="account-setting") + i.fa.fa-users + | {{_ 'accounts'}} li - a.js-setting-menu(data-id="announcement-setting") {{_ 'admin-announcement'}} + a.js-setting-menu(data-id="announcement-setting") + i.fa.fa-bullhorn + | {{_ 'admin-announcement'}} li - a.js-setting-menu(data-id="layout-setting") {{_ 'layout'}} + a.js-setting-menu(data-id="layout-setting") + i.fa.fa-object-group + | {{_ 'layout'}} li - a.js-setting-menu(data-id="webhook-setting") {{_ 'global-webhook'}} + a.js-setting-menu(data-id="webhook-setting") + i.fa.fa-globe + | {{_ 'global-webhook'}} .main-body if loading.get +spinner @@ -171,12 +184,6 @@ template(name='layoutSettings') .title {{_ 'custom-product-name'}} .form-group input.wekan-form-control#product-name(type="text", placeholder="" value="{{currentSetting.productName}}") - li.layout-form - .title {{_ 'add-custom-html-after-body-start'}} - textarea#customHTMLafterBodyStart.wekan-form-control= currentSetting.customHTMLafterBodyStart - li.layout-form - .title {{_ 'add-custom-html-before-body-end'}} - textarea#customHTMLbeforeBodyEnd.wekan-form-control= currentSetting.customHTMLbeforeBodyEnd li button.js-save-layout.primary {{_ 'save'}} diff --git a/client/components/settings/settingBody.js b/client/components/settings/settingBody.js index 4ff5aedd..62752084 100644 --- a/client/components/settings/settingBody.js +++ b/client/components/settings/settingBody.js @@ -48,7 +48,7 @@ BlazeComponent.extendComponent({ 'members.isAdmin': true, }, { - sort: ['title'], + sort: { sort: 1 /* boards default sorting */ }, }, ); }, @@ -171,20 +171,12 @@ BlazeComponent.extendComponent({ const displayAuthenticationMethod = $('input[name=displayAuthenticationMethod]:checked').val() === 'true'; const defaultAuthenticationMethod = $('#defaultAuthenticationMethod').val(); - const customHTMLafterBodyStart = $('#customHTMLafterBodyStart') - .val() - .trim(); - const customHTMLbeforeBodyEnd = $('#customHTMLbeforeBodyEnd') - .val() - .trim(); try { Settings.update(Settings.findOne()._id, { $set: { productName, hideLogo: hideLogoChange, - customHTMLafterBodyStart, - customHTMLbeforeBodyEnd, displayAuthenticationMethod, defaultAuthenticationMethod, }, diff --git a/client/components/settings/settingBody.styl b/client/components/settings/settingBody.styl index bcbd2ea1..d6ac32b2 100644 --- a/client/components/settings/settingBody.styl +++ b/client/components/settings/settingBody.styl @@ -41,15 +41,18 @@ &:hover background #fff box-shadow 0 1px 2px rgba(0,0,0,0.15); + a @extends .flex padding: 1rem 0 1rem 1rem width: 100% - 5rem - span font-size: 13px + i + margin-right: 20px + .main-body padding: 0.1em 1em -webkit-user-select: text // Safari 3.1+ |