feat(admin): always-on dashboard widget + default retro days = 0
- Dashboard widget is now registered unconditionally. Header + content adapt: shows '⚠️ ошибки доставки' only when failed > 0, otherwise plain title with queue state (pending / sent-24h / failed). Pilot feedback: the conditional widget felt like the plugin was missing — users expect a persistent status readout. - Retro default window changed from 7 days to 0 (no limit). Most pilot uses were 'dump everything since install', so 0 is the more useful default. User can still narrow to N days in the form. - Spec §10 + §14 updated. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -257,7 +257,7 @@ apply_filters('cf7stg_classifier_thresholds', ['client' => 3, 'spam' => -2]);
|
||||
|
||||
**UI:** на странице настроек — блок «Ретроспективная выгрузка из Flamingo»:
|
||||
- `count` (int, default 10, max 50)
|
||||
- `days` (int, default 7; 0 = без ограничения)
|
||||
- `days` (int, default 0; 0 = без ограничения)
|
||||
- `allow_repeat` (checkbox)
|
||||
- кнопка «Добавить в очередь»
|
||||
|
||||
@@ -324,22 +324,30 @@ $schedules['cf7stg_every_minute'] = ['interval' => 60, 'display' => 'Раз в
|
||||
|
||||
**Ограничения shared-хостинга:** WP-Cron срабатывает при HTTP-запросах к сайту. При малом трафике события могут опаздывать. В UI настроек — короткая подсказка: «Для точности можно настроить внешний cron на `wp-cron.php`».
|
||||
|
||||
## 14. Dashboard-виджет (условный)
|
||||
## 14. Dashboard-виджет
|
||||
|
||||
`add_action('wp_dashboard_setup', ...)` → при `Queue::count_failed() > 0` регистрируется виджет `cf7stg_dashboard_errors`:
|
||||
`add_action('wp_dashboard_setup', ...)` регистрирует виджет `cf7stg_dashboard_status` **всегда** (после пилота: пользователь ожидает увидеть быстрый статус, а не ориентироваться только на появление «тревожной» лампы).
|
||||
|
||||
Заголовок зависит от состояния:
|
||||
- `failed > 0` → `⚠️ CF7 Spam → Telegram: ошибки доставки`
|
||||
- иначе → `CF7 Spam → Telegram`
|
||||
|
||||
Содержимое:
|
||||
|
||||
```
|
||||
⚠️ CF7 Spam → Telegram: ошибки доставки
|
||||
Есть N неотправленных сообщений (TG-API отвечает ошибкой):
|
||||
[если !is_configured: ⚙️ Плагин не настроен — укажите Bot Token и Chat ID в настройках.]
|
||||
|
||||
⏳ В очереди: N · ✅ За сутки: M · [✖|⚠️] Ошибки: K
|
||||
|
||||
[если K > 0:
|
||||
Последние ошибки доставки (TG-API):
|
||||
• {created_at} — {last_error}
|
||||
• ...
|
||||
]
|
||||
|
||||
[Открыть настройки →]
|
||||
```
|
||||
|
||||
При `count_failed() == 0` — виджет не регистрируется, дашборд чистый.
|
||||
|
||||
## 15. Обработка ошибок Telegram API
|
||||
|
||||
`TelegramClient::send_message()` бросает `TelegramException`, у которого метод `is_permanent(): bool`.
|
||||
|
||||
Reference in New Issue
Block a user