Issues (1223)

classes/class-lsx-team-admin.php (7 issues)

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,
0 ignored issues
show
Array double arrow not aligned correctly; expected 7 space(s) between "'show_in_rest'" and double arrow, but found 10.
Loading history...
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,
0 ignored issues
show
Array double arrow not aligned correctly; expected 6 space(s) between "'show_in_rest'" and double arrow, but found 10.
Loading history...
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;
0 ignored issues
show
Array keys must be surrounded by spaces unless they contain a string or an integer.
Loading history...
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 ) ) {
0 ignored issues
show
Not using strict comparison for in_array; supply true for third argument.
Loading history...
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 ) ) {
0 ignored issues
show
Not using strict comparison for in_array; supply true for third argument.
Loading history...
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();
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 );
0 ignored issues
show
In footer ($in_footer) is not set explicitly wp_enqueue_script; It is recommended to load scripts in the footer. Please set this value to true to load it in the footer, or explicitly false if it should be loaded in the header.
Loading history...
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'] ) ) {
0 ignored issues
show
Processing form data without nonce verification.
Loading history...
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