PHP Classes

File: templates/admin_subscriptions.twig

Recommend this page to a friend!
  Packages of Matthew Asham   Binkterm PHP   templates/admin_subscriptions.twig   Download  
File: templates/admin_subscriptions.twig
Role: Auxiliary data
Content type: text/plain
Description: Auxiliary data
Class: Binkterm PHP
Bulletin board system based on the Web
Author: By
Last change:
Date: 5 days ago
Size: 13,947 bytes
 

Contents

Class file image Download
{% extends "base.twig" %} {% block title %}{{ t('ui.admin_subscriptions.page_title', {}, locale, ['common']) }} - {{ system_name }}{% endblock %} {% block content %} <div class="container-fluid"> <div class="row"> <div class="col-12"> <div class="d-flex justify-content-between align-items-center mb-4"> <h2> <i class="fas fa-bookmark-plus me-2"></i> {{ t('ui.admin_subscriptions.heading', {}, locale, ['common']) }} </h2> <nav aria-label="{{ t('ui.admin_subscriptions.breadcrumb_aria', {}, locale, ['common']) }}"> <ol class="breadcrumb mb-0"> <li class="breadcrumb-item"><a href="/admin">{{ t('ui.common.admin', {}, locale, ['common']) }}</a></li> <li class="breadcrumb-item active">{{ t('ui.admin_subscriptions.breadcrumb_current', {}, locale, ['common']) }}</li> </ol> </nav> </div> <!-- Statistics Cards --> <div class="row mb-4"> <div class="col-md-3"> <div class="card bg-primary text-white"> <div class="card-body"> <div class="d-flex align-items-center"> <i class="fas fa-comments fa-2x me-3"></i> <div> <h5 class="mb-1">{{ stats.total_echoareas }}</h5> <small>{{ t('ui.admin_subscriptions.total_echoareas', {}, locale, ['common']) }}</small> </div> </div> </div> </div> </div> <div class="col-md-3"> <div class="card bg-warning text-white"> <div class="card-body"> <div class="d-flex align-items-center"> <i class="fas fa-star fa-2x me-3"></i> <div> <h5 class="mb-1">{{ stats.default_echoareas }}</h5> <small>{{ t('ui.admin_subscriptions.default_echoareas', {}, locale, ['common']) }}</small> </div> </div> </div> </div> </div> <div class="col-md-3"> <div class="card bg-success text-white"> <div class="card-body"> <div class="d-flex align-items-center"> <i class="fas fa-bookmark fa-2x me-3"></i> <div> <h5 class="mb-1">{{ stats.total_subscriptions }}</h5> <small>{{ t('ui.admin_subscriptions.total_subscriptions', {}, locale, ['common']) }}</small> </div> </div> </div> </div> </div> <div class="col-md-3"> <div class="card bg-info text-white"> <div class="card-body"> <div class="d-flex align-items-center"> <i class="fas fa-users fa-2x me-3"></i> <div> <h5 class="mb-1">{{ stats.subscribed_users }}</h5> <small>{{ t('ui.admin_subscriptions.active_subscribers', {}, locale, ['common']) }}</small> </div> </div> </div> </div> </div> </div> <!-- Echoarea Management --> <div class="card"> <div class="card-header"> <h5 class="mb-0"> <i class="fas fa-cog me-2"></i> {{ t('ui.admin_subscriptions.echoarea_default_subscriptions', {}, locale, ['common']) }} </h5> <small class="text-muted">{{ t('ui.admin_subscriptions.manage_default_help', {}, locale, ['common']) }}</small> </div> <div class="card-body"> <div id="admin-status" class="alert d-none" role="alert"></div> <div class="table-responsive"> <table class="table table-hover"> <thead> <tr> <th width="80">{{ t('ui.admin_subscriptions.default', {}, locale, ['common']) }}</th> <th width="150">{{ t('ui.admin_subscriptions.echoarea', {}, locale, ['common']) }}</th> <th>{{ t('ui.common.description', {}, locale, ['common']) }}</th> <th width="100" class="text-center">{{ t('ui.admin_subscriptions.subscribers', {}, locale, ['common']) }}</th> <th width="100" class="text-center">{{ t('ui.admin_subscriptions.user_subs', {}, locale, ['common']) }}</th> <th width="100" class="text-center">{{ t('ui.admin_subscriptions.auto_subs', {}, locale, ['common']) }}</th> <th width="120" class="text-center">{{ t('ui.admin_subscriptions.messages', {}, locale, ['common']) }}</th> </tr> </thead> <tbody> {% for echoarea in echoareas %} <tr> <td> <div class="form-check form-switch"> <input class="form-check-input default-toggle" type="checkbox" id="default-{{ echoarea.id }}" data-echoarea-id="{{ echoarea.id }}" {{ echoarea.is_default_subscription ? 'checked' : '' }}> </div> </td> <td> <div class="d-flex align-items-center"> <span class="me-2" style="display: inline-block; width: 20px; height: 20px; min-width: 20px; min-height: 20px; background-color: {{ echoarea.color }}; border-radius: 3px; flex-shrink: 0;"></span> <span style="color: #ffc107;">{{ echoarea.tag }}</span> {% if echoarea.domain %} <span class="badge bg-secondary ms-2" style="font-size: 0.7em;">{{ echoarea.domain }}</span> {% endif %} {% if echoarea.is_default_subscription %} <i class="fas fa-star text-warning ms-2" title="{{ t('ui.admin_subscriptions.default_subscription_title', {}, locale, ['common']) }}"></i> {% endif %} </div> </td> <td>{{ echoarea.description }}</td> <td class="text-center"> <span class="badge bg-primary">{{ echoarea.subscriber_count }}</span> </td> <td class="text-center"> <span class="badge bg-success">{{ echoarea.user_subscribers }}</span> </td> <td class="text-center"> <span class="badge bg-info">{{ echoarea.auto_subscribers }}</span> </td> <td class="text-center"> <small class="text-muted">{{ echoarea.message_count }}</small> </td> </tr> {% endfor %} </tbody> </table> </div> <div class="mt-3"> <div class="row"> <div class="col-md-6"> <h6>{{ t('ui.admin_subscriptions.legend', {}, locale, ['common']) }}</h6> <ul class="list-unstyled small text-muted"> <li><i class="fas fa-star text-warning me-2"></i>{{ t('ui.admin_subscriptions.legend_default', {}, locale, ['common']) }}</li> <li><span class="badge bg-primary me-2">{{ t('ui.admin_subscriptions.legend_total_badge', {}, locale, ['common']) }}</span>{{ t('ui.admin_subscriptions.legend_total', {}, locale, ['common']) }}</li> <li><span class="badge bg-success me-2">{{ t('ui.admin_subscriptions.legend_user_badge', {}, locale, ['common']) }}</span>{{ t('ui.admin_subscriptions.legend_user', {}, locale, ['common']) }}</li> <li><span class="badge bg-info me-2">{{ t('ui.admin_subscriptions.legend_auto_badge', {}, locale, ['common']) }}</span>{{ t('ui.admin_subscriptions.legend_auto', {}, locale, ['common']) }}</li> </ul> </div> <div class="col-md-6"> <div class="alert alert-info"> <h6><i class="fas fa-info-circle me-2"></i>{{ t('ui.admin_subscriptions.how_it_works', {}, locale, ['common']) }}</h6> <ul class="mb-0 small"> <li>{{ t('ui.admin_subscriptions.how_default_toggle', {}, locale, ['common']) }}</li> <li>{{ t('ui.admin_subscriptions.how_existing_users', {}, locale, ['common']) }}</li> <li>{{ t('ui.admin_subscriptions.how_unsubscribe', {}, locale, ['common']) }}</li> </ul> </div> </div> </div> </div> </div> </div> </div> </div> </div> <script> function uiT(key, fallback, params = {}) { if (window.t) { return window.t(key, params, fallback); } return fallback; } document.addEventListener('DOMContentLoaded', function() { const defaultToggles = document.querySelectorAll('.default-toggle'); const statusDiv = document.getElementById('admin-status'); // Default subscription toggle functionality defaultToggles.forEach(toggle => { toggle.addEventListener('change', function() { const echoareaId = this.dataset.echoareaId; const isDefault = this.checked; const originalState = !this.checked; // Disable toggle while processing this.disabled = true; fetch('/api/subscriptions/admin', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ action: 'set_default', echoarea_id: parseInt(echoareaId), is_default: isDefault }) }) .then(response => response.json()) .then(data => { if (data.success) { const action = isDefault ? uiT('ui.admin_subscriptions.action_enabled', 'enabled') : uiT('ui.admin_subscriptions.action_disabled', 'disabled'); const fallbackMessage = uiT('ui.admin_subscriptions.update_success', 'Default subscription {action} successfully! Page will refresh to show updated stats.', { action }); const successMessage = window.getApiMessage ? window.getApiMessage(data, fallbackMessage) : fallbackMessage; showStatus(successMessage, 'success'); // Refresh page to update subscriber counts setTimeout(() => location.reload(), 1500); } else { // Revert toggle state this.checked = originalState; showStatus(uiT('ui.admin_subscriptions.update_failed', 'Failed to update default subscription. Please try again.'), 'danger'); } }) .catch(error => { // Revert toggle state this.checked = originalState; showStatus(uiT('ui.admin_subscriptions.network_error', 'Network error. Please try again.'), 'danger'); }) .finally(() => { this.disabled = false; }); }); }); function showStatus(message, type) { statusDiv.className = `alert alert-${type}`; statusDiv.textContent = message; statusDiv.classList.remove('d-none'); setTimeout(() => { statusDiv.classList.add('d-none'); }, 5000); } }); </script> {% endblock %}