From 059a4d05967ea8d22618e6a212c1fac7acf65177 Mon Sep 17 00:00:00 2001 From: Vlad0n20 Date: Fri, 5 Sep 2025 17:07:53 +0300 Subject: [PATCH 1/2] Add a new page for pending preprint moderation --- osf/models/preprint.py | 18 ++++++++++++++++++ website/routes.py | 11 +++++++++++ 2 files changed, 29 insertions(+) diff --git a/osf/models/preprint.py b/osf/models/preprint.py index 69f694bb5ce..fac070cb997 100644 --- a/osf/models/preprint.py +++ b/osf/models/preprint.py @@ -690,6 +690,24 @@ def is_preprint_orphan(self): def has_submitted_preprint(self): return self.machine_state != DefaultStates.INITIAL.value + @property + def is_pending_moderation(self): + if self.machine_state == DefaultStates.INITIAL.value: + return False + + if not self.provider or not self.provider.reviews_workflow: + return False + + from api.providers.workflows import PUBLIC_STATES + + workflow = self.provider.reviews_workflow + public_states = PUBLIC_STATES.get(workflow, []) + + if self.machine_state not in public_states: + return True + + return False + @property def deep_url(self): # Required for GUID routing diff --git a/website/routes.py b/website/routes.py index 2a3415e1051..c8806c0645e 100644 --- a/website/routes.py +++ b/website/routes.py @@ -257,6 +257,17 @@ def ember_app(path=None): preprint = Preprint.load(guid_str) if preprint and preprint._id != guid_str: return redirect(f"{settings.DOMAIN}preprints/{path_values[0]}/{preprint._id}", code=302) + if preprint: + from framework.auth import Auth + auth = Auth.from_kwargs(request.args.to_dict(), {}) + if not preprint.can_view(auth): + if getattr(preprint, 'is_pending_moderation', True): + renderer = OsfWebRenderer('pending_moderation.mako', trust=False) + return renderer({ + 'resource_type': (preprint.provider.preprint_word or 'preprint') if preprint.provider else 'preprint', + 'provider_name': preprint.provider.name if preprint.provider else 'OSF', + }) + raise HTTPError(http_status.HTTP_404_NOT_FOUND) # For all other cases, let ember app handle it ember_app = EXTERNAL_EMBER_APPS.get('ember_osf_web', False) or ember_app break From f7a4a770a2615ee9637d8bce62df77e024ff286a Mon Sep 17 00:00:00 2001 From: Vlad0n20 Date: Tue, 16 Sep 2025 16:33:43 +0300 Subject: [PATCH 2/2] Add template for pending moderation --- website/routes.py | 2 +- website/templates/pending_moderation.mako | 37 +++++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 website/templates/pending_moderation.mako diff --git a/website/routes.py b/website/routes.py index c8806c0645e..ebfce99bcb2 100644 --- a/website/routes.py +++ b/website/routes.py @@ -261,7 +261,7 @@ def ember_app(path=None): from framework.auth import Auth auth = Auth.from_kwargs(request.args.to_dict(), {}) if not preprint.can_view(auth): - if getattr(preprint, 'is_pending_moderation', True): + if preprint.is_pending_moderation: renderer = OsfWebRenderer('pending_moderation.mako', trust=False) return renderer({ 'resource_type': (preprint.provider.preprint_word or 'preprint') if preprint.provider else 'preprint', diff --git a/website/templates/pending_moderation.mako b/website/templates/pending_moderation.mako new file mode 100644 index 00000000000..27f152ebee1 --- /dev/null +++ b/website/templates/pending_moderation.mako @@ -0,0 +1,37 @@ +<%inherit file="base.mako"/> +<%def name="title()">Pending Moderation +<%def name="description()">This ${resource_type} is pending moderation + +<%def name="content()"> + + +
+
+
+
+
+

Pending Moderation

+
+ + This ${resource_type} is pending moderation at ${provider_name} +

This ${resource_type} has been submitted for review and is not yet publicly available. + Please check back later as moderation decisions may take some time.

+
+
+
+
+
+
+ +