Browse Source

Display agreements in user admin

Rafał Pitoń 6 years ago
parent
commit
3dfea59dcc

+ 1 - 1
misago/legal/migrations/0002_agreement_useragreement.py

@@ -44,7 +44,7 @@ class Migration(migrations.Migration):
                 ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
                 ('user', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
             ],
             ],
             options={
             options={
-                'ordering': ['-accepted_on'],
+                'ordering': ['-pk'],
             },
             },
         ),
         ),
     ]
     ]

+ 2 - 2
misago/legal/models.py

@@ -90,10 +90,10 @@ class UserAgreement(models.Model):
     user = models.ForeignKey(
     user = models.ForeignKey(
         settings.AUTH_USER_MODEL,
         settings.AUTH_USER_MODEL,
         blank=True,
         blank=True,
-        null=True
+        null=True,
     )
     )
     agreement = models.ForeignKey(Agreement, related_name='accepted_by')
     agreement = models.ForeignKey(Agreement, related_name='accepted_by')
     accepted_on = models.DateTimeField(default=timezone.now)
     accepted_on = models.DateTimeField(default=timezone.now)
 
 
     class Meta:
     class Meta:
-        ordering = ["-accepted_on"]
+        ordering = ["-pk"]

+ 31 - 0
misago/templates/misago/admin/users/edit.html

@@ -212,6 +212,37 @@ class="form-horizontal"
     {% endif %}
     {% endif %}
 
 
   </fieldset>
   </fieldset>
+  <fieldset>
+    <legend>{% trans "Agreements" %}</legend>
+    <table class="table table-condensed">
+      <thead>
+        <tr>
+          <th>{% trans "Agreement" %}</th>
+          <th style="width: 250px;">{% trans "Accepted on" %}</th>
+        </tr>
+      </thead>
+      <tbody>
+        {% for agreement in target.useragreement_set.select_related.iterator %}
+          <tr>
+            <td>
+              <a href="{% url 'misago:admin:users:agreements:edit' pk=agreement.agreement_id %}">
+                {{ agreement.agreement.get_final_title }}
+              </a>
+            </td>
+            <td>
+              <abbr class="moment" data-iso="{{ agreement.accepted_on.isoformat }}" data-format="LL"></abbr>
+            </td>
+          </tr>
+        {% empty %}
+          <tr>
+            <td colspan="2">
+              {% trans "This user didn't accept any agreements." %}
+            </td>
+          </tr>
+        {% endfor %}
+      </tbody>
+    </table>
+  </fieldset>
   {% endwith %}
   {% endwith %}
 </div>
 </div>
 {% endblock form-body %}
 {% endblock form-body %}

+ 28 - 0
misago/users/tests/test_useradmin_views.py

@@ -6,6 +6,8 @@ from django.utils import six
 from misago.acl.models import Role
 from misago.acl.models import Role
 from misago.admin.testutils import AdminTestCase
 from misago.admin.testutils import AdminTestCase
 from misago.categories.models import Category
 from misago.categories.models import Category
+from misago.legal.models import Agreement
+from misago.legal.utils import save_user_agreement_acceptance
 from misago.threads.testutils import post_thread, reply_thread
 from misago.threads.testutils import post_thread, reply_thread
 from misago.users.datadownloads import request_user_data_download
 from misago.users.datadownloads import request_user_data_download
 from misago.users.models import Ban, DataDownload, Rank
 from misago.users.models import Ban, DataDownload, Rank
@@ -1041,6 +1043,32 @@ class UserAdminViewsTests(AdminTestCase):
         updated_user = UserModel.objects.get(pk=test_user.pk)
         updated_user = UserModel.objects.get(pk=test_user.pk)
         self.assertFalse(updated_user.has_usable_password())
         self.assertFalse(updated_user.has_usable_password())
 
 
+    def test_edit_agreements_list(self):
+        """edit view displays list of user's agreements"""
+        test_user = UserModel.objects.create_user('Bob', 'bob@test.com', 'pass123')
+        test_link = reverse(
+            'misago:admin:users:accounts:edit', kwargs={
+                'pk': test_user.pk,
+            }
+        )
+
+        agreement = Agreement.objects.create(
+            type=Agreement.TYPE_TOS,
+            title="Test agreement!",
+            text="Lorem ipsum!",
+            is_active=True,
+        )
+
+        response = self.client.get(test_link)
+        self.assertEqual(response.status_code, 200)
+        self.assertNotContains(response, agreement.title)
+
+        save_user_agreement_acceptance(test_user, agreement, commit=True)
+
+        response = self.client.get(test_link)
+        self.assertEqual(response.status_code, 200)
+        self.assertContains(response, agreement.title)
+
     def test_delete_threads_view_self(self):
     def test_delete_threads_view_self(self):
         """delete user threads view validates if user deletes self"""
         """delete user threads view validates if user deletes self"""
         test_link = reverse(
         test_link = reverse(