import os from werkzeug.utils import secure_filename from flask import Flask, render_template, request, redirect, url_for from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) # Configurare baza de date SQLite app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///dashboard.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app) UPLOAD_FOLDER = 'static/uploads' app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER # Ensure the upload folder exists if not os.path.exists(UPLOAD_FOLDER): os.makedirs(UPLOAD_FOLDER) # Modele pentru baza de date class Player(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), nullable=False) hostname = db.Column(db.String(120), nullable=False) ip = db.Column(db.String(15), nullable=False) password = db.Column(db.String(120), nullable=False) class Group(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(80), unique=True, nullable=False) players = db.relationship('Player', secondary='group_players', backref='groups') group_players = db.Table('group_players', db.Column('group_id', db.Integer, db.ForeignKey('group.id'), primary_key=True), db.Column('player_id', db.Integer, db.ForeignKey('player.id'), primary_key=True) ) class Content(db.Model): id = db.Column(db.Integer, primary_key=True) file_name = db.Column(db.String(120), nullable=False) duration = db.Column(db.Integer, nullable=False) player_id = db.Column(db.Integer, db.ForeignKey('player.id'), nullable=True) group_id = db.Column(db.Integer, db.ForeignKey('group.id'), nullable=True) @app.route('/') def dashboard(): players = Player.query.all() groups = Group.query.all() return render_template('dashboard.html', players=players, groups=groups) @app.route('/add_player', methods=['GET', 'POST']) def add_player(): if request.method == 'POST': username = request.form['username'] hostname = request.form['hostname'] ip = request.form['ip'] password = request.form['password'] new_player = Player(username=username, hostname=hostname, ip=ip, password=password) db.session.add(new_player) db.session.commit() return redirect(url_for('dashboard')) return render_template('add_player.html') @app.route('/add_group', methods=['GET', 'POST']) def add_group(): if request.method == 'POST': group_name = request.form['group_name'] selected_players = request.form.getlist('players') new_group = Group(name=group_name) for player_id in selected_players: player = Player.query.get(int(player_id)) 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('add_group.html', players=players) @app.route('/upload_content', methods=['GET', 'POST']) def upload_content(): if request.method == 'POST': target_type = request.form['target_type'] target_id = request.form['target_id'] files = request.files.getlist('files') duration = int(request.form['duration']) for file in files: if target_type == 'player': new_content = Content(file_name=file.filename, duration=duration, player_id=int(target_id)) elif target_type == 'group': new_content = Content(file_name=file.filename, duration=duration, group_id=int(target_id)) db.session.add(new_content) db.session.commit() return redirect(url_for('dashboard')) players = Player.query.all() groups = Group.query.all() return render_template('upload_content.html', players=players, groups=groups) # ...existing code... @app.route('/content//edit', methods=['POST']) def edit_content(content_id): content = Content.query.get_or_404(content_id) new_duration = int(request.form['duration']) content.duration = new_duration db.session.commit() return redirect(url_for('player_page', player_id=content.player_id)) @app.route('/content//delete', methods=['POST']) def delete_content(content_id): content = Content.query.get_or_404(content_id) player_id = content.player_id db.session.delete(content) db.session.commit() return redirect(url_for('player_page', player_id=player_id)) # ...existing code... @app.route('/player//fullscreen') def player_fullscreen(player_id): player = Player.query.get_or_404(player_id) content = Content.query.filter_by(player_id=player_id).all() return render_template('player_fullscreen.html', player=player, content=content) @app.route('/player/') def player_page(player_id): player = Player.query.get_or_404(player_id) content = Content.query.filter_by(player_id=player_id).all() return render_template('player_page.html', player=player, content=content) @app.route('/player//upload', methods=['POST']) def upload_content_to_player(player_id): player = Player.query.get_or_404(player_id) files = request.files.getlist('files') duration = int(request.form['duration']) for file in files: filename = secure_filename(file.filename) file_path = os.path.join(app.config['UPLOAD_FOLDER'], filename) file.save(file_path) new_content = Content(file_name=filename, duration=duration, player_id=player_id) db.session.add(new_content) db.session.commit() return redirect(url_for('player_page', player_id=player_id)) @app.route('/player//delete', methods=['POST']) def delete_player(player_id): player = Player.query.get_or_404(player_id) db.session.delete(player) db.session.commit() return redirect(url_for('dashboard')) if __name__ == '__main__': with app.app_context(): db.create_all() # Creează toate tabelele app.run(debug=True)