Skip to content

Commit

Permalink
Merge branch 'master' of github.com:mikaelGusse/a-plus into news_lang…
Browse files Browse the repository at this point in the history
…uages
  • Loading branch information
mikaelGusse committed Mar 11, 2024
2 parents de960c1 + c6ac9ad commit a06d16e
Show file tree
Hide file tree
Showing 27 changed files with 300 additions and 152 deletions.
1 change: 1 addition & 0 deletions aplus/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,7 @@
'apps',
'redirect_old_urls',
'lti_tool',
'site_alert',

'js_jquery_toggle',
'django_colortag',
Expand Down
15 changes: 9 additions & 6 deletions course/templatetags/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
from django.utils.translation import get_language, gettext_lazy as _
from lib.helpers import remove_query_param_from_url, settings_text, update_url_params
from exercise.submission_models import PendingSubmission
from site_alert.models import SiteAlert


register = template.Library()
Expand All @@ -16,7 +17,7 @@ def pick_localized(message):
if message and isinstance(message, dict):
return (message.get(get_language()) or
message.get(settings.LANGUAGE_CODE[:2]) or
message.values()[0])
list(message.values())[0])
return message


Expand Down Expand Up @@ -57,11 +58,13 @@ def course_alert(instance):

@register.simple_tag
def site_alert():
message = settings.SITEWIDE_ALERT_TEXT
if message:
return mark_safe('<div class="alert alert-danger">{}</div>'
.format(pick_localized(message)))
return ''
alerts = SiteAlert.objects.filter(status=SiteAlert.STATUS.ACTIVE)
return mark_safe(
''.join(
'<div class="alert alert-danger">{}</div>'.format(pick_localized(alert.alert))
for alert in alerts
)
)


@register.simple_tag
Expand Down
2 changes: 1 addition & 1 deletion deviations/admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class DeadlineRuleDeviationAdmin(admin.ModelAdmin):
list_display = (
'submitter',
'exercise',
'extra_minutes',
'extra_seconds',
'granter',
'grant_time',
)
Expand Down
12 changes: 6 additions & 6 deletions deviations/forms.py
Original file line number Diff line number Diff line change
Expand Up @@ -80,11 +80,11 @@ def clean(self) -> Dict[str, Any]:


class DeadlineRuleDeviationForm(BaseDeviationForm):
minutes = DurationField(
seconds = DurationField(
required=False,
min_value=1,
label=_('LABEL_MINUTES'),
help_text=_('DEVIATION_EXTRA_MINUTES_HELPTEXT'),
label=_('LABEL_SECONDS'),
help_text=_('DEVIATION_EXTRA_SECONDS_HELPTEXT'),
)
new_date = forms.DateTimeField(
required=False,
Expand All @@ -108,10 +108,10 @@ def __init__(self, *args: Any, **kwargs: Any) -> None:
def clean(self) -> Dict[str, Any]:
cleaned_data = super().clean()
new_date = cleaned_data.get("new_date")
minutes = cleaned_data.get("minutes")
if minutes and new_date or not minutes and not new_date:
seconds = cleaned_data.get("seconds")
if seconds and new_date or not seconds and not new_date:
raise forms.ValidationError(
_("MINUTES_AND_DATE_MISSING"))
_("SECONDS_AND_DATE_MISSING"))
return cleaned_data


Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
from django.db import migrations, models


def multiply_by_sixty(apps, schema_editor):
DeadlineRuleDeviation = apps.get_model('deviations', 'DeadlineRuleDeviation')
# Retrieve all instances of DeadlineRuleDeviation and update extra_seconds field
for deviation in DeadlineRuleDeviation.objects.all():
deviation.extra_seconds *= 60
deviation.save()


class Migration(migrations.Migration):

dependencies = [
('deviations', '0005_auto_20220211_1540'),
]

operations = [
migrations.RenameField(
model_name='deadlineruledeviation',
old_name='extra_minutes',
new_name='extra_seconds',
),
migrations.AlterField(
model_name='deadlineruledeviation',
name='extra_seconds',
field=models.IntegerField(verbose_name='LABEL_EXTRA_SECONDS'),
),
migrations.RunPython(multiply_by_sixty),
]
18 changes: 9 additions & 9 deletions deviations/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -154,12 +154,12 @@ def get_override_url(cls, instance: CourseInstance) -> str:


class DeadlineRuleDeviationManager(SubmissionRuleDeviationManager['DeadlineRuleDeviation']):
max_order_by = "-extra_minutes"
max_order_by = "-extra_seconds"


class DeadlineRuleDeviation(SubmissionRuleDeviation):
extra_minutes = models.IntegerField(
verbose_name=_('LABEL_EXTRA_MINUTES'),
extra_seconds = models.IntegerField(
verbose_name=_('LABEL_EXTRA_SECONDS'),
)
without_late_penalty = models.BooleanField(
verbose_name=_('LABEL_WITHOUT_LATE_PENALTY'),
Expand All @@ -173,7 +173,7 @@ class Meta(SubmissionRuleDeviation.Meta):
verbose_name_plural = _('MODEL_NAME_DEADLINE_RULE_DEVIATION_PLURAL')

def get_extra_time(self):
return timedelta(minutes=self.extra_minutes)
return timedelta(seconds=self.extra_seconds)

def get_new_deadline(self, normal_deadline: Optional[datetime] = None) -> datetime:
"""
Expand All @@ -191,18 +191,18 @@ def get_normal_deadline(self):
return self.exercise.course_module.closing_time

def update_by_form(self, form_data: Dict[str, Any]) -> None:
minutes = form_data.get('minutes')
seconds = form_data.get('seconds')
new_date = form_data.get('new_date')
if new_date:
minutes = self.exercise.delta_in_minutes_from_closing_to_date(new_date)
seconds = self.exercise.delta_in_seconds_from_closing_to_date(new_date)
else:
minutes = int(minutes)
self.extra_minutes = minutes
seconds = int(seconds)
self.extra_seconds = seconds
self.without_late_penalty = bool(form_data.get('without_late_penalty'))

def is_groupable(self, other: 'DeadlineRuleDeviation') -> bool:
return (
self.extra_minutes == other.extra_minutes
self.extra_seconds == other.extra_seconds
and self.without_late_penalty == other.without_late_penalty
)

Expand Down
6 changes: 3 additions & 3 deletions deviations/templates/deviations/list_dl.html
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ <h3 class="panel-title">{% translate "DEADLINE_DEVIATIONS" %}</h3>
<tr>
<th>{% translate "SUBMITTER" %}</th>
<th>{% translate "EXERCISE" %}</th>
<th>{% translate "EXTRA_MINUTES" %}</th>
<th>{% translate "EXTRA_SECONDS" %}</th>
<th>{% translate "DEADLINE" %}</th>
<th
data-filter-type="options"
Expand Down Expand Up @@ -70,7 +70,7 @@ <h3 class="panel-title">{% translate "DEADLINE_DEVIATIONS" %}</h3>
{% endblocktranslate %})
</strong>
</td>
<td>{{ deviations.0.extra_minutes }}</td>
<td>{{ deviations.0.extra_seconds }}</td>
<td data-datetime="{{ deviations.0.get_new_deadline|date:'Y-m-d H:i:s' }}">
{{ deviations.0.get_new_deadline|date:'SHORT_DATETIME_FORMAT' }}
</td>
Expand Down Expand Up @@ -114,7 +114,7 @@ <h3 class="panel-title">{% translate "DEADLINE_DEVIATIONS" %}</h3>
</a>
</td>
<td>{{ deviation.exercise.hierarchical_name }}</td>
<td>{{ deviation.extra_minutes }}</td>
<td>{{ deviation.extra_seconds }}</td>
<td data-datetime="{{ deviation.get_new_deadline|date:'Y-m-d H:i:s' }}">
{{ deviation.get_new_deadline|date:'SHORT_DATETIME_FORMAT' }}
</td>
Expand Down
16 changes: 8 additions & 8 deletions deviations/templates/deviations/override_dl.html
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ <h3 class="panel-title">{% translate "SELECT_DEVIATIONS_TO_BE_OVERRIDDEN" %}</h3
<tr>
<th>{% translate "SUBMITTER" %}</th>
<th>{% translate "EXERCISE" %}</th>
<th>{% translate "EXTRA_MINUTES" %} ({% translate "OVERRIDE_BEFORE" %})</th>
<th>{% translate "EXTRA_MINUTES" %} ({% translate "OVERRIDE_AFTER" %})</th>
<th>{% translate "EXTRA_SECONDS" %} ({% translate "OVERRIDE_BEFORE" %})</th>
<th>{% translate "EXTRA_SECONDS" %} ({% translate "OVERRIDE_AFTER" %})</th>
<th>{% translate "DEADLINE" %} ({% translate "OVERRIDE_BEFORE" %})</th>
<th>{% translate "DEADLINE" %} ({% translate "OVERRIDE_AFTER" %})</th>
<th
Expand All @@ -46,8 +46,8 @@ <h3 class="panel-title">{% translate "SELECT_DEVIATIONS_TO_BE_OVERRIDDEN" %}</h3
<tbody>
{% translate "UNKNOWN" as unknown %}
{% for deviations, can_group, group_id, _ in deviation_groups %}
{% new_deviation_minutes deviations.0 session_data.minutes session_data.new_date as new_deviation_minutes %}
{% new_deviation_date deviations.0 session_data.minutes session_data.new_date as new_deviation_date %}
{% new_deviation_seconds deviations.0 session_data.seconds session_data.new_date as new_deviation_seconds %}
{% new_deviation_date deviations.0 session_data.seconds session_data.new_date as new_deviation_date %}
{% if can_group %}
<tr data-group-parent="{{ group_id }}">
<td>
Expand All @@ -63,8 +63,8 @@ <h3 class="panel-title">{% translate "SELECT_DEVIATIONS_TO_BE_OVERRIDDEN" %}</h3
{% endblocktranslate %})
</strong>
</td>
<td>{{ deviations.0.extra_minutes }}</td>
<td>{{ new_deviation_minutes }}</td>
<td>{{ deviations.0.extra_seconds }}</td>
<td>{{ new_deviation_seconds }}</td>
<td data-datetime="{{ deviations.0.get_new_deadline|date:'Y-m-d H:i:s' }}">
{{ deviations.0.get_new_deadline|date:'SHORT_DATETIME_FORMAT' }}
</td>
Expand Down Expand Up @@ -102,8 +102,8 @@ <h3 class="panel-title">{% translate "SELECT_DEVIATIONS_TO_BE_OVERRIDDEN" %}</h3
</a>
</td>
<td>{{ deviation.exercise.hierarchical_name }}</td>
<td>{{ deviation.extra_minutes }}</td>
<td>{{ new_deviation_minutes }}</td>
<td>{{ deviation.extra_seconds }}</td>
<td>{{ new_deviation_seconds }}</td>
<td data-datetime="{{ deviation.get_new_deadline|date:'Y-m-d H:i:s' }}">
{{ deviation.get_new_deadline|date:'SHORT_DATETIME_FORMAT' }}
</td>
Expand Down
14 changes: 7 additions & 7 deletions deviations/templatetags/deviations.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,28 +10,28 @@


@register.simple_tag
def new_deviation_minutes(
def new_deviation_seconds(
deviation: DeadlineRuleDeviation,
minutes: Optional[int],
seconds: Optional[int],
date: Optional[datetime.datetime]
) -> int:
"""
Get the extra minutes for a deadline deviation after being overridden.
Get the extra seconds for a deadline deviation after being overridden.
"""
if date:
return deviation.exercise.delta_in_minutes_from_closing_to_date(date)
return minutes
return deviation.exercise.delta_in_seconds_from_closing_to_date(date)
return seconds


@register.simple_tag
def new_deviation_date(
deviation: DeadlineRuleDeviation,
minutes: Optional[int],
seconds: Optional[int],
date: Optional[datetime.datetime]
) -> datetime.datetime:
"""
Get the new deadline for a deadline deviation after being overridden.
"""
if date:
return date
return deviation.exercise.course_module.closing_time + datetime.timedelta(minutes=minutes)
return deviation.exercise.course_module.closing_time + datetime.timedelta(seconds=seconds)
Loading

0 comments on commit a06d16e

Please sign in to comment.