Письма плательщику + предупреждение об окончании подписки + подсказка про спам

- _notify_user_payment: письмо-подтверждение после успешной оплаты (sub/file/api_pro/donate),
  дедуп WEB_PAYMENTS.user_notified; фискальный чек по-прежнему шлёт ЮKassa
- _run_expiry_warnings_once (в цикле автопродления, раз в 6ч): за ≤3 дня до конца подписки
  без автопродления — сообщение в Telegram (tg:*), иначе письмо на pm_email; один раз на
  период (WEB_ACCOUNTS.warned_until); pm_email сохраняется при каждой оплате подписки
- Модалка входа по почте: подсказка «Письма нет? Проверьте папку Спам» (7 языков)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
berkio_admin_gitea
2026-07-07 15:27:02 +00:00
parent 13404848c7
commit 699c6d9356
2 changed files with 137 additions and 8 deletions

View File

@@ -914,7 +914,8 @@
<button id="email-send-btn" onclick="emailSendCode()" style="width:100%;padding:11px;background:var(--blue,#007AFF);color:#fff;border:none;border-radius:10px;font-size:15px;font-weight:600;cursor:pointer;font-family:inherit" data-i18n="email_send_code">Получить код</button>
</div>
<div id="email-step-2" style="display:none">
<p style="font-size:13px;color:var(--text-secondary);margin:0 0 10px" data-i18n="email_code_sent">Код отправлен на почту. Введите его:</p>
<p style="font-size:13px;color:var(--text-secondary);margin:0 0 6px" data-i18n="email_code_sent">Код отправлен на почту. Введите его:</p>
<p style="font-size:12px;color:var(--text-secondary);margin:0 0 10px;opacity:.85">💡 <span data-i18n="email_check_spam">Письма нет? Проверьте папку «Спам»</span></p>
<input type="text" id="email-code-input" inputmode="numeric" maxlength="6" placeholder="000000" style="width:100%;padding:10px 12px;border:1px solid #d0d7e2;border-radius:8px;font-size:20px;letter-spacing:6px;text-align:center;font-family:inherit;margin-bottom:10px">
<button id="email-verify-btn" onclick="emailVerifyCode()" style="width:100%;padding:11px;background:#10b981;color:#fff;border:none;border-radius:10px;font-size:15px;font-weight:600;cursor:pointer;font-family:inherit" data-i18n="email_login_btn">Войти</button>
</div>
@@ -1253,6 +1254,7 @@
email_ph: 'ваш email',
email_send_code: 'Получить код',
email_code_sent: 'Код отправлен на почту. Введите его:',
email_check_spam: 'Письма нет? Проверьте папку «Спам»',
email_login_btn: 'Войти',
email_sending: 'Отправляем код…',
email_bad_code: 'Неверный код',
@@ -1400,6 +1402,7 @@
email_ph: 'your email',
email_send_code: 'Get code',
email_code_sent: 'Code sent to your email. Enter it:',
email_check_spam: 'No email? Check your Spam folder',
email_login_btn: 'Log in',
email_sending: 'Sending code…',
email_bad_code: 'Invalid code',
@@ -1548,6 +1551,7 @@
email_ph: 'Ihre E-Mail',
email_send_code: 'Code erhalten',
email_code_sent: 'Code an Ihre E-Mail gesendet. Eingeben:',
email_check_spam: 'Keine E-Mail? Prüfen Sie den Spam-Ordner',
email_login_btn: 'Anmelden',
email_sending: 'Code wird gesendet…',
email_bad_code: 'Ungültiger Code',
@@ -1696,6 +1700,7 @@
email_ph: 'votre e-mail',
email_send_code: 'Recevoir le code',
email_code_sent: 'Code envoyé par e-mail. Saisissez-le :',
email_check_spam: 'Pas de message ? Vérifiez le dossier Spam',
email_login_btn: 'Se connecter',
email_sending: 'Envoi du code…',
email_bad_code: 'Code invalide',
@@ -1844,6 +1849,7 @@
email_ph: 'la tua email',
email_send_code: 'Ricevi codice',
email_code_sent: 'Codice inviato via email. Inseriscilo:',
email_check_spam: 'Nessuna email? Controlla la cartella Spam',
email_login_btn: 'Accedi',
email_sending: 'Invio codice…',
email_bad_code: 'Codice non valido',
@@ -1992,6 +1998,7 @@
email_ph: 'tu correo',
email_send_code: 'Obtener código',
email_code_sent: 'Código enviado a tu correo. Ingrésalo:',
email_check_spam: 'Sin correo? Revisa la carpeta de spam',
email_login_btn: 'Entrar',
email_sending: 'Enviando código…',
email_bad_code: 'Código inválido',
@@ -2140,6 +2147,7 @@
email_ph: 'seu e-mail',
email_send_code: 'Receber código',
email_code_sent: 'Código enviado ao seu e-mail. Digite:',
email_check_spam: 'Sem e-mail? Verifique a pasta de spam',
email_login_btn: 'Entrar',
email_sending: 'Enviando código…',
email_bad_code: 'Código inválido',