PluginProbe
ووسلام – همگام سازی ووکامرس و باسلام / 1.10.4
ووسلام – همگام سازی ووکامرس و باسلام v1.10.4
1.10.19 1.10.20 1.10.18 1.10.17 1.10.15 1.10.14 1.10.13 1.10.12 1.10.10 1.10.9 1.10.8 1.10.7 1.10.6 1.10.5 1.10.4 1.10.3 1.10.2 1.10.1 1.10.0 1.9.2 1.9.1 1.9.0 1.8.8 1.8.5 1.8.6 All 53 releases
sync-basalam / includes / Admin / Announcement / AnnouncementCenter.php

AnnouncementCenter.php in ووسلام – همگام سازی ووکامرس و باسلام 1.10.4, at includes/Admin/Announcement/AnnouncementCenter.php

112 lines 3.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace SyncBasalam\Admin\Announcement;
4
5 use SyncBasalam\Admin\Components\AnnouncementComponents;
6 use SyncBasalam\Services\FetchAnnouncements;
7
8 defined('ABSPATH') || exit;
9
10 class AnnouncementCenter
11 {
12 public const MARK_SEEN_ACTION = 'sync_basalam_mark_announcements_seen';
13 public const FETCH_PAGE_ACTION = 'sync_basalam_fetch_announcements_page';
14 private const SEEN_META_KEY = 'sync_basalam_seen_announcements';
15 private const PER_PAGE = 5;
16
17 public static function shouldLoadAnnouncement(): bool
18 {
19
20 $page = isset($_GET['page']) ? sanitize_key(wp_unslash($_GET['page'])) : '';
21
22 if ($page === '' || !is_admin() || !current_user_can('manage_options') || !syncBasalamSettings()->hasToken()) {
23 return false;
24 }
25
26 if (str_starts_with($page, 'sync_basalam')) return true;
27 return false;
28 }
29
30 public static function renderPanel(): void
31 {
32 if (!self::shouldLoadAnnouncement()) {
33 return;
34 }
35
36 AnnouncementComponents::renderPanel();
37 }
38
39 public static function getConfig(): ?array
40 {
41 $result = self::getAnnouncements();
42
43 if ($result) $seenIds = self::getSeenIds($result['data']);
44
45 return [
46 'nonce' => wp_create_nonce(self::MARK_SEEN_ACTION),
47 'fetchPageNonce' => wp_create_nonce(self::FETCH_PAGE_ACTION),
48 'markSeenAction' => self::MARK_SEEN_ACTION,
49 'fetchPageAction' => self::FETCH_PAGE_ACTION,
50 'perPage' => self::PER_PAGE,
51 'totalPage' => $result['total_page'] ?? 1,
52 'seenIds' => $seenIds ?? [],
53 'items' => $result['data'] ?? [],
54 ];
55 }
56
57 public static function markAllSeen(): void
58 {
59 check_ajax_referer(self::MARK_SEEN_ACTION, 'nonce', true);
60 if (!current_user_can('manage_options')) {
61 wp_send_json_error(['message' => 'دسترسی �
62 جاز نیست.'], 403);
63 }
64
65 $result = self::getAnnouncements();
66 $allIds = array_values(array_map(static fn($item) => (string) ($item['id'] ?? ''), $result['data']));
67 $allIds = array_values(array_filter($allIds));
68
69 update_user_meta(get_current_user_id(), self::SEEN_META_KEY, $allIds);
70
71 wp_send_json_success(['seenIds' => $allIds]);
72 }
73
74 public static function fetchPage(): void
75 {
76 check_ajax_referer(self::FETCH_PAGE_ACTION, 'nonce', true);
77
78 if (!current_user_can('manage_options')) {
79 wp_send_json_error(['message' => 'دسترسی �
80 جاز نیست.'], 403);
81 }
82
83 $page = isset($_POST['page']) ? (int) $_POST['page'] : 1;
84 $page = max(1, $page);
85
86 $result = self::getAnnouncements($page);
87
88 wp_send_json_success([
89 'items' => $result['data'],
90 'page' => $result['page'],
91 'totalPage' => $result['total_page'],
92 ]);
93 }
94
95 private static function getSeenIds(?array $announcements): array
96 {
97 $seenIds = get_user_meta(get_current_user_id(), self::SEEN_META_KEY, true);
98
99 if (!is_array($seenIds) || empty($announcements)) return [];
100
101 $validAnnouncementIds = array_values(array_map(static fn($item) => (string) ($item['id'] ?? ''), $announcements));
102
103 return array_values(array_intersect(array_map('strval', $seenIds), $validAnnouncementIds));
104 }
105
106 private static function getAnnouncements(int $page = 1): ?array
107 {
108 $fetcher = new FetchAnnouncements();
109 return $fetcher->fetch($page, self::PER_PAGE);
110 }
111 }
112