|
1 <?php |
|
2 /** |
|
3 * List Table API: WP_Application_Passwords_List_Table class |
|
4 * |
|
5 * @package WordPress |
|
6 * @subpackage Administration |
|
7 * @since 5.6.0 |
|
8 */ |
|
9 |
|
10 /** |
|
11 * Class for displaying the list of application password items. |
|
12 * |
|
13 * @since 5.6.0 |
|
14 * @access private |
|
15 * |
|
16 * @see WP_List_Table |
|
17 */ |
|
18 class WP_Application_Passwords_List_Table extends WP_List_Table { |
|
19 |
|
20 /** |
|
21 * Gets the list of columns. |
|
22 * |
|
23 * @since 5.6.0 |
|
24 * |
|
25 * @return array |
|
26 */ |
|
27 public function get_columns() { |
|
28 return array( |
|
29 'name' => __( 'Name' ), |
|
30 'created' => __( 'Created' ), |
|
31 'last_used' => __( 'Last Used' ), |
|
32 'last_ip' => __( 'Last IP' ), |
|
33 'revoke' => __( 'Revoke' ), |
|
34 ); |
|
35 } |
|
36 |
|
37 /** |
|
38 * Prepares the list of items for displaying. |
|
39 * |
|
40 * @since 5.6.0 |
|
41 * |
|
42 * @global int $user_id User ID. |
|
43 */ |
|
44 public function prepare_items() { |
|
45 global $user_id; |
|
46 $this->items = array_reverse( WP_Application_Passwords::get_user_application_passwords( $user_id ) ); |
|
47 } |
|
48 |
|
49 /** |
|
50 * Handles the name column output. |
|
51 * |
|
52 * @since 5.6.0 |
|
53 * |
|
54 * @param array $item The current application password item. |
|
55 */ |
|
56 public function column_name( $item ) { |
|
57 echo esc_html( $item['name'] ); |
|
58 } |
|
59 |
|
60 /** |
|
61 * Handles the created column output. |
|
62 * |
|
63 * @since 5.6.0 |
|
64 * |
|
65 * @param array $item The current application password item. |
|
66 */ |
|
67 public function column_created( $item ) { |
|
68 if ( empty( $item['created'] ) ) { |
|
69 echo '—'; |
|
70 } else { |
|
71 echo date_i18n( __( 'F j, Y' ), $item['created'] ); |
|
72 } |
|
73 } |
|
74 |
|
75 /** |
|
76 * Handles the last used column output. |
|
77 * |
|
78 * @since 5.6.0 |
|
79 * |
|
80 * @param array $item The current application password item. |
|
81 */ |
|
82 public function column_last_used( $item ) { |
|
83 if ( empty( $item['last_used'] ) ) { |
|
84 echo '—'; |
|
85 } else { |
|
86 echo date_i18n( __( 'F j, Y' ), $item['last_used'] ); |
|
87 } |
|
88 } |
|
89 |
|
90 /** |
|
91 * Handles the last ip column output. |
|
92 * |
|
93 * @since 5.6.0 |
|
94 * |
|
95 * @param array $item The current application password item. |
|
96 */ |
|
97 public function column_last_ip( $item ) { |
|
98 if ( empty( $item['last_ip'] ) ) { |
|
99 echo '—'; |
|
100 } else { |
|
101 echo $item['last_ip']; |
|
102 } |
|
103 } |
|
104 |
|
105 /** |
|
106 * Handles the revoke column output. |
|
107 * |
|
108 * @since 5.6.0 |
|
109 * |
|
110 * @param array $item The current application password item. |
|
111 */ |
|
112 public function column_revoke( $item ) { |
|
113 $name = 'revoke-application-password-' . $item['uuid']; |
|
114 printf( |
|
115 '<button type="button" name="%1$s" id="%1$s" class="button delete" aria-label="%2$s">%3$s</button>', |
|
116 esc_attr( $name ), |
|
117 /* translators: %s: the application password's given name. */ |
|
118 esc_attr( sprintf( __( 'Revoke "%s"' ), $item['name'] ) ), |
|
119 __( 'Revoke' ) |
|
120 ); |
|
121 } |
|
122 |
|
123 /** |
|
124 * Generates content for a single row of the table |
|
125 * |
|
126 * @since 5.6.0 |
|
127 * |
|
128 * @param array $item The current item. |
|
129 * @param string $column_name The current column name. |
|
130 */ |
|
131 protected function column_default( $item, $column_name ) { |
|
132 /** |
|
133 * Fires for each custom column in the Application Passwords list table. |
|
134 * |
|
135 * Custom columns are registered using the {@see 'manage_application-passwords-user_columns'} filter. |
|
136 * |
|
137 * @since 5.6.0 |
|
138 * |
|
139 * @param string $column_name Name of the custom column. |
|
140 * @param array $item The application password item. |
|
141 */ |
|
142 do_action( "manage_{$this->screen->id}_custom_column", $column_name, $item ); |
|
143 } |
|
144 |
|
145 /** |
|
146 * Generates custom table navigation to prevent conflicting nonces. |
|
147 * |
|
148 * @since 5.6.0 |
|
149 * |
|
150 * @param string $which The location of the bulk actions: 'top' or 'bottom'. |
|
151 */ |
|
152 protected function display_tablenav( $which ) { |
|
153 ?> |
|
154 <div class="tablenav <?php echo esc_attr( $which ); ?>"> |
|
155 <?php if ( 'bottom' === $which ) : ?> |
|
156 <div class="alignright"> |
|
157 <button type="button" name="revoke-all-application-passwords" id="revoke-all-application-passwords" class="button delete"><?php _e( 'Revoke all application passwords' ); ?></button> |
|
158 </div> |
|
159 <?php endif; ?> |
|
160 <div class="alignleft actions bulkactions"> |
|
161 <?php $this->bulk_actions( $which ); ?> |
|
162 </div> |
|
163 <?php |
|
164 $this->extra_tablenav( $which ); |
|
165 $this->pagination( $which ); |
|
166 ?> |
|
167 <br class="clear" /> |
|
168 </div> |
|
169 <?php |
|
170 } |
|
171 |
|
172 /** |
|
173 * Generates content for a single row of the table. |
|
174 * |
|
175 * @since 5.6.0 |
|
176 * |
|
177 * @param array $item The current item. |
|
178 */ |
|
179 public function single_row( $item ) { |
|
180 echo '<tr data-uuid="' . esc_attr( $item['uuid'] ) . '">'; |
|
181 $this->single_row_columns( $item ); |
|
182 echo '</tr>'; |
|
183 } |
|
184 |
|
185 /** |
|
186 * Gets the name of the default primary column. |
|
187 * |
|
188 * @since 5.6.0 |
|
189 * |
|
190 * @return string Name of the default primary column, in this case, 'name'. |
|
191 */ |
|
192 protected function get_default_primary_column_name() { |
|
193 return 'name'; |
|
194 } |
|
195 |
|
196 /** |
|
197 * Prints the JavaScript template for the new row item. |
|
198 * |
|
199 * @since 5.6.0 |
|
200 */ |
|
201 public function print_js_template_row() { |
|
202 list( $columns, $hidden, , $primary ) = $this->get_column_info(); |
|
203 |
|
204 echo '<tr data-uuid="{{ data.uuid }}">'; |
|
205 |
|
206 foreach ( $columns as $column_name => $display_name ) { |
|
207 $is_primary = $primary === $column_name; |
|
208 $classes = "{$column_name} column-{$column_name}"; |
|
209 |
|
210 if ( $is_primary ) { |
|
211 $classes .= ' has-row-actions column-primary'; |
|
212 } |
|
213 |
|
214 if ( in_array( $column_name, $hidden, true ) ) { |
|
215 $classes .= ' hidden'; |
|
216 } |
|
217 |
|
218 printf( '<td class="%s" data-colname="%s">', esc_attr( $classes ), esc_attr( wp_strip_all_tags( $display_name ) ) ); |
|
219 |
|
220 switch ( $column_name ) { |
|
221 case 'name': |
|
222 echo '{{ data.name }}'; |
|
223 break; |
|
224 case 'created': |
|
225 // JSON encoding automatically doubles backslashes to ensure they don't get lost when printing the inline JS. |
|
226 echo '<# print( wp.date.dateI18n( ' . wp_json_encode( __( 'F j, Y' ) ) . ', data.created ) ) #>'; |
|
227 break; |
|
228 case 'last_used': |
|
229 echo '<# print( data.last_used !== null ? wp.date.dateI18n( ' . wp_json_encode( __( 'F j, Y' ) ) . ", data.last_used ) : '—' ) #>"; |
|
230 break; |
|
231 case 'last_ip': |
|
232 echo "{{ data.last_ip || '—' }}"; |
|
233 break; |
|
234 case 'revoke': |
|
235 printf( |
|
236 '<button type="button" class="button delete" aria-label="%1$s">%2$s</button>', |
|
237 /* translators: %s: the application password's given name. */ |
|
238 esc_attr( sprintf( __( 'Revoke "%s"' ), '{{ data.name }}' ) ), |
|
239 esc_html__( 'Revoke' ) |
|
240 ); |
|
241 break; |
|
242 default: |
|
243 /** |
|
244 * Fires in the JavaScript row template for each custom column in the Application Passwords list table. |
|
245 * |
|
246 * Custom columns are registered using the {@see 'manage_application-passwords-user_columns'} filter. |
|
247 * |
|
248 * @since 5.6.0 |
|
249 * |
|
250 * @param string $column_name Name of the custom column. |
|
251 */ |
|
252 do_action( "manage_{$this->screen->id}_custom_column_js_template", $column_name ); |
|
253 break; |
|
254 } |
|
255 |
|
256 if ( $is_primary ) { |
|
257 echo '<button type="button" class="toggle-row"><span class="screen-reader-text">' . __( 'Show more details' ) . '</span></button>'; |
|
258 } |
|
259 |
|
260 echo '</td>'; |
|
261 } |
|
262 |
|
263 echo '</tr>'; |
|
264 } |
|
265 } |