Made player config page work
This commit is contained in:
parent
e8f244d279
commit
b3d0510161
@ -50,6 +50,8 @@
|
|||||||
right: 0;
|
right: 0;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: row;
|
||||||
}
|
}
|
||||||
|
|
||||||
#profile-settings-button, #profile-logout-button {
|
#profile-settings-button, #profile-logout-button {
|
||||||
|
|||||||
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
<div id="profile-box">
|
<div id="profile-box">
|
||||||
<div id="avatar-box">
|
<div id="avatar-box">
|
||||||
<img id="avatar" src="{{ user.player.avatar.url }}">
|
<img id="avatar" src="{{ user.player.avatar.url }}" height=64px width=64px>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="profile-user">
|
<div id="profile-user">
|
||||||
@ -31,12 +31,11 @@
|
|||||||
|
|
||||||
</div>
|
</div>
|
||||||
<div id="profile-buttons">
|
<div id="profile-buttons">
|
||||||
<a href="/users/config">
|
<form action="/users/config">
|
||||||
<button id="profile-settings-button">settings</button>
|
<input id="profile-settings-button" type="submit" value="config" />
|
||||||
</a>
|
</form>
|
||||||
<a href="/users/logout">
|
<form action="/users/logout">
|
||||||
<button id="profile-logout-button">logout</button>
|
<input id="profile-logout-button" type="submit" value="logout" />
|
||||||
</a>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
@ -1,6 +1,6 @@
|
|||||||
django==5.1.*
|
django==5.1.*
|
||||||
django-crispy-forms
|
django-crispy-forms
|
||||||
crispy-bulma
|
crispy-bootstrap4
|
||||||
django-extensions
|
django-extensions
|
||||||
tqdm
|
tqdm
|
||||||
Pillow
|
Pillow
|
||||||
|
|||||||
@ -39,7 +39,7 @@ INSTALLED_APPS = [
|
|||||||
|
|
||||||
# Plugins
|
# Plugins
|
||||||
"crispy_forms",
|
"crispy_forms",
|
||||||
"crispy_bulma",
|
"crispy_bootstrap4",
|
||||||
"django_extensions",
|
"django_extensions",
|
||||||
"django_cleanup.apps.CleanupConfig",
|
"django_cleanup.apps.CleanupConfig",
|
||||||
|
|
||||||
@ -141,7 +141,5 @@ MEDIA_URL = "/media/"
|
|||||||
|
|
||||||
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
||||||
|
|
||||||
CRISPY_ALLOWED_TEMPLATE_PACKS = ("bulma",)
|
CRISPY_ALLOWED_TEMPLATE_PACKS = "bootstrap4"
|
||||||
CRISPY_TEMPLATE_PACK = "bulma"
|
CRISPY_TEMPLATE_PACK = "bootstrap4"
|
||||||
|
|
||||||
|
|
||||||
@ -8,7 +8,8 @@ from crispy_forms.helper import FormHelper
|
|||||||
from crispy_forms.layout import Submit
|
from crispy_forms.layout import Submit
|
||||||
|
|
||||||
from users.models import Player
|
from users.models import Player
|
||||||
from users.validators import usernameValidator
|
from users.validators import usernameValidator, username_change_validator
|
||||||
|
from bloonsa_game.models import Config as BloonsaConfig
|
||||||
|
|
||||||
class UserRegisterForm(UserCreationForm):
|
class UserRegisterForm(UserCreationForm):
|
||||||
field_order = ("username", "password1", "password2")
|
field_order = ("username", "password1", "password2")
|
||||||
@ -72,21 +73,19 @@ class UserLoginForm(AuthenticationForm):
|
|||||||
]
|
]
|
||||||
|
|
||||||
class UserUpdateForm(forms.ModelForm):
|
class UserUpdateForm(forms.ModelForm):
|
||||||
username = forms.CharField(min_length=3,
|
|
||||||
max_length=16,
|
|
||||||
label="Username",
|
|
||||||
required=False,
|
|
||||||
validators=[usernameValidator, ],
|
|
||||||
help_text=_("3-16 chars, alphanumeric and _- pls"))
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = User
|
model = User
|
||||||
fields = ["username",]
|
fields = []
|
||||||
|
|
||||||
class PlayerUpdateForm(forms.ModelForm):
|
class PlayerUpdateForm(forms.ModelForm):
|
||||||
bio = forms.CharField(max_length=128, required=False)
|
bio = forms.CharField(max_length=128, required=False)
|
||||||
|
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Player
|
model = Player
|
||||||
fields = ["avatar", "bio"]
|
fields = ["avatar", "bio"]
|
||||||
|
|
||||||
|
class BloonsaConfigUpdateForm(forms.ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = BloonsaConfig
|
||||||
|
fields = ["autoplay",]
|
||||||
@ -1,10 +1,14 @@
|
|||||||
#config-box {
|
#config-box {
|
||||||
background-color: black;
|
background-color: #324299;
|
||||||
|
font-family: "Comic Sans MS", "Comic Sans", cursive;
|
||||||
|
color: white;
|
||||||
|
position: relative;
|
||||||
width: 640px;
|
width: 640px;
|
||||||
height: 600px;
|
height: 600px;
|
||||||
}
|
|
||||||
|
|
||||||
#config-box {
|
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: row;
|
flex-direction: row;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#config-profile-box {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
@ -7,16 +7,17 @@
|
|||||||
{% endblock title %}
|
{% endblock title %}
|
||||||
|
|
||||||
{% block head %}
|
{% block head %}
|
||||||
<link rel="stylesheet" href="{% static 'users/css/bulma-1.0.3.css' %}">
|
|
||||||
<link rel="stylesheet" href="{% static 'users/css/config.css' %}">
|
<link rel="stylesheet" href="{% static 'users/css/config.css' %}">
|
||||||
{% endblock head %}
|
{% endblock head %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<form method="post" id="config-box">
|
<form method="post" id="config-box" enctype="multipart/form-data">
|
||||||
<div id="config-profile-box">
|
<div id="config-profile-box">
|
||||||
<div id="profile-settings-text">Profile settings</div>
|
<div id="profile-settings-text">Profile settings</div>
|
||||||
{% crispy form_player %}
|
{% csrf_token %}
|
||||||
{% crispy form_user %}
|
{{ form_user|crispy }}
|
||||||
|
{{ form_player|crispy }}
|
||||||
|
{{ form_config|crispy }}
|
||||||
<button type="submit" class="btn btn-primary">Save changes</button>
|
<button type="submit" class="btn btn-primary">Save changes</button>
|
||||||
</div>
|
</div>
|
||||||
<div id="config-bloonsa-box"></div>
|
<div id="config-bloonsa-box"></div>
|
||||||
|
|||||||
@ -1,6 +1,7 @@
|
|||||||
from django.contrib.auth import logout
|
from django.contrib.auth import logout
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
|
||||||
|
from bloonsa_game.models import Config
|
||||||
from users.models import Player, Log
|
from users.models import Player, Log
|
||||||
|
|
||||||
actions = Log.Actions
|
actions = Log.Actions
|
||||||
@ -24,6 +25,10 @@ class BloonsaUtil:
|
|||||||
if not request.user.is_authenticated:
|
if not request.user.is_authenticated:
|
||||||
return
|
return
|
||||||
if hasattr(request.user, "player"):
|
if hasattr(request.user, "player"):
|
||||||
|
# TODO Optimize this by only doing it on register
|
||||||
|
if not hasattr(request.user.player, "bloonsa_config"):
|
||||||
|
bloonsa_config = Config(player=request.user.player)
|
||||||
|
bloonsa_config.save()
|
||||||
return request.user.player
|
return request.user.player
|
||||||
ip = self.get_ip(request=request)
|
ip = self.get_ip(request=request)
|
||||||
player = Player(user=request.user,
|
player = Player(user=request.user,
|
||||||
|
|||||||
@ -15,3 +15,11 @@ def usernameValidator(username):
|
|||||||
charset = set(string.ascii_letters + string.digits + "_-")
|
charset = set(string.ascii_letters + string.digits + "_-")
|
||||||
if not all(x in charset for x in username):
|
if not all(x in charset for x in username):
|
||||||
raise ValidationError("Username may only contain normal letters, numbers and _-")
|
raise ValidationError("Username may only contain normal letters, numbers and _-")
|
||||||
|
|
||||||
|
def username_change_validator(username):
|
||||||
|
if len(username) < 3 or len(username) > 16:
|
||||||
|
raise ValidationError("Username must be between 3-16 characters long")
|
||||||
|
|
||||||
|
charset = set(string.ascii_letters + string.digits + "_-")
|
||||||
|
if not all(x in charset for x in username):
|
||||||
|
raise ValidationError("Username may only contain normal letters, numbers and _-")
|
||||||
|
|||||||
@ -4,7 +4,7 @@ from django.contrib.auth.mixins import LoginRequiredMixin
|
|||||||
from django.shortcuts import render, redirect
|
from django.shortcuts import render, redirect
|
||||||
from django.views.generic import TemplateView
|
from django.views.generic import TemplateView
|
||||||
|
|
||||||
from users.forms import UserRegisterForm, UserLoginForm, PlayerUpdateForm, UserUpdateForm
|
from users.forms import UserRegisterForm, UserLoginForm, PlayerUpdateForm, UserUpdateForm, BloonsaConfigUpdateForm
|
||||||
from users.models import Player
|
from users.models import Player
|
||||||
from users.util import bloonsa_util, actions
|
from users.util import bloonsa_util, actions
|
||||||
|
|
||||||
@ -57,32 +57,36 @@ class LogoutView(TemplateView):
|
|||||||
class ConfigView(LoginRequiredMixin, TemplateView):
|
class ConfigView(LoginRequiredMixin, TemplateView):
|
||||||
|
|
||||||
def get(self, request, *args, **kwargs):
|
def get(self, request, *args, **kwargs):
|
||||||
|
form_config = BloonsaConfigUpdateForm(instance=request.user.player.bloonsa_config)
|
||||||
form_player = PlayerUpdateForm(instance=request.user.player)
|
form_player = PlayerUpdateForm(instance=request.user.player)
|
||||||
form_user = UserUpdateForm(instance=request.user)
|
form_user = UserUpdateForm(instance=request.user)
|
||||||
|
|
||||||
return render(request=request,
|
return render(request=request,
|
||||||
template_name="users/config.html",
|
template_name="users/config.html",
|
||||||
context={"form_player": form_player,
|
context={"form_config": form_config,
|
||||||
|
"form_player": form_player,
|
||||||
"form_user": form_user})
|
"form_user": form_user})
|
||||||
|
|
||||||
# TODO add log
|
# TODO add log
|
||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
form_player = PlayerUpdateForm(request.POST)
|
form_config = BloonsaConfigUpdateForm(request.POST,
|
||||||
form_user = UserUpdateForm(request.POST)
|
instance=request.user.player.bloonsa_config)
|
||||||
if any((
|
form_player = PlayerUpdateForm(request.POST,
|
||||||
not form_player.is_valid(),
|
request.FILES,
|
||||||
not form_user.is_valid()
|
instance=request.user.player)
|
||||||
)):
|
form_user = UserUpdateForm(request.POST, instance=request.user)
|
||||||
|
"""if not form_player.is_valid() or not form_user.is_valid() or not form_config.is_valid():
|
||||||
return render(request=request,
|
return render(request=request,
|
||||||
template_name="users/config.html",
|
template_name="users/config.html",
|
||||||
context={
|
context={
|
||||||
"form_player": form_player,
|
"form_config": form_config,
|
||||||
"form_user": form_user
|
"form_player": form_player,
|
||||||
})
|
"form_user": form_user})"""
|
||||||
user = form_user.save()
|
if form_user.is_valid():
|
||||||
player = form_player.save()
|
form_user.save()
|
||||||
return render(request=request,
|
if form_player.is_valid():
|
||||||
template_name="users/config.html",
|
form_player.save()
|
||||||
context={
|
if form_config.is_valid():
|
||||||
"form_player": form_player,
|
form_config.save()
|
||||||
"form_user": form_user
|
# messages.success(request, "Profile updated successfully")
|
||||||
})
|
return redirect("users:config")
|
||||||
Loading…
Reference in New Issue
Block a user