mirror of
https://github.com/wekan/wekan.git
synced 2025-12-16 23:40:13 +01:00
Create New User in Admin Panel. Works, but does not save fullname yet,
so currently it's needed to edit add fullname later. Thanks to xet7 ! Related #802
This commit is contained in:
parent
0e755e021b
commit
e0ca960a35
4 changed files with 179 additions and 1 deletions
|
|
@ -40,9 +40,15 @@ template(name="peopleGeneral")
|
||||||
th {{_ 'active'}}
|
th {{_ 'active'}}
|
||||||
th {{_ 'authentication-method'}}
|
th {{_ 'authentication-method'}}
|
||||||
th
|
th
|
||||||
|
+newUserRow
|
||||||
each user in peopleList
|
each user in peopleList
|
||||||
+peopleRow(userId=user._id)
|
+peopleRow(userId=user._id)
|
||||||
|
|
||||||
|
template(name="newUserRow")
|
||||||
|
a.new-user
|
||||||
|
i.fa.fa-edit
|
||||||
|
| {{_ 'new'}}
|
||||||
|
|
||||||
template(name="peopleRow")
|
template(name="peopleRow")
|
||||||
tr
|
tr
|
||||||
if userData.loginDisabled
|
if userData.loginDisabled
|
||||||
|
|
@ -148,3 +154,49 @@ template(name="editUserPopup")
|
||||||
// div
|
// div
|
||||||
// input#deleteButton.primary.wide(type="button" value="{{_ 'delete'}}")
|
// 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="" autofocus)
|
||||||
|
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'}}")
|
||||||
|
|
|
||||||
|
|
@ -39,6 +39,9 @@ BlazeComponent.extendComponent({
|
||||||
this.filterPeople();
|
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({
|
BlazeComponent.extendComponent({
|
||||||
onCreated() {},
|
onCreated() {},
|
||||||
user() {
|
user() {
|
||||||
|
|
@ -155,6 +199,16 @@ BlazeComponent.extendComponent({
|
||||||
},
|
},
|
||||||
}).register('peopleRow');
|
}).register('peopleRow');
|
||||||
|
|
||||||
|
BlazeComponent.extendComponent({
|
||||||
|
events() {
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
'click a.new-user': Popup.open('newUser'),
|
||||||
|
},
|
||||||
|
];
|
||||||
|
},
|
||||||
|
}).register('newUserRow');
|
||||||
|
|
||||||
Template.editUserPopup.events({
|
Template.editUserPopup.events({
|
||||||
submit(event, templateInstance) {
|
submit(event, templateInstance) {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
|
|
@ -248,3 +302,44 @@ Template.editUserPopup.events({
|
||||||
Popup.close();
|
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();
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
|
||||||
|
|
@ -759,5 +759,8 @@
|
||||||
"assignee": "Assignee",
|
"assignee": "Assignee",
|
||||||
"cardAssigneesPopup-title": "Assignee",
|
"cardAssigneesPopup-title": "Assignee",
|
||||||
"addmore-detail": "Add a more detailed description",
|
"addmore-detail": "Add a more detailed description",
|
||||||
"show-on-card": "Show on Card"
|
"show-on-card": "Show on Card",
|
||||||
|
"new": "New",
|
||||||
|
"editUserPopup-title": "Edit User",
|
||||||
|
"newUserPopup-title": "New User"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -620,6 +620,34 @@ Users.mutations({
|
||||||
});
|
});
|
||||||
|
|
||||||
Meteor.methods({
|
Meteor.methods({
|
||||||
|
setCreateUser(fullname, username, password, isAdmin, isActive, email) {
|
||||||
|
if (Meteor.user().isAdmin) {
|
||||||
|
check(fullname, String);
|
||||||
|
check(username, String);
|
||||||
|
check(password, String);
|
||||||
|
check(isAdmin, String);
|
||||||
|
check(isActive, String);
|
||||||
|
check(email, String);
|
||||||
|
|
||||||
|
const nUsersWithUsername = Users.find({ username }).count();
|
||||||
|
const nUsersWithEmail = Users.find({ email }).count();
|
||||||
|
if (nUsersWithUsername > 0) {
|
||||||
|
throw new Meteor.Error('username-already-taken');
|
||||||
|
} else if (nUsersWithEmail > 0) {
|
||||||
|
throw new Meteor.Error('email-already-taken');
|
||||||
|
} else {
|
||||||
|
Accounts.createUser({
|
||||||
|
fullname,
|
||||||
|
username,
|
||||||
|
password,
|
||||||
|
isAdmin,
|
||||||
|
isActive,
|
||||||
|
email: email.toLowerCase(),
|
||||||
|
from: 'admin',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
setUsername(username, userId) {
|
setUsername(username, userId) {
|
||||||
check(username, String);
|
check(username, String);
|
||||||
check(userId, String);
|
check(userId, String);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue