email templates page
This commit is contained in:
107
routes/main.py
107
routes/main.py
@@ -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
|
||||
Reference in New Issue
Block a user