diff --git a/profiles/templates/profiles/_profile_card.html b/profiles/templates/profiles/_profile_card.html index 1a6c72672eed64e0a2d50f141e61fd281d909297..6646b83f3f8e3d6d54035ff9efe9022e821cdb4a 100644 --- a/profiles/templates/profiles/_profile_card.html +++ b/profiles/templates/profiles/_profile_card.html @@ -11,6 +11,10 @@ {% if profile.webpage %}<a href="{{ profile.webpage }}" target="_blank">webpage</a> {% else %}No personal webpage given {% endif %} + {% if profile.contributor %} + <br/> + Registered as Contributor (see <a href="{% url 'scipost:contributor_info' contributor_id=profile.contributor.id %}">info page</a>) + {% endif %} </p> </div> <div class="col-6"> diff --git a/profiles/urls.py b/profiles/urls.py index 01f07bc870dfcb82b1b1d30e83abd93ae48b1c91..047dcb44d1dda5d4ccc3f336500ae852adea05a4 100644 --- a/profiles/urls.py +++ b/profiles/urls.py @@ -8,7 +8,7 @@ from . import views urlpatterns = [ url( - r'^add/$', + r'^add/((?P<from_type>[a-z]+)/(?P<pk>[0-9]+))?$', views.ProfileCreateView.as_view(), name='profile_create' ), diff --git a/profiles/views.py b/profiles/views.py index 767a2f1ab458008e81a904cf2698f99214e6ca66..4b0cd5c708059bc7cd67970366074413abfc273f 100644 --- a/profiles/views.py +++ b/profiles/views.py @@ -3,12 +3,13 @@ __license__ = "AGPL v3" from django.core.urlresolvers import reverse_lazy -from django.shortcuts import render +from django.shortcuts import get_object_or_404, render from django.views.generic.edit import CreateView, UpdateView, DeleteView from django.views.generic.list import ListView from scipost.constants import SCIPOST_SUBJECT_AREAS from scipost.mixins import PermissionsMixin +from scipost.models import Contributor from .models import Profile from .forms import ProfileForm @@ -23,6 +24,29 @@ class ProfileCreateView(PermissionsMixin, CreateView): template_name = 'profiles/profile_form.html' success_url = reverse_lazy('profiles:profiles') + def get_initial(self): + """ + Provide initial data based on kwargs. + The data can come from a Contributor, Invitation, UnregisteredAuthor, ... + """ + initial = super().get_initial() + from_type = self.kwargs.get('from_type', None) + pk = self.kwargs.get('pk', None) + if pk: + pk = int(pk) + if from_type == 'contributor': + contributor = get_object_or_404(Contributor, pk=pk) + initial['title'] = contributor.title + initial['first_name'] = contributor.user.first_name + initial['last_name'] = contributor.user.last_name + initial['email'] = contributor.user.email + initial['discipline'] = contributor.discipline + initial['expertises'] = contributor.expertises + initial['orcid_id'] = contributor.orcid_id + initial['webpage'] = contributor.personalwebpage + initial['accepts_SciPost_emails'] = contributor.accepts_SciPost_emails + return initial + class ProfileUpdateView(PermissionsMixin, UpdateView): """ diff --git a/scipost/__init__.py b/scipost/__init__.py index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..ba7a401eccd714a2ae882b411a299c3dec0511a3 100644 --- a/scipost/__init__.py +++ b/scipost/__init__.py @@ -0,0 +1,5 @@ +__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)" +__license__ = "AGPL v3" + + +default_app_config = 'scipost.apps.SciPostConfig' diff --git a/scipost/apps.py b/scipost/apps.py new file mode 100644 index 0000000000000000000000000000000000000000..dc85270be540e04f9e27b56e78435f2e25c5bc66 --- /dev/null +++ b/scipost/apps.py @@ -0,0 +1,18 @@ +__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)" +__license__ = "AGPL v3" + + +from django.apps import AppConfig +from django.db.models.signals import post_save + + +class SciPostConfig(AppConfig): + name = 'scipost' + + def ready(self): + super().ready() + + from . import signals + from profiles.models import Profile + post_save.connect(signals.link_created_profile_to_contributor, + sender=Profile) diff --git a/scipost/signals.py b/scipost/signals.py new file mode 100644 index 0000000000000000000000000000000000000000..0b525541e71290fd9f0d2399579093d9a0e3e912 --- /dev/null +++ b/scipost/signals.py @@ -0,0 +1,21 @@ +__copyright__ = "Copyright 2016-2018, Stichting SciPost (SciPost Foundation)" +__license__ = "AGPL v3" + + +from django.core.exceptions import ObjectDoesNotExist +from django.db.models.signals import post_save +from django.dispatch import receiver + +from profiles.models import Profile + +from .models import Contributor + + +@receiver(post_save, sender=Profile) +def link_created_profile_to_contributor(sender, instance, created, **kwargs): + """ + When a new Profile is created, it is linked to the corresponding + existing Contributor object. + """ + if created: + Contributor.objects.filter(user__email=instance.email).update(profile=instance)