Add <thead>/<th> headers to all email and PDF template tables, fix infra test snapshot data
- Add proper <thead> with <th> headers to tables in email templates: order_cancelled_orga, order_notification_orga, order_refunded, organizer_invitation, payment_failed, scan_force_notification - Add proper <thead> with <th> headers to tables in PDF templates: attestation_ventes, billet, export_recap, invoice - Fix testInfraPageWithSnapshotData: provide complete server data (os, uptime, cpu, ram, disk, services, ssl) required by the template Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -8,6 +8,13 @@
|
|||||||
<p>La commande <strong>{{ order.orderNumber }}</strong> pour l'evenement <strong>{{ order.event.title }}</strong> a ete <strong>{{ action }}</strong>.</p>
|
<p>La commande <strong>{{ order.orderNumber }}</strong> pour l'evenement <strong>{{ order.event.title }}</strong> a ete <strong>{{ action }}</strong>.</p>
|
||||||
|
|
||||||
<table style="width: 100%; border-collapse: collapse; margin: 20px 0; border: 2px solid #111827;">
|
<table style="width: 100%; border-collapse: collapse; margin: 20px 0; border: 2px solid #111827;">
|
||||||
|
<thead>
|
||||||
|
<tr style="background: #111827; color: #fff;">
|
||||||
|
<th style="padding: 10px 12px; text-align: left; font-size: 11px; font-weight: 900; text-transform: uppercase; letter-spacing: 1px; width: 140px;">Champ</th>
|
||||||
|
<th style="padding: 10px 12px; text-align: left; font-size: 11px; font-weight: 900; text-transform: uppercase; letter-spacing: 1px;">Valeur</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
<tr style="border-bottom: 1px solid #e5e7eb;">
|
<tr style="border-bottom: 1px solid #e5e7eb;">
|
||||||
<td style="padding: 10px 12px; font-weight: 900; text-transform: uppercase; font-size: 11px; color: #6b7280; width: 140px;">Commande</td>
|
<td style="padding: 10px 12px; font-weight: 900; text-transform: uppercase; font-size: 11px; color: #6b7280; width: 140px;">Commande</td>
|
||||||
<td style="padding: 10px 12px; font-weight: 700; font-size: 14px;">{{ order.orderNumber }}</td>
|
<td style="padding: 10px 12px; font-weight: 700; font-size: 14px;">{{ order.orderNumber }}</td>
|
||||||
@@ -28,6 +35,7 @@
|
|||||||
<td style="padding: 10px 12px; font-weight: 900; text-transform: uppercase; font-size: 11px; color: #6b7280;">Montant HT</td>
|
<td style="padding: 10px 12px; font-weight: 900; text-transform: uppercase; font-size: 11px; color: #6b7280;">Montant HT</td>
|
||||||
<td style="padding: 10px 12px; font-weight: 900; color: #4f46e5;">{{ order.totalHTDecimal|number_format(2, ',', ' ') }} €</td>
|
<td style="padding: 10px 12px; font-weight: 900; color: #4f46e5;">{{ order.totalHTDecimal|number_format(2, ',', ' ') }} €</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
{{ include('email/_order_items_table.html.twig', {order: order}) }}
|
{{ include('email/_order_items_table.html.twig', {order: order}) }}
|
||||||
|
|||||||
@@ -8,6 +8,13 @@
|
|||||||
<p>Une nouvelle commande a ete passee pour votre evenement <strong>{{ order.event.title }}</strong>.</p>
|
<p>Une nouvelle commande a ete passee pour votre evenement <strong>{{ order.event.title }}</strong>.</p>
|
||||||
|
|
||||||
<table style="width: 100%; border-collapse: collapse; margin: 20px 0; border: 2px solid #111827;">
|
<table style="width: 100%; border-collapse: collapse; margin: 20px 0; border: 2px solid #111827;">
|
||||||
|
<thead>
|
||||||
|
<tr style="background: #111827; color: #fff;">
|
||||||
|
<th style="padding: 10px 12px; text-align: left; font-size: 11px; font-weight: 900; text-transform: uppercase; letter-spacing: 1px; width: 140px;">Champ</th>
|
||||||
|
<th style="padding: 10px 12px; text-align: left; font-size: 11px; font-weight: 900; text-transform: uppercase; letter-spacing: 1px;">Valeur</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
<tr style="border-bottom: 1px solid #e5e7eb;">
|
<tr style="border-bottom: 1px solid #e5e7eb;">
|
||||||
<td style="padding: 10px 12px; font-weight: 900; text-transform: uppercase; font-size: 11px; color: #6b7280; width: 140px;">Commande</td>
|
<td style="padding: 10px 12px; font-weight: 900; text-transform: uppercase; font-size: 11px; color: #6b7280; width: 140px;">Commande</td>
|
||||||
<td style="padding: 10px 12px; font-weight: 700; font-size: 14px;">{{ order.orderNumber }}</td>
|
<td style="padding: 10px 12px; font-weight: 700; font-size: 14px;">{{ order.orderNumber }}</td>
|
||||||
@@ -24,6 +31,7 @@
|
|||||||
<td style="padding: 10px 12px; font-weight: 900; text-transform: uppercase; font-size: 11px; color: #6b7280;">Date</td>
|
<td style="padding: 10px 12px; font-weight: 900; text-transform: uppercase; font-size: 11px; color: #6b7280;">Date</td>
|
||||||
<td style="padding: 10px 12px;">{{ order.paidAt|date('d/m/Y H:i') }}</td>
|
<td style="padding: 10px 12px;">{{ order.paidAt|date('d/m/Y H:i') }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
{{ include('email/_order_items_table.html.twig', {order: order, show_total: true}) }}
|
{{ include('email/_order_items_table.html.twig', {order: order, show_total: true}) }}
|
||||||
|
|||||||
@@ -14,6 +14,13 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<table style="width: 100%; border-collapse: collapse; margin: 20px 0; border: 2px solid #111827;">
|
<table style="width: 100%; border-collapse: collapse; margin: 20px 0; border: 2px solid #111827;">
|
||||||
|
<thead>
|
||||||
|
<tr style="background: #111827; color: #fff;">
|
||||||
|
<th style="padding: 10px 12px; text-align: left; font-size: 11px; font-weight: 900; text-transform: uppercase; letter-spacing: 1px; width: 140px;">Champ</th>
|
||||||
|
<th style="padding: 10px 12px; text-align: left; font-size: 11px; font-weight: 900; text-transform: uppercase; letter-spacing: 1px;">Valeur</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
<tr style="border-bottom: 1px solid #e5e7eb;">
|
<tr style="border-bottom: 1px solid #e5e7eb;">
|
||||||
<td style="padding: 10px 12px; font-weight: 900; text-transform: uppercase; font-size: 11px; color: #6b7280; width: 140px;">Commande</td>
|
<td style="padding: 10px 12px; font-weight: 900; text-transform: uppercase; font-size: 11px; color: #6b7280; width: 140px;">Commande</td>
|
||||||
<td style="padding: 10px 12px; font-weight: 700;">{{ order.orderNumber }}</td>
|
<td style="padding: 10px 12px; font-weight: 700;">{{ order.orderNumber }}</td>
|
||||||
@@ -28,6 +35,7 @@
|
|||||||
<td style="padding: 10px 12px; font-weight: 700;">{{ order.totalHTDecimal|number_format(2, ',', ' ') }} €</td>
|
<td style="padding: 10px 12px; font-weight: 700;">{{ order.totalHTDecimal|number_format(2, ',', ' ') }} €</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<p>Le remboursement sera visible sur votre releve bancaire sous 5 a 10 jours ouvrables.
|
<p>Le remboursement sera visible sur votre releve bancaire sous 5 a 10 jours ouvrables.
|
||||||
|
|||||||
@@ -43,6 +43,13 @@
|
|||||||
<p style="margin: 0 0 12px; font-size: 16px; font-weight: 900; text-transform: uppercase; letter-spacing: 2px; color: #fabf04;">Decouvrir E-Ticket by E-Cosplay</p>
|
<p style="margin: 0 0 12px; font-size: 16px; font-weight: 900; text-transform: uppercase; letter-spacing: 2px; color: #fabf04;">Decouvrir E-Ticket by E-Cosplay</p>
|
||||||
<p style="margin: 0 0 8px; font-size: 14px; font-weight: 700; color: #e5e7eb;">La plateforme de billetterie en ligne qui vous permet de :</p>
|
<p style="margin: 0 0 8px; font-size: 14px; font-weight: 700; color: #e5e7eb;">La plateforme de billetterie en ligne qui vous permet de :</p>
|
||||||
<table style="width: 100%; margin-top: 12px;">
|
<table style="width: 100%; margin-top: 12px;">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="padding: 8px 0; font-size: 11px; font-weight: 900; text-transform: uppercase; letter-spacing: 1px; color: #fabf04; text-align: left; width: 24px;"></th>
|
||||||
|
<th style="padding: 8px 0; font-size: 11px; font-weight: 900; text-transform: uppercase; letter-spacing: 1px; color: #fabf04; text-align: left;">Fonctionnalite</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="padding: 8px 0; font-size: 13px; font-weight: 700; color: #fabf04; vertical-align: top; width: 24px;">✓</td>
|
<td style="padding: 8px 0; font-size: 13px; font-weight: 700; color: #fabf04; vertical-align: top; width: 24px;">✓</td>
|
||||||
<td style="padding: 8px 0; font-size: 13px; font-weight: 700; color: #fff;">Creer et gerer vos evenements</td>
|
<td style="padding: 8px 0; font-size: 13px; font-weight: 700; color: #fff;">Creer et gerer vos evenements</td>
|
||||||
@@ -63,6 +70,7 @@
|
|||||||
<td style="padding: 8px 0; font-size: 13px; font-weight: 700; color: #fabf04; vertical-align: top;">✓</td>
|
<td style="padding: 8px 0; font-size: 13px; font-weight: 700; color: #fabf04; vertical-align: top;">✓</td>
|
||||||
<td style="padding: 8px 0; font-size: 13px; font-weight: 700; color: #fff;">Envoyer des invitations et gerer vos reservations</td>
|
<td style="padding: 8px 0; font-size: 13px; font-weight: 700; color: #fff;">Envoyer des invitations et gerer vos reservations</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,13 @@
|
|||||||
<p>Votre paiement pour la commande <strong>{{ order.orderNumber }}</strong> (evenement <strong>{{ order.event.title }}</strong>) n'a pas pu aboutir.</p>
|
<p>Votre paiement pour la commande <strong>{{ order.orderNumber }}</strong> (evenement <strong>{{ order.event.title }}</strong>) n'a pas pu aboutir.</p>
|
||||||
|
|
||||||
<table style="width: 100%; border-collapse: collapse; margin: 20px 0; border: 2px solid #dc2626;">
|
<table style="width: 100%; border-collapse: collapse; margin: 20px 0; border: 2px solid #dc2626;">
|
||||||
|
<thead>
|
||||||
|
<tr style="background: #dc2626; color: #fff;">
|
||||||
|
<th style="padding: 10px 12px; text-align: left; font-size: 11px; font-weight: 900; text-transform: uppercase; letter-spacing: 1px; width: 140px;">Champ</th>
|
||||||
|
<th style="padding: 10px 12px; text-align: left; font-size: 11px; font-weight: 900; text-transform: uppercase; letter-spacing: 1px;">Valeur</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
<tr style="border-bottom: 1px solid #e5e7eb;">
|
<tr style="border-bottom: 1px solid #e5e7eb;">
|
||||||
<td style="padding: 10px 12px; font-weight: 900; text-transform: uppercase; font-size: 11px; color: #6b7280; width: 140px;">Commande</td>
|
<td style="padding: 10px 12px; font-weight: 900; text-transform: uppercase; font-size: 11px; color: #6b7280; width: 140px;">Commande</td>
|
||||||
<td style="padding: 10px 12px; font-weight: 700;">{{ order.orderNumber }}</td>
|
<td style="padding: 10px 12px; font-weight: 700;">{{ order.orderNumber }}</td>
|
||||||
@@ -20,6 +27,7 @@
|
|||||||
<td style="padding: 10px 12px; font-weight: 900; text-transform: uppercase; font-size: 11px; color: #6b7280;">Motif</td>
|
<td style="padding: 10px 12px; font-weight: 900; text-transform: uppercase; font-size: 11px; color: #6b7280;">Motif</td>
|
||||||
<td style="padding: 10px 12px; font-weight: 700; color: #dc2626;">{{ errorMessage }}</td>
|
<td style="padding: 10px 12px; font-weight: 700; color: #dc2626;">{{ errorMessage }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<p>Votre commande a ete annulee. Vous pouvez retenter votre achat depuis la page de l'evenement.</p>
|
<p>Votre commande a ete annulee. Vous pouvez retenter votre achat depuis la page de l'evenement.</p>
|
||||||
|
|||||||
@@ -7,11 +7,13 @@
|
|||||||
<p>Un billet a ete <strong>force lors du scan</strong> sur votre evenement. Voici les details :</p>
|
<p>Un billet a ete <strong>force lors du scan</strong> sur votre evenement. Voici les details :</p>
|
||||||
|
|
||||||
<table style="width: 100%; border-spacing: 0; margin: 20px 0; border: 2px solid #111827;">
|
<table style="width: 100%; border-spacing: 0; margin: 20px 0; border: 2px solid #111827;">
|
||||||
<tr style="background-color: #111827;">
|
<thead>
|
||||||
<td colspan="2" style="padding: 12px 16px; color: #ffffff; font-size: 12px; font-weight: 900; text-transform: uppercase; letter-spacing: 0.1em;">
|
<tr style="background-color: #111827;">
|
||||||
Details du billet
|
<th style="padding: 12px 16px; color: #ffffff; font-size: 12px; font-weight: 900; text-transform: uppercase; letter-spacing: 0.1em; text-align: left; width: 140px;">Champ</th>
|
||||||
</td>
|
<th style="padding: 12px 16px; color: #ffffff; font-size: 12px; font-weight: 900; text-transform: uppercase; letter-spacing: 0.1em; text-align: left;">Valeur</th>
|
||||||
</tr>
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="padding: 10px 16px; font-size: 13px; font-weight: 700; color: #6b7280; border-bottom: 1px solid #e5e7eb; width: 140px;">Evenement</td>
|
<td style="padding: 10px 16px; font-size: 13px; font-weight: 700; color: #6b7280; border-bottom: 1px solid #e5e7eb; width: 140px;">Evenement</td>
|
||||||
<td style="padding: 10px 16px; font-size: 13px; font-weight: 800; border-bottom: 1px solid #e5e7eb;">{{ event_title }}</td>
|
<td style="padding: 10px 16px; font-size: 13px; font-weight: 800; border-bottom: 1px solid #e5e7eb;">{{ event_title }}</td>
|
||||||
@@ -34,15 +36,23 @@
|
|||||||
<span style="display: inline-block; padding: 2px 10px; background: #dc2626; color: #fff; font-size: 11px; font-weight: 900; text-transform: uppercase; letter-spacing: 0.05em;">{{ previous_state }}</span>
|
<span style="display: inline-block; padding: 2px 10px; background: #dc2626; color: #fff; font-size: 11px; font-weight: 900; text-transform: uppercase; letter-spacing: 0.05em;">{{ previous_state }}</span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<table style="width: 100%; border-spacing: 0; margin: 20px 0; border: 2px solid #eab308; background: #fefce8;">
|
<table style="width: 100%; border-spacing: 0; margin: 20px 0; border: 2px solid #eab308; background: #fefce8;">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="padding: 0; font-size: 0; line-height: 0; height: 0; border: none;">Force par</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="padding: 16px;">
|
<td style="padding: 16px;">
|
||||||
<p style="margin: 0 0 4px; font-size: 12px; font-weight: 900; text-transform: uppercase; letter-spacing: 0.1em; color: #92400e;">Force par</p>
|
<p style="margin: 0 0 4px; font-size: 12px; font-weight: 900; text-transform: uppercase; letter-spacing: 0.1em; color: #92400e;">Force par</p>
|
||||||
<p style="margin: 0; font-size: 14px; font-weight: 800; color: #111827;">{{ forced_by_name }} ({{ forced_by_email }})</p>
|
<p style="margin: 0; font-size: 14px; font-weight: 800; color: #111827;">{{ forced_by_name }} ({{ forced_by_email }})</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<p style="font-size: 13px; color: #6b7280;">Si cette action n'etait pas prevue, nous vous recommandons de verifier la situation.</p>
|
<p style="font-size: 13px; color: #6b7280;">Si cette action n'etait pas prevue, nous vous recommandons de verifier la situation.</p>
|
||||||
|
|||||||
@@ -196,6 +196,13 @@
|
|||||||
|
|
||||||
<h2>Organisateur</h2>
|
<h2>Organisateur</h2>
|
||||||
<table class="info-table">
|
<table class="info-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="padding: 5px 8px; font-size: 8px; font-weight: bold; text-transform: uppercase; letter-spacing: 1px; color: #999; text-align: left; width: 50%;">Identite</th>
|
||||||
|
<th style="padding: 5px 8px; font-size: 8px; font-weight: bold; text-transform: uppercase; letter-spacing: 1px; color: #999; text-align: left;">Contact</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="width: 50%;">
|
<td style="width: 50%;">
|
||||||
<div class="info-label">Raison sociale</div>
|
<div class="info-label">Raison sociale</div>
|
||||||
@@ -220,10 +227,18 @@
|
|||||||
</td>
|
</td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<h2>Evenement</h2>
|
<h2>Evenement</h2>
|
||||||
<table class="info-table">
|
<table class="info-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="padding: 5px 8px; font-size: 8px; font-weight: bold; text-transform: uppercase; letter-spacing: 1px; color: #999; text-align: left; width: 50%;">Information</th>
|
||||||
|
<th style="padding: 5px 8px; font-size: 8px; font-weight: bold; text-transform: uppercase; letter-spacing: 1px; color: #999; text-align: left;">Detail</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="width: 50%;">
|
<td style="width: 50%;">
|
||||||
<div class="info-label">Nom</div>
|
<div class="info-label">Nom</div>
|
||||||
@@ -246,6 +261,7 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
{% if not isSimple %}
|
{% if not isSimple %}
|
||||||
@@ -301,16 +317,31 @@
|
|||||||
|
|
||||||
<div class="summary-box">
|
<div class="summary-box">
|
||||||
<table class="summary-table">
|
<table class="summary-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="padding: 5px 0; font-size: 10px; font-weight: bold; text-transform: uppercase; letter-spacing: 1px; color: #666; text-align: left;">Indicateur</th>
|
||||||
|
<th style="padding: 5px 0; font-size: 10px; font-weight: bold; text-transform: uppercase; letter-spacing: 1px; color: #666; text-align: right;">Total</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="label">Total billets emis</td>
|
<td class="label">Total billets emis</td>
|
||||||
<td class="value">{{ totalSold }}</td>
|
<td class="value">{{ totalSold }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
<div style="margin-top: 20px; border: 2px solid #e5e7eb; padding: 16px; overflow: hidden;">
|
<div style="margin-top: 20px; border: 2px solid #e5e7eb; padding: 16px; overflow: hidden;">
|
||||||
<table style="width: 100%; border-collapse: collapse; table-layout: fixed;">
|
<table style="width: 100%; border-collapse: collapse; table-layout: fixed;">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="width: 170px; padding: 0; font-size: 0; line-height: 0; height: 0; border: none; text-align: left;">QR Code</th>
|
||||||
|
<th style="padding: 0; font-size: 0; line-height: 0; height: 0; border: none; text-align: left;">Verification</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="width: 170px; vertical-align: top; padding-right: 16px;">
|
<td style="width: 170px; vertical-align: top; padding-right: 16px;">
|
||||||
{% if qrBase64 is defined and qrBase64 %}
|
{% if qrBase64 is defined and qrBase64 %}
|
||||||
@@ -328,15 +359,24 @@
|
|||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<table class="footer-table">
|
<table class="footer-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="padding: 0; font-size: 0; line-height: 0; height: 0; border: none; text-align: left;">Plateforme</th>
|
||||||
|
<th style="padding: 0; font-size: 0; line-height: 0; height: 0; border: none; text-align: right;">Reference</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td>E-Ticket — Plateforme de billetterie par E-Cosplay — ticket.e-cosplay.fr</td>
|
<td>E-Ticket — Plateforme de billetterie par E-Cosplay — ticket.e-cosplay.fr</td>
|
||||||
<td style="text-align: right;">{{ attestationRef }}</td>
|
<td style="text-align: right;">{{ attestationRef }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -279,26 +279,48 @@
|
|||||||
<!-- HEADER -->
|
<!-- HEADER -->
|
||||||
<div class="header">
|
<div class="header">
|
||||||
<table class="header-table">
|
<table class="header-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="padding: 0; font-size: 0; line-height: 0; height: 0; border: none; text-align: left;">Titre</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
{% set header_label = is_staff ? 'STAFF' : (is_exposant ? 'EXPOSANT' : (is_inv ? 'Invitation' : 'Billet Entree')) %}
|
{% set header_label = is_staff ? 'STAFF' : (is_exposant ? 'EXPOSANT' : (is_inv ? 'Invitation' : 'Billet Entree')) %}
|
||||||
<span class="header-org">{{ header_label }} — {{ event.title }} — {{ ticket.billetName }}</span>
|
<span class="header-org">{{ header_label }} — {{ event.title }} — {{ ticket.billetName }}</span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- CONTENT -->
|
<!-- CONTENT -->
|
||||||
<table class="content-table">
|
<table class="content-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="padding: 0; font-size: 0; line-height: 0; height: 0; border: none; text-align: left; width: 62%;">Details</th>
|
||||||
|
<th style="padding: 0; font-size: 0; line-height: 0; height: 0; border: none; text-align: left; width: 38%;">Affiche</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="content-left">
|
<td class="content-left">
|
||||||
<div class="event-title">{{ event.title }}</div>
|
<div class="event-title">{{ event.title }}</div>
|
||||||
|
|
||||||
<table class="info-table">
|
<table class="info-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="lbl" style="text-align: left; padding: 0; font-size: 0; line-height: 0; height: 0; border: none;">Champ</th>
|
||||||
|
<th class="val" style="text-align: left; padding: 0; font-size: 0; line-height: 0; height: 0; border: none;">Valeur</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
<tr><td class="lbl">Date</td><td class="val">{{ event.startAt|date('d/m/Y') }}</td></tr>
|
<tr><td class="lbl">Date</td><td class="val">{{ event.startAt|date('d/m/Y') }}</td></tr>
|
||||||
<tr><td class="lbl">Horaires</td><td class="val">{{ event.startAt|date('H:i') }} — {{ event.endAt|date('H:i') }}</td></tr>
|
<tr><td class="lbl">Horaires</td><td class="val">{{ event.startAt|date('H:i') }} — {{ event.endAt|date('H:i') }}</td></tr>
|
||||||
<tr><td class="lbl">Lieu</td><td class="val">{{ event.address }}</td></tr>
|
<tr><td class="lbl">Lieu</td><td class="val">{{ event.address }}</td></tr>
|
||||||
<tr><td class="lbl">Ville</td><td class="val">{{ event.zipcode }} {{ event.city }}</td></tr>
|
<tr><td class="lbl">Ville</td><td class="val">{{ event.zipcode }} {{ event.city }}</td></tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<div class="sep"></div>
|
<div class="sep"></div>
|
||||||
@@ -307,6 +329,13 @@
|
|||||||
<div class="billet-price">{{ ticket.unitPriceHTDecimal|number_format(2, ',', ' ') }} € HT</div>
|
<div class="billet-price">{{ ticket.unitPriceHTDecimal|number_format(2, ',', ' ') }} € HT</div>
|
||||||
|
|
||||||
<table class="meta-table">
|
<table class="meta-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="padding: 2px 6px 2px 0; font-size: 0; line-height: 0; height: 0; border: none; text-align: left;">Information 1</th>
|
||||||
|
<th style="padding: 2px 6px 2px 0; font-size: 0; line-height: 0; height: 0; border: none; text-align: left;">Information 2</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td><div class="meta-lbl">Categorie</div><div class="meta-val">{{ ticket.billet.category.name }}</div></td>
|
<td><div class="meta-lbl">Categorie</div><div class="meta-val">{{ ticket.billet.category.name }}</div></td>
|
||||||
<td><div class="meta-lbl">Date d'achat</div><div class="meta-val">{{ order.paidAt ? order.paidAt|date('d/m/Y H:i') : order.createdAt|date('d/m/Y H:i') }}</div></td>
|
<td><div class="meta-lbl">Date d'achat</div><div class="meta-val">{{ order.paidAt ? order.paidAt|date('d/m/Y H:i') : order.createdAt|date('d/m/Y H:i') }}</div></td>
|
||||||
@@ -315,6 +344,7 @@
|
|||||||
<td><div class="meta-lbl">Acheteur</div><div class="meta-val">{{ order.firstName }} {{ order.lastName }}</div></td>
|
<td><div class="meta-lbl">Acheteur</div><div class="meta-val">{{ order.firstName }} {{ order.lastName }}</div></td>
|
||||||
<td><div class="meta-lbl">E-mail</div><div class="meta-val">{{ order.email }}</div></td>
|
<td><div class="meta-lbl">E-mail</div><div class="meta-val">{{ order.email }}</div></td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<div style="margin-top: 8px;">
|
<div style="margin-top: 8px;">
|
||||||
@@ -336,6 +366,13 @@
|
|||||||
|
|
||||||
<div class="qr-section">
|
<div class="qr-section">
|
||||||
<table class="qr-table">
|
<table class="qr-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="padding: 0; font-size: 0; line-height: 0; height: 0; border: none; text-align: left; width: 140px;">QR Code</th>
|
||||||
|
<th style="padding: 0; font-size: 0; line-height: 0; height: 0; border: none; text-align: right;">References</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="width: 140px;">
|
<td style="width: 140px;">
|
||||||
<img src="{{ qrBase64 }}" alt="QR" class="qr-img">
|
<img src="{{ qrBase64 }}" alt="QR" class="qr-img">
|
||||||
@@ -352,6 +389,7 @@
|
|||||||
<div class="ref-val" style="letter-spacing: 2px;">{{ ticket.securityKey }}</div>
|
<div class="ref-val" style="letter-spacing: 2px;">{{ ticket.securityKey }}</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
@@ -361,10 +399,18 @@
|
|||||||
{% endif %}
|
{% endif %}
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<!-- BLOC ORGA + DESCRIPTION -->
|
<!-- BLOC ORGA + DESCRIPTION -->
|
||||||
<table style="width: 100%; border-collapse: collapse; border-top: 3px solid {{ ac }};">
|
<table style="width: 100%; border-collapse: collapse; border-top: 3px solid {{ ac }};">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="padding: 0; font-size: 0; line-height: 0; height: 0; border: none; text-align: left; width: 50%;">Organisateur</th>
|
||||||
|
<th style="padding: 0; font-size: 0; line-height: 0; height: 0; border: none; text-align: left; width: 50%;">Evenement</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="width: 50%; padding: 14px 15px 14px 30px; vertical-align: top; border-right: 1px solid #eee;">
|
<td style="width: 50%; padding: 14px 15px 14px 30px; vertical-align: top; border-right: 1px solid #eee;">
|
||||||
<div style="font-size: 8px; font-weight: bold; text-transform: uppercase; letter-spacing: 1px; color: #999; margin-bottom: 6px;">Organisateur</div>
|
<div style="font-size: 8px; font-weight: bold; text-transform: uppercase; letter-spacing: 1px; color: #999; margin-bottom: 6px;">Organisateur</div>
|
||||||
@@ -394,6 +440,13 @@
|
|||||||
<div style="font-size: 9px; color: #444; line-height: 1.4; max-height: 60px; overflow: hidden;">{{ event.description|striptags }}</div>
|
<div style="font-size: 9px; color: #444; line-height: 1.4; max-height: 60px; overflow: hidden;">{{ event.description|striptags }}</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<table style="margin-top: 8px; border-collapse: collapse;">
|
<table style="margin-top: 8px; border-collapse: collapse;">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="padding: 0; font-size: 0; line-height: 0; height: 0; border: none; text-align: left;">QR</th>
|
||||||
|
<th style="padding: 0; font-size: 0; line-height: 0; height: 0; border: none; text-align: left;">Lien</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="vertical-align: middle; padding-right: 8px;">
|
<td style="vertical-align: middle; padding-right: 8px;">
|
||||||
<img src="{{ eventQrBase64 }}" alt="QR" style="width: 50px; height: 50px;">
|
<img src="{{ eventQrBase64 }}" alt="QR" style="width: 50px; height: 50px;">
|
||||||
@@ -403,14 +456,23 @@
|
|||||||
<div style="font-size: 8px; color: {{ ac }}; word-break: break-all;">{{ eventUrl }}</div>
|
<div style="font-size: 8px; color: {{ ac }}; word-break: break-all;">{{ eventUrl }}</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<!-- INFORMATIONS PRATIQUES + CONDITIONS -->
|
<!-- INFORMATIONS PRATIQUES + CONDITIONS -->
|
||||||
<div style="padding: 12px 30px; border-top: 1px solid #eee; background: #fafafa;">
|
<div style="padding: 12px 30px; border-top: 1px solid #eee; background: #fafafa;">
|
||||||
<table style="width: 100%; border-collapse: collapse;">
|
<table style="width: 100%; border-collapse: collapse;">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="padding: 0; font-size: 0; line-height: 0; height: 0; border: none; text-align: left; width: 50%;">Informations pratiques</th>
|
||||||
|
<th style="padding: 0; font-size: 0; line-height: 0; height: 0; border: none; text-align: left; width: 50%;">Conditions generales</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="width: 50%; vertical-align: top; padding-right: 15px;">
|
<td style="width: 50%; vertical-align: top; padding-right: 15px;">
|
||||||
<div style="font-size: 10px; font-weight: bold; text-transform: uppercase; letter-spacing: 1px; color: #999; margin-bottom: 4px;">Informations pratiques</div>
|
<div style="font-size: 10px; font-weight: bold; text-transform: uppercase; letter-spacing: 1px; color: #999; margin-bottom: 4px;">Informations pratiques</div>
|
||||||
@@ -431,9 +493,16 @@
|
|||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
{% if order.paymentMethod %}
|
{% if order.paymentMethod %}
|
||||||
<table style="width: 100%; border-collapse: collapse; margin-top: 8px; border-top: 1px solid #eee; padding-top: 6px;">
|
<table style="width: 100%; border-collapse: collapse; margin-top: 8px; border-top: 1px solid #eee; padding-top: 6px;">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="padding: 0; font-size: 0; line-height: 0; height: 0; border: none; text-align: left;">Paiement</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="padding-top: 6px;">
|
<td style="padding-top: 6px;">
|
||||||
<div style="font-size: 10px; font-weight: bold; text-transform: uppercase; letter-spacing: 1px; color: #999; margin-bottom: 4px;">Details du paiement</div>
|
<div style="font-size: 10px; font-weight: bold; text-transform: uppercase; letter-spacing: 1px; color: #999; margin-bottom: 4px;">Details du paiement</div>
|
||||||
@@ -450,6 +519,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
@@ -457,6 +527,14 @@
|
|||||||
<!-- FOOTER -->
|
<!-- FOOTER -->
|
||||||
<div class="footer">
|
<div class="footer">
|
||||||
<table class="footer-table">
|
<table class="footer-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
{% if logoBase64 %}<th style="padding: 0; font-size: 0; line-height: 0; height: 0; border: none; text-align: left; width: 54px;">Logo</th>{% endif %}
|
||||||
|
<th style="padding: 0; font-size: 0; line-height: 0; height: 0; border: none; text-align: left;">Organisateur</th>
|
||||||
|
<th style="padding: 0; font-size: 0; line-height: 0; height: 0; border: none; text-align: right;">Plateforme</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
{% if logoBase64 %}
|
{% if logoBase64 %}
|
||||||
<td class="footer-logo" style="width: 54px; padding-right: 12px;">
|
<td class="footer-logo" style="width: 54px; padding-right: 12px;">
|
||||||
@@ -477,6 +555,7 @@
|
|||||||
</td>
|
</td>
|
||||||
<td class="footer-powered">E-Ticket<br>by E-Cosplay</td>
|
<td class="footer-powered">E-Ticket<br>by E-Cosplay</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@@ -27,6 +27,16 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<table class="stats">
|
<table class="stats">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="padding: 8px 16px; border: 2px solid #111827; font-size: 8px; text-transform: uppercase; letter-spacing: 1px; color: #666; text-align: center;">Commandes</th>
|
||||||
|
<th style="padding: 8px 16px; border: 2px solid #111827; font-size: 8px; text-transform: uppercase; letter-spacing: 1px; color: #666; text-align: center;">Total HT</th>
|
||||||
|
<th style="padding: 8px 16px; border: 2px solid #111827; font-size: 8px; text-transform: uppercase; letter-spacing: 1px; color: #666; text-align: center;">Commission E-Ticket</th>
|
||||||
|
<th style="padding: 8px 16px; border: 2px solid #111827; font-size: 8px; text-transform: uppercase; letter-spacing: 1px; color: #666; text-align: center;">Commission Stripe</th>
|
||||||
|
<th style="padding: 8px 16px; border: 2px solid #111827; font-size: 8px; text-transform: uppercase; letter-spacing: 1px; color: #666; text-align: center;">Net</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td>
|
<td>
|
||||||
<div class="label">Commandes</div>
|
<div class="label">Commandes</div>
|
||||||
@@ -56,6 +66,7 @@
|
|||||||
</td>
|
</td>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<table class="orders">
|
<table class="orders">
|
||||||
|
|||||||
@@ -49,6 +49,13 @@
|
|||||||
<div class="page">
|
<div class="page">
|
||||||
<!-- HEADER -->
|
<!-- HEADER -->
|
||||||
<table class="header-table">
|
<table class="header-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="padding: 0; font-size: 0; line-height: 0; height: 0; border: none; text-align: left; width: 120px;">Logo</th>
|
||||||
|
<th style="padding: 0; font-size: 0; line-height: 0; height: 0; border: none; text-align: right;">Facture</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="logo">
|
<td class="logo">
|
||||||
{% if logoBase64 %}
|
{% if logoBase64 %}
|
||||||
@@ -63,10 +70,18 @@
|
|||||||
<div class="subtitle">Date : {{ order.paidAt ? order.paidAt|date('d/m/Y') : order.createdAt|date('d/m/Y') }}</div>
|
<div class="subtitle">Date : {{ order.paidAt ? order.paidAt|date('d/m/Y') : order.createdAt|date('d/m/Y') }}</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<!-- INFOS -->
|
<!-- INFOS -->
|
||||||
<table class="info-table">
|
<table class="info-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="padding: 0; font-size: 0; line-height: 0; height: 0; border: none; text-align: left; width: 50%;">Vendeur</th>
|
||||||
|
<th style="padding: 0; font-size: 0; line-height: 0; height: 0; border: none; text-align: left; width: 50%;">Acheteur</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td style="width: 50%; padding-right: 8px;">
|
<td style="width: 50%; padding-right: 8px;">
|
||||||
<div class="info-block">
|
<div class="info-block">
|
||||||
@@ -102,6 +117,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<!-- ITEMS -->
|
<!-- ITEMS -->
|
||||||
@@ -128,6 +144,13 @@
|
|||||||
|
|
||||||
<!-- TOTALS -->
|
<!-- TOTALS -->
|
||||||
<table class="total-table">
|
<table class="total-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th style="padding: 0; font-size: 0; line-height: 0; height: 0; border: none; text-align: left;">Libelle</th>
|
||||||
|
<th style="padding: 0; font-size: 0; line-height: 0; height: 0; border: none; text-align: right;">Montant</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
<tr>
|
<tr>
|
||||||
<td>Total HT</td>
|
<td>Total HT</td>
|
||||||
<td style="text-align: right; font-weight: bold;">{{ order.totalHTDecimal|number_format(2, ',', ' ') }} €</td>
|
<td style="text-align: right; font-weight: bold;">{{ order.totalHTDecimal|number_format(2, ',', ' ') }} €</td>
|
||||||
@@ -140,6 +163,7 @@
|
|||||||
<td>Total TTC</td>
|
<td>Total TTC</td>
|
||||||
<td style="text-align: right;">{{ order.totalHTDecimal|number_format(2, ',', ' ') }} €</td>
|
<td style="text-align: right;">{{ order.totalHTDecimal|number_format(2, ',', ' ') }} €</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<!-- PAYMENT -->
|
<!-- PAYMENT -->
|
||||||
|
|||||||
@@ -865,13 +865,22 @@ class AdminControllerTest extends WebTestCase
|
|||||||
$originalContent = $existed ? file_get_contents($path) : null;
|
$originalContent = $existed ? file_get_contents($path) : null;
|
||||||
|
|
||||||
file_put_contents($path, json_encode([
|
file_put_contents($path, json_encode([
|
||||||
'server' => ['hostname' => 'test'],
|
'server' => [
|
||||||
|
'hostname' => 'test', 'os' => 'Linux', 'uptime' => '1d',
|
||||||
|
'cpu_model' => 'Test CPU', 'cpu_cores' => '4',
|
||||||
|
'load_1m' => '0.5', 'load_5m' => '0.3', 'load_15m' => '0.1', 'load_percent' => '12',
|
||||||
|
'ram_total' => '8G', 'ram_used' => '4G', 'ram_free' => '4G', 'ram_percent' => '50',
|
||||||
|
'disk_total' => '100G', 'disk_used' => '50G', 'disk_free' => '50G', 'disk_percent' => '50',
|
||||||
|
'caddy' => ['status' => 'ok', 'info' => 'running'],
|
||||||
|
'docker' => ['status' => 'ok', 'info' => 'running'],
|
||||||
|
'ssl' => ['domain' => 'test.fr', 'issuer' => 'LE', 'valid_until' => '2027-01-01', 'days_left' => '270', 'status' => 'ok'],
|
||||||
|
],
|
||||||
'containers' => [],
|
'containers' => [],
|
||||||
'redis_global' => ['connected' => true],
|
'redis_global' => ['connected' => false, 'error' => 'Test'],
|
||||||
'redis_dbs' => [],
|
'redis_dbs' => [],
|
||||||
'postgres' => ['connected' => true],
|
'postgres' => ['connected' => false, 'error' => 'Test'],
|
||||||
'pgbouncer' => ['connected' => true],
|
'pgbouncer' => ['connected' => false, 'error' => 'Test'],
|
||||||
'generated_at' => '2026-04-01',
|
'generated_at' => '2026-04-01 10:00:00',
|
||||||
]));
|
]));
|
||||||
|
|
||||||
$client->loginUser($admin);
|
$client->loginUser($admin);
|
||||||
|
|||||||
Reference in New Issue
Block a user