mirror of
https://github.com/Southampton-RSG/breccia-mapper.git
synced 2026-03-03 03:17:07 +00:00
[FEAT] Allow admins to manage relationships for all Persons
All Persons now have associated Users, meaning Users can be hijacked by admins to manage the relationships for the associated Person.
This commit is contained in:
@@ -10,7 +10,11 @@
|
|||||||
</ol>
|
</ol>
|
||||||
</nav>
|
</nav>
|
||||||
|
|
||||||
<h1>New Person</h1>
|
{% if request.user.has_person %}
|
||||||
|
<h1>New Person</h1>
|
||||||
|
{% else %}
|
||||||
|
<h1>Create Your Profile</h1>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<hr>
|
<hr>
|
||||||
|
|
||||||
|
|||||||
@@ -73,8 +73,8 @@
|
|||||||
{% if request.user.is_superuser and person.user and person.user != request.user %}
|
{% if request.user.is_superuser and person.user and person.user != request.user %}
|
||||||
<form action="{% url 'hijack:acquire' %}" method="POST">
|
<form action="{% url 'hijack:acquire' %}" method="POST">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<input type="hidden" name="user_pk" value="{{ person.pk }}">
|
<input type="hidden" name="user_pk" value="{{ person.user.pk }}">
|
||||||
<button class="btn btn-warning" type="submit">Become {{ person.name }}</button>
|
<button class="btn btn-warning" type="submit">Become {{ person.name }}</button>
|
||||||
<input type="hidden" name="next" value="{{ request.path }}">
|
<input type="hidden" name="next" value="{{ request.path }}">
|
||||||
</form>
|
</form>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -14,6 +14,12 @@ from django.views.generic import CreateView, DetailView, ListView, UpdateView
|
|||||||
from people import forms, models, permissions
|
from people import forms, models, permissions
|
||||||
from .map import get_map_data
|
from .map import get_map_data
|
||||||
|
|
||||||
|
from random import randint
|
||||||
|
|
||||||
|
from django.contrib.auth import get_user_model
|
||||||
|
|
||||||
|
User = get_user_model() # pylint: disable=invalid-name
|
||||||
|
|
||||||
|
|
||||||
class PersonCreateView(LoginRequiredMixin, CreateView):
|
class PersonCreateView(LoginRequiredMixin, CreateView):
|
||||||
"""View to create a new instance of :class:`Person`.
|
"""View to create a new instance of :class:`Person`.
|
||||||
@@ -27,9 +33,18 @@ class PersonCreateView(LoginRequiredMixin, CreateView):
|
|||||||
def form_valid(self, form):
|
def form_valid(self, form):
|
||||||
try:
|
try:
|
||||||
self.request.user.person
|
self.request.user.person
|
||||||
|
# user already has associated person
|
||||||
|
# assign newly created user, required for user hijacking
|
||||||
|
# so admins can manage relationships of all people
|
||||||
|
random_int = randint(0,999999999)
|
||||||
|
while User.objects.filter(username='autogen_'+str(random_int)):
|
||||||
|
random_int += 1
|
||||||
|
|
||||||
|
form.instance.user = User.objects.create_user('autogen_' + str(random_int))
|
||||||
|
form.instance.user.consent_given = self.request.user.consent_given
|
||||||
|
form.instance.user.save()
|
||||||
except ObjectDoesNotExist:
|
except ObjectDoesNotExist:
|
||||||
if 'user' in self.request.GET:
|
form.instance.user = self.request.user
|
||||||
form.instance.user = self.request.user
|
|
||||||
|
|
||||||
return super().form_valid(form)
|
return super().form_valid(form)
|
||||||
|
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ class RelationshipCreateView(LoginRequiredMixin, RedirectView):
|
|||||||
|
|
||||||
except ObjectDoesNotExist:
|
except ObjectDoesNotExist:
|
||||||
# User has no linked Person yet
|
# User has no linked Person yet
|
||||||
return reverse('people:person.create') + '?user'
|
return reverse('people:person.create')
|
||||||
|
|
||||||
return reverse('people:relationship.update',
|
return reverse('people:relationship.update',
|
||||||
kwargs={'pk': relationship.pk})
|
kwargs={'pk': relationship.pk})
|
||||||
|
|||||||
Reference in New Issue
Block a user