From ef69b4fe6568da9025fa6e025b1b60b3c1457c18 Mon Sep 17 00:00:00 2001 From: Ske087 Date: Tue, 21 Jan 2025 17:04:59 +0200 Subject: [PATCH] added management options for media --- app.py | 217 ++++++++++++++++++++---------------- instance/dashboard.db | Bin 49152 -> 49152 bytes templates/add_group.html | 36 ++++-- templates/add_player.html | 38 ++++--- templates/manage_group.html | 46 ++++++++ templates/player_page.html | 12 +- 6 files changed, 229 insertions(+), 120 deletions(-) diff --git a/app.py b/app.py index 9836c4e..3198da4 100644 --- a/app.py +++ b/app.py @@ -53,6 +53,7 @@ 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') + content = db.relationship('Content', backref='group', lazy=True) group_players = db.Table('group_players', db.Column('group_id', db.Integer, db.ForeignKey('group.id'), primary_key=True), @@ -110,43 +111,6 @@ def logout(): logout_user() return redirect(url_for('login')) -@app.route('/add_player', methods=['GET', 'POST']) -@login_required -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']) -@login_required -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']) @login_required def upload_content(): @@ -167,63 +131,6 @@ def upload_content(): return redirect(url_for('dashboard')) return render_template('upload_content.html') -@app.route('/content//edit', methods=['POST']) -@login_required -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']) -@login_required -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)) - -@app.route('/player//fullscreen') -@login_required -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/') -@login_required -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']) -@login_required -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']) -@login_required -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')) - @app.route('/admin') @login_required @admin_required @@ -282,6 +189,16 @@ def add_player_to_group(group_id): db.session.commit() return redirect(url_for('manage_group', group_id=group_id)) +@app.route('/group//remove_player/', methods=['POST']) +@login_required +@admin_required +def remove_player_from_group(group_id, player_id): + group = Group.query.get_or_404(group_id) + player = Player.query.get_or_404(player_id) + group.players.remove(player) + db.session.commit() + return redirect(url_for('manage_group', group_id=group_id)) + @app.route('/group//upload', methods=['POST']) @login_required @admin_required @@ -300,6 +217,118 @@ def upload_content_to_group(group_id): db.session.commit() return redirect(url_for('manage_group', group_id=group_id)) +@app.route('/group/content//edit', methods=['POST']) +@login_required +@admin_required +def edit_group_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('manage_group', group_id=content.group_id)) + +@app.route('/group/content//delete', methods=['POST']) +@login_required +@admin_required +def delete_group_content(content_id): + content = Content.query.get_or_404(content_id) + group_id = content.group_id + db.session.delete(content) + db.session.commit() + return redirect(url_for('manage_group', group_id=group_id)) + +@app.route('/player/') +@login_required +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']) +@login_required +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('/content//edit', methods=['POST']) +@login_required +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']) +@login_required +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)) + +@app.route('/player//fullscreen') +@login_required +def player_fullscreen(player_id): + player = Player.query.get_or_404(player_id) + if player.groups: + # If the player is part of a group, get the group's content + group = player.groups[0] # Assuming a player can only be in one group + content = Content.query.filter_by(group_id=group.id).all() + else: + # If the player is not part of a group, get the player's content + content = Content.query.filter_by(player_id=player_id).all() + return render_template('player_fullscreen.html', player=player, content=content) + +@app.route('/player//delete', methods=['POST']) +@login_required +@admin_required +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')) + +@app.route('/player/add', methods=['GET', 'POST']) +@login_required +@admin_required +def add_player(): + if request.method == 'POST': + username = request.form['username'] + hostname = request.form['hostname'] + ip = request.form['ip'] + password = request.form['password'] + hashed_password = bcrypt.generate_password_hash(password).decode('utf-8') + new_player = Player(username=username, hostname=hostname, ip=ip, password=hashed_password) + db.session.add(new_player) + db.session.commit() + return redirect(url_for('dashboard')) + return render_template('add_player.html') + +@app.route('/group/add', methods=['GET', 'POST']) +@login_required +@admin_required +def add_group(): + if request.method == 'POST': + name = request.form['name'] + new_group = Group(name=name) + db.session.add(new_group) + db.session.commit() + return redirect(url_for('dashboard')) + return render_template('add_group.html') + if __name__ == '__main__': with app.app_context(): db.create_all() # Creează toate tabelele diff --git a/instance/dashboard.db b/instance/dashboard.db index d547317d0f9667a47a4ba923c780f08ea3700a4b..a40a3b6f55d0b762dcf386181be5858ea7cdf153 100644 GIT binary patch delta 83 zcmZo@U~Xt&o*>OAKT*b+QGR2>LVIrhUkr@=Ul{nm@PFB?$p3<0f`y5hlaZN$fq{*I ffeS4AnSuW^|7W1=bADbn7EVS+W+sUAqJ#thn!*!- delta 66 zcmZo@U~Xt&o*>OAJ5k1&QFdd(LVHdI1_nm{Ukv=eHY@Uf;1^(FWaeaK;zAW=V`brF K Add Group + -

Add Group

-
- -
-
- {% for player in players %} - - {{ player.username }}
- {% endfor %} - -
- Back to Dashboard +
+

Add Group

+
+
+ + +
+
+
+ {% for player in players %} +
+ + +
+ {% endfor %} +
+ +
+ Back to Dashboard +
+ diff --git a/templates/add_player.html b/templates/add_player.html index 2b76d4a..a0f8c21 100644 --- a/templates/add_player.html +++ b/templates/add_player.html @@ -2,20 +2,32 @@ Add Player + -

Add Player

-
- -
- -
- -
- -
- -
- Back to Dashboard +
+

Add Player

+
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ Back to Dashboard +
+ diff --git a/templates/manage_group.html b/templates/manage_group.html index 366b552..f1eb96e 100644 --- a/templates/manage_group.html +++ b/templates/manage_group.html @@ -28,6 +28,25 @@ + +
+
+

Players in Group

+
+
+
    + {% for player in group.players %} +
  • +
    {{ player.username }} ({{ player.ip }})
    +
    + +
    +
  • + {% endfor %} +
+
+
+
@@ -48,6 +67,33 @@
+ +
+
+

Manage Group Content

+
+
+
    + {% for content in group.content %} +
  • +
    {{ content.file_name }} - {{ content.duration }} seconds
    +
    + +
    + + +
    + +
    + +
    +
    +
  • + {% endfor %} +
+
+
+ Back to Dashboard diff --git a/templates/player_page.html b/templates/player_page.html index 1b3f9d7..6788db9 100644 --- a/templates/player_page.html +++ b/templates/player_page.html @@ -14,7 +14,12 @@

Member of Group(s):

    {% for group in player.groups %} -
  • {{ group.name }}
  • +
  • +
    {{ group.name }}
    +
    + +
    +
  • {% endfor %}
{% else %} @@ -34,6 +39,7 @@
{{ item.file_name }} - {{ item.duration }} seconds
+ {% if not player.groups %}
@@ -45,6 +51,7 @@
+ {% endif %} {% endfor %} @@ -52,6 +59,7 @@ + {% if not player.groups %}

Upload Content

@@ -70,8 +78,10 @@
+ {% endif %} Back to Dashboard + Full Screen