Issues (1223)

classes/class-lsx-team-admin.php (6 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();
0 ignored issues
show
Bug Best Practice introduced by
The property settings does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
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();
0 ignored issues
show
Bug Best Practice introduced by
The property settings_theme does not exist. Although not strictly required by PHP, it is generally a best practice to declare properties explicitly.
Loading history...
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 ) {
0 ignored issues
show
Expected 0 spaces after opening bracket; 1 found
Loading history...
Expected 0 spaces before closing bracket; 1 found
Loading history...
127
			$users = get_users( array(
0 ignored issues
show
The opening parenthesis of a multi-line function call should be the last content on the line.
Loading history...
128
				'role__in' => array( 'administrator', 'editor', 'author' ),
129
			) );
0 ignored issues
show
For multi-line function calls, the closing parenthesis should be on a new line.

If a function call spawns multiple lines, the coding standard suggests to move the closing parenthesis to a new line:

someFunctionCall(
    $firstArgument,
    $secondArgument,
    $thirdArgument
); // Closing parenthesis on a new line.
Loading history...
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();
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