|
1 | 1 | import os
|
| 2 | +from datetime import datetime, timedelta |
2 | 3 |
|
3 | 4 | from django.conf import settings
|
4 | 5 | from django.core.cache import cache
|
|
8 | 9 |
|
9 | 10 | from auth.helpers import auth_required
|
10 | 11 | from club.exceptions import AccessDenied
|
11 |
| -from landing.forms import GodmodeNetworkSettingsEditForm, GodmodeDigestEditForm |
| 12 | +from landing.forms import GodmodeNetworkSettingsEditForm, GodmodeDigestEditForm, GodmodeInviteForm |
12 | 13 | from landing.models import GodSettings
|
| 14 | +from notifications.email.invites import send_invited_email |
13 | 15 | from users.models.user import User
|
14 | 16 |
|
15 | 17 | EXISTING_DOCS = [
|
@@ -83,3 +85,38 @@ def godmode_digest_settings(request):
|
83 | 85 | form = GodmodeDigestEditForm(instance=god_settings)
|
84 | 86 |
|
85 | 87 | return render(request, "admin/simple_form.html", {"form": form})
|
| 88 | + |
| 89 | + |
| 90 | +@auth_required |
| 91 | +def godmode_invite(request): |
| 92 | + if not request.me.is_god: |
| 93 | + raise AccessDenied() |
| 94 | + |
| 95 | + if request.method == "POST": |
| 96 | + form = GodmodeInviteForm(request.POST, request.FILES) |
| 97 | + if form.is_valid(): |
| 98 | + email = form.cleaned_data["email"] |
| 99 | + days = form.cleaned_data["days"] |
| 100 | + now = datetime.utcnow() |
| 101 | + user, is_created = User.objects.get_or_create( |
| 102 | + email=email, |
| 103 | + defaults=dict( |
| 104 | + membership_platform_type=User.MEMBERSHIP_PLATFORM_DIRECT, |
| 105 | + full_name=email[:email.find("@")], |
| 106 | + membership_started_at=now, |
| 107 | + membership_expires_at=now + timedelta(days=days), |
| 108 | + created_at=now, |
| 109 | + updated_at=now, |
| 110 | + moderation_status=User.MODERATION_STATUS_INTRO, |
| 111 | + ), |
| 112 | + ) |
| 113 | + send_invited_email(request.me, user) |
| 114 | + return render(request, "message.html", { |
| 115 | + "title": "🎁 Юзер приглашен", |
| 116 | + "message": f"Сейчас он получит на почту '{email}' уведомление об этом. " |
| 117 | + f"Ему будет нужно залогиниться по этой почте и заполнить интро." |
| 118 | + }) |
| 119 | + else: |
| 120 | + form = GodmodeInviteForm() |
| 121 | + |
| 122 | + return render(request, "admin/simple_form.html", {"form": form}) |
0 commit comments