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

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