|
1 | 1 | from django.shortcuts import redirect |
2 | 2 | from django.views.generic import TemplateView |
3 | 3 | from django.contrib import messages |
4 | | -from osf.models import RegistrationProvider, OSFUser |
| 4 | +from osf.models import RegistrationProvider, OSFUser, CollectionProvider, NotificationType |
| 5 | +from website.settings import DOMAIN |
5 | 6 |
|
6 | 7 |
|
7 | 8 | class AddAdminOrModerator(TemplateView): |
@@ -32,16 +33,41 @@ def post(self, request, *args, **kwargs): |
32 | 33 | if target_user.has_groups(provider.group_names): |
33 | 34 | messages.error(request, f'User with guid: {data["add-moderators-form"][0]} is already a moderator or admin') |
34 | 35 | return redirect(f'{self.url_namespace}:add_admin_or_moderator', provider_id=provider.id) |
| 36 | + context = {} |
| 37 | + context['user_fullname'] = target_user.fullname |
| 38 | + context['referrer_fullname'] = self.request.user.username |
| 39 | + context['provider_name'] = provider.name |
35 | 40 |
|
36 | 41 | if 'admin' in data: |
37 | 42 | provider.add_to_group(target_user, 'admin') |
38 | 43 | target_type = 'admin' |
| 44 | + context['is_admin'] = True |
39 | 45 | else: |
40 | 46 | provider.add_to_group(target_user, 'moderator') |
41 | 47 | target_type = 'moderator' |
| 48 | + context['is_admin'] = False |
| 49 | + |
| 50 | + context['provider_name'] = provider.name |
| 51 | + context['provider__id'] = provider._id |
| 52 | + context['is_reviews_moderator_notification'] = True |
| 53 | + |
| 54 | + if isinstance(provider, RegistrationProvider): |
| 55 | + provider_type_word = 'registries' |
| 56 | + context['notification_settings_url'] = f'{DOMAIN}registries/{provider._id}/moderation/settings' |
| 57 | + elif isinstance(provider, CollectionProvider): |
| 58 | + provider_type_word = 'collections' |
| 59 | + context['notification_settings_url'] = f'{DOMAIN}registries/{provider._id}/moderation/settings' |
| 60 | + else: |
| 61 | + provider_type_word = 'preprints' |
| 62 | + context['notification_settings_url'] = f'{DOMAIN}preprints/{provider._id}/moderation/notifications' |
42 | 63 |
|
| 64 | + context['provider_url'] = f'{provider.domain or DOMAIN}{provider_type_word}/{(provider._id if not provider.domain else '').strip('/')}' |
43 | 65 | messages.success(request, f'The following {target_type} was successfully added: {target_user.fullname} ({target_user.username})') |
44 | | - |
| 66 | + notification_type = NotificationType.Type.PROVIDER_MODERATOR_ADDED |
| 67 | + notification_type.instance.emit( |
| 68 | + user=target_user, |
| 69 | + event_context=context, |
| 70 | + ) |
45 | 71 | return redirect(f'{self.url_namespace}:add_admin_or_moderator', provider_id=provider.id) |
46 | 72 |
|
47 | 73 |
|
|
0 commit comments