From d484c7db3319b845a24b23a917dffa32702e5cdd Mon Sep 17 00:00:00 2001
From: "J.-S. Caux" <J.S.Caux@uva.nl>
Date: Wed, 23 Mar 2016 08:28:24 +0100
Subject: [PATCH] Add contributor_info page

---
 SciPost_v1/urls.py                            |  1 +
 comments/models.py                            |  3 +-
 .../templates/scipost/contributor_info.html   | 81 +++++++++++++++++++
 scipost/templates/scipost/personal_page.html  |  6 ++
 scipost/urls.py                               |  3 +
 scipost/views.py                              | 17 ++++
 6 files changed, 110 insertions(+), 1 deletion(-)
 create mode 100644 scipost/templates/scipost/contributor_info.html

diff --git a/SciPost_v1/urls.py b/SciPost_v1/urls.py
index ed881effc..fdddfa098 100644
--- a/SciPost_v1/urls.py
+++ b/SciPost_v1/urls.py
@@ -19,6 +19,7 @@ from django.contrib import admin
 urlpatterns = [
     url(r'^admin/', include(admin.site.urls)),
     url(r'^', include('scipost.urls', namespace="scipost")),
+    url(r'^contributor/', include('scipost.urls', namespace="scipost")),
     url(r'^commentaries/', include('commentaries.urls', namespace="commentaries")),
     url(r'^commentary/', include('commentaries.urls', namespace="commentaries")),
     url(r'^comments/', include('comments.urls', namespace="comments")),
diff --git a/comments/models.py b/comments/models.py
index 7dadc1e39..b19b63187 100644
--- a/comments/models.py
+++ b/comments/models.py
@@ -89,7 +89,8 @@ class Comment(models.Model):
         output = '<div class="commentid">\n'
         output += '<h3><a id="comment_id' + str(self.id) + '">' + str(self.id) + '</a>'
         if not self.anonymous:
-            output += ' by ' + self.author.user.first_name + ' ' + self.author.user.last_name
+            output += (' by <a href="/contributor/' + str(self.author.id) + '">' +
+                       self.author.user.first_name + ' ' + self.author.user.last_name + '</a>')
         output += '</h3>'
         if self.in_reply_to:
             output += '<h4>in reply to ' + str(self.in_reply_to.id) + '</h4>\n'
diff --git a/scipost/templates/scipost/contributor_info.html b/scipost/templates/scipost/contributor_info.html
new file mode 100644
index 000000000..f0dcdae39
--- /dev/null
+++ b/scipost/templates/scipost/contributor_info.html
@@ -0,0 +1,81 @@
+{% extends 'scipost/base.html' %}
+
+{% block pagetitle %}: personal page{% endblock pagetitle %}
+
+{% block headsup %}
+
+<script>
+  $(document).ready(function(){
+  $("#mycommentsbutton").click(function(){
+  $("#mycommentslist").toggle();
+  });
+  $("#myauthorrepliesbutton").click(function(){
+  $("#myauthorreplieslist").toggle();
+  });
+  });
+</script>
+
+{% endblock headsup %}
+
+{% block bodysup %}
+
+<section>
+  <div class="flex-greybox">
+    <h1>Contributor info</h1>
+  </div>
+  <div class="row">
+    <div class="col-6">
+      {{ contributor.as_table|safe }}
+    </div>
+  </div>
+</section>
+
+<section>
+  <hr class="hr12">
+  <div class="flex-greybox">
+    <h1>SciPost Submissions</h1>
+  </div>
+</section>
+
+<section>
+  <hr class="hr12">
+  <div class="flex-greybox">
+    <h1>SciPost Commentaries</h1>
+  </div>
+</section>
+
+{% if contributor_comments %}
+<section>
+  <hr class="hr12">
+  <div class="flex-greybox">
+    <h1>Comments</h1>
+    <button id="mycommentsbutton">View/hide comments</button>
+  </div>
+  <div id="mycommentslist">
+    <ul>
+      {% for comment in contributor_comments %}
+      {{ comment.header_as_li|safe }}
+      {% endfor %}
+    </ul>
+  </div>
+</section>
+{% endif %}
+
+{% if own_authorreplies %}
+<section>
+  <hr class="hr12">
+  <div class="flex-greybox">
+    <h1>Your Author Replies</h1>
+    <button id="myauthorrepliesbutton">View/hide author replies</button>
+  </div>
+  <div id="myauthorreplieslist">
+    <ul>
+      {% for reply in contributor_authorreplies %}
+      {{ own_reply.header_as_li|safe }}
+      {% endfor %}
+    </ul>
+  </div>
+</section>
+{% endif %}
+
+{% endblock bodysup %}
diff --git a/scipost/templates/scipost/personal_page.html b/scipost/templates/scipost/personal_page.html
index 8b1f5f161..02405addb 100644
--- a/scipost/templates/scipost/personal_page.html
+++ b/scipost/templates/scipost/personal_page.html
@@ -90,6 +90,12 @@
   <div class="flex-greybox">
     <h1>SciPost Submissions</h1>
   </div>
+  {% if submission_authorships_to_claim %}
+  <ul>
+    {% for sub in submission_authorships_to_claim %}
+    {{ submission.header_as_li|safe %}
+    {% endfor %}
+  {% endif %}
   <ul>
     <li><a href="{% url 'submissions:submit_manuscript' %}">Submit an arXiv preprint to a SciPost Journal</a></li>
   </ul>
diff --git a/scipost/urls.py b/scipost/urls.py
index 1ff41c0d1..835a76537 100644
--- a/scipost/urls.py
+++ b/scipost/urls.py
@@ -37,4 +37,7 @@ urlpatterns = [
     url(r'^reset_password/$', views.reset_password, name='reset_password'),
     url(r'^update_personal_data$', views.update_personal_data, name='update_personal_data'),
     url(r'^update_personal_data_ack$', TemplateView.as_view(template_name='scipost/update_personal_data_ack.html'), name='update_personal_data_ack'),
+
+    # Contributor info
+    url(r'^(?P<contributor_id>[0-9]+)$', views.contributor_info, name="contributor_info"),
 ]
diff --git a/scipost/views.py b/scipost/views.py
index 650304762..8983e98fc 100644
--- a/scipost/views.py
+++ b/scipost/views.py
@@ -231,6 +231,8 @@ def personal_page(request):
             nr_author_replies_to_vet = AuthorReply.objects.filter(status=0).count()
             nr_reports_to_vet = Report.objects.filter(status=0).count()
             nr_thesislink_requests_to_vet = ThesisLink.objects.filter(vetted=False).count()
+        # Verify if there exist objects authored by this contributor, whose authorship hasn't been claimed yet
+        submission_authorships_to_claim = Submission.objects.filter(author_list__contains=contributor.user.last_name)
         own_comments = Comment.objects.filter(author=contributor).order_by('-date_submitted')
         own_authorreplies = AuthorReply.objects.filter(author=contributor).order_by('-date_submitted')
         context = {'contributor': contributor, 'nr_reg_to_vet': nr_reg_to_vet, 
@@ -241,6 +243,7 @@ def personal_page(request):
                    'nr_reports_to_vet': nr_reports_to_vet, 
                    'nr_submissions_to_process': nr_submissions_to_process, 
                    'nr_thesislink_requests_to_vet': nr_thesislink_requests_to_vet, 
+                   'submission_authorships_to_claim': submission_authorships_to_claim,
                    'own_comments': own_comments, 'own_authorreplies': own_authorreplies}
         return render(request, 'scipost/personal_page.html', context)
     else:
@@ -308,3 +311,17 @@ def update_personal_data(request):
         return render(request, 'scipost/login.html', {'form': form})
 
 
+def contributor_info(request, contributor_id):
+    if request.user.is_authenticated():
+        contributor = Contributor.objects.get(pk=contributor_id)
+        contributor_comments = Comment.objects.filter(author=contributor, status__gte=1).order_by('-date_submitted')
+        contributor_authorreplies = AuthorReply.objects.filter(author=contributor, status__gte=1).order_by('-date_submitted')
+        context = {'contributor': contributor, 
+                   'contributor_comments': contributor_comments, 
+                   'contributor_authorreplies': contributor_authorreplies}
+        return render(request, 'scipost/contributor_info.html', context)
+    else:
+        form = AuthenticationForm()
+        context = {'form': form}
+        return render(request, 'scipost/login.html', context)
+
-- 
GitLab