from django.contrib import messages from django.contrib.auth.decorators import login_required from konova.sub_settings.context_settings import TAB_TITLE_IDENTIFIER from konova.utils.mailer import Mailer from konova.utils.message_templates import FORM_INVALID from user.models import User from django.http import HttpRequest from django.shortcuts import render, redirect, get_object_or_404 from django.utils.translation import gettext_lazy as _ from konova.contexts import BaseContext from konova.decorators import any_group_check, default_group_required from user.forms import UserNotificationForm, UserContactForm, UserAPITokenForm @login_required @any_group_check def index_view(request: HttpRequest): """ Renders the user's data index view Args: request (): Returns: """ template = "user/index.html" context = { "user": request.user, TAB_TITLE_IDENTIFIER: _("User settings"), } context = BaseContext(request, context).context return render(request, template, context) @login_required @any_group_check def notifications_view(request: HttpRequest): """ Renders the notifications settings view Args: request (): Returns: """ template = "user/notifications.html" user = request.user form = UserNotificationForm(user=user, data=request.POST or None) if request.method == "POST": if form.is_valid(): form.save() messages.success( request, _("Notifications edited") ) return redirect("user:index") elif request.method == "GET": # Implicit pass else: raise NotImplementedError context = { "user": user, "form": form, TAB_TITLE_IDENTIFIER: _("User notifications"), } context = BaseContext(request, context).context return render(request, template, context) @login_required @default_group_required def api_token_view(request: HttpRequest): """ Handles the request for user api frontend settings Args: request (HttpRequest): The incoming request Returns: """ template = "user/token.html" user = request.user form = UserAPITokenForm(request.POST or None, instance=user) if request.method == "POST": if form.is_valid(): token = form.save() messages.info(request, _("New token generated. Administrators need to validate.")) mailer = Mailer() mailer.send_mail_verify_api_token(user) return redirect("user:api-token") else: messages.error(request, FORM_INVALID, extra_tags="danger") elif request.method != "GET": raise NotImplementedError context = { "user": user, "form": form, TAB_TITLE_IDENTIFIER: _("User API token"), } context = BaseContext(request, context).context return render(request, template, context) @login_required def contact_view(request: HttpRequest, id: str): """ Renders contact modal view of a users contact data Args: request (HttpRequest): The incoming request id (str): The user's id Returns: """ user = get_object_or_404(User, id=id) form = UserContactForm(request.POST or None, instance=user, request=request) template = "modal/modal_form.html" context = { "form": form, } context = BaseContext(request, context).context return render( request, template, context )