PluginProbe ʕ •ᴥ•ʔ
Admin Columns / 7.0.13
Admin Columns v7.0.13
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 3 months ago ListScreenTable.php 3 months ago TableScreenAdmin.php 3 months 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
23 private Storage $storage;
24
25 private Table\TablePreference $preference;
26
27 private TableId $list_key;
28
29 private WP_User $user;
30
31 public function __construct(
32 Storage $storage,
33 TableId $list_key,
34 Table\TablePreference $preference,
35 WP_User $user
36 ) {
37 $this->storage = $storage;
38 $this->list_key = $list_key;
39 $this->preference = $preference;
40 $this->user = $user;
41 }
42
43 private function get_first_list_screen(): ?ListScreen
44 {
45 return $this->storage->find_all_by_assigned_user(
46 $this->list_key,
47 $this->user,
48 new Sort\UserOrder($this->user, $this->list_key),
49 ListScreenStatus::create_active()
50 )->first();
51 }
52
53 private function get_preference_list_screen(): ?ListScreen
54 {
55 $list_id = $this->preference->get_list_id($this->list_key);
56
57 return $list_id
58 ? $this->get_list_screen_by_id($list_id)
59 : null;
60 }
61
62 private function get_requested_list_screen(Request $request): ?ListScreen
63 {
64 try {
65 $id = new ListScreenId((string)$request->get('layout'));
66 } catch (Exception $e) {
67 return null;
68 }
69
70 return $this->get_list_screen_by_id($id);
71 }
72
73 private function get_list_screen_by_id(ListScreenId $id): ?ListScreen
74 {
75 $list_screen = $this->storage->find($id);
76
77 if ( ! $list_screen ||
78 ! $list_screen->is_user_allowed($this->user) ||
79 ! $this->list_key->equals($list_screen->get_table_id()) ||
80 (
81 $list_screen->get_status()->equals(ListScreenStatus::create_inactive()) &&
82 // allow admin users to view inactive lists when needed
83 ! user_can($this->user, Capabilities::MANAGE)
84 )
85 ) {
86 return null;
87 }
88
89 return $list_screen;
90 }
91
92 private function get_list_screen(Request $request): ?ListScreen
93 {
94 $list_screen = $this->get_requested_list_screen($request);
95
96 if ( ! $list_screen) {
97 $list_screen = $this->get_preference_list_screen();
98 }
99
100 return $list_screen ?: $this->get_first_list_screen();
101 }
102
103 public function handle(Request $request): void
104 {
105 $request->get_parameters()->merge([
106 'list_screen' => $this->get_list_screen($request),
107 ]);
108 }
109
110 }