Skip to content
Snippets Groups Projects
Verified Commit c1e2c1d5 authored by Tom Teichler's avatar Tom Teichler :beers:
Browse files

Initialise app and move mailaddress stuff from TIC-Desk. Closes #1

parent fa5e9029
No related branches found
No related tags found
1 merge request!7Resolve "Initialise app and move mailaddress stuff from TIC-Desk"
Pipeline #7169 passed
ARG APPS="AlekSIS-App-Postbuero"
FROM registry.edugit.org/aleksis/official/aleksis-core:master
......@@ -4,3 +4,9 @@ from aleksis.core.util.apps import AppConfig
class PostBueroConfig(AppConfig):
name = "aleksis.apps.postbuero"
verbose_name = "AlekSIS — Postbuero (Mail server management)"
urls = {
"Repository": "https://edugit.org/AlekSIS/Onboarding/AlekSIS-App-Postbuero",
}
licence = "EUPL-1.2+"
copyright_info = (([2021], "Tom Teichler", "tom.teichler@teckids.org"),)
from django import forms
from django.utils.translation import gettext_Lazy as _
from aleksis.core.mixins import ExtensibleForm
from aleksis.core.util.core_helpers import get_site_preferences
from .models import MailAddress
DISALLOWED_LOCAL_PARTS = get_site_preferences()["ticdesk__disallowed_local_parts"].split(
","
) + get_site_preferences()["ticdesk__disallowed_uids"].split(",")
MAIL_DOMAINS = tuple(get_site_preferences()["ticdesk__mail_domains"].split(","))
class MailAddForm(ExtensibleForm):
class Meta:
model = MailAddress
exclude = ["person"]
domain = forms.ChoiceField(
label=_("Domain"),
choices=[(_, _) for _ in MAIL_DOMAINS],
required=False,
help_text=_("Domain part of the mail address"),
)
......@@ -11,6 +11,15 @@ MENUS = {
"aleksis.core.util.core_helpers.has_person",
],
"submenu": [
{
"name": _("Mail addresses"),
"url": "manage_mail",
"icon": "email",
"validators": [
"menu_generator.validators.is_authenticated",
"aleksis.core.util.core_helpers.has_person",
],
},
],
}
]
......
from django.db import models
from django.utils.translation import gettext_lazy as _
from aleksis.core.mixins import ExtensibleModel
from aleksis.core.models import Person
class MailAddress(ExtensibleModel):
domain = models.CharField(verbose_name=_("Domain"), max_length=255)
local_part = models.CharField(verbose_name=_("Local part"), max_length=64)
person = models.ForeignKey(Person, verbose_name=_("Person"), on_delete=models.CASCADE)
def __str__(self) -> str:
return f"{self.local_part}@{self.domain}"
class Meta:
unique_together = [["local_part", "domain"]]
verbose_name = _("Mail address")
verbose_name_plural = _("Mail addresses")
{% extends 'core/base.html' %}
{% load i18n %}
{% block content %}
<p class="flow-text">
{% blocktrans %}Postbuero (Mail server management){% endblocktrans %}
</p>
{% endblock %}
{% extends "core/base.html" %}
{% block page_title %}{% blocktrans %}Manage email addresses{% endblocktrans %}{% endblock %}
{% block browser_title %}{% blocktrans %}Manage email addresses{% endblocktrans %}{% endblock %}
{% block content %}
<h5>{% blocktrans %}Create new email address{% endblocktrans %}</h5>
<form method="post">
{% csrf_token %}
{% form form=mail_add_form %}{% endform %}
{% include "core/partials/save_button.html" %}
</form>
<div class="col s12">
<h5>{% blocktrans %}My email addresses{% endblocktrans %}</h5>
<p>
{% blocktrans %}
Currently you own the following addresses at Teckids:
{% endblocktrans %}
</p>
<ul>
{% for mail in mails %}
<li>{{ mail }}</li>
{% empty %}
<li>{% blocktrans %}You currently not own any addresses{% endblocktrans %}</li>
{% endfor %}
</ul>
</div>
{% endblock %}
{% load i18n %}
{% block subject %}
{% blocktrans with address=address %}New email address: {{ address }}{% endblocktrans %}
{% endblock %}
{% block plain %}
{% blocktrans with username=user.username full_name=user.person.full_name %}
The user {{ username }} ({{ full_name }}) has registered the following email address:
{% endblocktrans %}
{{ address }}
{% endblock %}
{% block html %}
<main>
<p>
{% blocktrans with username=person.user.username full_name=person.full_name %}
The user {{ username }} ({{ full_name }}) has registered the following email address:
{% endblocktrans %}
</p>
<div class="card-panel">
<h4>{{ address }}</h4>
</div>
</main>
{% endblock %}
......@@ -3,5 +3,5 @@ from django.urls import path
from . import views
urlpatterns = [
path("empty", views.empty, name="empty"),
path("/mails/manage", views.manage_mail, name="manage_mail"),
]
from django.contrib.auth.decorators import login_required
from django.http import Http404, HttpRequest, HttpResponse
from django.http import HttpRequest, HttpResponse
from django.shortcuts import render
import reversion
@login_required
def empty(request: HttpRequest) -> HttpResponse:
from aleksis.core.models import Activity
from .forms import MailAddForm
from .models import MailAddress
def manage_mail(request: HttpRequest) -> HttpResponse:
context = {}
mail_add_form = MailAddForm()
person = request.user.person
own_addresses = MailAddress.objects.filter(person=person)
if request.method == "POST":
mail_add_forms = MailAddForm(request.POST)
if mail_add_form.is_valid():
with reversion.create_revision():
mail_add_form.save(commit=True)
local = mail_add_form.cleaned_data["local_part"]
domain = mail_add_form.cleaned_data["domain"]
context["person"] = person
context["address"] = f"{local_part}@{domain}"
context["admin_mail"] = lazy_preference("postbuero", "admin_mail")
# Send mail to user and admins
send_templated_mail(
template_name="mail_added",
from_mail=lazy_preference("mail", "address"),
recipient_list=[context["address"], context["admin_mail"]],
context=context,
)
# Create activity
act = Activity(
title=_("You have added an email address"),
description=_(
f"You have added the email address {local}@{domain} to your profile."
),
app="Postbuero",
user=person,
)
act.save()
return render(request, "postbuero/empty.html", context)
context["mail_add_form"] = mail_add_form
context["mail"] = own_addresses
return render(request, "postbuero/mail_address/manage.html", context)
Source diff could not be displayed: it is too large. Options to address this: view the blob.
......@@ -24,8 +24,8 @@ url = "https://edugit.org/api/v4/projects/461/packages/pypi/simple"
secondary = true
[tool.poetry.dependencies]
python = "^3.7"
AlekSIS = "^2.0a2"
python = "^3.8"
AlekSIS-Core = "^2.0a5.dev0"
[tool.poetry.dev-dependencies]
aleksis-builddeps = "*"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment