PluginProbe
Adminify – White Label, Admin Menu Editor, Login Customizer / 3.1.7
Adminify – White Label, Admin Menu Editor, Login Customizer v3.1.7
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.7, at Inc/Modules/AdminColumns/AdminColumns.php

318 lines 9.6 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 $display_columns = adminify_columns_validation( $display_columns );
207 update_option( '_adminify_admin_columns_meta_' . esc_attr( $post_type['name'] ), $display_columns );
208 }
209
210 foreach ( $taxonomies as $taxonomy ) {
211 $display_columns = empty( $taxonomy['display_columns'] ) ? [] : $taxonomy['display_columns'];
212 $display_columns = adminify_columns_validation( $display_columns );
213 update_option( '_adminify_admin_taxonomy_columns_meta_' . esc_attr( $taxonomy['name'] ), $display_columns );
214 }
215
216 wp_send_json_success(
217 [
218 'post_types' => $post_types,
219 'taxonomies' => $taxonomies,
220 ]
221 );
222 }
223
224
225 public function jltwp_adminify_admin_columns_menu() {
226 add_submenu_page(
227 'wp-adminify-settings',
228 esc_html__( 'Admin Columns by WP Adminify', 'adminify' ),
229 esc_html__( 'Admin Columns', 'adminify' ),
230 apply_filters( 'jltwp_adminify_capability', 'manage_options' ),
231 'adminify-admin-columns', // Page slug, will be displayed in URL
232 [ $this, 'jltwp_adminify_admin_columns_contents' ]
233 );
234 }
235
236
237 public function jltwp_adminify_admin_columns_enqueue_scripts() {
238 global $pagenow;
239
240 if ( 'admin.php' === $pagenow && 'adminify-admin-columns' === $_GET['page'] ) {
241 wp_enqueue_style( 'wp-adminify-admin-columns' );
242
243 // wp_enqueue_script('jquery');
244 // wp_enqueue_script('jquery-ui-core');
245 // wp_enqueue_script('jquery-ui-slider');
246
247 $adminify_columns_data = [
248 'ajax_nonce' => wp_create_nonce( 'adminify-admin-columns-secirity' ),
249 'ajax_action' => 'adminify_admin_columns',
250 'ajaxurl' => admin_url( 'admin-ajax.php' ),
251 'adminurl' => admin_url(),
252 'siteurl' => home_url(),
253 'is_pro' => wp_validate_boolean( jltwp_adminify()->can_use_premium_code__premium_only() ),
254 'pro_notice' => Utils::adminify_upgrade_pro(),
255 ];
256
257 wp_localize_script( 'wp-adminify-admin-columns', 'adminify_columns_data', $adminify_columns_data );
258 wp_enqueue_script( 'wp-adminify-admin-columns' );
259 }
260 }
261
262 public static function get_acf_fields( $post_type ) {
263 $fields = [];
264
265 if ( function_exists( 'acf_get_field_groups' ) ) {
266 $groups = acf_get_field_groups( [ 'post_type' => $post_type ] );
267 $groups = wp_list_pluck( $groups, 'key' );
268
269 foreach ( $groups as $group_key ) {
270 $_fields = wp_list_pluck( acf_get_fields( $group_key ), 'label', 'name' );
271 $fields = array_merge( $fields, $_fields );
272 }
273 }
274
275 return $fields;
276 }
277
278 public static function get_pods_fields( $post_type ) {
279 $fields = [];
280
281 if ( function_exists( 'pods_api' ) ) {
282 $api = pods_api();
283 $pods = $api->load_pods(
284 [
285 'object' => $post_type,
286 'fields' => false,
287 'return_type' => 'ids',
288 ]
289 );
290
291 foreach ( $pods as $pod_id ) {
292 $pod_fields = $api->load_pod( [ 'id' => $pod_id ], false )->get_fields();
293 foreach ( $pod_fields as $pod_field => $pod_field_arg ) {
294 $fields[ $pod_field ] = $pod_field_arg['label'];
295 }
296 }
297 }
298
299 return $fields;
300 }
301
302
303 public function jltwp_adminify_admin_columns_contents() {
304
305 ?>
306
307 <div class="wrap">
308 <div class="wp-adminify--admin-columns--editor--container">
309 <div class="wp-adminify--admin-columns--editor--settings mt-6">
310 <div id="wpadminify-admin-columns"></div>
311 </div>
312 </div>
313 </div>
314
315 <?php
316 }
317 }
318