From ac6424fdc869bf20bec841073d03a15455c443bf Mon Sep 17 00:00:00 2001
From: Jorran de Wit <jorrandewit@outlook.com>
Date: Fri, 7 Apr 2017 05:52:00 +0200
Subject: [PATCH] Refactor journals to make it multi-journal ready

---
 SciPost_v1/urls.py                            |   6 +-
 journals/constants.py                         |   5 +
 journals/models.py                            |  10 +-
 journals/templates/journals/_base.html        |  15 +--
 .../_publication_single_short_summary.html    |   2 +-
 journals/templates/journals/add_author.html   |   2 +-
 .../create_citation_list_metadata.html        |   2 +-
 .../create_funding_info_metadata.html         |   2 +-
 .../journals/create_metadata_xml.html         |   2 +-
 .../journals/harvest_citedby_links.html       |   2 +-
 journals/templates/journals/journals.html     |  40 +++---
 .../journals/metadata_xml_deposit.html        |   2 +-
 .../journals/scipost_physics_about.html       |  72 ----------
 .../scipost_physics_info_for_authors.html     |  42 ------
 .../journals/scipost_physics_issues.html      |  30 -----
 journals/urls.py                              |  84 ------------
 journals/views.py                             | 125 ++++++++++++------
 scipost/feeds.py                              |   3 +-
 scipost/templates/scipost/index.html          |   2 +-
 scipost/urls.py                               |  39 +++---
 .../submissions/_submission_status_block.html |   2 +-
 21 files changed, 160 insertions(+), 329 deletions(-)
 delete mode 100644 journals/templates/journals/scipost_physics_about.html
 delete mode 100644 journals/templates/journals/scipost_physics_info_for_authors.html
 delete mode 100644 journals/templates/journals/scipost_physics_issues.html
 delete mode 100644 journals/urls.py

diff --git a/SciPost_v1/urls.py b/SciPost_v1/urls.py
index 9de415062..84b9ba90d 100644
--- a/SciPost_v1/urls.py
+++ b/SciPost_v1/urls.py
@@ -17,6 +17,8 @@ from django.conf import settings
 from django.conf.urls import include, url
 from django.contrib import admin
 
+JOURNAL_REGEX = '(?P<journal_key>SciPostPhys|SciPostPhysProc)'
+
 urlpatterns = [
     url(r'^admin/doc/', include('django.contrib.admindocs.urls')),
     url(r'^admin/', include(admin.site.urls)),
@@ -26,7 +28,9 @@ urlpatterns = [
     url(r'^commentaries/', include('commentaries.urls', namespace="commentaries")),
     url(r'^commentary/', include('commentaries.urls', namespace="commentaries")),
     url(r'^comments/', include('comments.urls', namespace="comments")),
-    url(r'^journals/', include('journals.urls', namespace="journals")),
+    url(r'^journals/', include('journals.urls.general', namespace="journals")),
+    url(r'^10.21468/%s' % JOURNAL_REGEX, include('journals.urls.journal', namespace="journal")),
+    url(r'^%s' % JOURNAL_REGEX, include('journals.urls.journal', namespace="journal")),
     url(r'^submissions/', include('submissions.urls', namespace="submissions")),
     url(r'^submission/', include('submissions.urls', namespace="submissions")),
     url(r'^theses/', include('theses.urls', namespace="theses")),
diff --git a/journals/constants.py b/journals/constants.py
index 60fe1b1ab..6dda5b081 100644
--- a/journals/constants.py
+++ b/journals/constants.py
@@ -42,3 +42,8 @@ ISSUE_STATUSES = (
     (STATUS_DRAFT, 'Draft'),
     (STATUS_PUBLISHED, 'Published'),
 )
+
+JOURNALS_NAME_MAPPING = {
+    'SciPostPhys': 'SciPost Physics',
+    'SciPostPhysProc': 'SciPost Physics Proceedings',
+}
diff --git a/journals/models.py b/journals/models.py
index e5cd2ec7b..f0e6a5000 100644
--- a/journals/models.py
+++ b/journals/models.py
@@ -23,8 +23,7 @@ class UnregisteredAuthor(models.Model):
 
 
 class Journal(models.Model):
-    name = models.CharField(max_length=100, choices=SCIPOST_JOURNALS,
-                            unique=True)
+    name = models.CharField(max_length=100, choices=SCIPOST_JOURNALS, unique=True)
     doi_string = models.CharField(max_length=200, blank=True, null=True)
     issn = models.CharField(max_length=16, default='2542-4653')
 
@@ -32,7 +31,7 @@ class Journal(models.Model):
         return self.name
 
     def get_absolute_url(self):
-        return reverse('journals:scipost_physics_issues')
+        return reverse('journal:landing_page', args=[self.get_abbreviation_doi()])
 
     def get_abbreviation_citation(self):
         return journal_name_abbrev_citation(self.name)
@@ -78,8 +77,9 @@ class Issue(models.Model):
         return text
 
     def get_absolute_url(self):
-        return reverse('scipost:SciPostPhys_issue_detail',
-                       args=[self.in_volume.number, self.number])
+        return reverse('journal:issue_detail', args=[
+                       self.in_volume.in_journal.get_abbreviation_doi(),
+                       self.in_volume.number, self.number])
 
     def short_str(self):
         return 'Vol. %s issue %s' % (self.in_volume.number, self.number)
diff --git a/journals/templates/journals/_base.html b/journals/templates/journals/_base.html
index 10a444af4..619c570e5 100644
--- a/journals/templates/journals/_base.html
+++ b/journals/templates/journals/_base.html
@@ -1,6 +1,6 @@
 {% extends 'scipost/base.html' %}
 
-{% block pagetitle %}: SciPost Physics{% endblock pagetitle %}
+{% block pagetitle %}: {{journal_name}}{% endblock pagetitle %}
 {% block body_class %}{{block.super}} journals{% endblock %}
 
 {% block breadcrumb %}
@@ -8,7 +8,6 @@
     <nav class="breadcrumb py-md-2 px-0">
         <div class="container">
             {% block breadcrumb_items %}
-                {# <a href="{% url 'scipost:index' %}" class="breadcrumb-item">Home</a>#}
                 <a href="{% url 'journals:journals' %}" class="breadcrumb-item">Journals</a>
             {% endblock %}
         </div>
@@ -18,14 +17,14 @@
 {% block secondary_navbar %}
     <nav class="navbar navbar-secondary">
         <div class="container my-2">
-            <h2 class="banner d-inline-block mr-2"><a href="{% url 'journals:scipost_physics' %}">SciPost Physics</a></h2>
+            <h2 class="banner d-inline-block mr-2"><a href="{% url 'journal:landing_page' 'SciPostPhys' %}">{{journal_name}}</a></h2>
             <ul class="links">
-                <li><a class="{% block link_class_physics_issues %}{% endblock %}" href="{% url 'journals:scipost_physics_issues' %}">Issues</a></li>
-                <li><a class="{% block link_class_physics_recent %}{% endblock %}" href="{% url 'journals:scipost_physics_recent' %}">Recent</a></li>
-                <li><a class="{% block link_class_physics_accepted %}{% endblock %}" href="{% url 'journals:scipost_physics_accepted' %}">Accepted</a></li>
+                <li><a class="{% block link_class_physics_issues %}{% endblock %}" href="{% url 'journal:issues' journal_key %}">Issues</a></li>
+                <li><a class="{% block link_class_physics_recent %}{% endblock %}" href="{% url 'journal:recent' journal_key %}">Recent</a></li>
+                <li><a class="{% block link_class_physics_accepted %}{% endblock %}" href="{% url 'journal:accepted' journal_key %}">Accepted</a></li>
                 <li><a href="{% url 'submissions:submissions' %}?to_journal=SciPostPhysics">Submissions</a></li>
-                <li><a class="{% block link_class_physics_info %}{% endblock %}" href="{% url 'journals:scipost_physics_info_for_authors' %}">Info for authors</a></li>
-                <li><a class="{% block link_class_physics_about %}{% endblock %}" href="{% url 'journals:scipost_physics_about' %}">About</a></li>
+                <li><a class="{% block link_class_physics_info %}{% endblock %}" href="{% url 'journal:info_for_authors' journal_key %}">Info for authors</a></li>
+                <li><a class="{% block link_class_physics_about %}{% endblock %}" href="{% url 'journal:about' journal_key %}">About</a></li>
             </ul>
         </div>
     </nav>
diff --git a/journals/templates/journals/_publication_single_short_summary.html b/journals/templates/journals/_publication_single_short_summary.html
index 0c500f171..cce9e6bb3 100644
--- a/journals/templates/journals/_publication_single_short_summary.html
+++ b/journals/templates/journals/_publication_single_short_summary.html
@@ -1,3 +1,3 @@
-<h3 class="pb-0"><a href="{% url 'scipost:publication_detail' doi_string=publication.doi_string %}">{{ publication.title }}</a></h3>
+<h3 class="pb-0"><a href="{{publication.get_absolute_url}}">{{ publication.title }}</a></h3>
 <div>by {{ publication.author_list|truncatechars:30 }}</div>
 <div class="text-muted">published {{ publication.publication_date }}</div>
diff --git a/journals/templates/journals/add_author.html b/journals/templates/journals/add_author.html
index fabb202ea..977eaff19 100644
--- a/journals/templates/journals/add_author.html
+++ b/journals/templates/journals/add_author.html
@@ -94,7 +94,7 @@
       </div>
 
       <h3>
-          <a href="{% url 'scipost:publication_detail' doi_string=publication.doi_string %}">Return to the publication's page</a>
+          <a href="{{publication.get_absolute_url}}">Return to the publication's page</a>
       </h3>
     </div>
 </div>
diff --git a/journals/templates/journals/create_citation_list_metadata.html b/journals/templates/journals/create_citation_list_metadata.html
index 410c4ce6b..0ee966000 100644
--- a/journals/templates/journals/create_citation_list_metadata.html
+++ b/journals/templates/journals/create_citation_list_metadata.html
@@ -33,7 +33,7 @@
 
   <hr class="hr6"/>
 
-  <h3>Once you're happy with this metadata, you can <a href="{% url 'scipost:publication_detail' doi_string=publication.doi_string %}">return to the publication's page</a></h3>
+  <h3>Once you're happy with this metadata, you can <a href="{{publication.get_absolute_url}}">return to the publication's page</a></h3>
 
 </section>
 
diff --git a/journals/templates/journals/create_funding_info_metadata.html b/journals/templates/journals/create_funding_info_metadata.html
index 3b992c2b0..51b9ca431 100644
--- a/journals/templates/journals/create_funding_info_metadata.html
+++ b/journals/templates/journals/create_funding_info_metadata.html
@@ -27,7 +27,7 @@
 
   <hr class="hr6"/>
 
-  <h3>Once you're happy with this metadata, you can <a href="{% url 'scipost:publication_detail' doi_string=publication.doi_string %}">return to the publication's page</a></h3>
+  <h3>Once you're happy with this metadata, you can <a href="{{publication.get_absolute_url}}">return to the publication's page</a></h3>
 
 </section>
 
diff --git a/journals/templates/journals/create_metadata_xml.html b/journals/templates/journals/create_metadata_xml.html
index 0373d2c51..0e3896503 100644
--- a/journals/templates/journals/create_metadata_xml.html
+++ b/journals/templates/journals/create_metadata_xml.html
@@ -27,7 +27,7 @@
 
   <hr class="hr6"/>
 
-  <h3>Once you're happy with this metadata, you can <a href="{% url 'scipost:publication_detail' doi_string=publication.doi_string %}">return to the publication's page</a></h3>
+  <h3>Once you're happy with this metadata, you can <a href="{{publication.get_absolute_url}}">return to the publication's page</a></h3>
 
 </section>
 
diff --git a/journals/templates/journals/harvest_citedby_links.html b/journals/templates/journals/harvest_citedby_links.html
index 77bda9b30..f39d1d0b9 100644
--- a/journals/templates/journals/harvest_citedby_links.html
+++ b/journals/templates/journals/harvest_citedby_links.html
@@ -52,7 +52,7 @@
   {% endfor %}
   {{ nr }}
 
-  <h3><a href="{% url 'scipost:publication_detail' doi_string=publication.doi_string %}">return to the publication's page</a></h3>
+  <h3><a href="{{publication.get_absolute_url}}">return to the publication's page</a></h3>
 
 </section>
 
diff --git a/journals/templates/journals/journals.html b/journals/templates/journals/journals.html
index a9cb62092..2cf23f3a3 100644
--- a/journals/templates/journals/journals.html
+++ b/journals/templates/journals/journals.html
@@ -18,7 +18,7 @@
 <div class="row">
     <div class="col-md-6">
         <h1 class="banner">
-            <a href="{% url 'journals:scipost_physics' %}">SciPost Physics</a>
+            <a href="{% url 'journal:landing_page' 'SciPostPhys' %}">SciPost Physics</a>
         </h1>
         <div class="py-2">
             <p>SciPost Physics publishes outstanding-quality research articles in all domains and subject areas of Physics.</p>
@@ -30,25 +30,29 @@
     </div>
 
     <div class="col-md-6">
-        <div class="row">
-            <div class="col-12">
-                <h1 class="banner">SciPost Physics Select</h1>
-                <div class="py-2">
-                    <p>SciPost Physics Select publishes articles of superlative quality in the field of Physics.</p>
-                    <p>Authors cannot submit directly to this Journal; SPS papers are editorially selected from the most outstanding Submissions to SciPost Physics.</p>
-                    <p style="color: red;"><em>Coming soon!</em></p>
-                </div>
-            </div>
+        <h1 class="banner">
+            <a href="{% url 'journal:about' 'SciPostPhysProc' %}">SciPost Physics Proceedings</a>
+        </h1>
+        <div class="py-2">
+            <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean ultrices tristique ligula. Praesent id odio mollis, egestas est blandit, tempus nisi. Nulla facilisi. Donec a consequat magna. In pulvinar libero laoreet finibus rhoncus. Vestibulum sodales risus in ornare ultricies. Donec vitae euismod sem, vitae finibus purus. Vestibulum vehicula, orci pellentesque congue sodales, leo nulla pellentesque elit, in interdum enim dui quis urna. Etiam at lectus sit amet risus sollicitudin faucibus.</p>
         </div>
+    </div>
+</div>
 
-        <div class="row">
-            <div class="col-12">
-                <h1 class="banner">SciPost Physics Lecture Notes</h1>
-                <div class="py-2">
-                  <p>Research-level didactic material in all domains and subject areas of Physics.</p>
-                  <p style="color: red;">Open for submission!</p>
-                </div>
-            </div>
+<div class="row">
+    <div class="col-md-6">
+        <h1 class="banner">SciPost Physics Select</h1>
+        <div class="py-2">
+            <p>SciPost Physics Select publishes articles of superlative quality in the field of Physics.</p>
+            <p>Authors cannot submit directly to this Journal; SPS papers are editorially selected from the most outstanding Submissions to SciPost Physics.</p>
+            <p style="color: red;"><em>Coming soon!</em></p>
+        </div>
+    </div>
+    <div class="col-md-6">
+        <h1 class="banner">SciPost Physics Lecture Notes</h1>
+        <div class="py-2">
+          <p>Research-level didactic material in all domains and subject areas of Physics.</p>
+          <p style="color: red;">Open for submission!</p>
         </div>
     </div>
 </div>
diff --git a/journals/templates/journals/metadata_xml_deposit.html b/journals/templates/journals/metadata_xml_deposit.html
index 1d9174c2a..bc16e8cc5 100644
--- a/journals/templates/journals/metadata_xml_deposit.html
+++ b/journals/templates/journals/metadata_xml_deposit.html
@@ -22,7 +22,7 @@
   <h3>Response text:</h3>
   <p>{{ response_text|linebreaks }}</p>
 
-  <h3><a href="{% url 'scipost:publication_detail' doi_string=publication.doi_string %}">return to the publication's page</a></h3>
+  <h3><a href="{{publication.get_absolute_url}}">return to the publication's page</a></h3>
 
 </section>
 
diff --git a/journals/templates/journals/scipost_physics_about.html b/journals/templates/journals/scipost_physics_about.html
deleted file mode 100644
index 062868fcc..000000000
--- a/journals/templates/journals/scipost_physics_about.html
+++ /dev/null
@@ -1,72 +0,0 @@
-
-{% extends 'journals/_base.html' %}
-
-{% block pagetitle %}{{block.super}}: About{% endblock pagetitle %}
-
-{% block link_class_physics_about %}active{% endblock %}
-
-{% block breadcrumb_items %}
-    {{block.super}}
-    <a href="{% url 'journals:scipost_physics_issues' %}" class="breadcrumb-item">SciPost Physics</a>
-    <span class="breadcrumb-item active">About</span>
-{% endblock %}
-
-{% block content %}
-
-    {% with header_text='About SciPost Physics' %}
-        {{block.super}}
-    {% endwith %}
-
-    <div class="row">
-        <div class="col-md-6">
-            <h2>Aims</h2>
-            <p>SciPost Physics is a premium-quality, two-way open access, peer-witnessed refereed Journal for the general field of Physics.</p>
-            <p>It aims at providing scientists with a publishing platform in which uncompromising scientific quality meets the highest achievable standards of open accessibility, with a resolutely international outlook.</p>
-            <p><em>Two-way open access</em> means free for readers, free for authors: there are no subscription or download costs, and authors are freed from dealing with article submission and/or processing charges.</p>
-            <p>The <em>peer-witnessed refereeing</em> process guarantees high-quality, responsible refereeing, with demonstrably greater utility for authors and recognition for referees.</p>
-        </div>
-        <div class="col-md-6">
-            <h2>Scope</h2>
-            <p>SciPost Physics publishes outstanding-quality research articles in the domains of Experimental, Theoretical and Computational physics, among which:</p>
-            <ul>
-                <li>Atomic, Molecular and Optical Physics</li>
-                <li>Biophysics</li>
-                <li>Condensed Matter Physics</li>
-                <li>Fluid Dynamics</li>
-                <li>Gravitation</li>
-                <li>Cosmology and Astroparticle Physics</li>
-                <li>High-Energy Physics</li>
-                <li>Mathematical Physics</li>
-                <li>Nuclear Physics</li>
-                <li>Quantum Statistical Mechanics</li>
-                <li>Statistical and Soft Matter Physics</li>
-            </ul>
-        </div>
-    </div>
-
-    <div class="row">
-        <div class="col-md-6">
-          <h2>Content</h2>
-          <p>The journal accepts three types of content: <strong>Letters</strong>, <strong>Articles</strong> and <strong>Reviews</strong>.</p>
-          <ul>
-            <li><strong>Letters</strong> report broad-interest, significant breakthroughs in Physics, of interest and importance to researchers in multiple subject areas.</li>
-            <li><strong>Articles</strong> provide in-depth, detailed reports of groundbreaking research within one or more subject areas.</li>
-            <li><strong>Reviews</strong> are short pieces taking a snapshot of a research area, written by recognized leaders in the field, providing a critical assessment of current frontline research and providing pointers towards future opportunities.</li>
-          </ul>
-        </div>
-        <div class="col-md-6">
-          <h2>Submission and Editorial Process</h2>
-          <p>Authors should follow the <a href="{% url 'submissions:author_guidelines' %}">submission guidelines</a> to ensure seamless processing of their manuscript. The <a href="{% url 'journals:journals_terms_and_conditions' %}">SciPost Journals Terms and Conditions</a> apply to all Submissions to SciPost Physics.</p>
-          <p>All incoming Submissions are checked for plagiarism and follow the peer-witnessed refereeing procedures outlined in <a href="{% url 'submissions:sub_and_ref_procedure' %}">Submission and Refereeing procedure</a>.</p>
-          <p>All publication decisions are taken by the <a href="{% url 'scipost:about' %}#editorial_college_physics">Editorial College (Physics)</a>, following the rules set out in the <a href="{% url 'scipost:EdCol_by-laws' %}">Editorial College by-laws</a>.</p>
-        </div>
-    </div>
-
-    <div class="row">
-        <div class="col-12">
-          <h2>Publication: Open Access</h2>
-          <p>Publications in SciPost Physics are published under the terms of the <a href="http://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International (CC BY 4.0) License</a>, allowing freedom to use, reproduce and distribute the articles and related content (unless otherwise noted), for commercial and noncommercial purposes, subject to the citation of the original source.</p>
-        </div>
-    </div>
-
-{% endblock %}
diff --git a/journals/templates/journals/scipost_physics_info_for_authors.html b/journals/templates/journals/scipost_physics_info_for_authors.html
deleted file mode 100644
index db2fc3765..000000000
--- a/journals/templates/journals/scipost_physics_info_for_authors.html
+++ /dev/null
@@ -1,42 +0,0 @@
-
-{% extends 'journals/_base.html' %}
-
-{% block pagetitle %}{{block.super}}: Info for Authors{% endblock pagetitle %}
-
-{% block link_class_physics_info %}active{% endblock %}
-
-{% block breadcrumb_items %}
-    {{block.super}}
-    <a href="{% url 'journals:scipost_physics_issues' %}" class="breadcrumb-item">SciPost Physics</a>
-    <span class="breadcrumb-item active">Info for Authors</span>
-{% endblock %}
-
-{% block content %}
-
-    {% with header_text='Information for Authors' %}
-        {{block.super}}
-    {% endwith %}
-
-    <div class="row">
-        <div class="col-12">
-            <h3>Manuscript preparation</h3>
-            <ul>
-              <li>Please follow the <a href="{% url 'submissions:author_guidelines' %}">Author guidelines</a> to ensure seamless processing of your manuscript.</li>
-            </ul>
-
-            <h3>Submission and Refereeing</h3>
-            <ul>
-              <li>Make sure you have read and agree with the <a href="{% url 'journals:journals_terms_and_conditions' %}">SciPost Journals Terms and Conditions.</a></li>
-              <li>All Submissions to SciPost Physics follow the peer-witnessed refereeing procedures outlined in
-                <a href="{% url 'submissions:sub_and_ref_procedure' %}">Submission and Refereeing procedure</a>.
-              </li>
-            </ul>
-
-            <h3>Decision</h3>
-            <ul>
-              <li>All publication decisions are taken by the <a href="{% url 'scipost:about' %}#editorial_college_physics">Editorial College (Physics)</a>, following the rules set out in the <a href="{% url 'scipost:EdCol_by-laws' %}">Editorial College by-laws</a>.</li>
-            </ul>
-        </div>
-    </div>
-
-{% endblock %}
diff --git a/journals/templates/journals/scipost_physics_issues.html b/journals/templates/journals/scipost_physics_issues.html
deleted file mode 100644
index bae0354b5..000000000
--- a/journals/templates/journals/scipost_physics_issues.html
+++ /dev/null
@@ -1,30 +0,0 @@
-{% extends 'journals/_base.html' %}
-
-{% block pagetitle %}{{block.super}}: issues{% endblock pagetitle %}
-
-{% block link_class_physics_issues %}active{% endblock %}
-
-{% block breadcrumb_items %}
-    {{block.super}}
-    <span class="breadcrumb-item active">{{issues.0.in_volume.in_journal}}</span>
-{% endblock %}
-
-{% block content %}
-
-    {% with header_text='Issues' %}
-        {{block.super}}
-    {% endwith %}
-
-    <div class="row">
-        <div class="col-12">
-            <ul>
-                {% for issue in issues %}
-                    <li>
-                        <a href="{{issue.get_absolute_url}}">{{ issue }}</a>
-                    </li>
-                {% endfor %}
-            </ul>
-        </div>
-    </div>
-
-{% endblock %}
diff --git a/journals/urls.py b/journals/urls.py
deleted file mode 100644
index 09cc8aca2..000000000
--- a/journals/urls.py
+++ /dev/null
@@ -1,84 +0,0 @@
-from django.conf.urls import include, url
-
-from django.views.generic import TemplateView
-
-#from . import views
-from journals import views as journals_views
-
-urlpatterns = [
-    # Journals
-    url(r'^$', journals_views.journals, name='journals'),
-    url(r'^journals_terms_and_conditions$',
-        TemplateView.as_view(template_name='journals/journals_terms_and_conditions.html'),
-        name='journals_terms_and_conditions'),
-
-    # SciPost Physics
-    url(r'^scipost_physics$',
-        journals_views.scipost_physics,
-        name='scipost_physics'),
-    url(r'^scipost_physics/issues$',
-        journals_views.scipost_physics_issues,
-        name='scipost_physics_issues'),
-    url(r'^scipost_physics/recent$',
-        journals_views.scipost_physics_recent,
-        name='scipost_physics_recent'),
-    url(r'^scipost_physics/accepted$',
-        journals_views.scipost_physics_accepted,
-        name='scipost_physics_accepted'),
-    url(r'^scipost_physics/info_for_authors$',
-        journals_views.scipost_physics_info_for_authors,
-        name='scipost_physics_info_for_authors'),
-    url(r'^scipost_physics/about$',
-        journals_views.scipost_physics_about,
-        name='scipost_physics_about'),
-
-    url(r'^scipost_physics/(?P<volume_nr>[0-9]+)/(?P<issue_nr>[0-9]+)$',
-        journals_views.scipost_physics_issue_detail,
-        name='scipost_physics_issue_detail'),
-
-    # Editorial and Administrative Workflow
-    url(r'^initiate_publication$',
-        journals_views.initiate_publication,
-        name='initiate_publication'),
-    url(r'^validate_publication$',
-        journals_views.validate_publication,
-        name='validate_publication'),
-    url(r'^mark_first_author/(?P<publication_id>[0-9]+)/(?P<contributor_id>[0-9]+)$',
-        journals_views.mark_first_author,
-        name='mark_first_author'),
-    url(r'^mark_first_author_unregistered/(?P<publication_id>[0-9]+)/(?P<unregistered_author_id>[0-9]+)$',
-        journals_views.mark_first_author_unregistered,
-        name='mark_first_author_unregistered'),
-    url(r'^add_author/(?P<publication_id>[0-9]+)/(?P<contributor_id>[0-9]+)$',
-        journals_views.add_author,
-        name='add_author'),
-    url(r'^add_author/(?P<publication_id>[0-9]+)$',
-        journals_views.add_author,
-        name='add_author'),
-    url(r'^add_unregistered_author/(?P<publication_id>[0-9]+)/(?P<unregistered_author_id>[0-9]+)$',
-        journals_views.add_unregistered_author,
-        name='add_unregistered_author'),
-    url(r'^add_new_unreg_author/(?P<publication_id>[0-9]+)$',
-        journals_views.add_new_unreg_author,
-        name='add_new_unreg_author'),
-    #url(r'^create_citation_list_metadata/(?P<publication_id>[0-9]+)$',
-    url(r'^create_citation_list_metadata/(?P<doi_string>10.21468/[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})$',
-        journals_views.create_citation_list_metadata,
-        name='create_citation_list_metadata'),
-    url(r'^create_funding_info_metadata/(?P<doi_string>10.21468/[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})$',
-        journals_views.create_funding_info_metadata,
-        name='create_funding_info_metadata'),
-    #url(r'^create_metadata_xml/(?P<publication_id>[0-9]+)$',
-    url(r'^create_metadata_xml/(?P<doi_string>10.21468/[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})$',
-        journals_views.create_metadata_xml,
-        name='create_metadata_xml'),
-    # url(r'^test_metadata_xml_deposit/(?P<doi_string>10.21468/[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})$',
-    #     journals_views.test_metadata_xml_deposit,
-    #     name='test_metadata_xml_deposit'),
-    url(r'^metadata_xml_deposit/(?P<doi_string>10.21468/[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})/(?P<option>[a-z]+)$',
-        journals_views.metadata_xml_deposit,
-        name='metadata_xml_deposit'),
-    url(r'^harvest_citedby_links/(?P<doi_string>10.21468/[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})$',
-        journals_views.harvest_citedby_links,
-        name='harvest_citedby_links'),
-]
diff --git a/journals/views.py b/journals/views.py
index 5a1964272..3749deb37 100644
--- a/journals/views.py
+++ b/journals/views.py
@@ -10,8 +10,9 @@ from django.utils import timezone
 from django.shortcuts import get_object_or_404, render, redirect
 from django.core.urlresolvers import reverse
 from django.db import transaction
-from django.http import HttpResponse
+from django.http import HttpResponse, Http404
 
+from .constants import JOURNALS_NAME_MAPPING
 from .exceptions import PaperNumberingError
 from .helpers import paper_nr_string
 from .models import Issue, Publication, UnregisteredAuthor
@@ -29,79 +30,121 @@ from guardian.decorators import permission_required
 # Journals
 ############
 
+def map_journal(key, _map=JOURNALS_NAME_MAPPING):
+    # try:
+    journal_name = _map[key]
+    # except KeyError:
+    #     raise Http404('Journal does not exist')
+    return journal_name
+
+
+def inverse_map_journal(name):
+    inv_map = {v: k for k, v in JOURNALS_NAME_MAPPING.items()}
+    return map_journal(name, inv_map)
+
+
 def journals(request):
     return render(request, 'journals/journals.html')
 
 
-def scipost_physics(request):
+def landing_page(request, journal_key):
+    journal_name = map_journal(journal_key)
+
     current_issue = Issue.objects.published(
-        in_volume__in_journal__name='SciPost Physics',
+        in_volume__in_journal__name=journal_name,
         start_date__lte=timezone.now(),
         until_date__gte=timezone.now()).order_by('-until_date').first()
     latest_issue = Issue.objects.published(
-        in_volume__in_journal__name='SciPost Physics',
+        in_volume__in_journal__name=journal_name,
         until_date__lte=timezone.now()).order_by('-until_date').first()
 
     prev_issue = None
     if current_issue:
-        prev_issue = (Issue.objects.published(journal='SciPost Physics',
+        prev_issue = (Issue.objects.published(journal=journal_name,
                                               start_date__lt=current_issue.start_date)
                                    .order_by('start_date').last())
 
     context = {
         'current_issue': current_issue,
         'latest_issue': latest_issue,
-        'prev_issue': prev_issue
+        'prev_issue': prev_issue,
+        'journal_name': journal_name,
+        'journal_key': journal_key
     }
     return render(request, 'journals/scipost_physics.html', context)
 
 
-def scipost_physics_issues(request):
+def issues(request, journal_key):
+    journal_name = map_journal(journal_key)
     issues = Issue.objects.published(
-        in_volume__in_journal__name='SciPost Physics').order_by('-until_date')
-    context = {'issues': issues, }
-    return render(request, 'journals/scipost_physics_issues.html', context)
+        in_volume__in_journal__name=journal_name).order_by('-until_date')
+    context = {
+        'issues': issues,
+        'journal_name': journal_name,
+        'journal_key': journal_key
+    }
+    return render(request, 'journals/journal_issues.html', context)
 
 
-def scipost_physics_recent(request):
+def recent(request, journal_key):
     """
     Display page for the most recent 20 publications in SciPost Physics.
     """
-
+    journal_name = map_journal(journal_key)
     recent_papers = Publication.objects.published(
-        in_issue__in_volume__in_journal__name='SciPost Physics').order_by('-publication_date')[:20]
-    context = {'recent_papers': recent_papers}
+        in_issue__in_volume__in_journal__name=journal_name).order_by('-publication_date')[:20]
+    context = {
+        'recent_papers': recent_papers,
+        'journal_name': journal_name,
+        'journal_key': journal_key
+    }
     return render(request, 'journals/scipost_physics_recent.html', context)
 
 
-def scipost_physics_accepted(request):
+def accepted(request, journal_key):
     """
     Display page for submissions to SciPost Physics which
     have been accepted but are not yet published.
     """
+    journal_name = map_journal(journal_key)
     accepted_SP_submissions = Submission.objects.filter(
-        submitted_to_journal='SciPost Physics', status='accepted'
+        submitted_to_journal=journal_name, status='accepted'
     ).order_by('-latest_activity')
-    context = {'accepted_SP_submissions': accepted_SP_submissions}
+    context = {
+        'accepted_SP_submissions': accepted_SP_submissions,
+        'journal_name': journal_name,
+        'journal_key': journal_key
+    }
     return render(request, 'journals/scipost_physics_accepted.html', context)
 
 
-def scipost_physics_info_for_authors(request):
-    return render(request, 'journals/scipost_physics_info_for_authors.html')
+def info_for_authors(request, journal_key):
+    journal_name = map_journal(journal_key)
+    context = {
+        'journal_name': journal_name,
+        'journal_key': journal_key
+    }
+    return render(request, 'journals/%s_info_for_authors.html' % journal_key, context)
 
 
-def scipost_physics_about(request):
-    return render(request, 'journals/scipost_physics_about.html')
+def about(request, journal_key):
+    journal_name = map_journal(journal_key)
+    context = {
+        'journal_name': journal_name,
+        'journal_key': journal_key
+    }
+    return render(request, 'journals/%s_about.html' % journal_key, context)
 
 
-def scipost_physics_issue_detail(request, volume_nr, issue_nr):
-    issue = Issue.objects.get_published(journal='SciPost Physics',
+def issue_detail(request, journal_key, volume_nr, issue_nr):
+    journal_name = map_journal(journal_key)
+    issue = Issue.objects.get_published(journal=journal_name,
                                         number=issue_nr, in_volume__number=volume_nr)
     papers = issue.publication_set.order_by('paper_nr')
-    next_issue = (Issue.objects.published(journal='SciPost Physics',
+    next_issue = (Issue.objects.published(journal=journal_name,
                                           start_date__gt=issue.start_date)
                                .order_by('start_date').first())
-    prev_issue = (Issue.objects.published(journal='SciPost Physics',
+    prev_issue = (Issue.objects.published(journal=journal_name,
                                           start_date__lt=issue.start_date)
                                .order_by('start_date').last())
 
@@ -109,7 +152,9 @@ def scipost_physics_issue_detail(request, volume_nr, issue_nr):
         'issue': issue,
         'prev_issue': prev_issue,
         'next_issue': next_issue,
-        'papers': papers
+        'papers': papers,
+        'journal_name': journal_name,
+        'journal_key': journal_key
     }
     return render(request, 'journals/scipost_physics_issue_detail.html', context)
 
@@ -268,8 +313,7 @@ def mark_first_author(request, publication_id, contributor_id):
     publication.first_author = contributor
     publication.first_author_unregistered = None
     publication.save()
-    return redirect(reverse('scipost:publication_detail',
-                            kwargs={'doi_string': publication.doi_string, }))
+    return redirect(publication.get_absolute_url())
 
 
 @permission_required('scipost.can_publish_accepted_submission', return_403=True)
@@ -280,8 +324,7 @@ def mark_first_author_unregistered(request, publication_id, unregistered_author_
     publication.first_author = None
     publication.first_author_unregistered = unregistered_author
     publication.save()
-    return redirect(reverse('scipost:publication_detail',
-                            kwargs={'doi_string': publication.doi_string, }))
+    return redirect(publication.get_absolute_url())
 
 
 @permission_required('scipost.can_publish_accepted_submission', return_403=True)
@@ -298,8 +341,8 @@ def add_author(request, publication_id, contributor_id=None, unregistered_author
         contributor = get_object_or_404(Contributor, id=contributor_id)
         publication.authors.add(contributor)
         publication.save()
-        return redirect(reverse('scipost:publication_detail',
-                                kwargs={'doi_string': publication.doi_string, }))
+        return redirect(publication.get_absolute_url())
+
     if request.method == 'POST':
         form = UnregisteredAuthorForm(request.POST)
         if form.is_valid():
@@ -333,8 +376,7 @@ def add_unregistered_author(request, publication_id, unregistered_author_id):
     unregistered_author = get_object_or_404(UnregisteredAuthor, id=unregistered_author_id)
     publication.unregistered_authors.add(unregistered_author)
     publication.save()
-    return redirect(reverse('scipost:publication_detail',
-                            kwargs={'doi_string': publication.doi_string, }))
+    return redirect(publication.get_absolute_url())
 
 
 @permission_required('scipost.can_publish_accepted_submission', return_403=True)
@@ -349,8 +391,7 @@ def add_new_unreg_author(request, publication_id):
                 last_name=new_unreg_author_form.cleaned_data['last_name'],)
             new_unreg_author.save()
             publication.authors_unregistered.add(new_unreg_author)
-            return redirect(reverse('scipost:publication_detail',
-                                    kwargs={'doi_string': publication.doi_string, }))
+            return redirect(publication.get_absolute_url())
     errormessage = 'Method add_new_unreg_author can only be called with POST.'
     return render(request, 'scipost/error.html', context={'errormessage': errormessage})
 
@@ -433,8 +474,7 @@ def create_metadata_xml(request, doi_string):
         if create_metadata_xml_form.is_valid():
             publication.metadata_xml = create_metadata_xml_form.cleaned_data['metadata_xml']
             publication.save()
-            return redirect(reverse('scipost:publication_detail',
-                                    kwargs={'doi_string': publication.doi_string, }))
+            return redirect(publication.get_absolute_url())
 
     # create a doi_batch_id
     salt = ""
@@ -696,7 +736,14 @@ def harvest_citedby_links(request, doi_string):
 
 def publication_detail(request, doi_string):
     publication = Publication.objects.get_published(doi_string=doi_string)
-    context = {'publication': publication, }
+    journal_name = publication.in_issue.in_volume.in_journal.name
+    journal_key = inverse_map_journal(journal_name)
+
+    context = {
+        'publication': publication,
+        'journal_name': journal_name,
+        'journal_key': journal_key
+    }
     return render(request, 'journals/publication_detail.html', context)
 
 
diff --git a/scipost/feeds.py b/scipost/feeds.py
index 8397cb637..738a1c956 100644
--- a/scipost/feeds.py
+++ b/scipost/feeds.py
@@ -171,8 +171,7 @@ class LatestPublicationsFeedRSS(Feed):
         return obj
 
     def item_link(self, item):
-        return reverse('scipost:publication_detail',
-                       kwargs={'doi_string': item.doi_string})
+        return item.get_absolute_url()
 
 
 class LatestPublicationsFeedAtom(LatestPublicationsFeedRSS):
diff --git a/scipost/templates/scipost/index.html b/scipost/templates/scipost/index.html
index 6666b788f..29c476f7e 100644
--- a/scipost/templates/scipost/index.html
+++ b/scipost/templates/scipost/index.html
@@ -66,7 +66,7 @@
                 <div class="card-block">
                   <h1 class="card-title"><a href="{% url 'journals:journals' %}">Latest Publications</a></h1>
                     <h2 class="banner">
-                        <a href="{% url 'journals:scipost_physics' %}">SciPost Physics</a>
+                        <a href="{% url 'journal:landing_page' 'SciPostPhys' %}">SciPost Physics</a>
                     </h2>
                       {% if issue and publications %}
                       <h4 class="card-text text-center mt-2">A selection from the {% if issue.is_current %}current{% else %}last{% endif %} issue:</h4>
diff --git a/scipost/urls.py b/scipost/urls.py
index a26c8e095..20f844fda 100644
--- a/scipost/urls.py
+++ b/scipost/urls.py
@@ -6,7 +6,6 @@ from .feeds import LatestNewsFeedRSS, LatestNewsFeedAtom, LatestCommentsFeedRSS,
 
 from journals import views as journals_views
 
-
 urlpatterns = [
     url(r'^$', views.index, name='index'),
     url(r'^base$', views.base, name='base'),
@@ -176,18 +175,20 @@ urlpatterns = [
     # Publications #
     ################
 
-    url(r'^SciPostPhys$',
-        journals_views.scipost_physics,
-        name='SciPostPhys'),
-    url(r'^10.21468/SciPostPhys$',
-        journals_views.scipost_physics,
-        name='doi_SciPostPhys'),
-    url(r'^SciPostPhys.(?P<volume_nr>[0-9]+).(?P<issue_nr>[0-9]+)$',
-        journals_views.scipost_physics_issue_detail,
-        name='SciPostPhys_issue_detail_from_doi_label'),
-    url(r'^10.21468/SciPostPhys.(?P<volume_nr>[0-9]+).(?P<issue_nr>[0-9]+)$',
-        journals_views.scipost_physics_issue_detail,
-        name='SciPostPhys_issue_detail'),
+
+
+    # url(r'^10.21468/%s$' % JOURNAL_REGEX,
+    #     journals_views.journal_landing_page,
+    #     name='journal_abbreviation'),
+    # url(r'^%s$' % JOURNAL_REGEX,
+    #     journals_views.journal_landing_page,
+    #    name='journal_abbreviation'),
+    # url(r'^SciPostPhys.(?P<volume_nr>[0-9]+).(?P<issue_nr>[0-9]+)$',
+    #     journals_views.scipost_physics_issue_detail,
+    #     name='SciPostPhys_issue_detail_from_doi_label'),
+    # url(r'^10.21468/SciPostPhys.(?P<volume_nr>[0-9]+).(?P<issue_nr>[0-9]+)$',
+    #     journals_views.scipost_physics_issue_detail,
+    #     name='SciPostPhys_issue_detail'),
 
     url(r'^(?P<doi_string>10.21468/[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})$',
         journals_views.publication_detail,
@@ -195,12 +196,12 @@ urlpatterns = [
     url(r'^(?P<doi_string>10.21468/[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})/pdf$',
         journals_views.publication_pdf,
         name='publication_pdf'),
-    url(r'^(?P<doi_label>[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})$',
-        journals_views.publication_detail_from_doi_label,
-        name='publication_detail_from_doi_label'),
-    url(r'^(?P<doi_label>[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})/pdf$',
-        journals_views.publication_pdf_from_doi_label,
-        name='publication_pdf_from_doi_label'),
+    # url(r'^(?P<doi_label>[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})$',
+    #     journals_views.publication_detail_from_doi_label,
+    #     name='publication_detail_from_doi_label'),
+    # url(r'^(?P<doi_label>[a-zA-Z]+.[0-9]+.[0-9]+.[0-9]{3,})/pdf$',
+    #     journals_views.publication_pdf_from_doi_label,
+    #     name='publication_pdf_from_doi_label'),
 
 
     ################
diff --git a/submissions/templates/submissions/_submission_status_block.html b/submissions/templates/submissions/_submission_status_block.html
index 28aa0b472..7e56189de 100644
--- a/submissions/templates/submissions/_submission_status_block.html
+++ b/submissions/templates/submissions/_submission_status_block.html
@@ -2,6 +2,6 @@
 <div class="d-inline">
     <span class="label label-secondary">{{submission.get_status_display}}</span>
     {% if submission.publication %}
-        as <a href="{% url 'scipost:publication_detail' submission.publication.doi_string %}">{{submission.publication.in_issue.in_volume.in_journal.get_abbreviation_citation}} <strong>{{submission.publication.in_issue.in_volume.number}}</strong>, {{submission.publication.get_paper_nr}} ({{submission.publication.publication_date|date:'Y'}})</a>
+        as <a href="{{submission.publication.get_absolute_url}}">{{submission.publication.in_issue.in_volume.in_journal.get_abbreviation_citation}} <strong>{{submission.publication.in_issue.in_volume.number}}</strong>, {{submission.publication.get_paper_nr}} ({{submission.publication.publication_date|date:'Y'}})</a>
     {% endif %}
 </div>
-- 
GitLab