From edfcfa109aa6a1c700fa5c0c83bdcbd6b72bc57d Mon Sep 17 00:00:00 2001 From: "J.-S. Caux" <J.S.Caux@uva.nl> Date: Tue, 29 Sep 2020 14:28:25 +0200 Subject: [PATCH] Finish global removal of subject_area --- journals/models/publication.py | 5 -- .../journals/publication_li_content.html | 8 ++- ontology/models/branch.py | 5 ++ scipost/models.py | 6 -- scipost/templates/scipost/navbar.html | 64 ++++++++----------- submissions/factories.py | 19 ++++-- .../pool/submission_info_table_extended.html | 14 ++-- .../partials/submissions/submission_li.html | 8 ++- submissions/tests/test_utils.py | 4 -- submissions/views.py | 5 +- 10 files changed, 74 insertions(+), 64 deletions(-) diff --git a/journals/models/publication.py b/journals/models/publication.py index d7a254f15..936209070 100644 --- a/journals/models/publication.py +++ b/journals/models/publication.py @@ -359,11 +359,6 @@ class Publication(models.Model): else: return 0 - def get_similar_publications(self): - """Return 4 Publications with same subject area.""" - return Publication.objects.published().filter( - subject_area=self.subject_area).exclude(id=self.id)[:4] - def get_issue_related_publications(self): """Return 4 Publications within same Issue.""" return Publication.objects.published().filter( diff --git a/journals/templates/partials/journals/publication_li_content.html b/journals/templates/partials/journals/publication_li_content.html index 35e052b23..505dde17d 100644 --- a/journals/templates/partials/journals/publication_li_content.html +++ b/journals/templates/partials/journals/publication_li_content.html @@ -1,5 +1,11 @@ <div class="li publication"> - <h5 class="subject"><a href="{% url 'journals:publications' %}?subject={{ publication.subject_area }}" class="muted-link">{{ publication.get_subject_area_display }}</a></h5> + <h5 class="subject"> + <a href="{% url 'journals:publications' %}?field={{ publication.acad_field.slug }}" class="muted-link">{{ publication.acad_field }}</a>: + {% for specialty in publication.specialties.all %} + <a href="{% url 'journals:publications' %}?specialty={{ specialty.slug }}" class="muted-link">{{ specialty }}</a> + {% if not forloop.last %}<strong> • </strong>{% endif %} + {% endfor %} + </h5> <h3 class="title"><a href="{{ publication.get_absolute_url }}">{{ publication.title }}</a></h3> <p class="authors">{{ publication.author_list }}</p> diff --git a/ontology/models/branch.py b/ontology/models/branch.py index 9fe4b5679..34db6ca1e 100644 --- a/ontology/models/branch.py +++ b/ontology/models/branch.py @@ -5,6 +5,7 @@ __license__ = "AGPL v3" from django.db import models from journals.models import Journal +from submissions.models import Submission class Branch(models.Model): @@ -37,3 +38,7 @@ class Branch(models.Model): @property def journals(self): return Journal.objects.filter(college__acad_field__branch=self.id) + + @property + def submissions(self): + return Submission.objects.public_newest().filter(acad_field__branch=self.id) diff --git a/scipost/models.py b/scipost/models.py index fffbb902b..054bbbb7e 100644 --- a/scipost/models.py +++ b/scipost/models.py @@ -158,12 +158,6 @@ class Contributor(models.Model): self.activation_key = hashlib.sha1(salt + feed).hexdigest() self.key_expires = timezone.now() + datetime.timedelta(days=2) - def expertises_as_string(self): - """Return joined expertises.""" - if self.expertises: - return ', '.join([subject_areas_dict[exp].lower() for exp in self.expertises]) - return '' - def conflict_of_interests(self): if not self.profile: return ConflictOfInterest.objects.none() diff --git a/scipost/templates/scipost/navbar.html b/scipost/templates/scipost/navbar.html index 780e0f187..5e41387a1 100644 --- a/scipost/templates/scipost/navbar.html +++ b/scipost/templates/scipost/navbar.html @@ -86,44 +86,32 @@ </div> </div> <div class="dropdown-divider"></div> - <span class="dropdown-item dropdown-headline"><strong>Physics</strong></span> - <div class="row"> - <div class="col-md-6"> - <div class="dropdown-item"><a href="{% url 'submissions:submissions' %}?subject_area=Phys:AE">Atomic, Molecular and Optical Physics - Experiment</a> <i class="fa fa-angle-right" aria-hidden="true"></i></div> - - <div class="dropdown-item"><a href="{% url 'submissions:submissions' %}?subject_area=Phys:AT">Atomic, Molecular and Optical Physics - Theory</a> <i class="fa fa-angle-right" aria-hidden="true"></i></div> - - <div class="dropdown-item"><a href="{% url 'submissions:submissions' %}?subject_area=Phys:BI">Biophysics</a> <i class="fa fa-angle-right" aria-hidden="true"></i></div> - - <div class="dropdown-item"><a href="{% url 'submissions:submissions' %}?subject_area=Phys:CE">Condensed Matter Physics - Experiment</a> <i class="fa fa-angle-right" aria-hidden="true"></i></div> - - <div class="dropdown-item"><a href="{% url 'submissions:submissions' %}?subject_area=Phys:CT">Condensed Matter Physics - Theory</a> <i class="fa fa-angle-right" aria-hidden="true"></i></div> - - <div class="dropdown-item"><a href="{% url 'submissions:submissions' %}?subject_area=Phys:CC">Condensed Matter Physics - Computational</a> <i class="fa fa-angle-right" aria-hidden="true"></i></div> - - <div class="dropdown-item"><a href="{% url 'submissions:submissions' %}?subject_area=Phys:FD">Fluid Dynamics</a> <i class="fa fa-angle-right" aria-hidden="true"></i></div> - - <div class="dropdown-item"><a href="{% url 'submissions:submissions' %}?subject_area=Phys:GR">Gravitation, Cosmology and Astroparticle Physics</a> <i class="fa fa-angle-right" aria-hidden="true"></i></div> - </div> - <div class="col-md-6"> - <div class="dropdown-item"><a href="{% url 'submissions:submissions' %}?subject_area=Phys:HE">High-Energy Physics - Experiment</a> <i class="fa fa-angle-right" aria-hidden="true"></i></div> - - <div class="dropdown-item"><a href="{% url 'submissions:submissions' %}?subject_area=Phys:HT">High-Energy Physics - Theory</a> <i class="fa fa-angle-right" aria-hidden="true"></i></div> - - <div class="dropdown-item"><a href="{% url 'submissions:submissions' %}?subject_area=Phys:HP">High-Energy Physics - Phenomenology</a> <i class="fa fa-angle-right" aria-hidden="true"></i></div> - - <div class="dropdown-item"><a href="{% url 'submissions:submissions' %}?subject_area=Phys:MP">Mathematical Physics</a> <i class="fa fa-angle-right" aria-hidden="true"></i></div> - - <div class="dropdown-item"><a href="{% url 'submissions:submissions' %}?subject_area=Phys:NE">Nuclear Physics - Experiment</a> <i class="fa fa-angle-right" aria-hidden="true"></i></div> - - <div class="dropdown-item"><a href="{% url 'submissions:submissions' %}?subject_area=Phys:NT">Nuclear Physics - Theory</a> <i class="fa fa-angle-right" aria-hidden="true"></i></div> - - <div class="dropdown-item"><a href="{% url 'submissions:submissions' %}?subject_area=Phys:QP">Quantum Physics</a> <i class="fa fa-angle-right" aria-hidden="true"></i></div> - - <div class="dropdown-item"><a href="{% url 'submissions:submissions' %}?subject_area=Phys:SM">Statistical and Soft Matter Physics</a> <i class="fa fa-angle-right" aria-hidden="true"></i></div> - </div> - - </div> + <table class="table table-bordered table-secondary"> + <thead class="thead-dark"> + <tr> + <th class="px-2 py-1"><small>Branch of Science</small></th> + <th class="px-2 py-1"><small>Fields <em>(click to see field-specific detailed list)</em></small></th> + </tr> + </thead> + <tbody> + {% for branch in branches %} + {% if branch.submissions.all|length > 0 %} + <tr> + <td class="align-middle"> + <small>{{ branch.name }}</small> + </td> + <td> + {% for acad_field in branch.academic_fields.all %} + {% if acad_field.submissions.all|length > 0 %} + <a href={% url 'submissions:submissions' %}?field={{ acad_field.slug }} class="btn btn-primary btn-sm"><small>{{ acad_field.name }}</small></a> + {% endif %} + {% endfor %} + </td> + </tr> + {% endif %} + {% endfor %} + </tbody> + </table> </div> </li> diff --git a/submissions/factories.py b/submissions/factories.py index 0c8dd0b89..f4bb7a0df 100644 --- a/submissions/factories.py +++ b/submissions/factories.py @@ -7,10 +7,11 @@ import pytz import random from comments.factories import SubmissionCommentFactory -from scipost.constants import SCIPOST_SUBJECT_AREAS, SCIPOST_APPROACHES +from scipost.constants import SCIPOST_APPROACHES from scipost.models import Contributor from journals.models import Journal from common.helpers import random_scipost_report_doi_label +from ontology.models import Specialty from .constants import ( STATUS_UNASSIGNED, STATUS_EIC_ASSIGNED, STATUS_INCOMING, STATUS_PUBLISHED, @@ -32,7 +33,7 @@ class SubmissionFactory(factory.django.DjangoModelFactory): title = factory.Faker('sentence') abstract = factory.Faker('paragraph', nb_sentences=10) list_of_changes = factory.Faker('paragraph', nb_sentences=10) - subject_area = factory.Iterator(SCIPOST_SUBJECT_AREAS[0][1], getter=lambda c: c[0]) + acad_field = factory.SubFactory('ontology.factories.AcademicFieldFactory') approaches = factory.Iterator(SCIPOST_APPROACHES, getter=lambda c: [c[0],]) abstract = factory.Faker('paragraph') author_comments = factory.Faker('paragraph') @@ -55,8 +56,16 @@ class SubmissionFactory(factory.django.DjangoModelFactory): if Journal.objects.count() < 3: from journals.factories import JournalFactory JournalFactory.create_batch(3) + if Specialty.objects.count() < 5: + from ontology.factories import SpecialtyFactory + SpecialtyFactory.create_batch(5) return super().create(**kwargs) + @factory.post_generation + def add_specialties(self, create, extracted, **kwargs): + if create: + self.specialties.set(Specialty.objects.order_by('?')[:3]) + @factory.post_generation def contributors(self, create, extracted, **kwargs): contribs = Contributor.objects.all() @@ -160,7 +169,8 @@ class ResubmittedSubmissionFactory(EICassignedSubmissionFactory): self.editor_in_charge = submission.editor_in_charge self.submitted_to = submission.submitted_to self.title = submission.title - self.subject_area = submission.subject_area + self.acad_field = submission.acad_field + self.specialties = submission.specialties self.approaches = submission.approaches self.title = submission.title self.authors.set(self.authors.all()) @@ -212,7 +222,8 @@ class ResubmissionFactory(EICassignedSubmissionFactory): self.editor_in_charge = submission.editor_in_charge self.submitted_to = submission.submitted_to self.title = submission.title - self.subject_area = submission.subject_area + self.acad_field = submission.acad_field + self.specialties = submission.specialties self.approaches = submission.approaches self.title = submission.title self.authors.set(self.authors.all()) diff --git a/submissions/templates/partials/submissions/pool/submission_info_table_extended.html b/submissions/templates/partials/submissions/pool/submission_info_table_extended.html index 2173d7df6..adf3ffe8e 100644 --- a/submissions/templates/partials/submissions/pool/submission_info_table_extended.html +++ b/submissions/templates/partials/submissions/pool/submission_info_table_extended.html @@ -8,7 +8,7 @@ <td>As Contributors</td> <td> {% for author in submission.authors.all %} - {% if not forloop.first %}<span class="text-blue">·</span> {% endif %}<a href="{% url 'scipost:contributor_info' author.id %}">{{author.user.first_name}} {{author.user.last_name}}</a> + {% if not forloop.first %}<span class="text-blue">·</span> {% endif %}<a href="{% url 'scipost:contributor_info' author.id %}">{{ author.user.first_name }} {{ author.user.last_name }}</a> {% empty %} (none claimed) {% endfor %} @@ -17,12 +17,18 @@ <tr> <td>Submitted by</td> <td> - {{submission.submitted_by.user.first_name}} {{submission.submitted_by.user.last_name}} + {{ submission.submitted_by.user.first_name }} {{ submission.submitted_by.user.last_name }} </td> </tr> <tr> - <td>Subject area</td> - <td>{{submission.get_subject_area_display}}</td> + <td>Specialties</td> + <td> + <ul class="m-0 pl-4"> + {% for specialty in submission.specialties.all %} + <li>{{ specialty }}</li> + {% endfor %} + </ul> + </td> </tr> {% if submission.approaches %} <tr> diff --git a/submissions/templates/partials/submissions/submission_li.html b/submissions/templates/partials/submissions/submission_li.html index 4341d4931..0c904ba9d 100644 --- a/submissions/templates/partials/submissions/submission_li.html +++ b/submissions/templates/partials/submissions/submission_li.html @@ -1,5 +1,11 @@ <div class="li submission"> - <h5 class="subject"><a href="{% url 'submissions:submissions' %}?subject_area={{ submission.subject_area }}" class="muted-link">{{ submission.get_subject_area_display }}</a></h5> + <h5 class="subject"> + <a href="{% url 'submissions:submissions' %}?field={{ submission.acad_field.slug }}" class="muted-link">{{ submission.acad_field }}</a>: + {% for specialty in submission.specialties.all %} + <a href="{% url 'submissions:submissions' %}?specialty={{ specialty.slug }}" class="muted-link">{{ specialty }}</a> + {% if not forloop.last %}<strong> • </strong>{% endif %} + {% endfor %} + </h5> <h3 class="title"><a href="{{ submission.get_absolute_url }}">{{ submission.title }}</a></h3> <p class="authors">by {{ submission.author_list }}</p> {% block card_footer %}{% endblock %} diff --git a/submissions/tests/test_utils.py b/submissions/tests/test_utils.py index c86e5998b..06449e8b2 100644 --- a/submissions/tests/test_utils.py +++ b/submissions/tests/test_utils.py @@ -18,8 +18,6 @@ from ..factories import UnassignedSubmissionFactory, ResubmissionFactory # NOTED AS BROKEN 2019-11-08 -# factory.errors.InvalidDeclarationError: Received deep context for unknown fields: {'dates__submission': datetime.date(2019, 11, 8)} (known=['abstract', 'approaches', 'author_comments', 'author_list', 'is_current', 'latest_activity', 'list_of_changes', 'preprint', 'remarks_for_editors', 'status', 'subject_area', 'submission_date', 'submitted_by', 'submitted_to', 'thread_hash', 'title']) - # class TestDefaultSubmissionCycle(TestCase): # """Test all steps in the Submission default cycle.""" @@ -65,7 +63,6 @@ from ..factories import UnassignedSubmissionFactory, ResubmissionFactory # NOTED AS BROKEN 2019-11-08 -# factory.errors.InvalidDeclarationError: Received deep context for unknown fields: {'dates__submission': datetime.date(2019, 11, 8)} (known=['abstract', 'approaches', 'author_comments', 'author_list', 'editor_in_charge', 'is_current', 'latest_activity', 'list_of_changes', 'open_for_commenting', 'open_for_reporting', 'preprint', 'remarks_for_editors', 'status', 'subject_area', 'submission_date', 'submitted_by', 'submitted_to', 'thread_hash', 'title', 'vn_nr']) # class TestResubmissionSubmissionCycle(TestCase): # ''' # This TestCase should act as a master test to check all steps in the @@ -106,7 +103,6 @@ from ..factories import UnassignedSubmissionFactory, ResubmissionFactory # NOTED AS BROKEN 2019-11-08 -# factory.errors.InvalidDeclarationError: Received deep context for unknown fields: {'dates__submission': datetime.date(2019, 11, 8)} (known=['abstract', 'approaches', 'author_comments', 'author_list', 'editor_in_charge', 'is_current', 'latest_activity', 'list_of_changes', 'open_for_commenting', 'open_for_reporting', 'preprint', 'refereeing_cycle', 'remarks_for_editors', 'status', 'subject_area', 'submission_date', 'submitted_by', 'submitted_to', 'thread_hash', 'title', 'vn_nr']) # class TestResubmissionDirectSubmissionCycle(TestCase): # ''' # This TestCase should act as a master test to check all steps in the diff --git a/submissions/views.py b/submissions/views.py index f7743345d..fb0689332 100644 --- a/submissions/views.py +++ b/submissions/views.py @@ -372,9 +372,12 @@ class SubmissionListView(PaginationMixin, ListView): """Return queryset, filtered with GET request data if given.""" queryset = Submission.objects.public_newest() self.form = self.form(self.request.GET) + if 'field' in self.request.GET: + queryset=queryset.filter(acad_field__slug=self.request.GET['field']) + if 'specialty' in self.request.GET: + queryset=queryset.filter(specialties__slug=self.request.GET['specialty']) if 'to_journal' in self.request.GET: queryset = queryset.filter( - latest_activity__gte=timezone.now() + datetime.timedelta(days=-60), submitted_to__doi_label=self.request.GET['to_journal'] ) elif self.form.is_valid() and self.form.has_changed(): -- GitLab