Skip to content

Commit 64d61e9

Browse files
committed
feat: invite users via godmode
1 parent 859bd0d commit 64d61e9

File tree

4 files changed

+58
-2
lines changed

4 files changed

+58
-2
lines changed

club/urls.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
from comments.views import create_comment, edit_comment, delete_comment, show_comment, upvote_comment, \
1414
retract_comment_vote, pin_comment
1515
from common.feature_flags import feature_switch
16-
from landing.views import landing, docs, godmode_network_settings, godmode_digest_settings, godmode_settings
16+
from landing.views import landing, docs, godmode_network_settings, godmode_digest_settings, godmode_settings, \
17+
godmode_invite
1718
from misc.views import stats, network, robots, generate_ical_invite, generate_google_invite
1819
from notifications.views import render_weekly_digest, email_unsubscribe, email_confirm, render_daily_digest, email_digest_switch, \
1920
link_telegram
@@ -161,6 +162,7 @@
161162
path("godmode/", godmode_settings, name="godmode_settings"),
162163
path("godmode/network/", godmode_network_settings, name="godmode_network_settings"),
163164
path("godmode/digest/", godmode_digest_settings, name="godmode_digest_settings"),
165+
path("godmode/invite/", godmode_invite, name="godmode_invite"),
164166
path("godmode/dev_login/", debug_dev_login, name="debug_dev_login"),
165167
path("godmode/random_login/", debug_random_login, name="debug_random_login"),
166168
path("godmode/login/<str:user_slug>/", debug_login, name="debug_login"),

frontend/html/admin/godmode.html

+4
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@
1818
<span class="compose-type-icon">📰</span>
1919
<span class="compose-type-name">Дайджест</span>
2020
</a>
21+
<a href="{% url "godmode_invite" %}" class="compose-type">
22+
<span class="compose-type-icon">🎁</span>
23+
<span class="compose-type-name">Инвайты</span>
24+
</a>
2125
</div>
2226
</div>
2327
{% endblock %}

landing/forms.py

+13
Original file line numberDiff line numberDiff line change
@@ -47,3 +47,16 @@ class Meta:
4747
fields = [
4848
"network_page",
4949
]
50+
51+
52+
class GodmodeInviteForm(forms.Form):
53+
email = forms.EmailField(
54+
label="E-mail",
55+
required=True,
56+
)
57+
58+
days = forms.IntegerField(
59+
label="Дней",
60+
required=True,
61+
initial=365,
62+
)

landing/views.py

+38-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import os
2+
from datetime import datetime, timedelta
23

34
from django.conf import settings
45
from django.core.cache import cache
@@ -8,8 +9,9 @@
89

910
from auth.helpers import auth_required
1011
from club.exceptions import AccessDenied
11-
from landing.forms import GodmodeNetworkSettingsEditForm, GodmodeDigestEditForm
12+
from landing.forms import GodmodeNetworkSettingsEditForm, GodmodeDigestEditForm, GodmodeInviteForm
1213
from landing.models import GodSettings
14+
from notifications.email.invites import send_invited_email
1315
from users.models.user import User
1416

1517
EXISTING_DOCS = [
@@ -83,3 +85,38 @@ def godmode_digest_settings(request):
8385
form = GodmodeDigestEditForm(instance=god_settings)
8486

8587
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

Comments
 (0)