diff --git a/ippisite/ippidb/templates/about-contributor-card.html b/ippisite/ippidb/templates/about-contributor-card.html new file mode 100644 index 0000000000000000000000000000000000000000..5057457f80b2c1f8cf0fb3a09035b82ae0caae49 --- /dev/null +++ b/ippisite/ippidb/templates/about-contributor-card.html @@ -0,0 +1,11 @@ +{% extends "about.html" %} + +{% block title %}inhibitors of Protein-Protein Interaction Database{% endblock %} + +{% block pagetitle %}Contributors{% endblock%} + +{% block view_content %} +<div class="row"> + {{ object.get_contributor_firstname | capfirst }} {{ object.get_contributor_lastname | capfirst }} || {{ object.get_orcid_url }} +</div> +{% endblock %} \ No newline at end of file diff --git a/ippisite/ippidb/templates/about-contributors.html b/ippisite/ippidb/templates/about-contributors.html index 54a12cff7a8a8334dd27ca346a354cb2df97d5c0..4727f07a8d99280621065fd146c7509a1caf9e7c 100644 --- a/ippisite/ippidb/templates/about-contributors.html +++ b/ippisite/ippidb/templates/about-contributors.html @@ -16,7 +16,7 @@ <tbody> {% for contributor in object_list %} <tr> - <td>{{ contributor.get_contributor_firstname | capfirst }} {{ contributor.get_contributor_lastname | capfirst }}</td> + <td><a href="{{ contributor.id }}">{{ contributor.get_contributor_firstname | capfirst }} {{ contributor.get_contributor_lastname | capfirst }}</a></td> <td><a href="{{ contributor.get_orcid_url }}" target="_blank">{{ contributor.get_orcid }}</a></td> </tr> {% endfor %} diff --git a/ippisite/ippidb/urls.py b/ippisite/ippidb/urls.py index a75b10256830e4434fcc4001f637d4ae77c55294..1ca040aa03d1052810632587a1c2213ec75f5f10 100644 --- a/ippisite/ippidb/urls.py +++ b/ippisite/ippidb/urls.py @@ -61,7 +61,8 @@ urlpatterns = [ name="physicochemistry", ), re_path(r"^about-pca/$", views.about_pca, name="pca"), - re_path(r"^about-contributors/$", views.ContributorsListView.as_view(), name="contributors"), + re_path(r"^about-contributors/$", views.ContributorListView.as_view(), name="contributors"), + re_path(r"^about-contributors/(?P<pk>\d+)$", views.ContributorDetailView.as_view(), name="contributor_card"), re_path(r"^targetcentric/$", views.PDBView.as_view(), name="cavities"), re_path(r"^targetcentric/networks$", views.NetworkView.as_view(), name="networks"), re_path(r"^api/", include(ROUTER.urls)), diff --git a/ippisite/ippidb/views/__init__.py b/ippisite/ippidb/views/__init__.py index 7666e858dbb7948ee9095959cef0c1746fe7456d..d3219a289171984bfd5a312220ddfc3ed5f8c2c5 100644 --- a/ippisite/ippidb/views/__init__.py +++ b/ippisite/ippidb/views/__init__.py @@ -32,7 +32,8 @@ from .about import ( about_pca, about_pharmacology, about_physicochemistry, - ContributorsListView, + ContributorListView, + ContributorDetailView, ) from django.conf import settings @@ -103,7 +104,8 @@ __all__ = [ about_pca, about_pharmacology, about_physicochemistry, - ContributorsListView, + ContributorListView, + ContributorDetailView, PdbViewSet, DistanceViewSet, PDBView, diff --git a/ippisite/ippidb/views/about.py b/ippisite/ippidb/views/about.py index cc9a875f94eaa316f4a8efd8976d5d6307404765..45731cef1ec3faae7f2aa4a948dc017c70103081 100644 --- a/ippisite/ippidb/views/about.py +++ b/ippisite/ippidb/views/about.py @@ -2,11 +2,11 @@ iPPI-DB global statistics views """ -import re from django.contrib.auth import get_user_model from django.db.models import F, Count, FloatField, QuerySet from django.db.models.functions import Cast, Floor from django.shortcuts import render +from django.views.generic.detail import DetailView from django.views.generic.list import ListView import json @@ -324,7 +324,7 @@ def get_contributor_firstname(self): orcid = self.get_orcid() if orcid is not None: data = self.__orcid_json - return data['first_name'] + return data["first_name"] @cached_orcid_json @@ -335,7 +335,7 @@ def get_contributor_lastname(self): orcid = self.get_orcid() if orcid is not None: data = self.__orcid_json - return data['last_name'] + return data["last_name"] User.add_to_class("get_orcid", get_orcid) @@ -345,9 +345,11 @@ User.add_to_class("get_contributor_firstname", get_contributor_firstname) User.add_to_class("get_contributor_lastname", get_contributor_lastname) -class ContributorsListView(ListView): +class ContributorListView(ListView): """ Contributors list view + + This view lists the users with at least one accepted contribution """ model = User @@ -359,3 +361,20 @@ class ContributorsListView(ListView): socialaccount__isnull=False, contributions_count__gt=0 ) return qs + + +class ContributorDetailView(DetailView): + """ + Contributor detail view + + """ + + model = User + template_name = "about-contributor-card.html" + + def get_queryset(self): + qs = super().get_queryset() + qs = qs.annotate(contributions_count=Count("contribution")).filter( + socialaccount__isnull=False, contributions_count__gt=0 + ) + return qs