Enhance newsletter generation and dashboard functionality
- Introduce a new period selection feature in the dashboard for generating newsletters, allowing users to choose between "last month" and "last X days." - Refactor newsletter generation logic to support filtering by article type (new, edited, or all) and improve the handling of filters in the dashboard. - Update the dashboard template to include new input fields for period and article type, enhancing user experience. - Improve CSS styles for send notifications and sections in the dashboard, providing clearer feedback on newsletter sending status.
This commit is contained in:
@@ -35,16 +35,27 @@
|
||||
<form method="post" action="/dashboard" class="form-grid">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
||||
<div class="form-row">
|
||||
<label>Zeitraum (Tage)
|
||||
<label>Zeitraum
|
||||
<select name="period">
|
||||
<option value="days" {% if filters.period != 'last_month' %}selected{% endif %}>Letzte X Tage</option>
|
||||
<option value="last_month" {% if filters.period == 'last_month' %}selected{% endif %}>Letzter Monat (voller Kalendermonat)</option>
|
||||
</select>
|
||||
</label>
|
||||
<label>Tage (nur bei „Letzte X Tage“)
|
||||
<input type="number" name="days" min="1" max="90" value="{{ filters.days }}">
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-row">
|
||||
<label>Kategorie (optional)
|
||||
<input type="text" name="category" value="{{ filters.category }}" placeholder="z. B. Linux">
|
||||
</label>
|
||||
</div>
|
||||
<label class="checkbox">
|
||||
<input type="checkbox" name="only_edited" value="true" {% if filters.only_edited %}checked{% endif %}>
|
||||
Nur bearbeitete Artikel (keine neu erstellten)
|
||||
<label>Artikel-Auswahl
|
||||
<select name="article_type">
|
||||
<option value="all" {% if filters.article_type == 'all' %}selected{% endif %}>Alle (neue & bearbeitete)</option>
|
||||
<option value="new" {% if filters.article_type == 'new' %}selected{% endif %}>Nur neue Artikel</option>
|
||||
<option value="edited" {% if filters.article_type == 'edited' %}selected{% endif %}>Nur bearbeitete Artikel (keine neu erstellten)</option>
|
||||
</select>
|
||||
</label>
|
||||
<fieldset class="display-options">
|
||||
<legend>Anzeige im Newsletter</legend>
|
||||
@@ -100,8 +111,42 @@
|
||||
<textarea id="newsletter-html-source" class="hidden-source" hidden readonly>{{ raw_html }}</textarea>
|
||||
<textarea id="newsletter-outlook-source" class="hidden-source" hidden readonly>{{ outlook_html }}</textarea>
|
||||
<textarea id="newsletter-plain-source" class="hidden-source" hidden readonly>{{ plain_text }}</textarea>
|
||||
|
||||
{% if send_result %}
|
||||
<div class="send-banner send-banner-{{ send_result.status }}">{{ send_result.message }}</div>
|
||||
{% endif %}
|
||||
|
||||
{% if raw_html and (articles_new or articles_edited) %}
|
||||
<div class="send-section">
|
||||
<h4 style="margin:0 0 0.35rem;">Per E-Mail versenden</h4>
|
||||
<p class="hint" style="margin:0 0 0.75rem;">Bitte oben die Vorschau prüfen. Beim Versenden wird genau dieser Newsletter (aktuelle Filter) an die Verteilerliste geschickt.</p>
|
||||
<p class="hint" style="margin:0 0 0.75rem;">
|
||||
<strong>Betreff:</strong> {{ subject }}<br>
|
||||
<strong>Empfänger:</strong> {{ smtp.recipients if smtp.recipients else "— keine konfiguriert —" }}
|
||||
{% if smtp.enabled != "true" %}<br><strong style="color:var(--tk-orange-dark);">SMTP ist deaktiviert</strong> – bitte zuerst in „SMTP-Konfiguration“ aktivieren.{% endif %}
|
||||
</p>
|
||||
{% if user.role in ["admin", "editor"] %}
|
||||
<form method="post" action="/newsletter/send-now" onsubmit="return confirm('Diesen Newsletter jetzt per E-Mail an die Verteilerliste senden?');">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
||||
<input type="hidden" name="period" value="{{ filters.period }}">
|
||||
<input type="hidden" name="days" value="{{ filters.days }}">
|
||||
<input type="hidden" name="category" value="{{ filters.category }}">
|
||||
<input type="hidden" name="article_type" value="{{ filters.article_type }}">
|
||||
<input type="hidden" name="show_date" value="{{ 'true' if filters.display.show_date else 'false' }}">
|
||||
<input type="hidden" name="show_user" value="{{ 'true' if filters.display.show_user else 'false' }}">
|
||||
<input type="hidden" name="show_category" value="{{ 'true' if filters.display.show_category else 'false' }}">
|
||||
<input type="hidden" name="highlights" value="{{ filters.highlights }}">
|
||||
<input type="hidden" name="editor_tip" value="{{ filters.editor_tip }}">
|
||||
<button type="submit" class="btn-primary">Newsletter jetzt senden</button>
|
||||
</form>
|
||||
{% else %}
|
||||
<p class="hint">Sie haben Leserechte – Versand nur für Editor/Admin.</p>
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
||||
</section>
|
||||
|
||||
{% if filters.article_type != 'edited' %}
|
||||
<section class="card card-accent-gray">
|
||||
<div class="card-header">
|
||||
<h3>Neue Artikel <span class="count-badge orange">{{ articles_new|length }}</span></h3>
|
||||
@@ -131,7 +176,9 @@
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
{% endif %}
|
||||
|
||||
{% if filters.article_type != 'new' %}
|
||||
<section class="card card-accent-gray">
|
||||
<div class="card-header">
|
||||
<h3>Bearbeitete Artikel <span class="count-badge">{{ articles_edited|length }}</span></h3>
|
||||
@@ -161,6 +208,7 @@
|
||||
</table>
|
||||
</div>
|
||||
</section>
|
||||
{% endif %}
|
||||
|
||||
<details class="card-details">
|
||||
<summary>Weitere Ausgabeformate</summary>
|
||||
@@ -179,27 +227,6 @@
|
||||
</div>
|
||||
</details>
|
||||
|
||||
{% if user.role in ["admin", "editor"] %}
|
||||
<details class="card-details">
|
||||
<summary>SMTP-Versand</summary>
|
||||
<div class="details-body">
|
||||
<p class="hint">Newsletter direkt per E-Mail versenden (aktuell gewählte Filter).</p>
|
||||
<form method="post" action="/newsletter/send-now">
|
||||
<input type="hidden" name="csrf_token" value="{{ csrf_token }}">
|
||||
<input type="hidden" name="days" value="{{ filters.days }}">
|
||||
<input type="hidden" name="category" value="{{ filters.category }}">
|
||||
<input type="hidden" name="only_edited" value="{{ 'true' if filters.only_edited else 'false' }}">
|
||||
<input type="hidden" name="show_date" value="{{ 'true' if filters.display.show_date else 'false' }}">
|
||||
<input type="hidden" name="show_user" value="{{ 'true' if filters.display.show_user else 'false' }}">
|
||||
<input type="hidden" name="show_category" value="{{ 'true' if filters.display.show_category else 'false' }}">
|
||||
<input type="hidden" name="highlights" value="{{ filters.highlights }}">
|
||||
<input type="hidden" name="editor_tip" value="{{ filters.editor_tip }}">
|
||||
<button type="submit" class="btn-secondary">Newsletter jetzt senden</button>
|
||||
</form>
|
||||
</div>
|
||||
</details>
|
||||
{% endif %}
|
||||
|
||||
{% if user.role == "admin" %}
|
||||
<details class="card-details">
|
||||
<summary>SMTP-Konfiguration</summary>
|
||||
|
||||
Reference in New Issue
Block a user