mirror of
https://github.com/lucaspalomodevelop/eventcally.git
synced 2026-03-13 00:07:22 +00:00
119 lines
4.0 KiB
Python
119 lines
4.0 KiB
Python
from flask import abort, flash, redirect, render_template, url_for
|
|
from flask_babel import gettext
|
|
from flask_security import auth_required
|
|
from sqlalchemy.exc import SQLAlchemyError
|
|
|
|
from project import app, db
|
|
from project.access import (
|
|
access_or_401,
|
|
get_admin_unit_members_with_permission,
|
|
has_access,
|
|
)
|
|
from project.forms.verification_request import VerificationRequestReviewForm
|
|
from project.models import (
|
|
AdminUnitVerificationRequest,
|
|
AdminUnitVerificationRequestReviewStatus,
|
|
)
|
|
from project.services.admin_unit import upsert_admin_unit_relation
|
|
from project.views.utils import flash_errors, handleSqlError, send_mails
|
|
|
|
|
|
@app.route("/verification_request/<int:id>/review", methods=("GET", "POST"))
|
|
@auth_required()
|
|
def admin_unit_verification_request_review(id):
|
|
request = AdminUnitVerificationRequest.query.get_or_404(id)
|
|
access_or_401(request.target_admin_unit, "verification_request:verify")
|
|
|
|
if request.review_status == AdminUnitVerificationRequestReviewStatus.verified:
|
|
flash(gettext("Request already verified"), "danger")
|
|
return redirect(
|
|
url_for(
|
|
"manage_admin_unit_verification_requests_incoming",
|
|
id=request.target_admin_unit_id,
|
|
)
|
|
)
|
|
|
|
form = VerificationRequestReviewForm(obj=request)
|
|
|
|
if form.validate_on_submit():
|
|
form.populate_obj(request)
|
|
|
|
if request.review_status != AdminUnitVerificationRequestReviewStatus.rejected:
|
|
request.rejection_reason = None
|
|
|
|
if request.rejection_reason == 0:
|
|
request.rejection_reason = None
|
|
|
|
try:
|
|
if (
|
|
request.review_status
|
|
== AdminUnitVerificationRequestReviewStatus.verified
|
|
):
|
|
relation = upsert_admin_unit_relation(
|
|
request.target_admin_unit_id, request.source_admin_unit_id
|
|
)
|
|
relation.verify = True
|
|
|
|
if form.auto_verify.data:
|
|
relation.auto_verify_event_reference_requests = True
|
|
|
|
msg = gettext("Organization successfully verified")
|
|
else:
|
|
msg = gettext("Verification request successfully updated")
|
|
|
|
db.session.commit()
|
|
send_verification_request_review_status_mails(request)
|
|
flash(msg, "success")
|
|
return redirect(
|
|
url_for(
|
|
"manage_admin_unit_verification_requests_incoming",
|
|
id=request.target_admin_unit_id,
|
|
)
|
|
)
|
|
except SQLAlchemyError as e:
|
|
db.session.rollback()
|
|
flash(handleSqlError(e), "danger")
|
|
else:
|
|
flash_errors(form)
|
|
|
|
form.auto_verify.description = gettext(
|
|
"If all upcoming reference requests of %(admin_unit_name)s should be verified automatically.",
|
|
admin_unit_name=request.source_admin_unit.name,
|
|
)
|
|
|
|
return render_template(
|
|
"verification_request/review.html",
|
|
form=form,
|
|
request=request,
|
|
)
|
|
|
|
|
|
@app.route("/verification_request/<int:id>/review_status")
|
|
def admin_unit_verification_request_review_status(id):
|
|
request = AdminUnitVerificationRequest.query.get_or_404(id)
|
|
|
|
if not has_access(
|
|
request.target_admin_unit, "verification_request:verify"
|
|
) and not has_access(request.source_admin_unit, "verification_request:create"):
|
|
abort(401)
|
|
|
|
return render_template(
|
|
"verification_request/review_status.html",
|
|
verification_request=request,
|
|
)
|
|
|
|
|
|
def send_verification_request_review_status_mails(request):
|
|
# Benachrichtige alle Mitglieder der AdminUnit, die diesen Request erstellt hatte
|
|
members = get_admin_unit_members_with_permission(
|
|
request.source_admin_unit_id, "verification_request:create"
|
|
)
|
|
emails = list(map(lambda member: member.user.email, members))
|
|
|
|
send_mails(
|
|
emails,
|
|
gettext("Verification request review status updated"),
|
|
"verification_request_review_status_notice",
|
|
request=request,
|
|
)
|