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 / Request / Middleware / ListScreenTable.php
codepress-admin-columns / classes / Request / Middleware Last commit date
ListScreenAdmin.php 2 days ago ListScreenTable.php 2 days ago TableScreenAdmin.php 2 days ago
ListScreenTable.php
110 lines
1 <?php
2
3 declare(strict_types=1);
4
5 namespace AC\Request\Middleware;
6
7 use AC\Capabilities;
8 use AC\ListScreen;
9 use AC\ListScreenRepository\Sort;
10 use AC\ListScreenRepository\Storage;
11 use AC\Middleware;
12 use AC\Request;
13 use AC\Table;
14 use AC\Type\ListScreenId;
15 use AC\Type\ListScreenStatus;
16 use AC\Type\TableId;
17 use Exception;
18 use WP_User;
19
20 class ListScreenTable implements Middleware
21 {
22 private Storage $storage;
23
24 private Table\TablePreference $preference;
25
26 private TableId $list_key;
27
28 private WP_User $user;
29
30 public function __construct(
31 Storage $storage,
32 TableId $list_key,
33 Table\TablePreference $preference,
34 WP_User $user
35 ) {
36 $this->storage = $storage;
37 $this->list_key = $list_key;
38 $this->preference = $preference;
39 $this->user = $user;
40 }
41
42 private function get_first_list_screen(): ?ListScreen
43 {
44 return $this->storage->find_all_by_assigned_user(
45 $this->list_key,
46 $this->user,
47 new Sort\UserOrder($this->user, $this->list_key),
48 ListScreenStatus::create_active()
49 )->first();
50 }
51
52 private function get_preference_list_screen(): ?ListScreen
53 {
54 $list_id = $this->preference->get_list_id($this->list_key);
55
56 return $list_id
57 ? $this->get_list_screen_by_id($list_id)
58 : null;
59 }
60
61 private function get_requested_list_screen(Request $request): ?ListScreen
62 {
63 try {
64 $id = new ListScreenId((string)$request->get('layout'));
65 } catch (Exception $e) {
66 return null;
67 }
68
69 return $this->get_list_screen_by_id($id);
70 }
71
72 private function get_list_screen_by_id(ListScreenId $id): ?ListScreen
73 {
74 $list_screen = $this->storage->find($id);
75
76 if (! $list_screen ||
77 ! $list_screen->is_user_allowed($this->user) ||
78 ! $this->list_key->equals($list_screen->get_table_id()) ||
79 (
80 $list_screen->get_status()->equals(ListScreenStatus::create_inactive()) &&
81 // allow admin users to view inactive lists when needed
82 ! user_can($this->user, Capabilities::MANAGE)
83 )
84 ) {
85 return null;
86 }
87
88 return $list_screen;
89 }
90
91 private function get_list_screen(Request $request): ?ListScreen
92 {
93 $list_screen = $this->get_requested_list_screen($request);
94
95 if (! $list_screen) {
96 $list_screen = $this->get_preference_list_screen();
97 }
98
99 return $list_screen ?: $this->get_first_list_screen();
100 }
101
102 public function handle(Request $request): void
103 {
104 $request->get_parameters()->merge([
105 'list_screen' => $this->get_list_screen($request),
106 ]);
107 }
108
109 }
110