From 880e4a9c8af743f9ec659907818a02c3ce396a99 Mon Sep 17 00:00:00 2001 From: fanfounet Date: Wed, 15 May 2024 10:59:53 +0200 Subject: [PATCH] [DONE] Fanfounet/update access tokens (#1102) * add token name model and col table name * update branch * add token name and aside block * fix lang * Add review changes * Fix translations * Update token name form * Separate JS in new file * fix lang * update token fr lang --------- Co-authored-by: Charneau Franck Co-authored-by: Aymeric Jakobowski --- pod/locale/fr/LC_MESSAGES/django.mo | Bin 202883 -> 204057 bytes pod/locale/fr/LC_MESSAGES/django.po | 57 ++++++- pod/locale/fr/LC_MESSAGES/djangojs.mo | Bin 20854 -> 20853 bytes pod/locale/fr/LC_MESSAGES/djangojs.po | 8 +- pod/locale/nl/LC_MESSAGES/django.mo | Bin 1923 -> 1923 bytes pod/locale/nl/LC_MESSAGES/django.po | 49 +++++- pod/locale/nl/LC_MESSAGES/djangojs.po | 4 +- pod/video/admin.py | 2 +- pod/video/models.py | 3 + pod/video/static/js/video-access-token.js | 42 +++++ .../templates/videos/video_access_tokens.html | 160 ++++++++++-------- pod/video/views.py | 29 +++- 12 files changed, 257 insertions(+), 97 deletions(-) create mode 100644 pod/video/static/js/video-access-token.js diff --git a/pod/locale/fr/LC_MESSAGES/django.mo b/pod/locale/fr/LC_MESSAGES/django.mo index af5025d72e7021f26bc041c3d37528d49c2d8776..41a41c92ee21289ec76a108e9f20a5e873f763d3 100644 GIT binary patch delta 45155 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 QI!-&eL(NRM7;ahoKb!x`u>b%7 delta 44123 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

B-&_SzZMunkxO4`XSJQP#XQtD+X&2pd0uC5eB< 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 diff --git a/pod/locale/fr/LC_MESSAGES/django.po b/pod/locale/fr/LC_MESSAGES/django.po index 1c36b19a09..2ca1dcd508 100644 --- a/pod/locale/fr/LC_MESSAGES/django.po +++ b/pod/locale/fr/LC_MESSAGES/django.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Pod\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-05-06 12:37+0000\n" +"POT-Creation-Date: 2024-05-15 08:40+0200\n" "PO-Revision-Date: \n" "Last-Translator: obado \n" "Language-Team: Pod Team cotech-esup-pod@esup-portail.org\n" @@ -14,7 +14,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 3.4.2\n" +"X-Generator: Poedit 3.4.4\n" #: pod/authentication/admin.py pod/main/forms.py msgid "Email" @@ -7168,13 +7168,13 @@ msgid "Playlist: %(name)s" msgstr "Liste de lecture : %(name)s" #: pod/playlist/tests/test_views.py pod/playlist/views.py -msgid "The playlist has been deleted." -msgstr "La liste de lecture a été supprimée." - -#: pod/playlist/views.py msgid "You cannot access this playlist." msgstr "Vous ne pouvez pas accéder à cette liste de lecture." +#: pod/playlist/tests/test_views.py pod/playlist/views.py +msgid "The playlist has been deleted." +msgstr "La liste de lecture a été supprimée." + #: pod/playlist/views.py #, python-format msgid "Edit the playlist “%(pname)s”" @@ -8553,6 +8553,14 @@ msgstr "Catégorie" msgid "Categories" msgstr "Catégories" +#: pod/video/models.py pod/video/templates/videos/video_access_tokens.html +msgid "Token name" +msgstr "Nom du jeton" + +#: pod/video/models.py +msgid "Change me!" +msgstr "Changez-moi !" + #: pod/video/models.py msgid "Video access token" msgstr "Jeton d’accès à la vidéo" @@ -9323,6 +9331,10 @@ msgstr "Lien de partage" msgid "Code to embed in a web page" msgstr "Code à intégrer dans une page web" +#: pod/video/templates/videos/video_access_tokens.html +msgid "Update the token name" +msgstr "Modifier le nom du jeton" + #: pod/video/templates/videos/video_access_tokens.html msgid "Copy to clipboard" msgstr "Copier dans le presse-papiers" @@ -9335,6 +9347,35 @@ msgstr "Veuillez confirmer que vous souhaitez supprimer le jeton" msgid "Delete the token" msgstr "Supprimer le jeton" +#: pod/video/templates/videos/video_access_tokens.html +msgid "Tokens" +msgstr "Jetons" + +#: pod/video/templates/videos/video_access_tokens.html +msgid "When your video is in draft mode, you can share it using a token." +msgstr "" +"Lorsque votre vidéo est en mode brouillon, vous pouvez la partager en " +"utilisant un jeton." + +#: pod/video/templates/videos/video_access_tokens.html +msgid "" +"Add a token, then copy the direct link or link to insert. You can name your " +"token to identify it." +msgstr "" +"Ajouter un jeton, puis copier le lien direct ou le lien à insérer. Vous " +"pouvez nommer votre jeton pour l’identifier." + +#: pod/video/templates/videos/video_access_tokens.html +msgid "" +"It is possible to create several tokens, to be able to differentiate the " +"users who can access your video. When it is no longer necessary to grant " +"access to your users, simply delete the token(s) concerned." +msgstr "" +"Il est possible de créer plusieurs jetons, pour pouvoir différencier les " +"utilisateurs pouvant accéder à votre vidéo. Quand il n’est plus nécessaire " +"de laisser l’accès à vos utilisateurs, il suffit de supprimer le ou les " +"jetons concernés." + #: pod/video/templates/videos/video_collaborate.html msgid "Collaborate" msgstr "Collaborer" @@ -9706,6 +9747,10 @@ msgstr "Vous ne pouvez pas supprimer une vidéo en cours d’encodage." msgid "Manage access tokens for the video \"%(vtitle)s\"" msgstr "Gestion des jetons d’accès à la vidéo « %(vtitle)s »" +#: pod/video/views.py +msgid "The token has been updated." +msgstr "Le jeton a été modifié." + #: pod/video/views.py msgid "Transcription not enabled on this platform." msgstr "Transcription non activée sur cette plateforme." diff --git a/pod/locale/fr/LC_MESSAGES/djangojs.mo b/pod/locale/fr/LC_MESSAGES/djangojs.mo index 73922585177e7576d3db90e5a749764df06c79d5..62086694085624b97b7bdc478faa7d214b61dc9b 100644 GIT binary patch delta 484 zcmXBR&nv@m9LMq3_aJRwqoL5$#zA7%HK4BW8d1)QDaKg-E9A9x9+ZUx{oWTY@Vib=G{yx_QxgygK!6wcwNoDlV!FNpJ zU{UJBGWO#xnuZRs3ma%-6I<{ZP2CHQVs}Z3U>41~3Qpp7$@M!vBN!sM#~%E|4z!o0 zPK=-_Okfx@$lfZVxw(g9*u*LP#Vn>)q&eKj8@$Ch?yX8OJkK*Q2j5`;-!OD+YiA41(j`Tzg` delta 485 zcmXBR%_~Gv7{~G7Rg#&xO+!Makdhc<49RUMFEulU>m@a$>}F$0RyOxfP|CtBHO5{t zS+KB}y;)gcB|BShr6k|eU42f^InO!I^PI1W^$rtuW*-yyifN24NXIybH~5I%cvJ}PxhlvLG5ruI;{2ktfj*}29mlb6 zN$SK+jN=}ff)242Z!wH@Y{X|Yc`rDGZLZXXvuMt3;{@)wUQltFKtF+dY{yTGVq{rr z!8n@45sYC5xmzxp&V3xlI!@s)&Y-hGQ+R;ac!vqxUuAlDmS**u7S|>L*V-8fxY0WNte255y=%a{vGU diff --git a/pod/locale/fr/LC_MESSAGES/djangojs.po b/pod/locale/fr/LC_MESSAGES/djangojs.po index bd15b4f410..3d1ed470e2 100644 --- a/pod/locale/fr/LC_MESSAGES/djangojs.po +++ b/pod/locale/fr/LC_MESSAGES/djangojs.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Esup-Pod\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-05-06 12:38+0000\n" +"POT-Creation-Date: 2024-05-15 08:40+0200\n" "PO-Revision-Date: \n" "Last-Translator: obado \n" "Language-Team: \n" @@ -14,7 +14,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Poedit 3.4.2\n" +"X-Generator: Poedit 3.4.4\n" #: pod/chapter/static/js/chapters.js pod/enrichment/static/js/enrichment.js msgid "Get time from the player" @@ -459,7 +459,7 @@ msgstr "Changer votre image" msgid "Add your picture" msgstr "Ajouter votre image" -#: pod/main/static/js/main.js +#: pod/main/static/js/main.js pod/video/static/js/video-access-token.js msgid "Text copied" msgstr "Texte copié" @@ -884,7 +884,7 @@ msgstr "Supprimer la catégorie" #: pod/video/static/js/video_category.js msgid "Success!" -msgstr "Succès !" +msgstr "Succès !" #: pod/video/static/js/video_category.js msgid "Error…" diff --git a/pod/locale/nl/LC_MESSAGES/django.mo b/pod/locale/nl/LC_MESSAGES/django.mo index a48f9d110502d8db88b97270d1154c46a6963018..d563585c6ab697cb27ed30d8a20aa445aa00a723 100644 GIT binary patch delta 29 kcmZqXZ|2`n%ED!;YiO!qU}\n" "Language-Team: \n" "Language: nl_NL\n" @@ -14,7 +14,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 3.4.2\n" +"X-Generator: Poedit 3.4.4\n" #: pod/authentication/admin.py pod/main/forms.py msgid "Email" @@ -6699,11 +6699,11 @@ msgid "Playlist: %(name)s" msgstr "" #: pod/playlist/tests/test_views.py pod/playlist/views.py -msgid "The playlist has been deleted." +msgid "You cannot access this playlist." msgstr "" -#: pod/playlist/views.py -msgid "You cannot access this playlist." +#: pod/playlist/tests/test_views.py pod/playlist/views.py +msgid "The playlist has been deleted." msgstr "" #: pod/playlist/views.py @@ -7956,6 +7956,14 @@ msgstr "" msgid "Categories" msgstr "" +#: pod/video/models.py pod/video/templates/videos/video_access_tokens.html +msgid "Token name" +msgstr "" + +#: pod/video/models.py +msgid "Change me!" +msgstr "" + #: pod/video/models.py msgid "Video access token" msgstr "" @@ -8686,6 +8694,10 @@ msgstr "" msgid "Code to embed in a web page" msgstr "" +#: pod/video/templates/videos/video_access_tokens.html +msgid "Update the token name" +msgstr "" + #: pod/video/templates/videos/video_access_tokens.html msgid "Copy to clipboard" msgstr "" @@ -8698,6 +8710,27 @@ msgstr "" msgid "Delete the token" msgstr "" +#: pod/video/templates/videos/video_access_tokens.html +msgid "Tokens" +msgstr "" + +#: pod/video/templates/videos/video_access_tokens.html +msgid "When your video is in draft mode, you can share it using a token." +msgstr "" + +#: pod/video/templates/videos/video_access_tokens.html +msgid "" +"Add a token, then copy the direct link or link to insert. You can name your " +"token to identify it." +msgstr "" + +#: pod/video/templates/videos/video_access_tokens.html +msgid "" +"It is possible to create several tokens, to be able to differentiate the " +"users who can access your video. When it is no longer necessary to grant " +"access to your users, simply delete the token(s) concerned." +msgstr "" + #: pod/video/templates/videos/video_collaborate.html msgid "Collaborate" msgstr "" @@ -9056,6 +9089,10 @@ msgstr "" msgid "Manage access tokens for the video \"%(vtitle)s\"" msgstr "" +#: pod/video/views.py +msgid "The token has been updated." +msgstr "" + #: pod/video/views.py msgid "Transcription not enabled on this platform." msgstr "" diff --git a/pod/locale/nl/LC_MESSAGES/djangojs.po b/pod/locale/nl/LC_MESSAGES/djangojs.po index 3ead1648ae..b8fa1daf28 100644 --- a/pod/locale/nl/LC_MESSAGES/djangojs.po +++ b/pod/locale/nl/LC_MESSAGES/djangojs.po @@ -5,7 +5,7 @@ msgid "" msgstr "" "Project-Id-Version: Esup-Pod\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2024-05-06 12:38+0000\n" +"POT-Creation-Date: 2024-05-15 08:40+0200\n" "PO-Revision-Date: 2024-04-15 14:27+0200\n" "Last-Translator: obado \n" "Language-Team: \n" @@ -437,7 +437,7 @@ msgstr "" msgid "Add your picture" msgstr "" -#: pod/main/static/js/main.js +#: pod/main/static/js/main.js pod/video/static/js/video-access-token.js msgid "Text copied" msgstr "" diff --git a/pod/video/admin.py b/pod/video/admin.py index c8158ae795..65ecc42f41 100644 --- a/pod/video/admin.py +++ b/pod/video/admin.py @@ -676,7 +676,7 @@ def videos_count(self, obj) -> int: class VideoAccessTokenAdmin(admin.ModelAdmin): """Admin for the VideoAccessToken model.""" - list_display = ("video", "token") + list_display = ("video", "token", "name") readonly_fields = ("token",) autocomplete_fields = ["video"] diff --git a/pod/video/models.py b/pod/video/models.py index fc10de35bc..24f6de1434 100644 --- a/pod/video/models.py +++ b/pod/video/models.py @@ -1839,6 +1839,9 @@ class VideoAccessToken(models.Model): video = models.ForeignKey(Video, on_delete=models.CASCADE) token = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) + name = models.CharField( + verbose_name=_("Token name"), max_length=100, blank=True, default=_("Change me!") + ) class Meta: """Video access token Metadata.""" diff --git a/pod/video/static/js/video-access-token.js b/pod/video/static/js/video-access-token.js new file mode 100644 index 0000000000..a5aba6b8be --- /dev/null +++ b/pod/video/static/js/video-access-token.js @@ -0,0 +1,42 @@ +/** + * @file Esup-Pod script for video access token. + * @since 3.6.1 + */ + +const tokenNameForms = document.getElementsByClassName("token-name-form"); +for (let tokenNameForm of tokenNameForms) { + let tokenNameFormInput = tokenNameForm.querySelector( + ".token-name-form-input", + ); + let tokenNameFormButton = tokenNameForm.querySelector( + ".token-name-form-button", + ); + let initialName = tokenNameFormInput.value; + tokenNameFormButton.disabled = true; + + tokenNameFormInput.addEventListener("input", function () { + if ( + tokenNameFormInput.value === initialName || + tokenNameFormInput.value === "" + ) { + tokenNameFormButton.disabled = true; + } else { + tokenNameFormButton.disabled = false; + } + }); +} + +const btnPrivateShare = document.getElementsByClassName("btn-private-share"); +for (let i = 0; i < btnPrivateShare.length; i++) { + let btn = btnPrivateShare[i]; + btn.addEventListener("click", function () { + var copyText = document.getElementById(btn.dataset.id); + copyText.select(); + if (!navigator.clipboard) { + document.execCommand("copy"); + } else { + navigator.clipboard.writeText(copyText.value); + } + showalert(gettext("Text copied"), "alert-info"); + }); +} diff --git a/pod/video/templates/videos/video_access_tokens.html b/pod/video/templates/videos/video_access_tokens.html index 4bd06e8923..684ac9566d 100644 --- a/pod/video/templates/videos/video_access_tokens.html +++ b/pod/video/templates/videos/video_access_tokens.html @@ -14,86 +14,102 @@ {% endblock %} {% block page_content %} -

+
{% csrf_token %}
-
-{% if tokens %} -
- - - - - - - - - - - - {% for token in tokens %} - - - - - - - {% endfor %} - -
{% trans "List of active tokens:" %}
 {% trans "Token" %} {% trans 'Share link' %} {% trans 'Code to embed in a web page' %}
 {{ token.token }} -
- - -
-
-
- - -
-
- {% trans "Please confirm you want to delete the token" as confirmDelete %} -
- {% csrf_token %} - - - -
-
-
-{% endif %} +
+ {% if tokens %} +
+ + + + + + + + + + + + + {% for token in tokens %} + + + + + + + + {% endfor %} + +
{% trans "List of active tokens:" %}
 {% trans "Token name" %} {% trans "Token" %} {% trans 'Share link' %} {% trans 'Code to embed in a web page' %}
+
+ {% csrf_token %} + + + + + +
+
 {{ token.token }} +
+ + +
+
+
+ + +
+
+ {% trans "Please confirm you want to delete the token" as confirmDelete %} +
+ {% csrf_token %} + + + +
+
+
+ {% endif %} {% endblock page_content %} -{% block collapse_page_aside %}{% endblock collapse_page_aside %} -{% block page_aside %}{% endblock page_aside %} +{% block collapse_page_aside %} + {{ block.super }} +{% endblock collapse_page_aside %} + +{% block page_aside %} +
+

{% trans "Tokens" %}

+
+

{% trans "When your video is in draft mode, you can share it using a token." %}

+

{% trans "Add a token, then copy the direct link or link to insert. You can name your token to identify it." %}

+

{% trans "It is possible to create several tokens, to be able to differentiate the users who can access your video. When it is no longer necessary to grant access to your users, simply delete the token(s) concerned." %}

+

+
+{% endblock page_aside %} {% block more_script %} - + {% endblock more_script %} diff --git a/pod/video/views.py b/pod/video/views.py index a4bf7fe0cc..e0363e6978 100644 --- a/pod/video/views.py +++ b/pod/video/views.py @@ -1428,18 +1428,24 @@ def video_edit_access_tokens(request: WSGIRequest, slug: str = None): messages.add_message(request, messages.ERROR, _("You cannot edit this video.")) raise PermissionDenied if request.method == "POST": - if request.POST.get("action") and request.POST.get("action") in ["add", "delete"]: + if request.POST.get("action") and request.POST.get("action") in { + "add", + "delete", + "update", + }: if request.POST["action"] == "add": VideoAccessToken.objects.create(video=video) messages.add_message( request, messages.SUCCESS, _("A token has been created.") ) + elif request.POST["action"] == "delete" and request.POST.get("token"): + token = request.POST.get("token") + delete_token(request, video, token) + elif request.POST["action"] == "update": + token = request.POST.get("token") + update_token(request, video, token) else: - if request.POST["action"] == "delete" and request.POST.get("token"): - token = request.POST.get("token") - delete_token(request, video, token) - else: - messages.add_message(request, messages.ERROR, _("Token not found.")) + messages.add_message(request, messages.ERROR, _("Token not found.")) else: messages.add_message( request, messages.ERROR, _("An action must be specified.") @@ -1467,6 +1473,17 @@ def delete_token(request, video: Video, token: VideoAccessToken): messages.add_message(request, messages.ERROR, _("Token not found.")) +def update_token(request, video: Video, token: VideoAccessToken): + """update token name for the video if exist.""" + try: + Token = VideoAccessToken.objects.get(video=video, token=token) + Token.name = request.POST.get("name") + Token.save() + messages.add_message(request, messages.SUCCESS, _("The token has been updated.")) + except (ValueError, ObjectDoesNotExist): + messages.add_message(request, messages.ERROR, _("Token not found.")) + + @csrf_protect @login_required(redirect_field_name="referrer") def video_transcript(request, slug=None):