1 | <?php |
||
2 | /** |
||
3 | * LSX Team Admin Class |
||
4 | * |
||
5 | * @package LSX Team |
||
6 | * @author LightSpeed |
||
7 | * @license GPL3 |
||
8 | * @link |
||
9 | * @copyright 2018 LightSpeed |
||
10 | */ |
||
11 | |||
12 | class LSX_Team_Admin { |
||
13 | |||
14 | public function __construct() { |
||
15 | $this->load_classes(); |
||
16 | |||
17 | add_action( 'init', array( $this, 'post_type_setup' ) ); |
||
18 | add_action( 'init', array( $this, 'taxonomy_setup' ) ); |
||
19 | |||
20 | add_action( 'cmb2_admin_init', array( $this, 'details_metabox' ) ); |
||
21 | add_action( 'cmb2_admin_init', array( $this, 'projects_details_metabox' ) ); |
||
22 | add_action( 'cmb2_admin_init', array( $this, 'services_details_metabox' ) ); |
||
23 | add_action( 'cmb2_admin_init', array( $this, 'testimonials_details_metabox' ) ); |
||
24 | |||
25 | add_action( 'admin_enqueue_scripts', array( $this, 'assets' ) ); |
||
26 | |||
27 | add_filter( 'type_url_form_media', array( $this, 'change_attachment_field_button' ), 20, 1 ); |
||
28 | add_filter( 'enter_title_here', array( $this, 'change_title_text' ) ); |
||
29 | } |
||
30 | |||
31 | /** |
||
32 | * Loads the admin subclasses |
||
33 | */ |
||
34 | private function load_classes() { |
||
35 | require_once LSX_TEAM_PATH . 'classes/admin/class-settings.php'; |
||
36 | $this->settings = \lsx\team\classes\admin\Settings::get_instance(); |
||
37 | |||
38 | require_once LSX_TEAM_PATH . 'classes/admin/class-settings-theme.php'; |
||
39 | $this->settings_theme = \lsx\team\classes\admin\Settings_Theme::get_instance(); |
||
40 | } |
||
41 | |||
42 | public function post_type_setup() { |
||
43 | $labels = array( |
||
44 | 'name' => esc_html_x( 'Team Members', 'post type general name', 'lsx-team' ), |
||
45 | 'singular_name' => esc_html_x( 'Team Member', 'post type singular name', 'lsx-team' ), |
||
46 | 'add_new' => esc_html_x( 'Add New', 'post type general name', 'lsx-team' ), |
||
47 | 'add_new_item' => esc_html__( 'Add New Team Member', 'lsx-team' ), |
||
48 | 'edit_item' => esc_html__( 'Edit Team Member', 'lsx-team' ), |
||
49 | 'new_item' => esc_html__( 'New Team Member', 'lsx-team' ), |
||
50 | 'all_items' => esc_html__( 'All Team Members', 'lsx-team' ), |
||
51 | 'view_item' => esc_html__( 'View Team Member', 'lsx-team' ), |
||
52 | 'search_items' => esc_html__( 'Search Team Members', 'lsx-team' ), |
||
53 | 'not_found' => esc_html__( 'No team members found', 'lsx-team' ), |
||
54 | 'not_found_in_trash' => esc_html__( 'No team members found in Trash', 'lsx-team' ), |
||
55 | 'parent_item_colon' => '', |
||
56 | 'menu_name' => esc_html_x( 'Team Members', 'admin menu', 'lsx-team' ), |
||
57 | ); |
||
58 | |||
59 | $args = array( |
||
60 | 'labels' => $labels, |
||
61 | 'public' => true, |
||
62 | 'publicly_queryable' => true, |
||
63 | 'show_ui' => true, |
||
64 | 'show_in_menu' => true, |
||
65 | 'menu_icon' => 'dashicons-groups', |
||
66 | 'query_var' => true, |
||
67 | 'rewrite' => array( |
||
68 | 'slug' => 'team', |
||
69 | ), |
||
70 | 'capability_type' => 'post', |
||
71 | 'has_archive' => 'team', |
||
72 | 'hierarchical' => false, |
||
73 | 'menu_position' => null, |
||
74 | 'supports' => array( |
||
75 | 'title', |
||
76 | 'editor', |
||
77 | 'excerpt', |
||
78 | 'thumbnail', |
||
79 | 'custom-fields', |
||
80 | ), |
||
81 | 'show_in_rest' => true, |
||
82 | ); |
||
83 | |||
84 | register_post_type( 'team', $args ); |
||
85 | } |
||
86 | |||
87 | public function taxonomy_setup() { |
||
88 | $labels = array( |
||
89 | 'name' => esc_html_x( 'Roles', 'taxonomy general name', 'lsx-team' ), |
||
90 | 'singular_name' => esc_html_x( 'Role', 'taxonomy singular name', 'lsx-team' ), |
||
91 | 'search_items' => esc_html__( 'Search Roles', 'lsx-team' ), |
||
92 | 'all_items' => esc_html__( 'All Roles', 'lsx-team' ), |
||
93 | 'parent_item' => esc_html__( 'Parent Role', 'lsx-team' ), |
||
94 | 'parent_item_colon' => esc_html__( 'Parent Role:', 'lsx-team' ), |
||
95 | 'edit_item' => esc_html__( 'Edit Role', 'lsx-team' ), |
||
96 | 'update_item' => esc_html__( 'Update Role', 'lsx-team' ), |
||
97 | 'add_new_item' => esc_html__( 'Add New Role', 'lsx-team' ), |
||
98 | 'new_item_name' => esc_html__( 'New Role Name', 'lsx-team' ), |
||
99 | 'menu_name' => esc_html__( 'Roles', 'lsx-team' ), |
||
100 | ); |
||
101 | |||
102 | $args = array( |
||
103 | 'hierarchical' => true, |
||
104 | 'labels' => $labels, |
||
105 | 'show_ui' => true, |
||
106 | 'show_admin_column' => true, |
||
107 | 'query_var' => true, |
||
108 | 'rewrite' => array( |
||
109 | 'slug' => 'team-role', |
||
110 | ), |
||
111 | 'show_in_rest' => true, |
||
112 | ); |
||
113 | |||
114 | register_taxonomy( 'team_role', array( 'team' ), $args ); |
||
115 | } |
||
116 | |||
117 | /** |
||
118 | * Define the metabox and field configurations. |
||
119 | */ |
||
120 | public function details_metabox() { |
||
121 | |||
122 | $prefix = 'lsx_'; |
||
123 | |||
124 | $users = get_transient( 'lsx_team_users' ); |
||
125 | |||
126 | if ( false === $users || '' === $users ) { |
||
127 | $users = get_users( array( |
||
128 | 'role__in' => array( 'administrator', 'editor', 'author' ), |
||
129 | ) ); |
||
130 | set_transient( 'lsx_team_users', $users, 5 * 60 ); |
||
131 | } |
||
132 | |||
133 | foreach ( $users as $user ) { |
||
134 | $user_array[$user->ID] = $user->user_login; |
||
135 | } |
||
136 | |||
137 | $cmb = new_cmb2_box( |
||
138 | array( |
||
139 | 'id' => $prefix . '_team', |
||
140 | 'title' => esc_html__( 'Team Member Details', 'lsx-team' ), |
||
141 | 'object_types' => 'team', |
||
142 | 'context' => 'normal', |
||
143 | 'priority' => 'low', |
||
144 | 'show_names' => true, |
||
145 | ) |
||
146 | ); |
||
147 | |||
148 | $cmb->add_field( |
||
149 | array( |
||
150 | 'name' => esc_html__( 'Featured:', 'lsx-team' ), |
||
151 | 'id' => $prefix . 'featured', |
||
152 | 'type' => 'checkbox', |
||
153 | 'value' => 1, |
||
154 | 'default' => 0, |
||
155 | 'show_in_rest' => true, |
||
156 | ) |
||
157 | ); |
||
158 | |||
159 | $cmb->add_field( |
||
160 | array( |
||
161 | 'name' => esc_html__( 'Site User', 'lsx-team' ), |
||
162 | 'id' => $prefix . 'site_user', |
||
163 | 'allow_none' => true, |
||
164 | 'type' => 'select', |
||
165 | 'options' => $user_array, |
||
166 | 'show_in_rest' => true, |
||
167 | ) |
||
168 | ); |
||
169 | |||
170 | $cmb->add_field( |
||
171 | array( |
||
172 | 'name' => esc_html__( 'Job Title:', 'lsx-team' ), |
||
173 | 'id' => $prefix . 'job_title', |
||
174 | 'type' => 'text', |
||
175 | 'show_in_rest' => true, |
||
176 | ) |
||
177 | ); |
||
178 | |||
179 | $cmb->add_field( |
||
180 | array( |
||
181 | 'name' => esc_html__( 'Location:', 'lsx-team' ), |
||
182 | 'id' => $prefix . 'location', |
||
183 | 'type' => 'text', |
||
184 | 'show_in_rest' => true, |
||
185 | ) |
||
186 | ); |
||
187 | |||
188 | $cmb->add_field( |
||
189 | array( |
||
190 | 'name' => esc_html__( 'Contact Email Address:', 'lsx-team' ), |
||
191 | 'id' => $prefix . 'email_contact', |
||
192 | 'type' => 'text', |
||
193 | 'show_in_rest' => true, |
||
194 | ) |
||
195 | ); |
||
196 | |||
197 | $cmb->add_field( |
||
198 | array( |
||
199 | 'name' => esc_html__( 'Gravatar Email Address:', 'lsx-team' ), |
||
200 | 'desc' => esc_html__( 'Used for Gravatar if a featured image is not set', 'lsx-team' ), |
||
201 | 'id' => $prefix . 'email_gravatar', |
||
202 | 'type' => 'text', |
||
203 | 'show_in_rest' => true, |
||
204 | ) |
||
205 | ); |
||
206 | |||
207 | $cmb->add_field( |
||
208 | array( |
||
209 | 'name' => esc_html__( 'Telephone Number:', 'lsx-team' ), |
||
210 | 'id' => $prefix . 'tel', |
||
211 | 'type' => 'text', |
||
212 | 'show_in_rest' => true, |
||
213 | ) |
||
214 | ); |
||
215 | |||
216 | $cmb->add_field( |
||
217 | array( |
||
218 | 'name' => esc_html__( 'Skype Name:', 'lsx-team' ), |
||
219 | 'id' => $prefix . 'skype', |
||
220 | 'type' => 'text', |
||
221 | 'show_in_rest' => true, |
||
222 | ) |
||
223 | ); |
||
224 | |||
225 | $cmb->add_field( |
||
226 | array( |
||
227 | 'name' => esc_html__( 'Facebook URL', 'lsx-team' ), |
||
228 | 'id' => $prefix . 'facebook', |
||
229 | 'type' => 'text_url', |
||
230 | 'show_in_rest' => true, |
||
231 | ) |
||
232 | ); |
||
233 | |||
234 | $cmb->add_field( |
||
235 | array( |
||
236 | 'name' => esc_html__( 'Twitter URL', 'lsx-team' ), |
||
237 | 'id' => $prefix . 'twitter', |
||
238 | 'type' => 'text_url', |
||
239 | 'show_in_rest' => true, |
||
240 | ) |
||
241 | ); |
||
242 | |||
243 | $cmb->add_field( |
||
244 | array( |
||
245 | 'name' => esc_html__( 'LinkedIn URL', 'lsx-team' ), |
||
246 | 'id' => $prefix . 'linkedin', |
||
247 | 'type' => 'text_url', |
||
248 | 'show_in_rest' => true, |
||
249 | ) |
||
250 | ); |
||
251 | |||
252 | $cmb->add_field( |
||
253 | array( |
||
254 | 'name' => esc_html__( 'Github URL', 'lsx-team' ), |
||
255 | 'id' => $prefix . 'github', |
||
256 | 'type' => 'text_url', |
||
257 | 'show_in_rest' => true, |
||
258 | ) |
||
259 | ); |
||
260 | |||
261 | $cmb->add_field( |
||
262 | array( |
||
263 | 'name' => esc_html__( 'WordPress URL', 'lsx-team' ), |
||
264 | 'id' => $prefix . 'wordpress', |
||
265 | 'type' => 'text_url', |
||
266 | 'show_in_rest' => true, |
||
267 | ) |
||
268 | ); |
||
269 | } |
||
270 | |||
271 | /** |
||
272 | * Define the metabox and field configurations. |
||
273 | */ |
||
274 | public function projects_details_metabox() { |
||
275 | |||
276 | if ( class_exists( 'LSX_Projects' ) ) { |
||
277 | |||
278 | $prefix = 'lsx_'; |
||
279 | |||
280 | $cmb = new_cmb2_box( |
||
281 | array( |
||
282 | 'id' => $prefix . '_team', |
||
283 | 'context' => 'normal', |
||
284 | 'priority' => 'low', |
||
285 | 'show_names' => true, |
||
286 | 'object_types' => array( 'team' ), |
||
287 | ) |
||
288 | ); |
||
289 | $cmb->add_field( |
||
290 | array( |
||
291 | 'name' => __( 'Projects:', 'lsx-team' ), |
||
292 | 'id' => 'project_to_team', |
||
293 | 'type' => 'post_search_ajax', |
||
294 | 'limit' => 15, |
||
295 | 'sortable' => true, |
||
296 | 'query_args' => array( |
||
297 | 'post_type' => array( 'project' ), |
||
298 | 'post_status' => array( 'publish' ), |
||
299 | 'posts_per_page' => -1, |
||
300 | ), |
||
301 | ) |
||
302 | ); |
||
303 | } |
||
304 | } |
||
305 | |||
306 | /** |
||
307 | * Define the metabox and field configurations. |
||
308 | */ |
||
309 | public function services_details_metabox() { |
||
310 | |||
311 | if ( class_exists( 'LSX_Services' ) ) { |
||
312 | |||
313 | $prefix = 'lsx_'; |
||
314 | |||
315 | $cmb = new_cmb2_box( |
||
316 | array( |
||
317 | 'id' => $prefix . '_team', |
||
318 | 'context' => 'normal', |
||
319 | 'priority' => 'low', |
||
320 | 'show_names' => true, |
||
321 | 'object_types' => array( 'team' ), |
||
322 | ) |
||
323 | ); |
||
324 | $cmb->add_field( |
||
325 | array( |
||
326 | 'name' => __( 'Services:', 'lsx-team' ), |
||
327 | 'id' => 'service_to_team', |
||
328 | 'type' => 'post_search_ajax', |
||
329 | 'limit' => 15, |
||
330 | 'sortable' => true, |
||
331 | 'query_args' => array( |
||
332 | 'post_type' => array( 'service' ), |
||
333 | 'post_status' => array( 'publish' ), |
||
334 | 'posts_per_page' => -1, |
||
335 | ), |
||
336 | ) |
||
337 | ); |
||
338 | } |
||
339 | } |
||
340 | |||
341 | /** |
||
342 | * Define the metabox and field configurations. |
||
343 | */ |
||
344 | public function testimonials_details_metabox() { |
||
345 | |||
346 | if ( class_exists( 'LSX_Testimonials' ) ) { |
||
347 | |||
348 | $prefix = 'lsx_'; |
||
349 | |||
350 | $cmb = new_cmb2_box( |
||
351 | array( |
||
352 | 'id' => $prefix . '_team', |
||
353 | 'context' => 'normal', |
||
354 | 'priority' => 'low', |
||
355 | 'show_names' => true, |
||
356 | 'object_types' => array( 'team' ), |
||
357 | ) |
||
358 | ); |
||
359 | $cmb->add_field( |
||
360 | array( |
||
361 | 'name' => __( 'Testimonials:', 'lsx-team' ), |
||
362 | 'id' => 'testimonial_to_team', |
||
363 | 'type' => 'post_search_ajax', |
||
364 | 'limit' => 15, |
||
365 | 'sortable' => true, |
||
366 | 'query_args' => array( |
||
367 | 'post_type' => array( 'testimonial' ), |
||
368 | 'post_status' => array( 'publish' ), |
||
369 | 'posts_per_page' => -1, |
||
370 | ), |
||
371 | ) |
||
372 | ); |
||
373 | } |
||
374 | |||
375 | } |
||
376 | |||
377 | /** |
||
378 | * Sets up the "post relations". |
||
379 | */ |
||
380 | public function post_relations( $post_id, $field, $value ) { |
||
381 | $connections = array( |
||
382 | 'team_to_testimonial', |
||
383 | 'testimonial_to_team', |
||
384 | |||
385 | 'team_to_project', |
||
386 | 'project_to_team', |
||
387 | |||
388 | 'team_to_service', |
||
389 | 'service_to_team', |
||
390 | ); |
||
391 | |||
392 | if ( in_array( $field['id'], $connections ) ) { |
||
393 | $this->save_related_post( $connections, $post_id, $field, $value ); |
||
394 | } |
||
395 | } |
||
396 | |||
397 | /** |
||
398 | * Save the reverse post relation. |
||
399 | */ |
||
400 | public function save_related_post( $connections, $post_id, $field, $value ) { |
||
401 | $ids = explode( '_to_', $field['id'] ); |
||
402 | $relation = $ids[1] . '_to_' . $ids[0]; |
||
403 | |||
404 | if ( in_array( $relation, $connections ) ) { |
||
405 | $previous_values = get_post_meta( $post_id, $field['id'], false ); |
||
406 | |||
407 | if ( ! empty( $previous_values ) ) { |
||
408 | foreach ( $previous_values as $v ) { |
||
409 | delete_post_meta( $v, $relation, $post_id ); |
||
410 | } |
||
411 | } |
||
412 | |||
413 | if ( is_array( $value ) ) { |
||
414 | foreach ( $value as $v ) { |
||
415 | if ( ! empty( $v ) ) { |
||
416 | add_post_meta( $v, $relation, $post_id ); |
||
417 | } |
||
418 | } |
||
419 | } |
||
420 | } |
||
421 | } |
||
422 | |||
423 | public function assets() { |
||
424 | //wp_enqueue_media(); |
||
0 ignored issues
–
show
|
|||
425 | wp_enqueue_script( 'media-upload' ); |
||
426 | wp_enqueue_script( 'thickbox' ); |
||
427 | wp_enqueue_style( 'thickbox' ); |
||
428 | |||
429 | wp_enqueue_script( 'lsx-team-admin', LSX_TEAM_URL . 'assets/js/lsx-team-admin.min.js', array( 'jquery' ), LSX_TEAM_VER ); |
||
430 | wp_enqueue_style( 'lsx-team-admin', LSX_TEAM_URL . 'assets/css/lsx-team-admin.css', array(), LSX_TEAM_VER ); |
||
431 | } |
||
432 | |||
433 | /** |
||
434 | * Change the "Insert into Post" button text when media modal is used for feature images |
||
435 | */ |
||
436 | public function change_attachment_field_button( $html ) { |
||
437 | if ( isset( $_GET['feature_image_text_button'] ) ) { |
||
438 | $html = str_replace( 'value="Insert into Post"', sprintf( 'value="%s"', esc_html__( 'Select featured image', 'lsx-team' ) ), $html ); |
||
439 | } |
||
440 | |||
441 | return $html; |
||
442 | } |
||
443 | |||
444 | public function change_title_text( $title ) { |
||
445 | $screen = get_current_screen(); |
||
446 | |||
447 | if ( 'team' === $screen->post_type ) { |
||
448 | $title = esc_attr__( 'Enter team member name', 'lsx-team' ); |
||
449 | } |
||
450 | |||
451 | return $title; |
||
452 | } |
||
453 | } |
||
454 | |||
455 | $lsx_team_admin = new LSX_Team_Admin(); |
||
456 |
Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.
The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.
This check looks for comments that seem to be mostly valid code and reports them.