Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • 520-akowner
  • 520-fix-event-wizard-datepicker
  • 520-fix-scheduling
  • 520-improve-scheduling
  • 520-improve-scheduling-2
  • 520-improve-submission
  • 520-improve-trackmanager
  • 520-improve-wall
  • 520-message-resolved
  • 520-status
  • 520-upgrades
  • add_express_interest_to_ak_overview
  • admin-production-color
  • bugfixes
  • csp
  • featire-ical-export
  • feature-ak-requirement-lists
  • feature-akslide-export-better-filename
  • feature-akslides
  • feature-better-admin
  • feature-better-cv-list
  • feature-colors
  • feature-constraint-checking
  • feature-constraint-checking-wip
  • feature-dashboard-history-button
  • feature-event-status
  • feature-event-wizard
  • feature-export-flag
  • feature-improve-admin
  • feature-improve-filters
  • feature-improved-user-creation-workflow
  • feature-interest-view
  • feature-mails
  • feature-modular-status
  • feature-plan-autoreload
  • feature-present-default
  • feature-register-link
  • feature-remaining-constraint-validation
  • feature-room-import
  • feature-scheduler-improve
  • feature-scheduling-2.0
  • feature-special-attention
  • feature-time-input
  • feature-tracker
  • feature-wiki-wishes
  • feature-wish-slots
  • feature-wizard-buttons
  • features-availabilities
  • fix-ak-times-above-folg
  • fix-api
  • fix-constraint-violation-string
  • fix-cv-checking
  • fix-default-slot-length
  • fix-default-slot-localization
  • fix-doc-minor
  • fix-duration-display
  • fix-event-tz-pytz-update
  • fix-history-interest
  • fix-interest-view
  • fix-js
  • fix-pipeline
  • fix-plan-timezone-now
  • fix-room-add
  • fix-scheduling-drag
  • fix-slot-defaultlength
  • fix-timezone
  • fix-translation-scheduling
  • fix-virtual-room-admin
  • fix-wizard-csp
  • font-locally
  • improve-admin
  • improve-online
  • improve-slides
  • improve-submission-coupling
  • interest_restriction
  • main
  • master
  • meta-debug-toolbar
  • meta-export
  • meta-makemessages
  • meta-performance
  • meta-tests
  • meta-tests-gitlab-test
  • meta-upgrades
  • mollux-master-patch-02906
  • port-availabilites-fullcalendar
  • qs
  • remove-tags
  • renovate/configure
  • renovate/django-4.x
  • renovate/django-5.x
  • renovate/django-bootstrap-datepicker-plus-5.x
  • renovate/django-bootstrap5-23.x
  • renovate/django-bootstrap5-24.x
  • renovate/django-compressor-4.x
  • renovate/django-debug-toolbar-4.x
  • renovate/django-registration-redux-2.x
  • renovate/django-simple-history-3.x
  • renovate/django-split-settings-1.x
  • renovate/django-timezone-field-5.x
100 results

Target

Select target project
  • konstantin/akplanning
  • matedealer/akplanning
  • kif/akplanning
  • mirco/akplanning
  • lordofthevoid/akplanning
  • voidptr/akplanning
  • xayomer/akplanning-fork
  • mollux/akplanning
  • neumantm/akplanning
  • mmarx/akplanning
  • nerf/akplanning
  • felix_bonn/akplanning
  • sebastian.uschmann/akplanning
13 results
Select Git revision
  • koma/feature/preference-polling-form
  • main
  • renovate/django-5.x
  • renovate/jsonschema-4.x
4 results
Show changes
Commits on Source (6)
Showing with 309 additions and 186 deletions
from django import forms from django import forms
from django.apps import apps from django.apps import apps
from django.contrib import admin from django.contrib import admin, messages
from django.contrib.admin import SimpleListFilter, RelatedFieldListFilter from django.contrib.admin import SimpleListFilter, RelatedFieldListFilter, action
from django.db.models import Count, F from django.db.models import Count, F
from django.db.models.functions import Now
from django.shortcuts import render, redirect from django.shortcuts import render, redirect
from django.urls import reverse_lazy from django.urls import reverse_lazy
from django.utils import timezone from django.utils import timezone
...@@ -31,11 +32,12 @@ class EventRelatedFieldListFilter(RelatedFieldListFilter): ...@@ -31,11 +32,12 @@ class EventRelatedFieldListFilter(RelatedFieldListFilter):
@admin.register(Event) @admin.register(Event)
class EventAdmin(admin.ModelAdmin): class EventAdmin(admin.ModelAdmin):
model = Event model = Event
list_display = ['name', 'status_url', 'place', 'start', 'end', 'active'] list_display = ['name', 'status_url', 'place', 'start', 'end', 'active', 'plan_hidden']
list_filter = ['active'] list_filter = ['active']
list_editable = ['active'] list_editable = ['active']
ordering = ['-start'] ordering = ['-start']
readonly_fields = ['status_url'] readonly_fields = ['status_url', 'plan_hidden', 'plan_published_at']
actions = ['publish', 'unpublish']
def add_view(self, request, form_url='', extra_context=None): def add_view(self, request, form_url='', extra_context=None):
# Always use wizard to create new events (the built-in form wouldn't work anyways since the timezone cannot # Always use wizard to create new events (the built-in form wouldn't work anyways since the timezone cannot
...@@ -62,6 +64,16 @@ class EventAdmin(admin.ModelAdmin): ...@@ -62,6 +64,16 @@ class EventAdmin(admin.ModelAdmin):
timezone.activate(obj.timezone) timezone.activate(obj.timezone)
return super().get_form(request, obj, change, **kwargs) return super().get_form(request, obj, change, **kwargs)
@action(description=_('Publish plan'))
def publish(self, request, queryset):
queryset.update(plan_published_at=Now(), plan_hidden=False)
self.message_user(request, _('Plan published'), messages.SUCCESS)
@action(description=_('Unpublish plan'))
def unpublish(self, request, queryset):
queryset.update(plan_published_at=None, plan_hidden=True)
self.message_user(request, _('Plan unpublished'), messages.SUCCESS)
@admin.register(AKOwner) @admin.register(AKOwner)
class AKOwnerAdmin(admin.ModelAdmin): class AKOwnerAdmin(admin.ModelAdmin):
......
from bootstrap_datepicker_plus import DateTimePickerInput from bootstrap_datepicker_plus import DateTimePickerInput
from django import forms from django import forms
from django.forms.utils import ErrorList from django.forms.utils import ErrorList
from django.utils.translation import ugettext_lazy as _ from django.utils.translation import gettext_lazy as _
from AKModel.models import Event, AKCategory, AKRequirement from AKModel.models import Event, AKCategory, AKRequirement
...@@ -29,6 +29,7 @@ class NewEventWizardSettingsForm(forms.ModelForm): ...@@ -29,6 +29,7 @@ class NewEventWizardSettingsForm(forms.ModelForm):
'start': DateTimePickerInput(options={"format": "YYYY-MM-DD HH:mm"}), 'start': DateTimePickerInput(options={"format": "YYYY-MM-DD HH:mm"}),
'end': DateTimePickerInput(options={"format": "YYYY-MM-DD HH:mm"}), 'end': DateTimePickerInput(options={"format": "YYYY-MM-DD HH:mm"}),
'reso_deadline': DateTimePickerInput(options={"format": "YYYY-MM-DD HH:mm"}), 'reso_deadline': DateTimePickerInput(options={"format": "YYYY-MM-DD HH:mm"}),
'plan_hidden': forms.HiddenInput(),
} }
......
"""
Ensure PO files are generated using forward slashes in the location comments on all operating systems
"""
import os
from django.core.management.commands.makemessages import Command as MakeMessagesCommand
class Command(MakeMessagesCommand):
def find_files(self, root):
all_files = super().find_files(root)
if os.sep != "\\":
return all_files
for file_entry in all_files:
if file_entry.dirpath == ".":
file_entry.dirpath = ""
elif file_entry.dirpath.startswith(".\\"):
file_entry.dirpath = file_entry.dirpath[2:].replace("\\", "/")
return all_files
def build_potfiles(self):
pot_files = super().build_potfiles()
if os.sep != "\\":
return pot_files
for filename in pot_files:
lines = open(filename, "r", encoding="utf-8").readlines()
fixed_lines = []
for line in lines:
if line.startswith("#: "):
line = line.replace("\\", "/")
fixed_lines.append(line)
with open(filename, "w", encoding="utf-8") as f:
f.writelines(fixed_lines)
return pot_files
This diff is collapsed.
# Generated by Django 3.2.16 on 2022-10-15 10:18
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('AKModel', '0052_history_upgrade'),
]
operations = [
migrations.AddField(
model_name='event',
name='plan_published_at',
field=models.DateTimeField(blank=True, help_text='Timestamp at which the plan was published', null=True, verbose_name='Plan published at'),
),
]
...@@ -39,6 +39,8 @@ class Event(models.Model): ...@@ -39,6 +39,8 @@ class Event(models.Model):
active = models.BooleanField(verbose_name=_('Active State'), help_text=_('Marks currently active events')) active = models.BooleanField(verbose_name=_('Active State'), help_text=_('Marks currently active events'))
plan_hidden = models.BooleanField(verbose_name=_('Plan Hidden'), help_text=_('Hides plan for non-staff users'), plan_hidden = models.BooleanField(verbose_name=_('Plan Hidden'), help_text=_('Hides plan for non-staff users'),
default=True) default=True)
plan_published_at = models.DateTimeField(verbose_name=_('Plan published at'), blank=True, null=True,
help_text=_('Timestamp at which the plan was published'))
base_url = models.URLField(verbose_name=_("Base URL"), help_text=_("Prefix for wiki link construction"), blank=True) base_url = models.URLField(verbose_name=_("Base URL"), help_text=_("Prefix for wiki link construction"), blank=True)
wiki_export_template_name = models.CharField(verbose_name=_("Wiki Export Template Name"), blank=True, max_length=50) wiki_export_template_name = models.CharField(verbose_name=_("Wiki Export Template Name"), blank=True, max_length=50)
......
{% extends "admin/base_site.html" %} {% extends "admin/login.html" %}
{% load i18n static %} {% load i18n static %}
{% block extrastyle %}{{ block.super }}<link rel="stylesheet" type="text/css" href="{% static "admin/css/login.css" %}">
{{ form.media }}
{% endblock %}
{% block bodyclass %}{{ block.super }} login{% endblock %}
{% block usertools %}{% endblock %}
{% block nav-global %}{% endblock %}
{% block nav-sidebar %}{% endblock %}
{% block content_title %}{% endblock %}
{% block breadcrumbs %}{% endblock %}
{% block content %} {% block content %}
{% if form.errors and not form.non_field_errors %} {% if form.errors and not form.non_field_errors %}
......
...@@ -11,6 +11,11 @@ register = template.Library() ...@@ -11,6 +11,11 @@ register = template.Library()
@register.filter @register.filter
def highlight_change_colors(akslot): def highlight_change_colors(akslot):
# Do not highlight in preview mode or when changes occurred before the plan was published
if akslot.event.plan_hidden or (akslot.event.plan_published_at is not None
and akslot.event.plan_published_at > akslot.updated):
return akslot.ak.category.color
seconds_since_update = akslot.seconds_since_last_update seconds_since_update = akslot.seconds_since_last_update
# Last change long ago? Use default color # Last change long ago? Use default color
......
...@@ -99,6 +99,8 @@ TEMPLATES = [ ...@@ -99,6 +99,8 @@ TEMPLATES = [
WSGI_APPLICATION = 'AKPlanning.wsgi.application' WSGI_APPLICATION = 'AKPlanning.wsgi.application'
DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
# Database # Database
# https://docs.djangoproject.com/en/2.2/ref/settings/#databases # https://docs.djangoproject.com/en/2.2/ref/settings/#databases
......
/*
Load both the django admin base style and bootstrap -- but make sure bootstrap is loaded first to override all critical theme settings from bootstrap with the default admin style.
This especially fixes the dark theme.
*/
@import "/static/common/css/bootstrap.css";
@import "../../admin/css/base.css";
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
{% load fontawesome_5 %} {% load fontawesome_5 %}
{% load static %} {% load static %}
{% block stylesheet %}{% static "common/css/admin-bootstrap.css" %}{% endblock %}
{% block extrastyle %} {% block extrastyle %}
{% if not debug %} {% if not debug %}
<link rel="stylesheet" type="text/css" href="{% static "common/css/admin-color.css" %}"/> <link rel="stylesheet" type="text/css" href="{% static "common/css/admin-color.css" %}"/>
...@@ -12,7 +14,6 @@ ...@@ -12,7 +14,6 @@
{% block extrahead %} {% block extrahead %}
<!-- Load bootstrap, jquery and fontawesome--> <!-- Load bootstrap, jquery and fontawesome-->
{% bootstrap_css %}
{% bootstrap_javascript jquery=True %} {% bootstrap_javascript jquery=True %}
{% fontawesome_5_static %} {% fontawesome_5_static %}
......