PluginProbe ʕ •ᴥ•ʔ
Admin Columns / 7.1.4
Admin Columns v7.1.4
7.1.4 7.0.19 2.3.5 2.4 2.4.1 2.4.10 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.4.8 2.4.9 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.6.1 2.5.6.2 2.5.6.3 2.5.6.4 3.0 3.0.1 3.0.2 3.0.3 3.0.5 3.0.7 3.1 3.1.1 3.1.10 3.1.2 3.1.3 3.1.5 3.2.3 3.2.7 3.3.1 3.4.1 3.4.6 3.4.8 4.0.1 4.0.3 4.1.6 4.2.2 4.2.5 4.3 4.3.2 4.4.1 4.4.4 4.4.5 4.5.5 4.6.1 4.7.18 4.7.19 4.7.20 4.7.7 7.0.13 7.0.14 7.0.16 trunk 1.0 1.1 1.1.3 1.2 1.2.1 1.3 1.3.1 1.4 1.4.1 1.4.2 1.4.3 1.4.4 1.4.5 1.4.5.1 1.4.6 1.4.6.1 1.4.6.2 1.4.6.3 1.4.6.4 1.4.7 1.4.8 1.4.9 2.0.0 2.0.1 2.0.2 2.0.3 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.2 2.2.1 2.2.1.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.5.1 2.2.6 2.2.6.1 2.2.6.2 2.2.6.3 2.2.6.4 2.2.7 2.2.8 2.2.8.1 2.2.9 2.3.1 2.3.2 2.3.3
codepress-admin-columns / classes / Check / Promotion.php
codepress-admin-columns / classes / Check Last commit date
Integration 2 days ago Promotion.php 2 days ago Review.php 2 days ago
Promotion.php
85 lines
1 <?php
2
3 declare(strict_types=1);
4
5 namespace AC\Check;
6
7 use AC\Ajax;
8 use AC\Capabilities;
9 use AC\Message\Notice\Dismissible;
10 use AC\Preferences;
11 use AC\Preferences\UserFactory;
12 use AC\Registerable;
13 use AC\Screen;
14 use AC\Type\Promo;
15
16 final class Promotion implements Registerable
17 {
18 private Promo $promo;
19
20 private UserFactory $preferences_factory;
21
22 public function __construct(Promo $promo, UserFactory $preferences_factory)
23 {
24 $this->promo = $promo;
25 $this->preferences_factory = $preferences_factory;
26 }
27
28 public function register(): void
29 {
30 add_action('ac/screen', [$this, 'display']);
31
32 $this->get_ajax_handler()->register();
33 }
34
35 private function get_ajax_handler(): Ajax\Handler
36 {
37 $handler = new Ajax\Handler();
38
39 $handler
40 ->set_action('ac_dismiss_notice_promo_' . $this->get_individual_slug())
41 ->set_callback([$this, 'ajax_dismiss_notice']);
42
43 return $handler;
44 }
45
46 private function get_individual_slug(): string
47 {
48 return $this->promo->get_slug() . $this->promo->get_date_range()->get_start()->format('Ymd');
49 }
50
51 private function get_preferences(): Preferences\Preference
52 {
53 return $this->preferences_factory->create(
54 'check-promo-' . $this->get_individual_slug()
55 );
56 }
57
58 public function ajax_dismiss_notice(): void
59 {
60 $this->get_ajax_handler()->verify_request();
61 $this->get_preferences()->save('dismiss-notice', true);
62 }
63
64 private function is_promo_screen(Screen $screen): bool
65 {
66 return $screen->has_screen() && ($screen->is_table_screen() || $screen->is_admin_screen());
67 }
68
69 public function display(Screen $screen): void
70 {
71 if (! current_user_can(Capabilities::MANAGE) ||
72 ! $this->is_promo_screen($screen) ||
73 $this->get_preferences()->find('dismiss-notice')
74 ) {
75 return;
76 }
77
78 $notice = new Dismissible(
79 $this->promo->get_notice_message(),
80 $this->get_ajax_handler()
81 );
82 $notice->register();
83 }
84 }
85