64 lines
3.6 KiB
Python
64 lines
3.6 KiB
Python
"""پیامهای نتیجهٔ عملیات پنل پیامک.
|
|
|
|
جایگزین flash message جنگو است: پیامهای جنگو در session ذخیره میشوند و اگر
|
|
قالب مقصد آنها را رندر نکند، تا صفحهٔ بعدِ دارای بلوک پیام «سرگردان» میمانند و
|
|
بیربط به عملیات ظاهر میشوند. اینجا پیام با یک کد در querystring
|
|
(``?notice=<code>``) رد و بدل میشود؛ چون کد فقط روی همان URL وجود دارد، پیام هم
|
|
فقط همانجا دیده میشود و هیچجا سرگردان نمیماند.
|
|
|
|
مقدار ``{placeholder}`` در متن از پارامترهای querystring پر میشود
|
|
(نبودِ پارامتر ⇒ رشتهٔ خالی).
|
|
"""
|
|
from collections import defaultdict
|
|
|
|
# کد → (شدت، متن). شدت به کلاس Bulma نگاشت میشود.
|
|
NOTICES = {
|
|
# --- تنظیمات و ارسال آزمایشی ---
|
|
"test_sent": ("success", "پیامک آزمایشی در صف ارسال قرار گرفت."),
|
|
"settings_saved": ("success", "تنظیمات سامانه پیامک ذخیره شد."),
|
|
# --- قالبها ---
|
|
"tpl_saved": ("success", "قالب «{title}» ذخیره شد."),
|
|
"tpl_bad_timing": ("error", "مقدار زمانبندی باید یک عدد صحیح باشد."),
|
|
# --- مشتری ---
|
|
"customer_sms_saved": ("success", "تنظیم پیامک مشتری بهروزرسانی شد."),
|
|
"primary_updated": ("success", "شمارهٔ اصلی پیامک بهروزرسانی شد."),
|
|
"primary_not_found": ("error", "شماره موردنظر برای این مشتری یافت نشد."),
|
|
"custom_queued": ("success", "پیامک سفارشی در صف ارسال قرار گرفت."),
|
|
"custom_empty": ("error", "متن پیامک خالی است."),
|
|
"custom_no_phone": ("error", "شماره اصلی معتبری برای این مشتری یافت نشد."),
|
|
# --- صف ---
|
|
"approved": ("success", "پیامک تأیید شد و برای ارسال در صف قرار گرفت."),
|
|
"not_pending": ("warning", "این پیامک در وضعیت «در انتظار تأیید» نیست."),
|
|
"deleted": ("success", "پیامک از صف حذف شد."),
|
|
"delete_done_blocked": (
|
|
"warning",
|
|
"این پیامک ارسال شده است و از صف حذف نمیشود؛ سابقهٔ آن در «گزارش ارسال» میماند.",
|
|
),
|
|
"bulk_approved_all": ("success", "{count} پیامک تأیید شد و برای ارسال در صف قرار گرفت."),
|
|
"bulk_approved": ("success", "{count} پیامک تأیید شد."),
|
|
"bulk_deleted": ("success", "{count} پیامک از صف حذف شد."),
|
|
"invalid_action": ("error", "اقدام نامعتبر است."),
|
|
"queue_emptied": ("success", "کل صف خالی شد ({count} پیامک حذف شد)."),
|
|
"retried": ("success", "پیامک برای ارسال مجدد تأیید شد."),
|
|
}
|
|
|
|
_KIND_CLASSES = {
|
|
"success": "is-success",
|
|
"error": "is-danger",
|
|
"warning": "is-warning",
|
|
"info": "is-info",
|
|
}
|
|
|
|
|
|
def resolve(request):
|
|
"""کد ``?notice=`` را به متن/کلاس قابل رندر در قالب تبدیل میکند."""
|
|
get = getattr(request, "GET", None) or {}
|
|
entry = NOTICES.get((get.get("notice") or "").strip())
|
|
if not entry:
|
|
return {}
|
|
kind, text = entry
|
|
return {
|
|
"notice_text": text.format_map(defaultdict(str, get)),
|
|
"notice_kind": _KIND_CLASSES.get(kind, "is-info"),
|
|
}
|