diff options
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/forms_common.py | 30 | ||||
-rw-r--r-- | ishtar_common/views.py | 22 |
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 |