Table.php
11.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
<?php
namespace ACP\Editing\Asset\Script;
use AC;
use AC\Asset\Location;
use AC\Asset\Script;
use ACP;
use ACP\Editing\ApplyFilter;
use ACP\Editing\EditableDataFactory;
use ACP\Editing\Preference;
use WP_List_Table;
use WP_User;
final class Table extends Script {
/**
* @var AC\ListScreen
*/
private $list_screen;
/**
* @var array
*/
private $active_states;
/**
* @var EditableDataFactory
*/
private $editable_data_factory;
/**
* @var Preference\EditState
*/
private $edit_state;
public function __construct(
string $handle,
Location $location,
AC\ListScreen $list_screen,
EditableDataFactory $editable_data_factory,
Preference\EditState $edit_state,
array $active_states
) {
parent::__construct( $handle, $location, [ 'jquery', 'ac-table' ] );
$this->list_screen = $list_screen;
$this->editable_data_factory = $editable_data_factory;
$this->edit_state = $edit_state;
$this->active_states = $active_states;
}
public function register(): void {
parent::register();
// Allow JS to access the column data for this list screen on the edit page
wp_localize_script( $this->get_handle(), 'ACP_Editing_Columns', $this->editable_data_factory->create() );
wp_localize_script( $this->get_handle(), 'ACP_Editing', [
'inline_edit' => [
'active' => $this->active_states['inline_edit'],
'toggle_state' => $this->edit_state->is_active( $this->list_screen->get_key() ),
'persistent' => $this->is_persistent_editing(),
'version' => apply_filters( 'acp/editing/inline/deprecated_style', false ) ? 'v1' : 'v2',
],
'bulk_edit' => [
'active' => $this->active_states['bulk_edit'],
'updated_rows_per_iteration' => $this->get_updated_rows_per_iteration(),
'total_items' => $this->get_total_items() ?: 0,
'total_items_formatted' => number_format_i18n( $this->get_total_items() ?: 0 ),
'show_confirmation' => $this->show_bulk_edit_confirmation(),
],
'bulk_delete' => [
'active' => $this->active_states['bulk_delete'],
'delete_rows_per_iteration' => $this->get_deleted_rows_per_iteration(),
'component' => $this->get_bulk_delete_component(),
'reassign_user_id' => $this->get_reassign_user()->ID,
'reassign_user_name' => $this->get_reassign_user_name(),
],
'i18n' => [
'select_author' => __( 'Select author', 'codepress-admin-columns' ),
'edit' => __( 'Edit' ),
'redo' => __( 'Redo', 'codepress-admin-columns' ),
'undo' => __( 'Undo', 'codepress-admin-columns' ),
'date' => __( 'Date' ),
'delete' => __( 'Delete', 'codepress-admin-columns' ),
'restore' => __( 'Restore', 'codepress-admin-columns' ),
'download' => __( 'Download', 'codepress-admin-columns' ),
'errors' => [
'field_required' => __( 'This field is required.', 'codepress-admin-columns' ),
'invalid_float' => __( 'Please enter a valid float value.', 'codepress-admin-columns' ),
'invalid_floats' => __( 'Please enter valid float values.', 'codepress-admin-columns' ),
'unknown' => __( 'Something went wrong.', 'codepress-admin-columns' ),
],
'inline_edit' => __( 'Inline Edit', 'codepress-admin-columns' ),
'failed' => __( 'Failed', 'codepress-admin-columns' ),
'media' => __( 'Media', 'codepress-admin-columns' ),
'image' => __( 'Image', 'codepress-admin-columns' ),
'audio' => __( 'Audio', 'codepress-admin-columns' ),
'time' => __( 'Time', 'codepress-admin-columns' ),
'update' => __( 'Update', 'codepress-admin-columns' ),
'cancel' => __( 'Cancel', 'codepress-admin-columns' ),
'done' => __( 'Done', 'codepress-admin-columns' ),
'replace_with' => __( 'Replace with', 'codepress-admin-columns' ),
'add' => __( 'Add', 'codepress-admin-columns' ),
'remove' => __( 'Remove', 'codepress-admin-columns' ),
'operators' => [
'subtract' => __( 'Subtract', 'codepress-admin-columns' ),
'add' => __( 'Add', 'codepress-admin-columns' ),
'remove' => __( 'Remove', 'codepress-admin-columns' ),
'multiply' => __( 'Multiply', 'codepress-admin-columns' ),
'divide' => __( 'Divide', 'codepress-admin-columns' ),
],
'bulk_selection' => [
'affected_items' => _x( 'This will affect {0}', 'bulk-delete', 'codepress-admin-columns' ),
'all_selected_items' => __( 'all selected items', 'codepress-admin-columns' ),
'all_items' => __( 'all items', 'codepress-admin-columns' ),
'all_items_ucfirst' => ucfirst( __( 'all items', 'codepress-admin-columns' ) ),
'items' => __( '{0} items', 'codepress-admin-columns' ),
'item' => __( '1 item', 'codepress-admin-columns' ),
'select_all' => __( 'Select all {0} items', 'codepress-admin-columns' ),
'selected' => sprintf( __( '{0} selected for %s.', 'codepress-admin-columns' ), ac_helper()->string->enumeration_list( $this->get_bulk_selection_labels() ) ),
],
'bulk_delete' => [
'assignment_to' => _x( 'Assign all content to:', 'bulk-delete', 'codepress-admin-columns' ),
'bulk_delete' => __( 'Bulk Delete', 'codepress-admin-columns' ),
'bulk_restore' => __( 'Bulk Restore', 'codepress-admin-columns' ),
'confirmation' => __( 'Do you want to bulk delete all selected items?', 'codepress-admin-columns' ),
'confirmation_restore' => __( 'Do you want to bulk restore all selected items?', 'codepress-admin-columns' ),
'current_user' => _x( 'current user', 'bulk-delete', 'codepress-admin-columns' ),
'delete_all_content' => _x( 'Delete all content', 'bulk-delete', 'codepress-admin-columns' ),
'delete_items_permanently' => _x( 'Delete the items permanently', 'bulk-delete', 'codepress-admin-columns' ),
'delete_selected_items_permanently' => _x( 'The selected items will be deleted permanently.', 'bulk-delete', 'codepress-admin-columns' ),
'restore' => _x( 'Restore', 'bulk-delete', 'codepress-admin-columns' ),
'restore_items' => _x( 'Restore the items', 'bulk-delete', 'codepress-admin-columns' ),
'finished' => __( 'Processed {0} items', 'codepress-admin-columns' ),
'move_to_trash' => _x( 'Move the items to trash', 'bulk-delete', 'codepress-admin-columns' ),
'user_assignment_description' => _x( 'What should be done with content owned by these users?', 'bulk-delete', 'codepress-admin-columns' ),
'yes_delete' => __( 'Yes, Delete', 'codepress-admin-columns' ),
'yes_restore' => __( 'Yes, Restore', 'codepress-admin-columns' ),
],
'bulk_edit' => [
'bulk_edit' => __( 'Bulk Edit', 'codepress-admin-columns' ),
'done_deselect' => __( 'Done & Deselect All', 'codepress-admin-columns' ),
'form' => [
'heads_up' => __( 'This will update {0} items.', 'codepress-admin-columns' ),
'clear_values' => __( 'You are about to clear {0} items.', 'codepress-admin-columns' ),
'update_values' => __( 'You are about to update {0} items.', 'codepress-admin-columns' ),
'are_you_sure' => __( 'Are you sure?', 'codepress-admin-columns' ),
'yes_update' => __( 'Yes, Update', 'codepress-admin-columns' ),
],
'feedback' => [
'show_items' => __( 'Show items', 'codepress-admin-columns' ),
'hide_items' => __( 'Hide items', 'codepress-admin-columns' ),
'finished' => __( 'Processed {0} items', 'codepress-admin-columns' ),
'updating' => __( 'Updating items.', 'codepress-admin-columns' ),
'processed' => __( 'Processed {0} of {1} items.', 'codepress-admin-columns' ),
'failure' => __( 'Updating failed. Please try again.', 'codepress-admin-columns' ),
'error' => _x( 'We have found {0} while processing.', 'bulk edit errors', 'codepress-admin-columns' ),
'not_editable_found' => __( 'These items are not editable and could not be modified:', 'codepress-admin-columns' ),
],
],
],
] );
}
private function get_bulk_selection_labels(): array {
$selection = [];
$labels = [
'bulk_edit' => [
'label' => __( 'bulk edit', 'codepress-admin-columns' ),
'tip' => __( 'Bulk edit items by clicking the Bulk Edit button below the column labels.', 'codepress-admin-columns' ),
],
'bulk_delete' => [
'label' => __( 'bulk delete', 'codepress-admin-columns' ),
'tip' => __( 'Bulk delete items by clicking the trash icon in the top left corner.', 'codepress-admin-columns' ),
],
'export' => [
'label' => __( 'export', 'codepress-admin-columns' ),
'tip' => __( 'Export items by clicking the Export button.', 'codepress-admin-columns' ),
],
];
foreach ( $labels as $key => $item ) {
if ( $this->active_states[ $key ] ) {
$selection[] = sprintf( '<span data-ac-tip="%s">%s</span>', esc_attr( $item['tip'] ), esc_html( $item['label'] ) );
}
}
return $selection;
}
private function get_reassign_user_name(): string {
$user = $this->get_reassign_user();
$name = ac_helper()->user->get_display_name( $user );
if ( get_current_user_id() === $user->ID ) {
$name = sprintf( '%s (%s)', $name, __( 'current user', 'codepress-admin-columns' ) );
}
return $name;
}
private function get_reassign_user(): WP_User {
$user_id = ( new ApplyFilter\ReassignUser() )->apply_filters( get_current_user_id() );
$user = get_userdata( $user_id );
if ( ! $user ) {
return wp_get_current_user();
}
return $user;
}
/**
* @return false|int
*/
private function get_total_items() {
global $wp_list_table;
return $wp_list_table instanceof WP_List_Table
? $wp_list_table->get_pagination_arg( 'total_items' )
: false;
}
private function show_bulk_edit_confirmation(): bool {
return (bool) apply_filters( 'acp/editing/bulk/show_confirmation', true );
}
private function get_bulk_delete_component(): string {
switch ( true ) {
case $this->list_screen instanceof ACP\ListScreen\Post:
if ( 'trash' === get_query_var( 'post_status', null ) ) {
return 'trash';
}
return 'post';
case $this->list_screen instanceof ACP\ListScreen\User:
return 'user';
case $this->list_screen instanceof ACP\ListScreen\Comment:
$comment_status = isset( $_REQUEST['comment_status'] ) ? wp_unslash( $_REQUEST['comment_status'] ) : '';
if ( 'trash' === $comment_status ) {
return 'trash';
}
return 'comment';
default:
return '';
}
}
private function is_persistent_editing(): bool {
return (bool) apply_filters( 'acp/editing/persistent', false, $this->list_screen );
}
private function get_updated_rows_per_iteration(): int {
return (int) apply_filters( 'acp/editing/bulk/updated_rows_per_iteration', 250, $this->list_screen );
}
private function get_deleted_rows_per_iteration(): int {
return (int) apply_filters( 'acp/delete/bulk/deleted_rows_per_iteration', 250, $this->list_screen );
}
}