fix a bunch is settings

This commit is contained in:
2025-05-30 20:32:40 +02:00
parent 43f29f9a46
commit c09a5c758e
10 changed files with 172 additions and 148 deletions

View File

@@ -9,6 +9,7 @@ from datetime import datetime, timedelta
import logging
import sys
import time
from forms import CompanySettingsForm
# Set up logging to show in console
logging.basicConfig(
@@ -407,54 +408,61 @@ def init_routes(main_bp):
flash('Only administrators can access settings.', 'error')
return redirect(url_for('main.dashboard'))
site_settings = SiteSettings.get_settings()
# Get active tab from URL or default to colors
active_tab = request.args.get('tab', 'colors')
# Get site settings
site_settings = SiteSettings.get_settings()
# Get events data if events tab is active
events = None
total_pages = 1
total_pages = 0
current_page = 1
users = []
if active_tab == 'events':
# Get filter parameters
event_type = request.args.get('event_type')
event_type = request.args.get('event_type', '')
date_range = request.args.get('date_range', '7d')
user_id = request.args.get('user_id')
user_id = request.args.get('user_id', '')
page = request.args.get('page', 1, type=int)
per_page = 50
# Calculate date range
end_date = datetime.utcnow()
if date_range == '24h':
start_date = end_date - timedelta(days=1)
elif date_range == '7d':
start_date = end_date - timedelta(days=7)
elif date_range == '30d':
start_date = end_date - timedelta(days=30)
else:
start_date = None
per_page = 10
# Build query
query = Event.query
# Apply filters
if event_type:
query = query.filter_by(event_type=event_type)
if start_date:
query = query.filter(Event.timestamp >= start_date)
query = query.filter(Event.event_type == event_type)
if user_id:
query = query.filter_by(user_id=user_id)
# Get total count for pagination
total_events = query.count()
total_pages = (total_events + per_page - 1) // per_page
query = query.filter(Event.user_id == user_id)
if date_range:
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)
total_pages = events.pages
current_page = events.page
# Get all users for filter dropdown
users = User.query.order_by(User.username).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
company_form.company_email.data = site_settings.company_email
company_form.company_phone.data = site_settings.company_phone
company_form.company_address.data = site_settings.company_address
company_form.company_city.data = site_settings.company_city
company_form.company_state.data = site_settings.company_state
company_form.company_zip.data = site_settings.company_zip
company_form.company_country.data = site_settings.company_country
company_form.company_description.data = site_settings.company_description
company_form.company_industry.data = site_settings.company_industry
return render_template('settings/settings.html',
primary_color=site_settings.primary_color,
secondary_color=site_settings.secondary_color,
@@ -464,7 +472,7 @@ def init_routes(main_bp):
total_pages=total_pages,
current_page=current_page,
users=users,
csrf_token=session.get('csrf_token'))
form=company_form)
@main_bp.route('/settings/colors', methods=['POST'])
@login_required
@@ -544,12 +552,17 @@ def init_routes(main_bp):
flash('Only administrators can update settings.', 'error')
return redirect(url_for('main.dashboard'))
form = CompanySettingsForm()
if not form.validate():
flash('Please check the form for errors.', 'error')
return redirect(url_for('main.settings'))
site_settings = SiteSettings.get_settings()
# Handle logo upload
if 'company_logo' in request.files:
logo_file = request.files['company_logo']
if logo_file and logo_file.filename:
if form.company_logo.data:
logo_file = form.company_logo.data
if logo_file.filename:
# Delete old logo if it exists
if site_settings.company_logo:
old_logo_path = os.path.join('static', 'uploads', 'company_logos', site_settings.company_logo)
@@ -565,17 +578,17 @@ def init_routes(main_bp):
site_settings.company_logo = filename
# Update all company fields
site_settings.company_name = request.form.get('company_name')
site_settings.company_website = request.form.get('company_website')
site_settings.company_email = request.form.get('company_email')
site_settings.company_phone = request.form.get('company_phone')
site_settings.company_address = request.form.get('company_address')
site_settings.company_city = request.form.get('company_city')
site_settings.company_state = request.form.get('company_state')
site_settings.company_zip = request.form.get('company_zip')
site_settings.company_country = request.form.get('company_country')
site_settings.company_description = request.form.get('company_description')
site_settings.company_industry = request.form.get('company_industry')
site_settings.company_name = form.company_name.data
site_settings.company_website = form.company_website.data
site_settings.company_email = form.company_email.data
site_settings.company_phone = form.company_phone.data
site_settings.company_address = form.company_address.data
site_settings.company_city = form.company_city.data
site_settings.company_state = form.company_state.data
site_settings.company_zip = form.company_zip.data
site_settings.company_country = form.company_country.data
site_settings.company_description = form.company_description.data
site_settings.company_industry = form.company_industry.data
try:
db.session.commit()
@@ -599,7 +612,7 @@ def init_routes(main_bp):
'company_country': site_settings.company_country,
'company_description': site_settings.company_description,
'company_industry': site_settings.company_industry,
'logo_updated': bool(request.files.get('company_logo'))
'logo_updated': bool(form.company_logo.data)
}
}
)
@@ -607,10 +620,11 @@ def init_routes(main_bp):
flash('Company settings updated successfully!', 'success')
except Exception as e:
logger.error(f"Error updating company settings: {str(e)}")
db.session.rollback()
flash('An error occurred while updating company settings.', 'error')
return redirect(url_for('main.settings', tab='general'))
return redirect(url_for('main.settings'))
@main_bp.route('/dynamic-colors.css')
def dynamic_colors():

View File

@@ -1,6 +1,6 @@
from flask import Blueprint, jsonify, request, abort
from flask_login import login_required, current_user
from models import db, Room, RoomFile, TrashedFile
from models import db, Room, RoomFile, TrashedFile, UserStarredFile
from utils import user_has_permission, clean_path
import os
from datetime import datetime
@@ -99,29 +99,34 @@ def permanently_delete_file(room_id, trash_id):
@trash_bp.route('/<int:room_id>/trash/empty', methods=['POST'])
@login_required
def empty_trash(room_id):
room = Room.query.get_or_404(room_id)
if not user_has_permission(room, 'can_delete'):
abort(403)
# Get all trashed files for this room
trashed_files = TrashedFile.query.filter_by(room_id=room_id).all()
room_files = RoomFile.query.filter_by(room_id=room_id, deleted=True).all()
# Delete physical files
room_dir = os.path.join('/data/rooms', str(room_id))
for file in trashed_files + room_files:
try:
if file.type == 'file':
file_path = os.path.join(room_dir, file.original_path if hasattr(file, 'original_path') else file.path, file.name)
"""Empty the trash for a specific room."""
try:
# Get all trashed files
trashed_files = TrashedFile.query.filter_by(room_id=room_id).all()
# Delete physical files first
for file in trashed_files:
try:
file_path = os.path.join(current_app.config['UPLOAD_FOLDER'], str(room_id), file.name)
if os.path.exists(file_path):
os.remove(file_path)
except Exception as e:
print(f"Error deleting physical file {file.name}: {str(e)}")
continue
# Delete all trashed files from both tables
TrashedFile.query.filter_by(room_id=room_id).delete()
RoomFile.query.filter_by(room_id=room_id, deleted=True).delete()
db.session.commit()
return jsonify({'success': True})
except Exception as e:
print(f"Error deleting physical file {file.name}: {str(e)}")
continue
# Delete all starred file references for the trashed files
room_files = RoomFile.query.filter_by(room_id=room_id, deleted=True).all()
for file in room_files:
UserStarredFile.query.filter_by(file_id=file.id).delete()
# Delete all trashed files from both tables
TrashedFile.query.filter_by(room_id=room_id).delete()
RoomFile.query.filter_by(room_id=room_id, deleted=True).delete()
db.session.commit()
return jsonify({'success': True})
except Exception as e:
db.session.rollback()
print(f"Error emptying trash: {str(e)}")
return jsonify({'success': False, 'error': str(e)}), 500