- loading user...
+ v-if="!isLoaded"
+ >
+ loading user...
-
-
-
-
+ >
+
+
+
+
+
+
+
+
+
+
+
+
+ toggle_admin(v)"
+ >
+ is admin
+
+ toggle_moderator(v)"
+ >
+ is moderator
+
+ toggle_confirmation(v)"
+ >
+ is confirmed
+
+ toggle_approval(v)"
+ >
+ is approved
+
+
+
toggle_activation(v)"
+ >
+ is active
+
+
+
+
+
+
+
+
+
database
+
{{ JSON.stringify(user, null, 2) }}
+
details
+
{{ JSON.stringify(this.userDetails, null, 2) }}
+
+
-
diff --git a/src/components/settings_modal/admin_tabs/users_tab.js b/src/components/settings_modal/admin_tabs/users_tab.js
index 03274533d..5a59f308d 100644
--- a/src/components/settings_modal/admin_tabs/users_tab.js
+++ b/src/components/settings_modal/admin_tabs/users_tab.js
@@ -5,8 +5,7 @@ import BasicUserCard from 'src/components/basic_user_card/basic_user_card.vue'
import ProgressButton from 'src/components/progress_button/progress_button.vue'
import AdminCard from 'src/components/settings_modal/admin_tabs/admin_card.vue'
import PageList from 'src/components/page_list/page_list.vue'
-
-
+import TabSwitcher from 'src/components/tab_switcher/tab_switcher.jsx'
const UsersTab = {
provide () {
@@ -17,8 +16,14 @@ const UsersTab = {
},
data() {
return {
+ /* filters must match the filter options below initially, or the ui is gonna have a computer moment
+ * no, i won't fix this
+ * */
+ filters_origin: "local",
+ filters_activity: "all",
+ filters_permission: "all",
filters: {
- local: false,
+ local: true,
external: false,
active: false,
need_approval: false,
@@ -38,35 +43,89 @@ const UsersTab = {
PageList,
ProgressButton,
AdminCard,
+ TabSwitcher,
},
computed: {
},
methods: {
+ update_origin (v) {
+ switch (v) {
+ case 'local':
+ this.filters.local = true
+ this.filters.external = false
+ break;
+ case 'external':
+ this.filters.local = false
+ this.filters.external = true
+ break;
+ default:
+ case 'all':
+ this.filters.local = false
+ this.filters.external = false
+ break;
+ }
+ this.reset()
+ },
+ update_activity (v) {
+ switch (v) {
+ case 'active':
+ this.filters.active = true
+ this.filters.deactivated = false
+ break;
+ case 'deactivated':
+ this.filters.active = false
+ this.filters.deactivated = true
+ break;
+ default:
+ case 'all':
+ this.filters.active = false
+ this.filters.deactivated = false
+ break;
+ }
+ this.reset()
+ },
+ update_permission (v) {
+ switch (v) {
+ case 'admin':
+ this.filters.is_admin = true
+ this.filters.is_moderator = false
+ break;
+ case 'moderator':
+ this.filters.is_admin = false
+ this.filters.is_moderator = true
+ break;
+ case 'modsnadmins':
+ this.filters.is_admin = true
+ this.filters.is_moderator = true
+ break;
+ default:
+ case 'all':
+ this.filters.is_admin = false
+ this.filters.is_moderator = false
+ break;
+ }
+ this.reset()
+ },
delete_selection () {
- console.log('delete selection')
},
delete_user () {},
fetch_page (store, opts) {
opts.query = ""
- console.log('current filters:', this.filters)
opts.filters = this.filters
opts.name = ""
opts.email = ""
const users = store.dispatch('fetchAdminUsers', opts)
- console.log('users', users)
return users
},
reset () {
this.$refs.userList.reset()
},
toggleLocal () {
- console.log('toggle local')
this.filters.local = !this.filters.local
this.reset()
}
},
mounted() {
- console.log("mounted")
}
}
diff --git a/src/components/settings_modal/admin_tabs/users_tab.scss b/src/components/settings_modal/admin_tabs/users_tab.scss
new file mode 100644
index 000000000..a42308167
--- /dev/null
+++ b/src/components/settings_modal/admin_tabs/users_tab.scss
@@ -0,0 +1,3 @@
+.user-tab {
+ height: 100%;
+}
diff --git a/src/components/settings_modal/admin_tabs/users_tab.vue b/src/components/settings_modal/admin_tabs/users_tab.vue
index d60cd99a3..a5f42af9a 100644
--- a/src/components/settings_modal/admin_tabs/users_tab.vue
+++ b/src/components/settings_modal/admin_tabs/users_tab.vue
@@ -1,101 +1,130 @@
+
-
-
{filters.local = v; reset();}"
- >
- only local
-
-
{filters.external = v; reset();}"
- >
- only external
-
-
{filters.active = v; reset();}"
- >
- only active
-
-
{filters.need_approval = v; reset();}"
- >
- only unconfirmed
-
-
{filters.deactivated = v; reset();}"
- >
- only deactivated
-
-
{filters.is_admin = v; reset();}"
- >
- only if admin
-
-
{filters.is_moderator = v; reset();}"
- >
- only if moderator
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
filter user search
+ todo: query, name and email input
+
+
+
+ {filters.need_approval = v; reset();}"
+ >
+ only unapproved
+
+ {filters.unconfirmed = v; reset();}"
+ >
+ only unconfirmed
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ TBC
+
+
+
diff --git a/src/i18n/en.json b/src/i18n/en.json
index 3ee25bb2a..3b0008753 100644
--- a/src/i18n/en.json
+++ b/src/i18n/en.json
@@ -1138,7 +1138,8 @@
}
},
"users": {
- "users": "User Management",
+ "management": "Management",
+ "invitations": "Invitations",
"search_users": "Search for users...",
"filters": {
"show_all": "show all",
diff --git a/src/modules/adminSettings.js b/src/modules/adminSettings.js
index a55a48951..05aa030aa 100644
--- a/src/modules/adminSettings.js
+++ b/src/modules/adminSettings.js
@@ -57,7 +57,7 @@ const adminSettingsStorage = {
},
resetAdminDraft (state) {
state.draft = cloneDeep(state.config)
- }
+ },
},
actions: {
async fetchAdminUsers (store, opts) {
@@ -67,6 +67,34 @@ const adminSettingsStorage = {
//)
return users
},
+ adminAddUserToAdminGroup (store, user) {
+ store.rootState.api.backendInteractor.adminAddUserToAdminGroup({ user })
+ .then(res => store.commit('updateRight', { user, right: 'admin', value: res.is_admin }))
+ },
+ adminRemoveUserFromAdminGroup (store, user) {
+ return store.rootState.api.backendInteractor.adminRemoveUserFromAdminGroup({ user })
+ .then(res => store.commit('updateRight', { user, right: 'admin', value: res.is_admin }))
+ },
+ adminAddUserToModeratorGroup (store, user) {
+ return store.rootState.api.backendInteractor.adminAddUserToModeratorGroup({ user })
+ .then(res => store.commit('updateRight', { user, right: 'moderator', value: res.is_moderator }))
+ },
+ adminRemoveUserFromModeratorGroup (store, user) {
+ return store.rootState.api.backendInteractor.adminRemoveUserFromModeratorGroup({ user })
+ .then(res => store.commit('updateRight', { user, right: 'moderator', value: res.is_moderator }))
+ },
+ adminActivateUser (store, user) {
+ return store.rootState.api.backendInteractor.activateUser({ user })
+ .then(res => console.log(res))
+ },
+ adminDeactivateUser (store, user) {
+ return store.rootState.api.backendInteractor.deactivateUser({ user })
+ .then(res => console.log(res))
+ },
+ adminDeleteUser (store, user) {
+ return store.rootState.api.backendInteractor.deleteUser({ user })
+ .then(res => console.log(res))
+ },
loadFrontendsStuff ({ rootState, commit }) {
rootState.api.backendInteractor.fetchAvailableFrontends()
.then(frontends => commit('setAvailableFrontends', { frontends }))
diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js
index 0786deee4..f50ea51ee 100644
--- a/src/services/api/api.service.js
+++ b/src/services/api/api.service.js
@@ -138,7 +138,7 @@ const PLEROMA_ADMIN_USERS_URL = ({page, pageSize, filters = {}, query = '', name
+ (is_moderator ? 'is_moderator,' : '')
return `/api/v1/pleroma/admin/users?page=${page}&page_size=${pageSize}&filters=${filters_str}&query=${query}&name=${name}&email=${email}`
}
-
+const PLEROMA_ADMIN_MODIFY_GROUP_URL = (nickname, group) => `/api/v1/pleroma/admin/users/${nickname}/permission_group/${group}`
const PLEROMA_ADMIN_DELETE_USERS_URL = '/api/v1/pleroma/admin/users'
const PLEROMA_ADMIN_ACTIVATE_USER_URL = '/api/v1/pleroma/admin/users/activate'
const PLEROMA_ADMIN_DEACTIVATE_USER_URL = '/api/v1/pleroma/admin/users/deactivate'
@@ -1492,37 +1492,35 @@ const adminListUsers = ({ opts, credentials }) => {
}).then((data) => data.users.map(parseUser))
}
-const adminDeleteUser = ({ nicknames, credentials }) => {
- return promisedRequest({
- url: PLEROMA_ADMIN_DELETE_USERS_URL,
+const adminAddUserToAdminGroup = ({ user, credentials }) => {
+ const url = PLEROMA_ADMIN_MODIFY_GROUP_URL(user.name_html, 'admin')
+ return promisedRequest({ url: url,
credentials,
- method: 'DELETE',
- headers: {
- 'Content-Type': 'application/json'
- },
- body: JSON.stringify({'nicknames': nicknames})
+ method: 'POST'
})
}
-const adminActivateUser = ({ nicknames, credentials }) => {
- return promisedRequest({ url: PLEROMA_ADMIN_ACTIVATE_USER_URL,
+const adminRemoveUserFromAdminGroup = ({ user, credentials }) => {
+ const url = PLEROMA_ADMIN_MODIFY_GROUP_URL(user.name_html, 'admin')
+ return promisedRequest({ url: url,
credentials,
- method: 'PATCH',
- headers: {
- 'Content-Type': 'application/json'
- },
- body: JSON.stringify({'nicknames': nicknames})
+ method: 'DELETE'
})
}
-const adminDeactivateUser = ({ nicknames, credentials }) => {
- return promisedRequest({ url: PLEROMA_ADMIN_DEACTIVATE_USER_URL,
+const adminAddUserToModeratorGroup = ({ user, credentials }) => {
+ const url = PLEROMA_ADMIN_MODIFY_GROUP_URL(user.name_html, 'moderator')
+ return promisedRequest({ url: url,
credentials,
- method: 'PATCH',
- headers: {
- 'Content-Type': 'application/json'
- },
- body: JSON.stringify({'nicknames': nicknames})
+ method: 'POST'
+ })
+}
+
+const adminRemoveUserFromModeratorGroup = ({ user, credentials }) => {
+ const url = PLEROMA_ADMIN_MODIFY_GROUP_URL(user.name_html, 'moderator')
+ return promisedRequest({ url: url,
+ credentials,
+ method: 'DELETE'
})
}
@@ -2199,9 +2197,10 @@ const apiService = {
updateBookmarkFolder,
deleteBookmarkFolder,
adminListUsers,
- adminDeleteUser,
- adminActivateUser,
- adminDeactivateUser,
+ adminAddUserToAdminGroup,
+ adminRemoveUserFromAdminGroup,
+ adminAddUserToModeratorGroup,
+ adminRemoveUserFromModeratorGroup,
}
export default apiService