mirror of
https://github.com/ae-utbm/sith.git
synced 2026-04-18 01:08:23 +00:00
ask for user confirmation if its role was moved out of presidency
This commit is contained in:
@@ -3,16 +3,22 @@ import type { AlpineComponent } from "alpinejs";
|
|||||||
interface RoleGroupData {
|
interface RoleGroupData {
|
||||||
isBoard: boolean;
|
isBoard: boolean;
|
||||||
isPresidency: boolean;
|
isPresidency: boolean;
|
||||||
|
roleId: number;
|
||||||
}
|
}
|
||||||
|
|
||||||
document.addEventListener("alpine:init", () => {
|
document.addEventListener("alpine:init", () => {
|
||||||
Alpine.data("clubRoleList", () => ({
|
Alpine.data("clubRoleList", (config: { userRoleId: number | null }) => ({
|
||||||
|
confirmOnSubmit: false,
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Edit relevant item data after it has been moved by x-sort
|
* Edit relevant item data after it has been moved by x-sort
|
||||||
*/
|
*/
|
||||||
reorder(item: AlpineComponent<RoleGroupData>, conf: RoleGroupData) {
|
reorder(item: AlpineComponent<RoleGroupData>, conf: RoleGroupData) {
|
||||||
item.isBoard = conf.isBoard;
|
item.isBoard = conf.isBoard;
|
||||||
item.isPresidency = conf.isPresidency;
|
item.isPresidency = conf.isPresidency;
|
||||||
|
// if the user has moved its own role outside the presidency,
|
||||||
|
// submitting the form will require a confirmation
|
||||||
|
this.confirmOnSubmit = config.userRoleId === item.roleId && !item.isPresidency;
|
||||||
this.resetOrder();
|
this.resetOrder();
|
||||||
},
|
},
|
||||||
/**
|
/**
|
||||||
@@ -33,5 +39,23 @@ document.addEventListener("alpine:init", () => {
|
|||||||
elem.value = (i + 1).toString();
|
elem.value = (i + 1).toString();
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If the user moved its role out of the presidency, ask a confirmation
|
||||||
|
* before submitting the form
|
||||||
|
*/
|
||||||
|
confirmSubmission(event: SubmitEvent) {
|
||||||
|
if (
|
||||||
|
this.confirmOnSubmit &&
|
||||||
|
!confirm(
|
||||||
|
gettext(
|
||||||
|
"You're going to remove your own role from the presidency. " +
|
||||||
|
"You may lock yourself out of this page. Do you want to continue ? ",
|
||||||
|
),
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
event.preventDefault();
|
||||||
|
}
|
||||||
|
},
|
||||||
}));
|
}));
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
x-data="{
|
x-data="{
|
||||||
isPresidency: {{ subform.is_presidency.value()|lower }},
|
isPresidency: {{ subform.is_presidency.value()|lower }},
|
||||||
isBoard: {{ subform.is_board.value()|lower }},
|
isBoard: {{ subform.is_board.value()|lower }},
|
||||||
|
roleId: {{ subform.id.value() }},
|
||||||
}"
|
}"
|
||||||
x-sort:item="$data"
|
x-sort:item="$data"
|
||||||
>
|
>
|
||||||
@@ -68,7 +69,11 @@
|
|||||||
(e.g. a board role can be made into a presidency role).
|
(e.g. a board role can be made into a presidency role).
|
||||||
{% endtrans %}
|
{% endtrans %}
|
||||||
</p>
|
</p>
|
||||||
<form method="post" x-data="clubRoleList">
|
<form
|
||||||
|
method="post"
|
||||||
|
x-data="clubRoleList({ userRoleId: {{ user_role or "null" }} })"
|
||||||
|
@submit="confirmSubmission"
|
||||||
|
>
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ form.management_form }}
|
{{ form.management_form }}
|
||||||
{{ form.non_form_errors() }}
|
{{ form.non_form_errors() }}
|
||||||
@@ -91,7 +96,6 @@
|
|||||||
<div
|
<div
|
||||||
x-sort="reorder($item, { isBoard: true, isPresidency: true })"
|
x-sort="reorder($item, { isBoard: true, isPresidency: true })"
|
||||||
x-sort:group="roles"
|
x-sort:group="roles"
|
||||||
x-ref="presidencyFormSet"
|
|
||||||
>
|
>
|
||||||
{% for subform in form %}
|
{% for subform in form %}
|
||||||
{% if subform.is_presidency.value() %}
|
{% if subform.is_presidency.value() %}
|
||||||
@@ -125,7 +129,6 @@
|
|||||||
<div
|
<div
|
||||||
x-sort="reorder($item, { isBoard: true, isPresidency: false })"
|
x-sort="reorder($item, { isBoard: true, isPresidency: false })"
|
||||||
x-sort:group="roles"
|
x-sort:group="roles"
|
||||||
x-ref="boardFormSet"
|
|
||||||
>
|
>
|
||||||
{% for subform in form %}
|
{% for subform in form %}
|
||||||
{% if subform.is_board.value() and not subform.is_presidency.value() %}
|
{% if subform.is_board.value() and not subform.is_presidency.value() %}
|
||||||
@@ -144,7 +147,6 @@
|
|||||||
<div
|
<div
|
||||||
x-sort="reorder($item, { isBoard: false, isPresidency: false })"
|
x-sort="reorder($item, { isBoard: false, isPresidency: false })"
|
||||||
x-sort:group="roles"
|
x-sort:group="roles"
|
||||||
x-ref="memberFormSet"
|
|
||||||
>
|
>
|
||||||
{% for subform in form %}
|
{% for subform in form %}
|
||||||
{% if not subform.is_board.value() %}
|
{% if not subform.is_board.value() %}
|
||||||
|
|||||||
@@ -431,12 +431,10 @@ class ClubRoleUpdateView(
|
|||||||
success_message = _("Club roles updated")
|
success_message = _("Club roles updated")
|
||||||
|
|
||||||
def test_func(self):
|
def test_func(self):
|
||||||
if self.request.user.has_perm("club.change_clubrole"):
|
return (
|
||||||
return True
|
self.request.user.is_authenticated
|
||||||
club: Club = self.get_object()
|
and self.get_object().can_roles_be_edited_by(self.request.user)
|
||||||
return club.members.filter(
|
)
|
||||||
user=self.request.user, role__is_presidency=True
|
|
||||||
).exists()
|
|
||||||
|
|
||||||
def get_form_kwargs(self):
|
def get_form_kwargs(self):
|
||||||
return super().get_form_kwargs() | {"form_kwargs": {"label_suffix": ""}}
|
return super().get_form_kwargs() | {"form_kwargs": {"label_suffix": ""}}
|
||||||
@@ -444,6 +442,17 @@ class ClubRoleUpdateView(
|
|||||||
def get_success_url(self):
|
def get_success_url(self):
|
||||||
return self.request.path
|
return self.request.path
|
||||||
|
|
||||||
|
def get_context_data(self, **kwargs):
|
||||||
|
return super().get_context_data(**kwargs) | {
|
||||||
|
"user_role": ClubRole.objects.filter(
|
||||||
|
club=self.object,
|
||||||
|
members__user=self.request.user,
|
||||||
|
members__end_date=None,
|
||||||
|
)
|
||||||
|
.values_list("id", flat=True)
|
||||||
|
.first()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
class ClubRoleBaseCreateView(UserPassesTestMixin, SuccessMessageMixin, CreateView):
|
class ClubRoleBaseCreateView(UserPassesTestMixin, SuccessMessageMixin, CreateView):
|
||||||
"""View to create a new Club Role, using [][club.forms.ClubRoleCreateForm].
|
"""View to create a new Club Role, using [][club.forms.ClubRoleCreateForm].
|
||||||
|
|||||||
Reference in New Issue
Block a user