Skip to content
Open
Binary file modified oioioi/_locale/locale/en/LC_MESSAGES/djangojs.mo
Binary file not shown.
Binary file modified oioioi/_locale/locale/pl/LC_MESSAGES/django.mo
Binary file not shown.
27 changes: 25 additions & 2 deletions oioioi/_locale/locale/pl/LC_MESSAGES/django.po
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Translators:
# Accounts-Payable - Alkemics, 2015
# Alek Tudruj <aleksanderwt@gmail.com>, 2022
# Alicja Kluczek <alicja2602@gmail.com>, 2021-2022
Expand All @@ -29,6 +28,7 @@
# Jan Jakubowski, 2023
# Joanna Wojciechowska, 2021
# Kacper Lewandowski, 2022
# Kamila Godlewska, 2025
# Kamil Szymczak, 2024-2025
# konrad … <konrad.krulikowski@gmail.com>, 2016-2020
# Maciej Dębski <md319428@students.mimuw.edu.pl>, 2014
Expand Down Expand Up @@ -1039,6 +1039,11 @@ msgstr "Zapisz jako nowy"
msgid "Save and add another"
msgstr "Zapisz i dodaj do innego"

#: teachers/templates/teachers/change_form.py
msgctxt "teacher object"
msgid "Save and add another"
msgstr "Zapisz i dodaj kolejnego"

#: base/templates/admin/submit_line.html:14
#: base/templates/admin/submit_line.html:30
#| msgid "Saved for diffing"
Expand Down Expand Up @@ -4841,6 +4846,20 @@ msgstr "miasto"
msgid "school"
msgstr "szkoła"

#: teacher translation is needed in places when "dopełniacz" form is needed
msgid "teacher"
msgstr "nauczyciela"

msgid "teachers"
msgstr "nauczycieli"

msgid "join date"
msgstr "data dołączenia"

#: mp/models.py:29 oi/models.py:149 teachers/admin.py:26
msgid "Delete selected teachers"
msgstr "Usuń wybranych nauczycieli"

#: mp/models.py:34
#| msgid "team name"
msgid "teacher's name"
Expand Down Expand Up @@ -4993,7 +5012,11 @@ msgstr "-- szkoła usunięta --"
#: oi/admin.py:177 oi/templates/oi/sensitive_participant_info.html:15
#: teachers/forms.py:32 teachers/forms.py:76
msgid "School"
msgstr "Szkola"
msgstr "Szkoła"

msgctxt "teacher object"
msgid "Active"
msgstr "Aktywny"

#: oi/controllers.py:148
msgid "Polish Olympiad in Informatics - Online"
Expand Down
10 changes: 10 additions & 0 deletions oioioi/teachers/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,16 @@ class TeacherAdmin(admin.ModelAdmin):
search_fields = ["school", "user__username", "user__first_name", "user__last_name", "user__email", "join_date"]

form = AdminTeacherForm
change_form_template = "teachers/change_form.html"

# Override parent's function to ensure proper translation
def get_actions(self, request):
actions = super().get_actions(request)
if 'delete_selected' in actions:
function, name, short_description = actions['delete_selected']
new_description = _("Delete selected teachers")
actions['delete_selected'] = (function, name, new_description)
return actions

def has_add_permission(self, request):
return request.user.is_superuser
Expand Down
4 changes: 4 additions & 0 deletions oioioi/teachers/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
from django.urls import reverse
from django.utils.safestring import mark_safe
from django.utils.translation import gettext_lazy as _
from django.utils.translation import pgettext_lazy as p_

from oioioi.base.utils.user_selection import UserSelectionField
from oioioi.contests.forms import SimpleContestForm
Expand Down Expand Up @@ -49,6 +50,9 @@ class AdminTeacherForm(forms.ModelForm):
class Meta:
model = Teacher
fields = ["user", "school", "is_active"]
labels = { # Needed for the ability of proper translation of 'is_active' to PL
"is_active": p_("teacher object", "Active"),
}

user = UserSelectionField(label=_("Username"))

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Generated by Django 5.2.9 on 2025-12-16 12:06

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('teachers', '0002_teacher_join_date'),
]

operations = [
migrations.AlterModelOptions(
name='teacher',
options={'permissions': (('teacher', 'Is a teacher'),), 'verbose_name': 'teacher', 'verbose_name_plural': 'teachers'},
),
migrations.AlterField(
model_name='teacher',
name='join_date',
field=models.DateField(auto_now_add=True, verbose_name='join date'),
),
]
4 changes: 3 additions & 1 deletion oioioi/teachers/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,12 @@ class Teacher(models.Model):
user = models.OneToOneField(User, primary_key=True, verbose_name=_("user"), on_delete=models.CASCADE)
is_active = models.BooleanField(default=False, verbose_name=_("active"))
school = models.CharField(max_length=255, verbose_name=_("school"))
join_date = models.DateField(auto_now_add=True)
join_date = models.DateField(auto_now_add=True, verbose_name=_("join date"))

class Meta:
permissions = (("teacher", _("Is a teacher")),)
verbose_name = _("teacher")
verbose_name_plural = _("teachers")

def __str__(self):
return str(self.user)
Expand Down
69 changes: 69 additions & 0 deletions oioioi/teachers/templates/teachers/change_form.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
{% extends "admin/change_form.html" %}
{% load i18n admin_urls %}

{# Override buttons so they can be translated properly #}
{% block submit_buttons_bottom %}
<div class="submit-row d-none d-md-flex breadcrumb">
{% if show_delete_link and original %}
{% url opts|admin_urlname:'delete' original.pk|admin_urlquote as delete_url %}
<a class="btn btn-danger deletelink" href="{% add_preserved_filters delete_url %}" class="deletelink">{% translate "Delete" %}</a>
{% endif %}

<div class="ml-auto">
{% if show_archive %}<a class="btn btn-warning" href="{% url 'confirm_archive_contest' %}">{% translate "Archive" %}</a>{% endif %}
{% if show_unarchive %}<a class="btn btn-warning" href="{% url 'unarchive_contest' %}">{% translate "Unarchive" %}</a>{% endif %}

{% if has_add_permission and change and save_as %}
<input class="btn btn-secondary" type="submit" value="{% translate 'Save as new' %}" name="_saveasnew">
{% endif %}

{% if has_add_permission %}
<input class="btn btn-secondary" type="submit" value="{% translate 'Save and add another' context 'teacher object' %}" name="_addanother">
{% endif %}

{% if has_change_permission or has_add_permission %}
<input class="btn btn-secondary" type="submit" value="{% if can_change %}{% translate 'Save and continue editing' %}{% else %}{% translate 'Save and view' %}{% endif %}" name="_continue">
{% endif %}

{% if has_change_permission or has_add_permission %}
<input type="submit" value="{% translate 'Save' %}" class="btn btn-primary" name="_save">
{% endif %}

{% if show_close %}
<a class="btn btn-warning" href="{% url opts|admin_urlname:'changelist' %}" class="closelink">{% translate 'Close' %}</a>
{% endif %}
</div>
</div>

<div class="submit-row d-md-none breadcrumb py-2 px-3">
<div class="nav nav-pills nav-fill flex-fill">
{% if show_delete_link and original %}
{% url opts|admin_urlname:'delete' original.pk|admin_urlquote as delete_url %}
<a class="nav-item m-1 btn btn-danger deletelink" href="{% add_preserved_filters delete_url %}" class="deletelink">{% translate "Delete" %}</a>
{% endif %}

{% if show_archive %}<a class="nav-item m-1 btn btn-warning" href="{% url 'confirm_archive_contest' %}">{% translate "Archive" %}</a>{% endif %}
{% if show_unarchive %}<a class="nav-item m-1 btn btn-warning" href="{% url 'unarchive_contest' %}">{% translate "Unarchive" %}</a>{% endif %}

{% if has_add_permission and change and save_as %}
<input class="nav-item m-1 btn btn-secondary" type="submit" value="{% translate 'Save as new' %}" name="_saveasnew">
{% endif %}

{% if has_add_permission %}
<input class="nav-item m-1 btn btn-secondary" type="submit" value="{% translate 'Save and add another' context 'teacher object' %}" name="_addanother">
{% endif %}

{% if has_change_permission or has_add_permission %}
<input class="nav-item m-1 btn btn-secondary" type="submit" value="{% if can_change %}{% translate 'Save and continue editing' %}{% else %}{% translate 'Save and view' %}{% endif %}" name="_continue">
{% endif %}

{% if has_change_permission or has_add_permission %}
<input type="submit" value="{% translate 'Save' %}" class="nav-item m-1 btn btn-primary" name="_save">
{% endif %}

{% if show_close %}
<a class="nav-item m-1 btn btn-warning" href="{% url opts|admin_urlname:'changelist' %}" class="closelink">{% translate 'Close' %}</a>
{% endif %}
</div>
</div>
{% endblock %}