email templates page

This commit is contained in:
2025-06-01 22:00:45 +02:00
parent 047ad6ef10
commit e8d79cca19
4 changed files with 272 additions and 37 deletions

View File

@@ -1,6 +1,6 @@
from flask import render_template, Blueprint, redirect, url_for, request, flash, Response, jsonify, session
from flask_login import current_user, login_required
from models import User, db, Room, RoomFile, RoomMemberPermission, SiteSettings, Event, Conversation, Message, MessageAttachment, Notif
from models import User, db, Room, RoomFile, RoomMemberPermission, SiteSettings, Event, Conversation, Message, MessageAttachment, Notif, EmailTemplate
from routes.auth import require_password_change
import os
from werkzeug.utils import secure_filename
@@ -621,56 +621,40 @@ def init_routes(main_bp):
@login_required
def settings():
if not current_user.is_admin:
flash('Only administrators can access settings.', 'error')
return redirect(url_for('main.dashboard'))
flash('You do not have permission to access settings.', 'error')
return redirect(url_for('main.index'))
# Get active tab from URL or default to colors
active_tab = request.args.get('tab', 'colors')
# Get site settings
site_settings = SiteSettings.get_settings()
company_form = CompanySettingsForm()
# Get events data if events tab is active
# Get events for the events tab
events = None
total_pages = 0
current_page = 1
users = []
users = {}
if active_tab == 'events':
# Get filter parameters
event_type = request.args.get('event_type', '')
date_range = request.args.get('date_range', '7d')
user_id = request.args.get('user_id', '')
page = request.args.get('page', 1, type=int)
per_page = 10
# Build query
query = Event.query
# Apply filters
if event_type:
query = query.filter(Event.event_type == event_type)
if user_id:
query = query.filter(Event.user_id == user_id)
if date_range and date_range != 'all':
cutoff_date = datetime.utcnow() - timedelta(days=int(date_range[:-1]))
query = query.filter(Event.timestamp >= cutoff_date)
# Get paginated events
events = query.order_by(Event.timestamp.desc()).paginate(page=page, per_page=per_page)
events = Event.query.order_by(Event.timestamp.desc()).paginate(page=page, per_page=per_page)
total_pages = events.pages
current_page = events.page
# Get all users for filter dropdown
users = User.query.order_by(User.username).all()
else:
events = None
total_pages = 0
current_page = 1
users = []
# Get all users for the events
user_ids = set()
for event in events.items:
user_ids.add(event.user_id)
if event.details and 'target_user_id' in event.details:
user_ids.add(event.details['target_user_id'])
users = {user.id: user for user in User.query.filter(User.id.in_(user_ids)).all()}
# Get email templates for the email templates tab
email_templates = []
if active_tab == 'email_templates':
email_templates = EmailTemplate.query.filter_by(is_active=True).all()
# Create form for company settings
company_form = CompanySettingsForm()
if request.method == 'GET':
company_form.company_name.data = site_settings.company_name
company_form.company_website.data = site_settings.company_website
@@ -693,6 +677,7 @@ def init_routes(main_bp):
total_pages=total_pages,
current_page=current_page,
users=users,
email_templates=email_templates,
form=company_form)
@main_bp.route('/settings/colors', methods=['POST'])
@@ -1088,4 +1073,52 @@ def init_routes(main_bp):
headers={
'Content-Disposition': f'attachment; filename=event_log_{datetime.utcnow().strftime("%Y%m%d_%H%M%S")}.csv'
}
)
)
@main_bp.route('/settings/email-templates/<int:template_id>', methods=['PUT'])
@login_required
def update_email_template(template_id):
if not current_user.is_admin:
return jsonify({'error': 'Unauthorized'}), 403
template = EmailTemplate.query.get_or_404(template_id)
data = request.get_json()
if not data:
return jsonify({'error': 'No data provided'}), 400
template.subject = data.get('subject', template.subject)
template.body = data.get('body', template.body)
try:
db.session.commit()
# Log the template update
log_event(
event_type='settings_update',
details={
'user_id': current_user.id,
'user_name': f"{current_user.username} {current_user.last_name}",
'update_type': 'email_template',
'template_id': template.id,
'template_name': template.name,
'changes': {
'subject': template.subject,
'body': template.body
}
}
)
db.session.commit()
return jsonify({
'message': 'Template updated successfully',
'template': {
'id': template.id,
'name': template.name,
'subject': template.subject,
'body': template.body
}
})
except Exception as e:
db.session.rollback()
return jsonify({'error': str(e)}), 500