ypdated the grpups page and upload
This commit is contained in:
101
app.py
101
app.py
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user