From 970bfaa7f65035b5169e74bf00bac495d9dd2a0c Mon Sep 17 00:00:00 2001 From: John Tordoff Date: Fri, 7 Nov 2025 14:46:09 -0500 Subject: [PATCH 1/3] add logo information to templates --- api/providers/serializers.py | 7 ++++++- api/requests/serializers.py | 2 ++ notifications/tasks.py | 3 ++- osf/models/collection_submission.py | 12 +++++++++++- 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/api/providers/serializers.py b/api/providers/serializers.py index 188fbe579ea..07bc50b825c 100644 --- a/api/providers/serializers.py +++ b/api/providers/serializers.py @@ -14,7 +14,7 @@ from osf.models.user import Email, OSFUser from osf.models.validators import validate_email from osf.utils.permissions import REVIEW_GROUPS, ADMIN -from website.settings import DOMAIN +from website.settings import DOMAIN, OSF_PREPRINTS_LOGO class ProviderSerializer(JSONAPISerializer): @@ -365,6 +365,11 @@ def create(self, validated_data): context['is_reviews_moderator_notification'] = True context['is_admin'] = perm_group == ADMIN context['provider_url'] = f'{provider.domain or DOMAIN}preprints/{(provider._id if not provider.domain else '').strip('/')}', + if self.provider._id == 'osf': + logo = OSF_PREPRINTS_LOGO + else: + logo = provider._id + context['logo'] = logo provider.add_to_group(user, perm_group) setattr(user, 'permission_group', perm_group) # Allows reserialization diff --git a/api/requests/serializers.py b/api/requests/serializers.py index cca3f713094..7adb633f3fb 100644 --- a/api/requests/serializers.py +++ b/api/requests/serializers.py @@ -200,6 +200,8 @@ def make_node_institutional_access_request(self, node, validated_data) -> NodeRe 'comment': comment, 'domain': settings.DOMAIN, 'institution_name': institution.name if institution else None, + 'logo': settings.OSF_LOGO, + }, email_context={ 'bcc_addr': [sender.username] if validated_data['bcc_sender'] else None, diff --git a/notifications/tasks.py b/notifications/tasks.py index cea827f86cd..7b962296ffa 100644 --- a/notifications/tasks.py +++ b/notifications/tasks.py @@ -163,7 +163,8 @@ def send_moderator_email_task(self, user_id, notification_ids, **kwargs): 'reviews_submissions_url': submissions_url, 'provider_type': provider_type, 'additional_context': additional_context, - 'is_admin': provider.get_group(ADMIN).user_set.filter(id=user.id).exists() + 'is_admin': provider.get_group(ADMIN).user_set.filter(id=user.id).exists(), + 'logo': provider._id if not provider.is_default else settings.OSF_PREPRINTS_LOGO, } NotificationType.Type.DIGEST_REVIEWS_MODERATORS.instance.emit( diff --git a/osf/models/collection_submission.py b/osf/models/collection_submission.py index aa8631052ab..ee862468283 100644 --- a/osf/models/collection_submission.py +++ b/osf/models/collection_submission.py @@ -148,7 +148,9 @@ def _notify_moderators_pending(self, event_data): 'reviews_submission_url': f'{DOMAIN}reviews/registries/{self.guid.referent._id}/{self.guid.referent._id}', 'is_request_email': False, 'is_initiator': self.creator == user, - 'profile_image_url': user.profile_image_url() + 'profile_image_url': user.profile_image_url(), + 'logo': self.collection.provider._id if + not self.collection.provider.is_default else settings.OSF_PREPRINTS_LOGO, }, is_digest=True, ) @@ -189,6 +191,8 @@ def _notify_accepted(self, event_data): 'domain': settings.DOMAIN, 'osf_contact_email': settings.OSF_CONTACT_EMAIL, 'is_initiator': self.creator == contributor, + 'logo': self.collection.provider._id if + not self.collection.provider.is_default else settings.OSF_PREPRINTS_LOGO, }, ) @@ -228,6 +232,8 @@ def _notify_moderated_rejected(self, event_data): 'reviews_submission_url': f'{DOMAIN}reviews/registries/{self.guid.referent._id}/{self.guid.referent._id}', 'rejection_justification': event_data.kwargs.get('comment'), 'osf_contact_email': settings.OSF_CONTACT_EMAIL, + 'logo': self.collection.provider._id if + not self.collection.provider.is_default else settings.OSF_PREPRINTS_LOGO, }, ) @@ -271,6 +277,8 @@ def _notify_removed(self, event_data): 'profile_image_url': user.profile_image_url(), 'domain': settings.DOMAIN, 'osf_contact_email': settings.OSF_CONTACT_EMAIL, + 'logo': self.collection.provider._id if + not self.collection.provider.is_default else settings.OSF_PREPRINTS_LOGO, } if removed_due_to_privacy and self.collection.provider: @@ -405,6 +413,8 @@ def _notify_cancel(self, event_data): 'message': '', 'osf_contact_email': settings.OSF_CONTACT_EMAIL, 'reviews_submission_url': f'{DOMAIN}reviews/registries/{self.guid.referent._id}/{self.guid.referent._id}', + 'logo': self.collection.provider._id if + not self.collection.provider.is_default else settings.OSF_PREPRINTS_LOGO, }, ) From 73fae591abafe557533d63021bc91d1533737991 Mon Sep 17 00:00:00 2001 From: John Tordoff Date: Mon, 10 Nov 2025 10:03:07 -0500 Subject: [PATCH 2/3] fix typo --- api/providers/serializers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/providers/serializers.py b/api/providers/serializers.py index 07bc50b825c..749b8305cd5 100644 --- a/api/providers/serializers.py +++ b/api/providers/serializers.py @@ -365,7 +365,7 @@ def create(self, validated_data): context['is_reviews_moderator_notification'] = True context['is_admin'] = perm_group == ADMIN context['provider_url'] = f'{provider.domain or DOMAIN}preprints/{(provider._id if not provider.domain else '').strip('/')}', - if self.provider._id == 'osf': + if provider._id == 'osf': logo = OSF_PREPRINTS_LOGO else: logo = provider._id From 323444207186fd8b32ec696de08e088ca9989ccc Mon Sep 17 00:00:00 2001 From: John Tordoff Date: Mon, 10 Nov 2025 14:32:24 -0500 Subject: [PATCH 3/3] catch NoneType provider situations --- osf/models/collection_submission.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/osf/models/collection_submission.py b/osf/models/collection_submission.py index ee862468283..0b41bb19e67 100644 --- a/osf/models/collection_submission.py +++ b/osf/models/collection_submission.py @@ -150,7 +150,7 @@ def _notify_moderators_pending(self, event_data): 'is_initiator': self.creator == user, 'profile_image_url': user.profile_image_url(), 'logo': self.collection.provider._id if - not self.collection.provider.is_default else settings.OSF_PREPRINTS_LOGO, + self.collection.provider and not self.collection.provider.is_default else settings.OSF_PREPRINTS_LOGO, }, is_digest=True, ) @@ -192,7 +192,7 @@ def _notify_accepted(self, event_data): 'osf_contact_email': settings.OSF_CONTACT_EMAIL, 'is_initiator': self.creator == contributor, 'logo': self.collection.provider._id if - not self.collection.provider.is_default else settings.OSF_PREPRINTS_LOGO, + self.collection.provider and not self.collection.provider.is_default else settings.OSF_PREPRINTS_LOGO, }, ) @@ -233,7 +233,7 @@ def _notify_moderated_rejected(self, event_data): 'rejection_justification': event_data.kwargs.get('comment'), 'osf_contact_email': settings.OSF_CONTACT_EMAIL, 'logo': self.collection.provider._id if - not self.collection.provider.is_default else settings.OSF_PREPRINTS_LOGO, + self.collection.provider and not self.collection.provider.is_default else settings.OSF_PREPRINTS_LOGO, }, ) @@ -278,7 +278,7 @@ def _notify_removed(self, event_data): 'domain': settings.DOMAIN, 'osf_contact_email': settings.OSF_CONTACT_EMAIL, 'logo': self.collection.provider._id if - not self.collection.provider.is_default else settings.OSF_PREPRINTS_LOGO, + self.collection.provider and not self.collection.provider.is_default else settings.OSF_PREPRINTS_LOGO, } if removed_due_to_privacy and self.collection.provider: @@ -414,7 +414,7 @@ def _notify_cancel(self, event_data): 'osf_contact_email': settings.OSF_CONTACT_EMAIL, 'reviews_submission_url': f'{DOMAIN}reviews/registries/{self.guid.referent._id}/{self.guid.referent._id}', 'logo': self.collection.provider._id if - not self.collection.provider.is_default else settings.OSF_PREPRINTS_LOGO, + self.collection.provider and not self.collection.provider.is_default else settings.OSF_PREPRINTS_LOGO, }, )