From 559368953e5c06fad31d3a465966e0504a0bf260 Mon Sep 17 00:00:00 2001 From: Madison Scott-Clary Date: Fri, 11 Nov 2016 17:59:40 -0700 Subject: [PATCH] Flags on all available/pertinent models --- Makefile | 2 +- administration/flag_views.py | 21 +++++++-- core/templates/base.html | 64 ++++++++++++++++++--------- models.png | Bin 1023027 -> 1285366 bytes sloc.tsv | 10 ++--- social/tests.py | 7 +-- submissions/form_extras.py | 17 +++++++ usermgmt/models.py | 6 +++ usermgmt/templates/view_profile.html | 29 +++++++++++- usermgmt/views.py | 22 ++++----- 10 files changed, 132 insertions(+), 46 deletions(-) create mode 100644 submissions/form_extras.py diff --git a/Makefile b/Makefile index cdc9c09..6e89f71 100644 --- a/Makefile +++ b/Makefile @@ -104,7 +104,7 @@ metadata: ## Get metadata about the project (sloc, models, urls) | grep -v migrations \ | grep -E '(.py|.html|.md|Makefile|sh)' \ | xargs python sloc.py > sloc.tsv - venv/bin/python manage.py graph_models -a -o models.png + venv/bin/python manage.py graph_models -g -a -o models.png venv/bin/python manage.py show_urls > urls.tsv .PHONY: clean diff --git a/administration/flag_views.py b/administration/flag_views.py index 77c37f3..1b90009 100644 --- a/administration/flag_views.py +++ b/administration/flag_views.py @@ -89,13 +89,19 @@ def create_flag(request): ), }, status=403) - # Retrieve the content type and object + # Retrieve the content type, object, and, if possible, the object's owner parts = request.GET.get('content_type').split(':') ctype = get_object_or_404(ContentType, app_label=parts[0], model=parts[1]) obj = ctype.get_object_for_this_type(pk=request.GET.get('object_id')) + if hasattr(obj, 'owner'): + owner = obj.owner + elif hasattr(obj, 'user'): + owner = obj.user + else: + owner = None # Ensure that we can flag the given object - if hasattr(obj, 'owner') and obj.owner == request.user: + if owner == request.user: return render(request, 'permission_denied.html', { 'title': 'Permission denied', 'additional_error': 'You cannot flag your own objects', @@ -112,12 +118,19 @@ def create_flag(request): flag = form.save(commit=False) flag.flagged_by = request.user flag.flagged_object_owner = (request.user if not - hasattr(flag.object_model, 'owner') - else flag.object_model.owner) + owner else owner) flag.save() form.save_m2m() flag.participants.add(request.user) flag.participants.add(flag.flagged_object_owner) + + # Notify the object owner if one exists + if owner != request.user: + Notification( + source=flag.flagged_by, + target=flag.flagged_object_owner, + notification_type=Notification.FLAG_CREATED_AGAINST + ).save() return redirect(flag.get_absolute_url()) return render(request, 'create_flag.html', { 'title': 'Flag {}'.format(ctype.model), diff --git a/core/templates/base.html b/core/templates/base.html index 0fa0a7b..b38e668 100644 --- a/core/templates/base.html +++ b/core/templates/base.html @@ -62,21 +62,49 @@