diff --git a/src/security/decorators.py b/src/security/decorators.py
index d2a6b1c37b..1dd8189d75 100755
--- a/src/security/decorators.py
+++ b/src/security/decorators.py
@@ -1502,13 +1502,36 @@ def article_is_not_submitted(func):
def _article_is_not_submitted(request, *args, **kwargs):
article_id = kwargs.get("article_id")
try:
- article = models.Article.objects.get(
+ models.Article.objects.get(
pk=article_id,
journal=request.journal,
date_submitted__isnull=True,
)
return func(request, *args, **kwargs)
except models.Article.DoesNotExist:
+ submitted_article = models.Article.objects.filter(
+ pk=article_id,
+ journal=request.journal,
+ ).first()
+
+ if submitted_article and (
+ request.user.is_staff
+ or (
+ getattr(request.user, "pk", None)
+ and request.user.pk == submitted_article.owner_id
+ )
+ ):
+ messages.info(
+ request,
+ "This article has already been submitted. Showing its status instead.",
+ )
+ return redirect(
+ reverse(
+ "core_dashboard_article",
+ kwargs={"article_id": submitted_article.pk},
+ )
+ )
+
raise Http404("This article has already been submitted.")
return _article_is_not_submitted
diff --git a/src/security/test_security.py b/src/security/test_security.py
index 8c269a9973..dd76d084da 100644
--- a/src/security/test_security.py
+++ b/src/security/test_security.py
@@ -4301,6 +4301,28 @@ def test_article_is_not_submitted_complete(self):
with self.assertRaises(Http404):
decorated_func(request, **kwargs)
+ def test_article_is_not_submitted_complete_redirects_author(self):
+ func = Mock()
+ decorated_func = decorators.article_is_not_submitted(func)
+ kwargs = {"article_id": self.article_unassigned.pk}
+
+ request = self.prepare_request_with_user(
+ self.regular_user,
+ journal=self.journal_one,
+ )
+
+ response = decorated_func(request, **kwargs)
+
+ self.assertEqual(response.status_code, 302)
+ self.assertEqual(
+ response.url,
+ reverse(
+ "core_dashboard_article",
+ kwargs={"article_id": self.article_unassigned.pk},
+ ),
+ )
+ self.assertFalse(func.called)
+
def test_article_is_not_submitted_unsubmitted(self):
func = Mock()
decorated_func = decorators.article_is_not_submitted(func)
diff --git a/src/templates/admin/core/article.html b/src/templates/admin/core/article.html
index c7ed5e3540..4c9bf54637 100644
--- a/src/templates/admin/core/article.html
+++ b/src/templates/admin/core/article.html
@@ -1,5 +1,5 @@
{% extends "admin/core/base.html" %}
-{% load hooks %}
+{% load hooks i18n %}
{% block title %}Article {{ article.pk }} Information{% endblock %}
{% block breadcrumbs %}
@@ -18,6 +18,34 @@
{{ article.safe_title }}
{% hook 'edit_article' %}
{% endif %}