summaryrefslogtreecommitdiff
path: root/ishtar_common
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2024-10-29 17:50:49 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2025-02-19 14:43:49 +0100
commit547a20789faf6bbc9979357c7f65cbe61e56ed07 (patch)
tree5ede13492f49434468607950769266d643333d11 /ishtar_common
parentfcc0bb255730d43ec2cff78fb8b948d6322a8b68 (diff)
downloadIshtar-547a20789faf6bbc9979357c7f65cbe61e56ed07.tar.bz2
Ishtar-547a20789faf6bbc9979357c7f65cbe61e56ed07.zip
✨ permissions refactoring: link items to user QA forms
Diffstat (limited to 'ishtar_common')
-rw-r--r--ishtar_common/forms_common.py30
-rw-r--r--ishtar_common/views.py22
2 files changed, 51 insertions, 1 deletions
diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py
index 734707419..e7e6a334d 100644
--- a/ishtar_common/forms_common.py
+++ b/ishtar_common/forms_common.py
@@ -2833,6 +2833,36 @@ class QALockForm(forms.Form):
item.save()
+class QALinkForm(forms.Form):
+ action = forms.ChoiceField(
+ label=_("Action"),
+ choices=(("link", _("Link items")), ("unlink", _("Unlink items")))
+ )
+ account = forms.IntegerField(
+ widget=widgets.JQueryAutoComplete(
+ reverse_lazy(
+ 'autocomplete-user',
+ ),
+ associated_model=User),
+ label=_("User"))
+
+ def __init__(self, *args, **kwargs):
+ self.items = kwargs.pop("items")
+ super().__init__(*args, **kwargs)
+
+ def save(self, items, user):
+ try:
+ ishtar_user = models.IshtarUser.objects.get(pk=self.cleaned_data["account"])
+ except models.IshtarUser.DoesNotExist:
+ return
+ if self.cleaned_data["action"] == "link":
+ for item in items:
+ item.ishtar_users.add(ishtar_user)
+ else:
+ for item in items:
+ item.ishtar_users.remove(ishtar_user)
+
+
class SourceDeletionForm(FinalForm):
confirm_msg = " "
confirm_end_msg = _("Would you like to delete this documentation?")
diff --git a/ishtar_common/views.py b/ishtar_common/views.py
index f01e848a0..03b029fe2 100644
--- a/ishtar_common/views.py
+++ b/ishtar_common/views.py
@@ -3121,7 +3121,10 @@ class QAItemForm(IshtarMixin, LoginRequiredMixin, FormView):
def pre_dispatch(self, request, *args, **kwargs):
if not self.model:
- raise NotImplementedError("No attribute model defined.")
+ if "model" in kwargs:
+ self.model = kwargs["model"]
+ else:
+ raise NotImplementedError("No attribute model defined.")
pks = [int(pk) for pk in kwargs.get("pks").split("-")]
self.items = list(self.model.objects.filter(pk__in=pks))
if not self.items:
@@ -3252,6 +3255,23 @@ class QABaseLockView(QAItemForm):
return HttpResponseRedirect(reverse("success"))
+class QALinkView(QAItemForm):
+ form_class = forms.QALinkForm
+ page_name = _("Link items")
+ icon = "fa fa-link"
+
+ def pre_dispatch(self, request, *args, **kwargs):
+ self.base_url = kwargs["url"]
+ super().pre_dispatch(request, *args, **kwargs)
+ if not request.user.ishtaruser.is_ishtaradmin:
+ url = reverse("qa-not-available")
+ return HttpResponseRedirect(url)
+
+ def form_valid(self, form):
+ form.save(self.items, self.request.user)
+ return HttpResponseRedirect(reverse("success"))
+
+
class QAOrganizationForm(QAItemEditForm):
model = models.Organization
form_class = forms.QAOrganizationFormMulti