PluginProbe
Adminify – White Label, Admin Menu Editor, Login Customizer / 3.1.2
Adminify – White Label, Admin Menu Editor, Login Customizer v3.1.2
4.3.1 4.3.0 4.2.26 4.2.25 4.2.24 4.2.23 4.2.22 4.2.21 4.2.20 4.2.19 4.2.18 4.2.17 4.2.16 4.2.15 4.2.14 4.2.13 4.2.12 4.2.11 4.2.10 4.2.9 4.2.8 4.2.7 4.2.6 4.2.5 4.1.17 All 164 releases
adminify / Inc / Modules / AdminColumns / AdminColumns.php

AdminColumns.php in Adminify – White Label, Admin Menu Editor, Login Customizer 3.1.2, at Inc/Modules/AdminColumns/AdminColumns.php

316 lines 9.5 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace WPAdminify\Inc\Modules\AdminColumns;
4
5 use WPAdminify\Inc\Modules\AdminColumns\Lib\Adminify_Columns_Manager;
6 use WPAdminify\Inc\Modules\AdminColumns\Lib\Inc\Carbon_Admin_Columns_Manager;
7 use WPAdminify\Inc\Modules\AdminColumns\Lib\Inc\Carbon_Admin_Column;
8 use WPAdminify\Inc\Utils;
9
10 // no direct access allowed
11 if ( ! defined( 'ABSPATH' ) ) {
12 exit;
13 }
14
15 /**
16 * WP Adminify
17 * Module: Admin Columns
18 *
19 * @author Jewel Theme <support@jeweltheme.com>
20 */
21
22 class AdminColumns {
23
24 public $url;
25
26 // Key: Unique Screen ID
27 private $key;
28
29 private $post_type;
30
31 public $prefix;
32
33 public function __construct() {
34 $this->prefix = '_wpadminify_admin_columns_settings';
35
36 if ( is_admin() ) {
37 add_action( 'admin_menu', [ $this, 'jltwp_adminify_admin_columns_menu' ], 51 );
38 add_action( 'admin_enqueue_scripts', [ $this, 'jltwp_adminify_admin_columns_enqueue_scripts' ], 100 );
39 add_action( 'current_screen', [ $this, 'manage_admin_columns' ] );
40 add_filter( 'admin_body_class', [ $this, 'jltwp_adminify_admin_columns_body_class' ] );
41 }
42
43 add_action( 'wp_ajax_adminify_admin_columns', [ $this, 'handle_adminify_admin_columns' ] );
44 }
45
46 /**
47 * Add Body Class
48 */
49 public function jltwp_adminify_admin_columns_body_class( $classes ) {
50 $classes .= ' wp-adminify-admin-columns ';
51
52 if ( is_rtl() ) {
53 $classes .= ' wp-adminify-admin-columns-rtl ';
54 }
55 return $classes;
56 }
57
58
59 public function manage_admin_columns() {
60 $screen = get_current_screen();
61
62 $allowed_screens_base = [ 'edit', 'edit-tags' ];
63
64 if ( ! in_array( $base = $screen->base, $allowed_screens_base ) ) {
65 return;
66 }
67
68 new Adminify_Columns_Manager();
69
70 if ( $base == 'edit' && ! empty( $screen->post_type ) ) {
71 $this->manage_post_type_admin_columns( $screen->post_type );
72 }
73
74 if ( $base == 'edit-tags' && ! empty( $screen->taxonomy ) ) {
75 $this->manage_taxonomy_admin_columns( $screen->taxonomy );
76 }
77 }
78
79 public function get_width( $width ) {
80 $_width = null;
81
82 if ( ! empty( $width_val = $width['value'] ) && $width_val != 'auto' ) {
83 $_width = (int) $width_val;
84 if ( $width['unit'] == '%' ) {
85 $_width .= '%';
86 }
87 }
88
89 return $_width;
90 }
91
92 public function manage_post_type_admin_columns( $post_type ) {
93 $columns = (array) adminify_columns_group_to_options( adminify__get_post_type_all_columns( $post_type ) );
94 $columns_keys = array_keys( $columns );
95 $display_columns = adminify_prepare_post_type_column_meta( $post_type );
96 $display_column_keys = wp_list_pluck( $display_columns, 'name' );
97 $columns_manager = Carbon_Admin_Columns_Manager::modify_columns( 'post', $post_type );
98
99 array_unshift( $display_column_keys, 'cb' );
100 array_unshift( $display_column_keys, 'adminify_move' );
101
102 $remove_column_keys = array_values( array_diff( $columns_keys, $display_column_keys ) );
103
104 // Remove Default Columns
105 if ( ! empty( $remove_column_keys ) ) {
106 $columns_manager->remove( $remove_column_keys );
107 }
108
109 $custom_fields = wp_list_pluck( adminify_get_custom_admin_columns(), 'callback', 'name' );
110 $acf_fields = self::get_acf_fields( $post_type );
111 $pods_fields = self::get_pods_fields( $post_type );
112
113 // Modify Default Columns
114 $columns = array_map(
115 function ( $column ) use ( $custom_fields, $acf_fields, $pods_fields ) {
116 $admin_column = Carbon_Admin_Column::create( $column['label'] )->set_name( $column['name'] )->set_width( $this->get_width( $column['width'] ) );
117
118 if ( in_array( $column['name'], array_keys( $custom_fields ) ) ) {
119 $admin_column->set_callback( $custom_fields[ $column['name'] ] );
120 } elseif ( in_array( $column['name'], array_keys( $acf_fields ) ) ) {
121 $admin_column->set_field( $column['name'] );
122 } elseif ( in_array( $column['name'], array_keys( $pods_fields ) ) ) {
123 $admin_column->set_field( $column['name'] );
124 } elseif ( $column['name'] == 'function' ) {
125 $admin_column->set_callback( $column['function_name'] );
126 } elseif ( $column['name'] == 'shortcode' ) {
127 $admin_column->set_callback(
128 function() use ( $column ) {
129 echo do_shortcode( $column['shortcode_name'] );
130 }
131 );
132 } else {
133 $admin_column->set_callback( '__return_false' );
134 }
135
136 return $admin_column;
137 },
138 $display_columns
139 );
140
141 $columns_manager->sort( $display_column_keys )->add( $columns );
142 }
143
144 public function manage_taxonomy_admin_columns( $taxonomy ) {
145 $columns = adminify__get_taxonomy_all_columns( $taxonomy );
146 $columns_keys = array_keys( $columns );
147 $display_columns = adminify_prepare_taxonomy_column_meta( $taxonomy );
148 $display_column_keys = wp_list_pluck( $display_columns, 'name' );
149 $remove_column_keys = array_values( array_diff( $columns_keys, $display_column_keys ) );
150 $columns_manager = Carbon_Admin_Columns_Manager::modify_columns( 'taxonomy', $taxonomy );
151
152 // Remove Default Columns
153 if ( ! empty( $remove_column_keys ) ) {
154 $columns_manager->remove( $remove_column_keys );
155 }
156
157 // Modify Default Columns
158 $columns = array_map(
159 function ( $column ) {
160 return Carbon_Admin_Column::create( $column['label'] )->set_name( $column['name'] )->set_width( $this->get_width( $column['width'] ) );
161 },
162 $display_columns
163 );
164
165 // Add Custom Columns with callback
166 // @todo implement
167
168 array_unshift( $display_column_keys, 'cb' );
169
170 $columns_manager->sort( $display_column_keys )->add( $columns );
171 }
172
173 public function handle_adminify_admin_columns() {
174 check_ajax_referer( 'adminify-admin-columns-secirity' );
175
176 if ( ! empty( $_POST['route'] ) ) {
177 $route_handler = 'handle_' . sanitize_text_field( wp_unslash( $_POST['route'] ) );
178 if ( is_callable( get_class( $this ), $route_handler ) ) {
179 $this->$route_handler( $_POST );
180 }
181 }
182
183 wp_send_json_error( [ 'message' => __( 'Something is wrong, no route found' ) ], 400 );
184 }
185
186 public function handle_get_taxonomy_data( $data ) {
187 $data = adminify__get_taxonomies_columns();
188 wp_send_json_success( $data );
189 }
190
191 public function handle_get_post_type_data( $data ) {
192 $data = adminify__get_post_types_columns();
193 wp_send_json_success( $data );
194 }
195
196 public function handle_save_columns_data( $data ) {
197 $data = json_encode( $data, JSON_UNESCAPED_SLASHES );
198 $data = str_replace( '\\\\', '', $data );
199 $data = json_decode( $data, true );
200
201 $post_types = empty( $data['post_types'] ) ? [] : $data['post_types'];
202 $taxonomies = empty( $data['taxonomies'] ) ? [] : $data['taxonomies'];
203
204 foreach ( $post_types as $post_type ) {
205 $display_columns = empty( $post_type['display_columns'] ) ? [] : $post_type['display_columns'];
206 update_option( '_adminify_admin_columns_meta_' . esc_attr( $post_type['name'] ), $display_columns );
207 }
208
209 foreach ( $taxonomies as $taxonomy ) {
210 $display_columns = empty( $taxonomy['display_columns'] ) ? [] : $taxonomy['display_columns'];
211 update_option( '_adminify_admin_taxonomy_columns_meta_' . esc_attr( $taxonomy['name'] ), $display_columns );
212 }
213
214 wp_send_json_success(
215 [
216 'post_types' => $post_types,
217 'taxonomies' => $taxonomies,
218 ]
219 );
220 }
221
222
223 public function jltwp_adminify_admin_columns_menu() {
224 add_submenu_page(
225 'wp-adminify-settings',
226 esc_html__( 'Admin Columns by WP Adminify', 'adminify' ),
227 esc_html__( 'Admin Columns', 'adminify' ),
228 apply_filters( 'jltwp_adminify_capability', 'manage_options' ),
229 'adminify-admin-columns', // Page slug, will be displayed in URL
230 [ $this, 'jltwp_adminify_admin_columns_contents' ]
231 );
232 }
233
234
235 public function jltwp_adminify_admin_columns_enqueue_scripts() {
236 global $pagenow;
237
238 if ( 'admin.php' === $pagenow && 'adminify-admin-columns' === $_GET['page'] ) {
239 wp_enqueue_style( 'wp-adminify-admin-columns' );
240
241 // wp_enqueue_script('jquery');
242 // wp_enqueue_script('jquery-ui-core');
243 // wp_enqueue_script('jquery-ui-slider');
244
245 $adminify_columns_data = [
246 'ajax_nonce' => wp_create_nonce( 'adminify-admin-columns-secirity' ),
247 'ajax_action' => 'adminify_admin_columns',
248 'ajaxurl' => admin_url( 'admin-ajax.php' ),
249 'adminurl' => admin_url(),
250 'siteurl' => home_url(),
251 'is_pro' => wp_validate_boolean( jltwp_adminify()->can_use_premium_code__premium_only() ),
252 'pro_notice' => Utils::adminify_upgrade_pro(),
253 ];
254
255 wp_localize_script( 'wp-adminify-admin-columns', 'adminify_columns_data', $adminify_columns_data );
256 wp_enqueue_script( 'wp-adminify-admin-columns' );
257 }
258 }
259
260 public static function get_acf_fields( $post_type ) {
261 $fields = [];
262
263 if ( function_exists( 'acf_get_field_groups' ) ) {
264 $groups = acf_get_field_groups( [ 'post_type' => $post_type ] );
265 $groups = wp_list_pluck( $groups, 'key' );
266
267 foreach ( $groups as $group_key ) {
268 $_fields = wp_list_pluck( acf_get_fields( $group_key ), 'label', 'name' );
269 $fields = array_merge( $fields, $_fields );
270 }
271 }
272
273 return $fields;
274 }
275
276 public static function get_pods_fields( $post_type ) {
277 $fields = [];
278
279 if ( function_exists( 'pods_api' ) ) {
280 $api = pods_api();
281 $pods = $api->load_pods(
282 [
283 'object' => $post_type,
284 'fields' => false,
285 'return_type' => 'ids',
286 ]
287 );
288
289 foreach ( $pods as $pod_id ) {
290 $pod_fields = $api->load_pod( [ 'id' => $pod_id ], false )->get_fields();
291 foreach ( $pod_fields as $pod_field => $pod_field_arg ) {
292 $fields[ $pod_field ] = $pod_field_arg['label'];
293 }
294 }
295 }
296
297 return $fields;
298 }
299
300
301 public function jltwp_adminify_admin_columns_contents() {
302
303 ?>
304
305 <div class="wrap">
306 <div class="wp-adminify--admin-columns--editor--container">
307 <div class="wp-adminify--admin-columns--editor--settings mt-6">
308 <div id="wpadminify-admin-columns"></div>
309 </div>
310 </div>
311 </div>
312
313 <?php
314 }
315 }
316