Share intervention settings

* extends share link form to share settings form
* adds list of users with access to the intervention
* adds logic for removing these users
* enhances translations
This commit is contained in:
mipel
2021-07-30 15:23:46 +02:00
parent 394ce15c3f
commit 221f7dfb79
4 changed files with 88 additions and 23 deletions

View File

@@ -238,6 +238,7 @@ class ShareInterventionForm(BaseModalForm):
url = forms.CharField(
label=_("Share link"),
label_suffix="",
help_text=_("Send this link to users who you want to have writing access on the data"),
required=False,
widget=TextToClipboardInput(
attrs={
@@ -245,18 +246,38 @@ class ShareInterventionForm(BaseModalForm):
}
)
)
users = forms.MultipleChoiceField(
label=_("Shared with"),
label_suffix="",
required=True,
help_text=_("Remove check to remove access for this user"),
widget=forms.CheckboxSelectMultiple(
attrs={
"class": "list-unstyled",
}
),
choices=[]
)
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.form_title = _("Share")
self.form_caption = _("Send this link to users who you want to have writing access on the data.")
self.form_caption = _("Share settings for {}").format(self.instance.identifier)
self.template = "modal/modal_form.html"
self.render_submit = False
# Make sure an access_token is set
if self.instance.access_token is None:
self.instance.generate_access_token()
self._init_fields()
def _init_fields(self):
""" Wraps initializing of fields
Returns:
"""
# Initialize share_link field
self.share_link = self.request.build_absolute_uri(
reverse("intervention:share", args=(self.instance.id, self.instance.access_token,))
)
@@ -264,3 +285,23 @@ class ShareInterventionForm(BaseModalForm):
"url",
self.share_link
)
# Initialize users field
users = self.instance.users.all()
choices = []
for n in users:
choices.append(
(n.id, n.username)
)
self.fields["users"].choices = choices
u_ids = list(users.values_list("id", flat=True))
self.initialize_form_field(
"users",
u_ids
)
def save(self):
accessing_users = User.objects.filter(
id__in=self.cleaned_data["users"]
)
self.instance.users.set(accessing_users)

View File

@@ -254,12 +254,21 @@ def create_share_view(request: HttpRequest, id: str):
user = request.user
intervention = get_object_or_404(Intervention, id=id)
form = ShareInterventionForm(request.POST or None, instance=intervention, request=request)
if request.method != "GET":
if request.method == "POST":
if form.is_valid():
form.save()
messages.info(
request,
_("Share settings updated")
)
return redirect(request.META.get("HTTP_REFERER", "home"))
elif request.method == "GET":
context = {
"form": form,
}
context = BaseContext(request, context).context
return render(request, form.template, context)
else:
raise NotImplementedError
context = {
"form": form,
}
context = BaseContext(request, context).context
return render(request, form.template, context)