169 lines
7.8 KiB
HTML
169 lines
7.8 KiB
HTML
{% extends "base.html" %}
|
|
|
|
{% block title %}Edit Player - SKE Digital Signage{% endblock %}
|
|
|
|
{% block content %}
|
|
<div class="container-fluid py-4">
|
|
<!-- Page Header -->
|
|
<div class="row mb-4">
|
|
<div class="col">
|
|
<h1><i class="bi bi-pencil-square"></i> Edit Player: {{ player.username }}</h1>
|
|
<p class="text-muted">Modify player settings</p>
|
|
</div>
|
|
<div class="col-auto">
|
|
<a href="{{ url_for('dashboard.index') }}" class="btn btn-secondary">
|
|
<i class="bi bi-arrow-left"></i> Back to Dashboard
|
|
</a>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="row">
|
|
<!-- Edit Form -->
|
|
<div class="col-md-6">
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h5><i class="bi bi-gear"></i> Player Settings</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<form method="POST">
|
|
<div class="mb-3">
|
|
<label for="username" class="form-label">Username *</label>
|
|
<input type="text" class="form-control" id="username" name="username"
|
|
value="{{ player.username }}" required>
|
|
</div>
|
|
|
|
<div class="mb-3">
|
|
<label for="hostname" class="form-label">Hostname *</label>
|
|
<input type="text" class="form-control" id="hostname" name="hostname"
|
|
value="{{ player.hostname }}" required>
|
|
<div class="form-text">Must be unique across all players</div>
|
|
</div>
|
|
|
|
<div class="mb-3">
|
|
<label for="password" class="form-label">Password</label>
|
|
<input type="password" class="form-control" id="password" name="password"
|
|
placeholder="Leave blank to keep current password">
|
|
</div>
|
|
|
|
<div class="mb-3">
|
|
<label for="quickconnect_password" class="form-label">Quick Connect Code</label>
|
|
<input type="password" class="form-control" id="quickconnect_password"
|
|
name="quickconnect_password" value="{{ player.quickconnect_password or '' }}"
|
|
placeholder="Optional quick connect code">
|
|
</div>
|
|
|
|
<div class="mb-3">
|
|
<div class="form-check">
|
|
<input class="form-check-input" type="checkbox" id="is_active" name="is_active"
|
|
{{ 'checked' if player.is_active else '' }}>
|
|
<label class="form-check-label" for="is_active">
|
|
Active Player
|
|
</label>
|
|
</div>
|
|
<div class="form-text">Inactive players cannot receive content updates</div>
|
|
</div>
|
|
|
|
<div class="d-grid">
|
|
<button type="submit" class="btn btn-primary">
|
|
<i class="bi bi-check"></i> Update Player
|
|
</button>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Player Info -->
|
|
<div class="col-md-6">
|
|
<div class="card">
|
|
<div class="card-header">
|
|
<h5><i class="bi bi-info-circle"></i> Player Details</h5>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="row mb-2">
|
|
<div class="col-sm-4"><strong>ID:</strong></div>
|
|
<div class="col-sm-8">{{ player.id }}</div>
|
|
</div>
|
|
<div class="row mb-2">
|
|
<div class="col-sm-4"><strong>Created:</strong></div>
|
|
<div class="col-sm-8">{{ player.created_at.strftime('%Y-%m-%d %H:%M') if player.created_at else 'N/A' }}</div>
|
|
</div>
|
|
<div class="row mb-2">
|
|
<div class="col-sm-4"><strong>Last Seen:</strong></div>
|
|
<div class="col-sm-8">
|
|
{% if player.last_seen %}
|
|
{{ player.last_seen.strftime('%Y-%m-%d %H:%M') }}
|
|
{% else %}
|
|
<span class="text-muted">Never</span>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
<div class="row mb-2">
|
|
<div class="col-sm-4"><strong>Status:</strong></div>
|
|
<div class="col-sm-8">
|
|
{% if player.is_active %}
|
|
<span class="badge bg-success">Active</span>
|
|
{% else %}
|
|
<span class="badge bg-secondary">Inactive</span>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
<div class="row mb-2">
|
|
<div class="col-sm-4"><strong>Groups:</strong></div>
|
|
<div class="col-sm-8">
|
|
{% if player.groups %}
|
|
{% for group in player.groups %}
|
|
<span class="badge bg-info">{{ group.name }}</span>
|
|
{% endfor %}
|
|
{% else %}
|
|
<span class="text-muted">No groups assigned</span>
|
|
{% endif %}
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Actions -->
|
|
<div class="card mt-3">
|
|
<div class="card-header">
|
|
<h6><i class="bi bi-tools"></i> Actions</h6>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="d-grid gap-2">
|
|
<a href="{{ url_for('player.fullscreen', player_id=player.id) }}"
|
|
class="btn btn-info" target="_blank">
|
|
<i class="bi bi-fullscreen"></i> Open Fullscreen Display
|
|
</a>
|
|
<button type="button" class="btn btn-danger" data-bs-toggle="modal" data-bs-target="#deleteModal">
|
|
<i class="bi bi-trash"></i> Delete Player
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- Delete Confirmation Modal -->
|
|
<div class="modal fade" id="deleteModal" tabindex="-1">
|
|
<div class="modal-dialog">
|
|
<div class="modal-content">
|
|
<div class="modal-header">
|
|
<h5 class="modal-title">Confirm Delete</h5>
|
|
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
|
|
</div>
|
|
<div class="modal-body">
|
|
<p>Are you sure you want to delete player <strong>{{ player.username }}</strong>?</p>
|
|
<p class="text-danger small">This action cannot be undone and will remove all player data.</p>
|
|
</div>
|
|
<div class="modal-footer">
|
|
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
|
|
<form method="POST" action="{{ url_for('player.delete', player_id=player.id) }}" style="display:inline;">
|
|
<button type="submit" class="btn btn-danger">Delete Player</button>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
{% endblock %}
|