ypdated the grpups page and upload

This commit is contained in:
2025-04-10 16:30:54 +03:00
parent e0b4e2b2d7
commit 4e3c8915d2
19 changed files with 279 additions and 45 deletions

101
app.py
View File

@@ -6,7 +6,7 @@ import subprocess
from werkzeug.utils import secure_filename
from functools import wraps
from extensions import db, bcrypt, login_manager
from models import User, Player, Content # Import the models from models.py
from models import User, Player, Content, Group # Add Group to the imports
from flask_login import login_user, logout_user, login_required, current_user
app = Flask(__name__, instance_relative_config=True)
@@ -59,8 +59,9 @@ def convert_ppt_to_pdf(input_file, output_file):
@login_required
def dashboard():
players = Player.query.all()
groups = Group.query.all()
logo_exists = os.path.exists(os.path.join(app.config['UPLOAD_FOLDERLOGO'], 'logo.png'))
return render_template('dashboard.html', players=players, logo_exists=logo_exists)
return render_template('dashboard.html', players=players, groups=groups, logo_exists=logo_exists)
@app.route('/register', methods=['GET', 'POST'])
def register():
@@ -112,33 +113,13 @@ def upload_content():
file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
file.save(file_path)
if media_type == 'pdf':
# Convert PDF to PNG
images = convert_from_path(file_path)
for i, image in enumerate(images):
image_filename = f"{os.path.splitext(filename)[0]}_page_{i + 1}.png"
image_path = os.path.join(app.config['UPLOAD_FOLDER'], image_filename)
image.save(image_path, 'PNG')
new_content = Content(file_name=image_filename, duration=duration, player_id=target_id if target_type == 'player' else None)
if target_type == 'group':
group = Group.query.get_or_404(target_id)
for player in group.players:
new_content = Content(file_name=filename, duration=duration, player_id=player.id)
db.session.add(new_content)
os.remove(file_path) # Remove the original PDF file
elif media_type == 'ppt':
# Convert PPT/PPTX to PDF
pdf_filename = f"{os.path.splitext(filename)[0]}.pdf"
pdf_path = os.path.join(app.config['UPLOAD_FOLDER'], pdf_filename)
convert_ppt_to_pdf(file_path, pdf_path)
# Convert PDF to PNG
images = convert_from_path(pdf_path)
for i, image in enumerate(images):
image_filename = f"{os.path.splitext(filename)[0]}_page_{i + 1}.png"
image_path = os.path.join(app.config['UPLOAD_FOLDER'], image_filename)
image.save(image_path, 'PNG')
new_content = Content(file_name=image_filename, duration=duration, player_id=target_id if target_type == 'player' else None)
db.session.add(new_content)
os.remove(file_path) # Remove the original PPT/PPTX file
os.remove(pdf_path) # Remove the intermediate PDF file
else:
new_content = Content(file_name=filename, duration=duration, player_id=target_id if target_type == 'player' else None)
elif target_type == 'player':
new_content = Content(file_name=filename, duration=duration, player_id=target_id)
db.session.add(new_content)
db.session.commit()
@@ -147,8 +128,12 @@ def upload_content():
target_type = request.args.get('target_type')
target_id = request.args.get('target_id')
return_url = request.args.get('return_url', url_for('dashboard'))
players = Player.query.all()
return render_template('upload_content.html', target_type=target_type, target_id=target_id, players=players, return_url=return_url)
# Serialize players and groups into JSON-serializable dictionaries
players = [{'id': player.id, 'username': player.username} for player in Player.query.filter(~Player.groups.any()).all()]
groups = [{'id': group.id, 'name': group.name} for group in Group.query.all()]
return render_template('upload_content.html', target_type=target_type, target_id=target_id, players=players, groups=groups, return_url=return_url)
@app.route('/admin')
@login_required
@@ -417,6 +402,62 @@ def inject_theme():
theme = 'light'
return dict(theme=theme)
@app.route('/group/create', methods=['GET', 'POST'])
@login_required
@admin_required
def create_group():
if request.method == 'POST':
group_name = request.form['name']
player_ids = request.form.getlist('players')
new_group = Group(name=group_name)
for player_id in player_ids:
player = Player.query.get(player_id)
if player:
new_group.players.append(player)
db.session.add(new_group)
db.session.commit()
return redirect(url_for('dashboard'))
players = Player.query.all()
return render_template('create_group.html', players=players)
@app.route('/group/<int:group_id>/manage')
@login_required
@admin_required
def manage_group(group_id):
group = Group.query.get_or_404(group_id)
content = Content.query.filter(Content.player_id.in_([player.id for player in group.players])).all()
return render_template('manage_group.html', group=group, content=content)
@app.route('/group/<int:group_id>/edit', methods=['GET', 'POST'])
@login_required
@admin_required
def edit_group(group_id):
group = Group.query.get_or_404(group_id)
if request.method == 'POST':
group.name = request.form['name']
player_ids = request.form.getlist('players')
group.players = [Player.query.get(player_id) for player_id in player_ids if Player.query.get(player_id)]
db.session.commit()
return redirect(url_for('dashboard'))
players = Player.query.all()
return render_template('edit_group.html', group=group, players=players)
@app.route('/group/<int:group_id>/delete', methods=['POST'])
@login_required
@admin_required
def delete_group(group_id):
group = Group.query.get_or_404(group_id)
db.session.delete(group)
db.session.commit()
return redirect(url_for('dashboard'))
@app.route('/group/<int:group_id>/fullscreen', methods=['GET'])
@login_required
def group_fullscreen(group_id):
group = Group.query.get_or_404(group_id)
content = Content.query.filter(Content.player_id.in_([player.id for player in group.players])).all()
return render_template('group_fullscreen.html', group=group, content=content)
if __name__ == '__main__':
with app.app_context():
db.create_all() # Creează toate tabelele