mirror of
https://github.com/ae-utbm/sith.git
synced 2026-10-24 11:19:33 +00:00
Merge pull request #1507 from ae-utbm/edt-save
Add user timetable saving
This commit is contained in:
22 files changed
+741
-86
No files matched your search
@@ -0,0 +1,22 @@
|
||||
# Generated by Django 5.2.17 on 2026-09-24 14:49
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
dependencies = [("core", "0051_user_cgu_approved_at")]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name="preferences",
|
||||
name="show_my_timetable",
|
||||
field=models.BooleanField(
|
||||
default=True,
|
||||
help_text=(
|
||||
"Allow subscribers to see your timetable and "
|
||||
"to compare it to theirs (if you have filled it)"
|
||||
),
|
||||
verbose_name="show your timetable to others",
|
||||
),
|
||||
),
|
||||
]
|
||||
@@ -799,6 +799,14 @@ class Preferences(models.Model):
|
||||
),
|
||||
default=False,
|
||||
)
|
||||
show_my_timetable = models.BooleanField(
|
||||
_("show your timetable to others"),
|
||||
help_text=_(
|
||||
"Allow subscribers to see your timetable and "
|
||||
"to compare it to theirs (if you have filled it)"
|
||||
),
|
||||
default=True,
|
||||
)
|
||||
notify_on_click = models.BooleanField(
|
||||
_("get a notification for every click"), default=False
|
||||
)
|
||||
|
||||
@@ -29,5 +29,13 @@
|
||||
</span>
|
||||
{{ form.show_my_stats.errors }}
|
||||
</fieldset>
|
||||
<fieldset class="form-group">
|
||||
{{ form.show_my_timetable }}
|
||||
{{ form.show_my_timetable.label_tag() }}
|
||||
<span class="helptext">
|
||||
{{ form.show_my_timetable.help_text }}
|
||||
</span>
|
||||
{{ form.show_my_timetable.errors }}
|
||||
</fieldset>
|
||||
<input type="submit" class="btn btn-blue" value="{% trans %}Save{% endtrans %}">
|
||||
</form>
|
||||
@@ -84,6 +84,7 @@ from core.views import (
|
||||
notification,
|
||||
send_file,
|
||||
)
|
||||
from timetable.views import UserTimetableView
|
||||
|
||||
register_converter(FourDigitYearConverter, "yyyy")
|
||||
register_converter(TwoDigitMonthConverter, "mm")
|
||||
@@ -184,6 +185,11 @@ urlpatterns = [
|
||||
name="user_account_detail",
|
||||
),
|
||||
path("user/<int:user_id>/stats/", UserStatsView.as_view(), name="user_stats"),
|
||||
path(
|
||||
"user/<int:user_id>/edt/",
|
||||
UserTimetableView.as_view(),
|
||||
name="user_timetable",
|
||||
),
|
||||
path(
|
||||
"user/<int:user_id>/gift/create/",
|
||||
GiftCreateView.as_view(),
|
||||
|
||||
+10
-2
@@ -336,10 +336,14 @@ class UserVisibilityForm(forms.ModelForm):
|
||||
|
||||
__preferences_fields = forms.fields_for_model(
|
||||
Preferences,
|
||||
["show_my_stats"],
|
||||
widgets={"show_my_stats": forms.CheckboxInput(attrs={"class": "switch"})},
|
||||
["show_my_stats", "show_my_timetable"],
|
||||
widgets={
|
||||
"show_my_stats": forms.CheckboxInput(attrs={"class": "switch"}),
|
||||
"show_my_timetable": forms.CheckboxInput(attrs={"class": "switch"}),
|
||||
},
|
||||
)
|
||||
show_my_stats = __preferences_fields["show_my_stats"]
|
||||
show_my_timetable = __preferences_fields["show_my_timetable"]
|
||||
|
||||
def __init__(
|
||||
self, *args, initial: dict | None = None, instance: User | None = None, **kwargs
|
||||
@@ -347,12 +351,16 @@ class UserVisibilityForm(forms.ModelForm):
|
||||
if instance:
|
||||
initial = initial or {}
|
||||
initial["show_my_stats"] = instance.preferences.show_my_stats
|
||||
initial["show_my_timetable"] = instance.preferences.show_my_timetable
|
||||
super().__init__(*args, initial=initial, instance=instance, **kwargs)
|
||||
|
||||
def save(self, commit=True) -> User: # noqa: FBT002
|
||||
instance = super().save(commit=commit)
|
||||
if commit:
|
||||
instance.preferences.show_my_stats = self.cleaned_data["show_my_stats"]
|
||||
instance.preferences.show_my_timetable = self.cleaned_data[
|
||||
"show_my_timetable"
|
||||
]
|
||||
instance.preferences.save()
|
||||
return instance
|
||||
|
||||
|
||||
+16
-2
@@ -1,6 +1,14 @@
|
||||
import copy
|
||||
import inspect
|
||||
from typing import TYPE_CHECKING, Any, ClassVar, LiteralString, Protocol, Unpack
|
||||
from typing import (
|
||||
TYPE_CHECKING,
|
||||
Any,
|
||||
ClassVar,
|
||||
LiteralString,
|
||||
Protocol,
|
||||
TypedDict,
|
||||
Unpack,
|
||||
)
|
||||
|
||||
from django.core.exceptions import ImproperlyConfigured
|
||||
from django.template.loader import render_to_string
|
||||
@@ -12,11 +20,17 @@ if TYPE_CHECKING:
|
||||
from django.utils.safestring import SafeString
|
||||
|
||||
|
||||
class TabItem(TypedDict):
|
||||
url: str
|
||||
slug: str
|
||||
name: str
|
||||
|
||||
|
||||
class TabedViewMixin(View):
|
||||
"""Basic functions for displaying tabs in the template."""
|
||||
|
||||
current_tab: ClassVar[str | None] = None
|
||||
list_of_tabs: ClassVar[list | None] = None
|
||||
list_of_tabs: ClassVar[list[TabItem] | None] = None
|
||||
tabs_title: ClassVar[str | None] = None
|
||||
|
||||
def get_tabs_title(self):
|
||||
|
||||
Reference in new issue
Block a user