From d019e81f466d42d5e965bbba68f3216940916925 Mon Sep 17 00:00:00 2001 From: "p.fherrma" Date: Mon, 1 Jun 2020 12:56:26 +0200 Subject: [PATCH 1/4] fix(UIUX): redesign of access request notification --- .../ddcomments/_notification_card.html | 28 +++++++++++++++---- 1 file changed, 22 insertions(+), 6 deletions(-) diff --git a/discuss_data/templates/ddcomments/_notification_card.html b/discuss_data/templates/ddcomments/_notification_card.html index cc022ae..036f9bb 100644 --- a/discuss_data/templates/ddcomments/_notification_card.html +++ b/discuss_data/templates/ddcomments/_notification_card.html @@ -7,15 +7,21 @@ {% include 'ddusers/_user-image.html' with user_uuid=comment.owner.uuid user_photo=comment.owner.photo %}
- {{ comment.get_notification_type_display }} {{ comment.owner.get_academic_name }} {% if comment.recipient %}{% trans 'to' %} {{ comment.recipient.get_academic_name }}{% endif %} {{ comment.date_added | naturaltime }} +

{{ comment.get_notification_type_display }} {{ comment.owner.get_academic_name }} {% if comment.recipient %}{% trans 'to' %} {{ comment.recipient.get_academic_name }} {% endif %} {{ comment.date_added | naturaltime }}

-
- {{ comment.text|linebreaks }} + {% if comment.get_notification_type_display == "access request" %} +
+ {% trans 'Access request for' %} {{ comment.content_object }} +
+ {% endif %} +
{% if comment.get_notification_type_display == "access request" %} - {{ comment.content_object }} - -
+
+
+ {{ comment.text|linebreaks }} +
+
{% if comment.content_object|user_has_restricted_access:comment.owner %} {% elif comment.content_object|user_has_admin_right:request.user %} @@ -26,8 +32,12 @@ +
{% endif %}
+
+ {% else %} + {{ comment.text|linebreaks }} {% endif %}
@@ -36,6 +46,12 @@ {% trans "Created at" %}: {{ comment.date_added|date:"d M, h:i A (Y)" }}{% if comment.date_edited|date:"d M Y h i s" != comment.date_added|date:"d M Y h i s" %}, {% trans "edited at" %}: {{ comment.date_edited|date:"d M, h:i A (Y)" }}{% endif %} + {% if comment.get_notification_type_display == "access request" %} +
+ +
+ {% endif %} + {% comment %} No deleting or editing of notification (operates like email) -- GitLab From 524d8313119412ad86f616a7d1a38f2758d8d63f Mon Sep 17 00:00:00 2001 From: "p.fherrma" Date: Mon, 1 Jun 2020 14:30:05 +0200 Subject: [PATCH 2/4] feat(access): add model for dataset access requests --- .../migrations/0015_datasetaccessrequest.py | 27 +++++++++++++++++++ discuss_data/dddatasets/models.py | 19 +++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 discuss_data/dddatasets/migrations/0015_datasetaccessrequest.py diff --git a/discuss_data/dddatasets/migrations/0015_datasetaccessrequest.py b/discuss_data/dddatasets/migrations/0015_datasetaccessrequest.py new file mode 100644 index 0000000..519500f --- /dev/null +++ b/discuss_data/dddatasets/migrations/0015_datasetaccessrequest.py @@ -0,0 +1,27 @@ +# Generated by Django 2.2.12 on 2020-06-01 11:42 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion +import uuid + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('dddatasets', '0014_auto_20200520_1457'), + ] + + operations = [ + migrations.CreateModel( + name='DataSetAccessRequest', + fields=[ + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('uuid', models.UUIDField(default=uuid.uuid4, editable=False)), + ('created_at', models.DateTimeField(auto_now_add=True)), + ('dataset', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='dddatasets.DataSet')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), + ], + ), + ] diff --git a/discuss_data/dddatasets/models.py b/discuss_data/dddatasets/models.py index d0b033b..c77e6a5 100644 --- a/discuss_data/dddatasets/models.py +++ b/discuss_data/dddatasets/models.py @@ -330,6 +330,19 @@ class DataSetExternalLink(models.Model): return self.site_title +class DataSetAccessRequest(models.Model): + uuid = models.UUIDField(default=uuid.uuid4, editable=False) + dataset = models.ForeignKey("DataSet", on_delete=models.CASCADE) + user = models.ForeignKey(User, on_delete=models.CASCADE) + created_at = models.DateTimeField(auto_now_add=True) + + def __str__(self): + ar_string = "Access request to {} for {} pending since {}".format( + self.dataset, self.user, self.created_at.strftime("%d.%m.%Y, %H:%M:%S") + ) + return _(ar_string) + + class DataSet(models.Model): OPEN_ACCESS = "OA" METADATA_ONLY = "MO" @@ -475,6 +488,12 @@ class DataSet(models.Model): class Meta: permissions = (("ra_view_dataset", "View data set in restricted access mode"),) + def get_all_access_requests(self): + return DataSetAccessRequest.objects.filter(dataset=self) + + def get_access_request(self, user): + return DataSetAccessRequest.objects.filter(dataset=self, user=user).first() + def clear_user_permissions(self, user): for perm in get_perms(user, self): remove_perm(perm, user, self) -- GitLab From 3a8ded48ce94c1fca0d5dfbfbcfc61b1edc8fe3a Mon Sep 17 00:00:00 2001 From: "p.fherrma" Date: Mon, 1 Jun 2020 14:32:42 +0200 Subject: [PATCH 3/4] feat(access): create and delete access request instances --- discuss_data/dddatasets/views.py | 17 +++++++++--- discuss_data/dddatasets/views_prep.py | 6 ++++- .../prep/dataset_edit_publish_access.html | 27 ++++++++++++++++++- 3 files changed, 45 insertions(+), 5 deletions(-) diff --git a/discuss_data/dddatasets/views.py b/discuss_data/dddatasets/views.py index b95f7c0..ccffa97 100644 --- a/discuss_data/dddatasets/views.py +++ b/discuss_data/dddatasets/views.py @@ -31,6 +31,7 @@ from discuss_data.dddatasets.models import ( DataSet, DataSetManagementObject, DataFile, + DataSetAccessRequest, ) from discuss_data.dddatasets.utils import check_published, create_pdf @@ -179,17 +180,27 @@ def dataset_access_request(request, uuid): comment.content_type = ContentType.objects.get_for_model(ds) comment.object_id = ds.id comment.save() + access_request = DataSetAccessRequest(dataset=ds, user=request.user) + access_request.save() return HttpResponse( ''.format( - _("Access request sent to the Datasets administrators") + access_request ) ) else: messages.warning(request, form.errors) else: - initial = {"text": "Please grant me access to this Dataset"} - form = AccessRequestForm(initial=initial) + access_request = ds.get_access_request(request.user) + if access_request: + return HttpResponse( + ''.format( + access_request + ) + ) + else: + initial = {"text": "Please grant me access to this Dataset"} + form = AccessRequestForm(initial=initial) return render( request, "ddcomments/_notification_add.html", diff --git a/discuss_data/dddatasets/views_prep.py b/discuss_data/dddatasets/views_prep.py index 319d57d..d5dbd0d 100644 --- a/discuss_data/dddatasets/views_prep.py +++ b/discuss_data/dddatasets/views_prep.py @@ -536,8 +536,10 @@ def prep_dataset_edit_access_user(request, ds_uuid): public=False, ) elif perm_code == "acc": + access_request = ds.get_access_request(user) logger.debug("assigning perms for", user) ds.assign_user_permissions(user, "ra_view_dataset") + ds.save() action.send( request.user, verb="granted access", @@ -545,7 +547,9 @@ def prep_dataset_edit_access_user(request, ds_uuid): target=user, public=False, ) - ds.save() + if access_request: + access_request.delete() + else: logger.error("requested non existing perm_code", perm_code, exc_info=1) if feed: diff --git a/discuss_data/templates/dddatasets/prep/dataset_edit_publish_access.html b/discuss_data/templates/dddatasets/prep/dataset_edit_publish_access.html index 245a1b1..661734f 100644 --- a/discuss_data/templates/dddatasets/prep/dataset_edit_publish_access.html +++ b/discuss_data/templates/dddatasets/prep/dataset_edit_publish_access.html @@ -1,5 +1,5 @@ {% extends request.is_intercooler|yesno:"blank.html,dddatasets/_base_datasets_edit.html" %} -{% load static i18n crispy_forms_tags %} +{% load static i18n crispy_forms_tags core_tags humanize %} {% block ic-content %} @@ -116,6 +116,31 @@ {% endif %}

{% trans "Grant users access to the published dataset" %}

+ +
{% trans 'Access requests' %}
+ {% if ds.get_all_access_requests %} +
    + {% for access_request in ds.get_all_access_requests %} +
  • + {{ access_request.user }} {% trans 'requested access to this dataset' %} {{ access_request.created_at | naturaltime }} + {% if ds|user_has_restricted_access:access_request.user %} + + {% elif ds|user_has_admin_right:request.user %} +
    + {% csrf_token %} + + + +
    + {% endif %} +
  • + {% endfor %} +
+ {% else %} +

{% trans 'No access requests pending at this time' %} + {% endif %} + +

{% trans 'Search for users' %}
-- GitLab From 6d26ee5adb91061fb4774bfb3114a8f7b6ece95d Mon Sep 17 00:00:00 2001 From: "p.fherrma" Date: Mon, 1 Jun 2020 14:33:54 +0200 Subject: [PATCH 4/4] fix(notifications): fix HTML layout for notification --- discuss_data/templates/ddcomments/_notification_card.html | 1 - 1 file changed, 1 deletion(-) diff --git a/discuss_data/templates/ddcomments/_notification_card.html b/discuss_data/templates/ddcomments/_notification_card.html index 036f9bb..f257f81 100644 --- a/discuss_data/templates/ddcomments/_notification_card.html +++ b/discuss_data/templates/ddcomments/_notification_card.html @@ -32,7 +32,6 @@ -
{% endif %} -- GitLab