summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLauri Ojansivu <x@xet7.org>2019-05-09 16:37:18 +0300
committerLauri Ojansivu <x@xet7.org>2019-05-09 16:37:18 +0300
commit34b1654077c791e583c9d9dbbc4e73c910b7d373 (patch)
treeb81e1d2604eeefb4f76ebaa6c0159ab00d4bf47f
parent5dcd1b630e12010b186a42ab4431d410956b582b (diff)
parent7ff4067e88ed59686c86d81447fa2ce550032034 (diff)
downloadwekan-34b1654077c791e583c9d9dbbc4e73c910b7d373.tar.gz
wekan-34b1654077c791e583c9d9dbbc4e73c910b7d373.tar.bz2
wekan-34b1654077c791e583c9d9dbbc4e73c910b7d373.zip
Merge branch 'edge' into meteor-1.8
-rw-r--r--CHANGELOG.md16
-rw-r--r--Stackerfile.yml2
-rw-r--r--client/components/settings/peopleBody.jade5
-rw-r--r--client/components/settings/peopleBody.js9
-rw-r--r--client/components/settings/peopleBody.styl12
-rw-r--r--client/components/users/userHeader.jade5
-rw-r--r--client/components/users/userHeader.js5
-rw-r--r--models/users.js34
-rw-r--r--package.json2
-rw-r--r--sandstorm-pkgdef.capnp4
10 files changed, 86 insertions, 8 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index a1ff94a8..66442ebc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,14 @@
-# Upcoming Wekan release
+# v2.66 2019-05-09 Wekan release
-This release adds the following new translations:
+This release adds the following new features:
+
+- [Delete user feature](https://github.com/wekan/wekan/pull/2384).
+ Thanks to Akuket.
+- Change to Delete user feature: [When last board admin is removed, board is not deleted, other board users can
+ still use it](https://github.com/wekan/wekan/commit/e1b016cf3d4ff93e9e0fe1feb96372e3e1625233).
+ Thanks to xet7.
+
+and adds the following new translations:
- Add Chinese (Hong Kong).
Thanks to translators.
@@ -9,6 +17,10 @@ and fixes the following bugs:
- [Fix OIDC login](https://github.com/wekan/wekan/pull/2385). Related [#2383](https://github.com/wekan/wekan/issues/2383).
Thanks to faust64.
+- [Fix missing profile checks](https://github.com/wekan/wekan/pull/2396).
+ Thanks to justinr1234.
+- [Fix RTL issue #884, part 1](https://github.com/wekan/wekan/pull/2395).
+ Thanks to guyzyl.
Thanks to above GitHub users for their contributions and translators for their translations.
diff --git a/Stackerfile.yml b/Stackerfile.yml
index 64ef51d7..3e25f0e8 100644
--- a/Stackerfile.yml
+++ b/Stackerfile.yml
@@ -1,5 +1,5 @@
appId: wekan-public/apps/77b94f60-dec9-0136-304e-16ff53095928
-appVersion: "v2.65.0"
+appVersion: "v2.66.0"
files:
userUploads:
- README.md
diff --git a/client/components/settings/peopleBody.jade b/client/components/settings/peopleBody.jade
index 4dca5cb1..15deb005 100644
--- a/client/components/settings/peopleBody.jade
+++ b/client/components/settings/peopleBody.jade
@@ -107,5 +107,8 @@ template(name="editUserPopup")
label
| {{_ 'password'}}
input.js-profile-password(type="password")
+ div.buttonsContainer
+ input.primary.wide(type="submit" value="{{_ 'save'}}")
+ div
+ input#deleteButton.primary.wide(type="button" value="{{_ 'delete'}}")
- input.primary.wide(type="submit" value="{{_ 'save'}}")
diff --git a/client/components/settings/peopleBody.js b/client/components/settings/peopleBody.js
index 3ec96bb0..83cf14fa 100644
--- a/client/components/settings/peopleBody.js
+++ b/client/components/settings/peopleBody.js
@@ -98,6 +98,7 @@ Template.peopleRow.helpers({
Template.editUserPopup.onCreated(function() {
this.authenticationMethods = new ReactiveVar([]);
+ this.errorMessage = new ReactiveVar('');
Meteor.call('getAuthenticationsEnabled', (_, result) => {
if (result) {
@@ -129,6 +130,9 @@ Template.editUserPopup.helpers({
const selected = Users.findOne(userId).authenticationMethod;
return selected === 'ldap';
},
+ errorMessage() {
+ return Template.instance().errorMessage.get();
+ },
});
BlazeComponent.extendComponent({
@@ -220,4 +224,9 @@ Template.editUserPopup.events({
});
} else Popup.close();
},
+
+ 'click #deleteButton'() {
+ Users.remove(this.userId);
+ Popup.close();
+ },
});
diff --git a/client/components/settings/peopleBody.styl b/client/components/settings/peopleBody.styl
index b98c5340..80387611 100644
--- a/client/components/settings/peopleBody.styl
+++ b/client/components/settings/peopleBody.styl
@@ -34,3 +34,15 @@ table
button
min-width: 60px;
+
+.content-wrapper
+ margin-top: 10px
+
+.buttonsContainer
+ display: flex
+
+ input
+ margin: 0
+
+ div
+ margin: auto
diff --git a/client/components/users/userHeader.jade b/client/components/users/userHeader.jade
index c55b65c2..2a3d04cc 100644
--- a/client/components/users/userHeader.jade
+++ b/client/components/users/userHeader.jade
@@ -53,7 +53,10 @@ template(name="editProfilePopup")
input.js-profile-email(type="email" value="{{emails.[0].address}}")
else
input.js-profile-email(type="email" value="{{emails.[0].address}}" readonly)
- input.primary.wide(type="submit" value="{{_ 'save'}}")
+ div.buttonsContainer
+ input.primary.wide(type="submit" value="{{_ 'save'}}")
+ div
+ input#deleteButton.primary.wide(type="button" value="{{_ 'delete'}}")
template(name="changePasswordPopup")
+atForm(state='changePwd')
diff --git a/client/components/users/userHeader.js b/client/components/users/userHeader.js
index 6a2397a4..869c9d15 100644
--- a/client/components/users/userHeader.js
+++ b/client/components/users/userHeader.js
@@ -95,6 +95,11 @@ Template.editProfilePopup.events({
});
} else Popup.back();
},
+ 'click #deleteButton'() {
+ Users.remove(Meteor.userId());
+ Popup.close();
+ AccountsTemplates.logout();
+ },
});
// XXX For some reason the useraccounts autofocus isnt working in this case.
diff --git a/models/users.js b/models/users.js
index 3240f8de..5f949c80 100644
--- a/models/users.js
+++ b/models/users.js
@@ -238,6 +238,19 @@ Users.allow({
const user = Users.findOne(userId);
return user && Meteor.user().isAdmin;
},
+ remove(userId, doc) {
+ const adminsNumber = Users.find({ isAdmin: true }).count();
+ const { isAdmin } = Users.findOne({ _id: userId }, { fields: { 'isAdmin': 1 } });
+
+ // Prevents remove of the only one administrator
+ if (adminsNumber === 1 && isAdmin && userId === doc._id) {
+ return false;
+ }
+
+ // If it's the user or an admin
+ return userId === doc._id || isAdmin;
+ },
+ fetch: [],
});
// Search a user in the complete server database by its name or username. This
@@ -364,6 +377,10 @@ Users.helpers({
getTemplatesBoardSlug() {
return (Boards.findOne((this.profile || {}).templatesBoardId) || {}).slug;
},
+
+ remove() {
+ User.remove({ _id: this._id});
+ },
});
Users.mutations({
@@ -673,6 +690,23 @@ if (Meteor.isServer) {
}, {unique: true});
});
+ // OLD WAY THIS CODE DID WORK: When user is last admin of board,
+ // if admin is removed, board is removed.
+ // NOW THIS IS COMMENTED OUT, because other board users still need to be able
+ // to use that board, and not have board deleted.
+ // Someone can be later changed to be admin of board, by making change to database.
+ // TODO: Add UI for changing someone as board admin.
+ //Users.before.remove((userId, doc) => {
+ // Boards
+ // .find({members: {$elemMatch: {userId: doc._id, isAdmin: true}}})
+ // .forEach((board) => {
+ // // If only one admin for the board
+ // if (board.members.filter((e) => e.isAdmin).length === 1) {
+ // Boards.remove(board._id);
+ // }
+ // });
+ //});
+
// Each board document contains the de-normalized number of users that have
// starred it. If the user star or unstar a board, we need to update this
// counter.
diff --git a/package.json b/package.json
index 8b435014..b80b2b63 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "wekan",
- "version": "v2.65.0",
+ "version": "v2.66.0",
"description": "Open-Source kanban",
"private": true,
"scripts": {
diff --git a/sandstorm-pkgdef.capnp b/sandstorm-pkgdef.capnp
index b6c4f9c0..fc5393d0 100644
--- a/sandstorm-pkgdef.capnp
+++ b/sandstorm-pkgdef.capnp
@@ -22,10 +22,10 @@ const pkgdef :Spk.PackageDefinition = (
appTitle = (defaultText = "Wekan"),
# The name of the app as it is displayed to the user.
- appVersion = 267,
+ appVersion = 268,
# Increment this for every release.
- appMarketingVersion = (defaultText = "2.65.0~2019-04-24"),
+ appMarketingVersion = (defaultText = "2.66.0~2019-05-09"),
# Human-readable presentation of the app version.
minUpgradableAppVersion = 0,