From 52600c9a164d5a44a3a98ef32f4ad78cb58ceff1 Mon Sep 17 00:00:00 2001 From: mipel Date: Fri, 30 Jul 2021 15:23:46 +0200 Subject: [PATCH] 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 --- intervention/forms.py | 45 ++++++++++++++++++++++++++++++-- intervention/views.py | 21 ++++++++++----- locale/de/LC_MESSAGES/django.mo | Bin 9853 -> 10133 bytes locale/de/LC_MESSAGES/django.po | 45 +++++++++++++++++++++----------- 4 files changed, 88 insertions(+), 23 deletions(-) diff --git a/intervention/forms.py b/intervention/forms.py index bf68288..3eb2a88 100644 --- a/intervention/forms.py +++ b/intervention/forms.py @@ -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) diff --git a/intervention/views.py b/intervention/views.py index 16b44e4..9dd360e 100644 --- a/intervention/views.py +++ b/intervention/views.py @@ -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) diff --git a/locale/de/LC_MESSAGES/django.mo b/locale/de/LC_MESSAGES/django.mo index 20ed113a3eb5db6aa9b0a6fe0ab4a40312499a69..8419c790f01d54f152e6dc56873bbe60434d435b 100644 GIT binary patch delta 3307 zcmZwId2EzL7{~D`EsEQsKwY4eL_olL)T6@EzU{7Ewy=j)1eYpQ z5UIjT6%m?9tdeN(Ks1dQ14I!GV#G6mhChHrh=_lnM2dcY-9e3Uv-5st=6!eOnP=v0 zJEyhINdC|#qt)=)Kp99mn_e_0G-l#C%tjxxsedqP zyx~Yprr7qEp`M#!+f~?u`Hf3O5k~9-E!dm(CR70LpaOayHQ>kS$FJ=DpHRsX1s1+=;?PpMXxe+zNOSZik zHQwu}Ks!(q@3i-KqsI9RiOqc7oBZp6qjdDcQJ0OvSWTjzQ#w`irnF%LplK! z&?MA^6{rkVT5D06iKBx}sPQ*hH=_dIg8VLNKBS_7_M#&C5{KgfRA#!dQG+lKFUK2D z&(+)hI9^42jlI7cN7DWkyWtQvUIFBxGF5>3gEba&_5R;Q<;FB)qWCH|wsB$#uxdbR zqGszeIEMapsDM5}zUC+wernQqCz;a>KrLu2YAYt7wyqSFx#_4wS%o@(rjd#wTZw#4 zD;H(pE!0ZCL#6aE>QD5~sOK|jsNav8AP=>LMX0^M9(7h`q5`Qz2WO)KSb|BdU_BMR z&)ZNFcA(C{PSpLcZT~N*3C^Gb$RG{6e=%z1g{b~A)N@nuGQ7*S7uowy+V<)}d~0-2Xk zTlVf?@~?>Z(V-Q8Z#`lC6P3C?oJ0+fgI$NoT7U|4G-|?YQJI{GdMhTOwq_RUxjCrR zhfxb}PEyh9upT+^<~7uRxt*whj#z(37H=}0)If!(Gcpbf@qWA#n{gDrhsw+mEJFX# z)I5_>3$8?EIysk$QrCb=O(W_r)YGWb+J;)m7SvX3M+NpJYDGt^r%)^HL}E2rtU>{f zL_J@D>aWGU*os5{IL!j1-}MSdN-#2J!|P7d225I@p5B z$Q!5t-$#w}k@Xu)r+p0db{xln%x_Lp(L~wgOM6^^#yy%MV3#dKpjq>&LKSymm#i8h+&Za!+-Q&y6SxoKxM|pXiqJ3EAt@7pe zj#A5@=@sQWy88!{zM@A*%VN{muTdEk5}K1x|hDWN<|X`w8n zyg<<>LV3yyWajqV(A7>|9`jaY=KEiyaSLT8Weuf~vdG(!d0pCauQM}0t<@WvHEFs> zuRi3~+)7!YhW)IyYEvIM--%6>TH6kzPD?T63Gc0};*8bQyk0qdx1P&-?80HyLAScz zi8nY=cV5Fot`n%Pc4IN8wjt`ogQ1v{h`CWOe(70nfxo!eiMjE3C{mZY|L9^<5e!7# ze|i)1YXWh%Ce>ZzG=}2At!@6?o+WqhdN~+&BThxgb!sTLCE^R+s1ukwva4C|h9ca( zH&GW2)z&)m++frR2IkTgYY2zEck}j?mPKk@rm{bDqrpHp&i!56=Q0jM#%N3nMe6?^ zB#@}>8v7<9ig<_eOKy+4p*jY2ZVp9aaW@=JMC$la?XK-nhozMN|Ls71JP`MY|>@LlFqawC7GDcr4Q}K-CV7WPVbod ztznNU!$c$#Lu|;bA^y;1zr;wIWtLSlUE)V(5@Es?w)f}WBauDnd0yw7=eg&6&-a{r z+c@>%lvsOeQlsJ8K^Z`4OERVvclY4NbvGk}CLcAyOX$Zk)I{Yt5?y=-J=DZsVltk=UigFUZ%2)H z6`9lAvHd=x(R)2mpU=eZ%x`k3D8i6^p%jC(=b{3rMg>%h8gLD!;WqpHGgPv^!0vbo zHPP3o_b%Dzw@~BVM~(k42AJOj$(L4=g=F6hL%lExm60M;#M4m|yp9>@Vi#PAns6;L zrrCvgcnCG&PpEO*tXEJAx{5KS>NXYa-6K@Qy_j7q&9fGuR`{}QPetwJY}5o{+pa{7 zw-6QRGStMY?DMs#aW*1TnZ_Xb*9)K0(H9S)R?vbPs1=og-|X`{r~s4cRDgp}fsaBB zJPG??DJml_rsFc~hn{_Y7&Tu@D*4wyztW);-@tfAZ2J-Fc~?eLV7*Z*%R#+267~EA z+b%|BWCq5!%J#dcz@o?+%zEU{?22*M;X8_-;04qG5tgM1YmftM>QMo1L#1vvYQ;xT z89a&l+-cOnE!Lm0koF%~jCrI_fkjbgCss>EhhZhMShEQ=@m|!xM^P(0VLgjl`9*Z_ zGHRel)+Cmx0R5=XWuV5%LromQ!B~JSJZ8$NWYSTG!*Dn1#cyr@MI1}}mVKVh#*Ls| zik+|)6+j&-BdbwANDZiO$uXSZGv-G;Ks(5R7>dmp|NeKxE2IcV@!&2hpq&23@Mk7) z)8UzojA53dR@8t>xrf@Kk5QRBhzwzxQCrc93hWvxpxdYnq|oTD@BdgTN@*eLCwMaI z0}E{bV$=k6sIA(J8h8ilOdLi9asnMZg$keznakWmeO-eLuFR&PwmJ)AdSSGEFaQ;&Iku>#QvDuhd28 z&;T_UKTOuus7N=UCftrnc9==$J+Eo_Mg8`Zh|inww6lBC4Zo_X_>PySzi~U2l=UZ`w!Ho})OFJjxrC551lK zjP&=ZJ-!saE{?fb>7Dmy1Q%0FqUd)+*{Jaz_=osD@CGIK^{w}wPagQn5_%tBl~kgX z*C^WDC$F_M3Mrc?8z{>tjTBuG${KH9az@IIcsp@h;eDT+oz_I7m@KAxM> z)Xlrz`>rqKwWZ}BFYc3;;_b=)ro7CJRJakRtjcvNs@x@1r&LAWa>5b*D%_~+yjnKR zDXpnq?nXyA72!oy)y@*$Et^*vb*tt^-FcPOt`n}ApZK&hDO}AEZnQGIkV?qgms5Cr JOzyl+{{jBPKji=b diff --git a/locale/de/LC_MESSAGES/django.po b/locale/de/LC_MESSAGES/django.po index a1aeeaa..ebd3d08 100644 --- a/locale/de/LC_MESSAGES/django.po +++ b/locale/de/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2021-07-30 14:26+0200\n" +"POT-Creation-Date: 2021-07-30 15:00+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -251,16 +251,27 @@ msgstr "Eingriff bearbeiten" msgid "Share link" msgstr "Freigabelink" -#: intervention/forms.py:251 +#: intervention/forms.py:241 +msgid "Send this link to users who you want to have writing access on the data" +msgstr "" +"Andere Nutzer erhalten über diesen Link Zugriff auf die Daten" + +#: intervention/forms.py:250 +msgid "Shared with" +msgstr "Freigegeben für" + +#: intervention/forms.py:253 +msgid "Remove check to remove access for this user" +msgstr "Wählen Sie die Nutzer ab, die keinen Zugriff mehr haben sollen" + +#: intervention/forms.py:264 #: intervention/templates/intervention/detail/view.html:27 msgid "Share" msgstr "Freigabe" -#: intervention/forms.py:252 -msgid "" -"Send this link to users who you want to have writing access on the data." -msgstr "" -"Senden Sie diesen Link an andere KSP Nutzer, damit sie Schreibrechte auf diese Daten erhalten." +#: intervention/forms.py:265 +msgid "Share settings for {}" +msgstr "Freigabe Einstellungen für {}" #: intervention/tables.py:70 msgid "Interventions" @@ -390,14 +401,6 @@ msgstr "Zuletzt bearbeitet" msgid "No geometry added, yet." msgstr "Keine Geometrie vorhanden" -#: intervention/templates/intervention/text-to-clipboard-input.html:6 -msgid "Copy to clipboard" -msgstr "In Zwischenablage kopieren" - -#: intervention/templates/intervention/text-to-clipboard-input.html:16 -msgid "Copied to clipboard" -msgstr "In Zwischenablage kopiert" - #: intervention/views.py:62 msgid "Intervention {} added" msgstr "Eingriff {} hinzugefügt" @@ -436,6 +439,10 @@ msgstr "{} ist nun für Sie freigegeben" msgid "Share link invalid" msgstr "Freigabelink ungültig" +#: intervention/views.py:262 +msgid "Share settings updated" +msgstr "Freigabe Einstellungen aktualisiert" + #: konova/decorators.py:29 msgid "You need to be staff to perform this action!" msgstr "Hierfür müssen Sie Mitarbeiter sein!" @@ -509,6 +516,14 @@ msgstr "Wenn meine freigegebenen Daten gelöscht wurden" msgid "On registered data edited" msgstr "Wenn meine freigegebenen Daten bearbeitet wurden" +#: konova/templates/konova/custom_widgets/text-to-clipboard-input.html:6 +msgid "Copy to clipboard" +msgstr "In Zwischenablage kopieren" + +#: konova/templates/konova/custom_widgets/text-to-clipboard-input.html:16 +msgid "Copied to clipboard" +msgstr "In Zwischenablage kopiert" + #: konova/templates/konova/home.html:23 konova/templates/konova/home.html:61 #: konova/templates/konova/home.html:100 msgid "Total"