Issues (1223)

classes/class-lsx-team-admin.php (1 issue)

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
Unused Code Comprehensibility introduced by
75% of this comment could be valid code. Did you maybe forget this after debugging?

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.

Loading history...
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