Passed
Push — dependabot/github_actions/acti... ( 6cba9a )
by
unknown
10:14
created
includes/functions.php 1 patch
Indentation   +54 added lines, -54 removed lines patch added patch discarded remove patch
@@ -13,7 +13,7 @@  discard block
 block discarded – undo
13 13
  * Add our action to init to set up our vars first.
14 14
  */
15 15
 function lsx_projects_load_plugin_textdomain() {
16
-	load_plugin_textdomain( 'lsx-projects', false, basename( LSX_PROJECTS_PATH ) . '/languages' );
16
+     load_plugin_textdomain( 'lsx-projects', false, basename( LSX_PROJECTS_PATH ) . '/languages' );
17 17
 }
18 18
 add_action( 'init', 'lsx_projects_load_plugin_textdomain' );
19 19
 
@@ -21,16 +21,16 @@  discard block
 block discarded – undo
21 21
  * Wraps the output class in a function to be called in templates
22 22
  */
23 23
 function lsx_projects( $args ) {
24
-	$lsx_projects = new LSX_Projects;
25
-	echo wp_kses_post( $lsx_projects->output( $args ) );
24
+     $lsx_projects = new LSX_Projects;
25
+     echo wp_kses_post( $lsx_projects->output( $args ) );
26 26
 }
27 27
 
28 28
 /**
29 29
  * Shortcode
30 30
  */
31 31
 function lsx_projects_shortcode( $atts ) {
32
-	$lsx_projects = new LSX_Projects;
33
-	return $lsx_projects->output( $atts );
32
+     $lsx_projects = new LSX_Projects;
33
+     return $lsx_projects->output( $atts );
34 34
 }
35 35
 add_shortcode( 'lsx_projects', 'lsx_projects_shortcode' );
36 36
 
@@ -38,23 +38,23 @@  discard block
 block discarded – undo
38 38
  * Wraps the output class in a function to be called in templates
39 39
  */
40 40
 function lsx_groups_list() {
41
-	do_action( 'lsx_groups_list' );
41
+     do_action( 'lsx_groups_list' );
42 42
 }
43 43
 
44 44
 function lsx_child_group_list() {
45
-	do_action( 'lsx_child_group_list' );
45
+     do_action( 'lsx_child_group_list' );
46 46
 }
47 47
 
48 48
 function lsx_projects_list() {
49
-	do_action( 'lsx_projects_list' );
49
+     do_action( 'lsx_projects_list' );
50 50
 }
51 51
 
52 52
 function lsx_projects_sidebar() {
53
-	do_action( 'lsx_projects_sidebar' );
53
+     do_action( 'lsx_projects_sidebar' );
54 54
 }
55 55
 
56 56
 function lsx_projects_single_tag() {
57
-	do_action( 'lsx_projects_single_tag' );
57
+     do_action( 'lsx_projects_single_tag' );
58 58
 }
59 59
 
60 60
 /**
@@ -65,23 +65,23 @@  discard block
 block discarded – undo
65 65
  * @return mixed           Option value
66 66
  */
67 67
 function projects_get_options() {
68
-	$options = array();
69
-	if ( function_exists( 'tour_operator' ) ) {
70
-		$options = get_option( '_lsx-to_settings', false );
71
-	} else {
72
-		$options = get_option( '_lsx_settings', false );
73
-
74
-		if ( false === $options ) {
75
-			$options = get_option( '_lsx_lsx-settings', false );
76
-		}
77
-	}
78
-
79
-	// If there are new CMB2 options available, then use those.
80
-	$new_options = get_option( 'lsx_projects_options', false );
81
-	if ( false !== $new_options ) {
82
-		$options['display'] = $new_options;
83
-	}
84
-	return $options;
68
+     $options = array();
69
+     if ( function_exists( 'tour_operator' ) ) {
70
+          $options = get_option( '_lsx-to_settings', false );
71
+     } else {
72
+          $options = get_option( '_lsx_settings', false );
73
+
74
+          if ( false === $options ) {
75
+               $options = get_option( '_lsx_lsx-settings', false );
76
+          }
77
+     }
78
+
79
+     // If there are new CMB2 options available, then use those.
80
+     $new_options = get_option( 'lsx_projects_options', false );
81
+     if ( false !== $new_options ) {
82
+          $options['display'] = $new_options;
83
+     }
84
+     return $options;
85 85
 }
86 86
 
87 87
 /**
@@ -92,28 +92,28 @@  discard block
 block discarded – undo
92 92
  * @return mixed           Option value
93 93
  */
94 94
 function projects_get_option( $key = '', $default = false ) {
95
-	$options = array();
96
-	$value   = $default;
97
-	if ( function_exists( 'tour_operator' ) ) {
98
-		$options = get_option( '_lsx-to_settings', false );
99
-	} else {
100
-		$options = get_option( '_lsx_settings', false );
101
-
102
-		if ( false === $options ) {
103
-			$options = get_option( '_lsx_lsx-settings', false );
104
-		}
105
-	}
106
-
107
-	// If there are new CMB2 options available, then use those.
108
-	$new_options = get_option( 'lsx_projects_options', false );
109
-	if ( false !== $new_options ) {
110
-		$options['display'] = $new_options;
111
-	}
112
-
113
-	if ( isset( $options['display'] ) && isset( $options['display'][ $key ] ) ) {
114
-		$value = $options['display'][ $key ];
115
-	}
116
-	return $value;
95
+     $options = array();
96
+     $value   = $default;
97
+     if ( function_exists( 'tour_operator' ) ) {
98
+          $options = get_option( '_lsx-to_settings', false );
99
+     } else {
100
+          $options = get_option( '_lsx_settings', false );
101
+
102
+          if ( false === $options ) {
103
+               $options = get_option( '_lsx_lsx-settings', false );
104
+          }
105
+     }
106
+
107
+     // If there are new CMB2 options available, then use those.
108
+     $new_options = get_option( 'lsx_projects_options', false );
109
+     if ( false !== $new_options ) {
110
+          $options['display'] = $new_options;
111
+     }
112
+
113
+     if ( isset( $options['display'] ) && isset( $options['display'][ $key ] ) ) {
114
+          $value = $options['display'][ $key ];
115
+     }
116
+     return $value;
117 117
 }
118 118
 
119 119
 
@@ -124,10 +124,10 @@  discard block
 block discarded – undo
124 124
  * @return void
125 125
  */
126 126
 function portfolio_modify_archive_title( $title ) {
127
-	if ( ! is_post_type_archive( 'project' ) ) {
128
-		return $title;
129
-	}
130
-	$title = __( 'Portfolio', 'lsx' );
131
-	return $title;
127
+     if ( ! is_post_type_archive( 'project' ) ) {
128
+          return $title;
129
+     }
130
+     $title = __( 'Portfolio', 'lsx' );
131
+     return $title;
132 132
 }
133 133
 add_filter( 'get_the_archive_title', 'portfolio_modify_archive_title', 10, 1 );
Please login to merge, or discard this patch.
templates/content-single-projects.php 1 patch
Indentation   +192 added lines, -192 removed lines patch added patch discarded remove patch
@@ -15,39 +15,39 @@  discard block
 block discarded – undo
15 15
 $button_cf_id = '';
16 16
 
17 17
 if ( ! empty( projects_get_option( 'projects_modal_enable' ) ) ) {
18
-	if ( ! empty( projects_get_option( 'projects_modal_cta_label' ) ) && ! empty( projects_get_option( 'projects_modal_form_id' ) ) ) {
19
-		$button_label = projects_get_option( 'projects_modal_cta_label' );
20
-		$button_cf_id = projects_get_option( 'projects_modal_form_id' );
21
-	}
18
+     if ( ! empty( projects_get_option( 'projects_modal_cta_label' ) ) && ! empty( projects_get_option( 'projects_modal_form_id' ) ) ) {
19
+          $button_label = projects_get_option( 'projects_modal_cta_label' );
20
+          $button_cf_id = projects_get_option( 'projects_modal_form_id' );
21
+     }
22 22
 }
23 23
 
24 24
 if ( ! empty( $client_logo ) ) {
25
-	$client_logo = '<img src="' . $client_logo . '">';
25
+     $client_logo = '<img src="' . $client_logo . '">';
26 26
 }
27 27
 
28 28
 $groups = '';
29 29
 $terms  = get_the_terms( get_the_ID(), 'project-group' );
30 30
 
31 31
 if ( $terms && ! is_wp_error( $terms ) ) {
32
-	$groups = array();
32
+     $groups = array();
33 33
 
34
-	foreach ( $terms as $term ) {
35
-		$groups[] = '<a href="' . get_term_link( $term ) . '">' . $term->name . '</a>';
36
-	}
34
+     foreach ( $terms as $term ) {
35
+          $groups[] = '<a href="' . get_term_link( $term ) . '">' . $term->name . '</a>';
36
+     }
37 37
 
38
-	$groups = join( ', ', $groups );
38
+     $groups = join( ', ', $groups );
39 39
 }
40 40
 
41 41
 $product_groups = '';
42 42
 $product_terms = get_post_meta( get_the_ID(), 'lsx_project__alt_products', false );
43 43
 
44 44
 if ( $product_terms && ! is_wp_error( $product_terms ) ) {
45
-	$product_groups = array();
46
-	foreach ( $product_terms[0] as $product_term ) {
47
-		$product_groups[] = '<a href="' . $product_term['lsx_project_alt_product_link'] . '">' . $product_term['lsx_project_alt_product_title'] . '</a>';
48
-	}
45
+     $product_groups = array();
46
+     foreach ( $product_terms[0] as $product_term ) {
47
+          $product_groups[] = '<a href="' . $product_term['lsx_project_alt_product_link'] . '">' . $product_term['lsx_project_alt_product_title'] . '</a>';
48
+     }
49 49
 
50
-	$product_groups = join( ', ', $product_groups );
50
+     $product_groups = join( ', ', $product_groups );
51 51
 }
52 52
 
53 53
 
@@ -55,83 +55,83 @@  discard block
 block discarded – undo
55 55
 // Connection Projects.
56 56
 
57 57
 if ( post_type_exists( 'project' ) && $terms && ! is_wp_error( $terms ) ) {
58
-	$groups_ = array();
59
-
60
-	foreach ( $terms as $term ) {
61
-		$groups_[] = $term->term_id;
62
-	}
63
-
64
-	if ( count( $groups_ ) > 0 ) {
65
-		$connection_project['post_type'] = 'project';
66
-		$connection_project['title']     = esc_html__( 'Related Projects', 'lsx-projects' );
67
-		$connection_project['posts']     = array();
68
-
69
-		$args = array(
70
-			'post_type'              => 'project',
71
-			'post__not_in'           => array( get_the_ID() ),
72
-			'no_found_rows'          => true,
73
-			'ignore_sticky_posts'    => 1,
74
-			'update_post_meta_cache' => false,
75
-			'tax_query' => array(
76
-				array(
77
-					'taxonomy' => 'project-group',
78
-					'terms'    => $groups_,
79
-				),
80
-			),
81
-		);
82
-
83
-		$projects_ = new \WP_Query( $args );
84
-
85
-		if ( $projects_->have_posts() ) {
86
-			while ( $projects_->have_posts() ) {
87
-				$projects_->the_post();
88
-				$connection_project['posts'][] = get_the_ID();
89
-				wp_reset_postdata();
90
-			}
91
-		}
92
-
93
-		if ( ! empty( $connection_project['posts'] ) ) {
94
-			$post_ids = join( ',', $connection_project['posts'] );
95
-			$connection_project['shortcode'] = '[lsx_projects columns="3" include="' . $post_ids . '"]';
96
-			$connections[] = $connection_project;
97
-		}
98
-	}
58
+     $groups_ = array();
59
+
60
+     foreach ( $terms as $term ) {
61
+          $groups_[] = $term->term_id;
62
+     }
63
+
64
+     if ( count( $groups_ ) > 0 ) {
65
+          $connection_project['post_type'] = 'project';
66
+          $connection_project['title']     = esc_html__( 'Related Projects', 'lsx-projects' );
67
+          $connection_project['posts']     = array();
68
+
69
+          $args = array(
70
+               'post_type'              => 'project',
71
+               'post__not_in'           => array( get_the_ID() ),
72
+               'no_found_rows'          => true,
73
+               'ignore_sticky_posts'    => 1,
74
+               'update_post_meta_cache' => false,
75
+               'tax_query' => array(
76
+                    array(
77
+                         'taxonomy' => 'project-group',
78
+                         'terms'    => $groups_,
79
+                    ),
80
+               ),
81
+          );
82
+
83
+          $projects_ = new \WP_Query( $args );
84
+
85
+          if ( $projects_->have_posts() ) {
86
+               while ( $projects_->have_posts() ) {
87
+                    $projects_->the_post();
88
+                    $connection_project['posts'][] = get_the_ID();
89
+                    wp_reset_postdata();
90
+               }
91
+          }
92
+
93
+          if ( ! empty( $connection_project['posts'] ) ) {
94
+               $post_ids = join( ',', $connection_project['posts'] );
95
+               $connection_project['shortcode'] = '[lsx_projects columns="3" include="' . $post_ids . '"]';
96
+               $connections[] = $connection_project;
97
+          }
98
+     }
99 99
 }
100 100
 
101 101
 // Connection Products.
102 102
 if ( class_exists( 'WooCommerce' ) ) {
103
-	$connection_product['post_type'] = 'product';
104
-	$connection_product['title'] = esc_html__( 'Related Products', 'lsx-projects' ) . ' <small>' . esc_html__( 'Products used to build this project', 'lsx-projects' ) . '</small>';
105
-	$connection_product['posts'] = get_post_meta( get_the_ID(), 'product_to_project', false );
106
-
107
-	if ( ! empty( $connection_product['posts'] ) ) {
108
-		$connection_product['small_list_html'] = '';
109
-
110
-		$args = array(
111
-			'post_type'              => 'product',
112
-			'post__in'               => $connection_product['posts'][0],
113
-			'orderby'                => 'post__in',
114
-			'no_found_rows'          => true,
115
-			'ignore_sticky_posts'    => 1,
116
-			'update_post_term_cache' => false,
117
-			'update_post_meta_cache' => false,
118
-		);
119
-		$connection_product['posts_obj'] = new \WP_Query( $args );
120
-
121
-		if ( $connection_product['posts_obj']->have_posts() ) {
122
-			$connection_product['small_list_html'] = array();
123
-
124
-			while ( $connection_product['posts_obj']->have_posts() ) {
125
-				$connection_product['posts_obj']->the_post();
126
-				$connection_product['small_list_html'][] = '<a href="' . get_permalink() . '">' . the_title( '', '', false ) . '</a>';
127
-				wp_reset_postdata();
128
-			}
129
-
130
-			$connection_product['posts_obj']->rewind_posts();
131
-			$connection_product['small_list_html'] = join( ', ', $connection_product['small_list_html'] );
132
-		}
133
-		$connections[] = $connection_product;
134
-	}
103
+     $connection_product['post_type'] = 'product';
104
+     $connection_product['title'] = esc_html__( 'Related Products', 'lsx-projects' ) . ' <small>' . esc_html__( 'Products used to build this project', 'lsx-projects' ) . '</small>';
105
+     $connection_product['posts'] = get_post_meta( get_the_ID(), 'product_to_project', false );
106
+
107
+     if ( ! empty( $connection_product['posts'] ) ) {
108
+          $connection_product['small_list_html'] = '';
109
+
110
+          $args = array(
111
+               'post_type'              => 'product',
112
+               'post__in'               => $connection_product['posts'][0],
113
+               'orderby'                => 'post__in',
114
+               'no_found_rows'          => true,
115
+               'ignore_sticky_posts'    => 1,
116
+               'update_post_term_cache' => false,
117
+               'update_post_meta_cache' => false,
118
+          );
119
+          $connection_product['posts_obj'] = new \WP_Query( $args );
120
+
121
+          if ( $connection_product['posts_obj']->have_posts() ) {
122
+               $connection_product['small_list_html'] = array();
123
+
124
+               while ( $connection_product['posts_obj']->have_posts() ) {
125
+                    $connection_product['posts_obj']->the_post();
126
+                    $connection_product['small_list_html'][] = '<a href="' . get_permalink() . '">' . the_title( '', '', false ) . '</a>';
127
+                    wp_reset_postdata();
128
+               }
129
+
130
+               $connection_product['posts_obj']->rewind_posts();
131
+               $connection_product['small_list_html'] = join( ', ', $connection_product['small_list_html'] );
132
+          }
133
+          $connections[] = $connection_product;
134
+     }
135 135
 }
136 136
 
137 137
 // Connection Services.
@@ -139,81 +139,81 @@  discard block
 block discarded – undo
139 139
 $connection_service['pages']     = get_post_meta( get_the_ID(), 'page_to_project', false );
140 140
 
141 141
 if ( ! empty( $connection_service['pages'] ) ) {
142
-	$post_ids                              = join( ',', $connection_service['pages'] );
143
-	$connection_service['small_list_html'] = '';
144
-
145
-	$args = array(
146
-		'post_type'              => 'page',
147
-		'post__in'               => $connection_service['pages'],
148
-		'orderby'                => 'post__in',
149
-		'no_found_rows'          => true,
150
-		'ignore_sticky_posts'    => 1,
151
-		'update_post_term_cache' => false,
152
-		'update_post_meta_cache' => false,
153
-	);
154
-	$services_ = new \WP_Query( $args );
155
-
156
-	if ( $services_->have_posts() ) {
157
-		$connection_service['small_list_html'] = array();
158
-
159
-		while ( $services_->have_posts() ) {
160
-			$services_->the_post();
161
-			$connection_service['small_list_html'][] = '<a href="' . get_permalink() . '">' . the_title( '', '', false ) . '</a>';
162
-			wp_reset_postdata();
163
-		}
164
-
165
-		$connection_service['small_list_html'] = join( ', ', $connection_service['small_list_html'] );
166
-	}
167
-	$connections[] = $connection_service;
142
+     $post_ids                              = join( ',', $connection_service['pages'] );
143
+     $connection_service['small_list_html'] = '';
144
+
145
+     $args = array(
146
+          'post_type'              => 'page',
147
+          'post__in'               => $connection_service['pages'],
148
+          'orderby'                => 'post__in',
149
+          'no_found_rows'          => true,
150
+          'ignore_sticky_posts'    => 1,
151
+          'update_post_term_cache' => false,
152
+          'update_post_meta_cache' => false,
153
+     );
154
+     $services_ = new \WP_Query( $args );
155
+
156
+     if ( $services_->have_posts() ) {
157
+          $connection_service['small_list_html'] = array();
158
+
159
+          while ( $services_->have_posts() ) {
160
+               $services_->the_post();
161
+               $connection_service['small_list_html'][] = '<a href="' . get_permalink() . '">' . the_title( '', '', false ) . '</a>';
162
+               wp_reset_postdata();
163
+          }
164
+
165
+          $connection_service['small_list_html'] = join( ', ', $connection_service['small_list_html'] );
166
+     }
167
+     $connections[] = $connection_service;
168 168
 }
169 169
 
170 170
 // Connection Testimonials.
171 171
 if ( post_type_exists( 'testimonial' ) ) {
172
-	$connection_testimonial['post_type'] = 'testimonial';
173
-	$connection_testimonial['posts']     = get_post_meta( get_the_ID(), 'testimonial_to_project', false );
174
-
175
-	if ( ! empty( $connection_testimonial['posts'] ) ) {
176
-		$post_ids = join( ',', $connection_testimonial['posts'][0] );
177
-		$connection_testimonial['shortcode'] = '[lsx_testimonials columns="1" include="' . $post_ids . '" orderby="date" order="DESC"]';
178
-		$connections[] = $connection_testimonial;
179
-	}
172
+     $connection_testimonial['post_type'] = 'testimonial';
173
+     $connection_testimonial['posts']     = get_post_meta( get_the_ID(), 'testimonial_to_project', false );
174
+
175
+     if ( ! empty( $connection_testimonial['posts'] ) ) {
176
+          $post_ids = join( ',', $connection_testimonial['posts'][0] );
177
+          $connection_testimonial['shortcode'] = '[lsx_testimonials columns="1" include="' . $post_ids . '" orderby="date" order="DESC"]';
178
+          $connections[] = $connection_testimonial;
179
+     }
180 180
 }
181 181
 
182 182
 // Connection Team.
183 183
 if ( post_type_exists( 'team' ) ) {
184
-	$connection_team['post_type'] = 'team';
185
-	$connection_team['posts']     = get_post_meta( get_the_ID(), 'team_to_project', false );
186
-
187
-	if ( ! empty( $connection_team['posts'] ) ) {
188
-		$post_ids = join( ',', $connection_team['posts'][0] );
189
-		$connection_team['shortcode'] = '[lsx_team columns="4" include="' . $post_ids . '" show_social="false" show_desc="false" show_link="true"]';
190
-		$connection_team['small_list_html'] = '';
191
-
192
-		$args = array(
193
-			'post_type'              => 'team',
194
-			'post__in'               => $connection_team['posts'][0],
195
-			'orderby'                => 'post__in',
196
-			'no_found_rows'          => true,
197
-			'ignore_sticky_posts'    => 1,
198
-			'update_post_term_cache' => false,
199
-			'update_post_meta_cache' => false,
200
-		);
201
-		$team_ = new \WP_Query( $args );
202
-
203
-		if ( $team_->have_posts() ) {
204
-			global $lsx_team;
205
-			$connection_team['small_list_html'] = array();
206
-
207
-			while ( $team_->have_posts() ) {
208
-				$team_->the_post();
209
-				$connection_team['small_list_html'][] = '<a href="' . get_permalink() . '">' . $lsx_team->get_thumbnail( get_the_ID(), 'lsx-team-archive' ) . '</a>';
210
-				wp_reset_postdata();
211
-			}
212
-
213
-			$connection_team['small_list_html'] = join( ' ', $connection_team['small_list_html'] );
214
-		}
215
-		$connections[] = $connection_team;
216
-	}
184
+     $connection_team['post_type'] = 'team';
185
+     $connection_team['posts']     = get_post_meta( get_the_ID(), 'team_to_project', false );
186
+
187
+     if ( ! empty( $connection_team['posts'] ) ) {
188
+          $post_ids = join( ',', $connection_team['posts'][0] );
189
+          $connection_team['shortcode'] = '[lsx_team columns="4" include="' . $post_ids . '" show_social="false" show_desc="false" show_link="true"]';
190
+          $connection_team['small_list_html'] = '';
191
+
192
+          $args = array(
193
+               'post_type'              => 'team',
194
+               'post__in'               => $connection_team['posts'][0],
195
+               'orderby'                => 'post__in',
196
+               'no_found_rows'          => true,
197
+               'ignore_sticky_posts'    => 1,
198
+               'update_post_term_cache' => false,
199
+               'update_post_meta_cache' => false,
200
+          );
201
+          $team_ = new \WP_Query( $args );
202
+
203
+          if ( $team_->have_posts() ) {
204
+               global $lsx_team;
205
+               $connection_team['small_list_html'] = array();
206
+
207
+               while ( $team_->have_posts() ) {
208
+                    $team_->the_post();
209
+                    $connection_team['small_list_html'][] = '<a href="' . get_permalink() . '">' . $lsx_team->get_thumbnail( get_the_ID(), 'lsx-team-archive' ) . '</a>';
210
+                    wp_reset_postdata();
211
+               }
212
+
213
+               $connection_team['small_list_html'] = join( ' ', $connection_team['small_list_html'] );
214
+          }
215
+          $connections[] = $connection_team;
216
+     }
217 217
 }
218 218
 ?>
219 219
 
@@ -230,12 +230,12 @@  discard block
 block discarded – undo
230 230
 			<?php if ( count( $connections ) > 0 ) : ?>
231 231
 				<?php foreach ( $connections as $i => $connection ) : ?>
232 232
 					<?php
233
-						if ( 'testimonial' === $connection['post_type'] ) {
234
-							echo '<div class="tab-pane-fake">';
235
-							echo do_shortcode( $connection['shortcode'] );
236
-							echo '</div>';
237
-						}
238
-					?>
233
+                              if ( 'testimonial' === $connection['post_type'] ) {
234
+                                   echo '<div class="tab-pane-fake">';
235
+                                   echo do_shortcode( $connection['shortcode'] );
236
+                                   echo '</div>';
237
+                              }
238
+                         ?>
239 239
 				<?php endforeach; ?>
240 240
 			<?php endif; ?>
241 241
 		</div>
@@ -291,13 +291,13 @@  discard block
 block discarded – undo
291 291
 	<?php if ( count( $connections ) > 0 ) : ?>
292 292
 		<?php foreach ( $connections as $i => $connection ) : ?>
293 293
 			<?php
294
-			// Team is now visible on detail box.
295
-			// Services is now visible on detail box.
296
-			// Testimonials is now visible below the content.
297
-			if ( in_array( $connection['post_type'], array( 'team', 'testimonial', 'service' ) ) ) {
298
-				continue;
299
-			}
300
-			?>
294
+               // Team is now visible on detail box.
295
+               // Services is now visible on detail box.
296
+               // Testimonials is now visible below the content.
297
+               if ( in_array( $connection['post_type'], array( 'team', 'testimonial', 'service' ) ) ) {
298
+                    continue;
299
+               }
300
+               ?>
301 301
 			<?php if ( 'page' !== $connection['post_type'] ) { ?>
302 302
 				<div class="lsx-projects-section lsx-full-width">
303 303
 					<div class="row">
@@ -305,34 +305,34 @@  discard block
 block discarded – undo
305 305
 							<h3 class="lsx-title"><?php echo wp_kses_post( $connection['title'] ); ?></h3>
306 306
 
307 307
 							<?php
308
-							if ( 'product' === $connection['post_type'] ) {
309
-
310
-								if ( $connection_product['posts_obj']->have_posts() ) {
311
-									// @codingStandardsIgnoreLine
312
-									echo apply_filters( 'woocommerce_before_widget_product_list', '<ul class="product_list_widget">' );
313
-
314
-									while ( $connection_product['posts_obj']->have_posts() ) {
315
-										$connection_product['posts_obj']->the_post();
316
-										wc_get_template( 'content-widget-product.php', array(
317
-											'show_rating' => false,
318
-										) );
319
-
320
-										wp_reset_postdata();
321
-									}
322
-
323
-									// @codingStandardsIgnoreLine
324
-									echo apply_filters( 'woocommerce_after_widget_product_list', '</ul>' );
325
-								}
326
-							} else {
327
-								echo do_shortcode( $connection['shortcode'] );
328
-							}
329
-							?>
308
+                                   if ( 'product' === $connection['post_type'] ) {
309
+
310
+                                        if ( $connection_product['posts_obj']->have_posts() ) {
311
+                                             // @codingStandardsIgnoreLine
312
+                                             echo apply_filters( 'woocommerce_before_widget_product_list', '<ul class="product_list_widget">' );
313
+
314
+                                             while ( $connection_product['posts_obj']->have_posts() ) {
315
+                                                  $connection_product['posts_obj']->the_post();
316
+                                                  wc_get_template( 'content-widget-product.php', array(
317
+                                                       'show_rating' => false,
318
+                                                  ) );
319
+
320
+                                                  wp_reset_postdata();
321
+                                             }
322
+
323
+                                             // @codingStandardsIgnoreLine
324
+                                             echo apply_filters( 'woocommerce_after_widget_product_list', '</ul>' );
325
+                                        }
326
+                                   } else {
327
+                                        echo do_shortcode( $connection['shortcode'] );
328
+                                   }
329
+                                   ?>
330 330
 						</div>
331 331
 					</div>
332 332
 				</div>
333 333
 				<?php
334
-			}
335
-			?>
334
+               }
335
+               ?>
336 336
 		<?php endforeach; ?>
337 337
 	<?php endif; ?>
338 338
 
Please login to merge, or discard this patch.
classes/class-lsx-projects-admin.php 1 patch
Indentation   +524 added lines, -524 removed lines patch added patch discarded remove patch
@@ -10,530 +10,530 @@
 block discarded – undo
10 10
  */
11 11
 class LSX_Projects_Admin {
12 12
 
13
-	public function __construct() {
14
-		$this->load_classes();
15
-
16
-		add_action( 'init', array( $this, 'post_type_setup' ) );
17
-		add_action( 'init', array( $this, 'taxonomy_setup' ) );
18
-		add_action( 'init', array( $this, 'taxonomy_project_type_setup' ) );
19
-		add_action( 'init', array( $this, 'taxonomy_project_tag_setup' ) );
20
-		add_filter( 'cmb2_admin_init', array( $this, 'field_setup' ) );
21
-		add_filter( 'cmb2_admin_init', array( $this, 'projects_services_metaboxes' ) );
22
-		add_filter( 'cmb2_admin_init', array( $this, 'projects_testimonials_metaboxes' ) );
23
-		add_filter( 'cmb2_admin_init', array( $this, 'projects_team_metaboxes' ) );
24
-		add_filter( 'cmb2_admin_init', array( $this, 'projects_woocommerce_metaboxes' ) );
25
-		add_filter( 'cmb2_admin_init', array( $this, 'project_field_setup_product' ) );
26
-		add_action( 'cmb_save_custom', array( $this, 'post_relations' ), 3, 20 );
27
-		add_action( 'admin_enqueue_scripts', array( $this, 'assets' ) );
28
-
29
-		add_filter( 'type_url_form_media', array( $this, 'change_attachment_field_button' ), 20, 1 );
30
-		add_filter( 'enter_title_here', array( $this, 'change_title_text' ) );
31
-	}
32
-
33
-	/**
34
-	 * Loads the admin subclasses
35
-	 */
36
-	private function load_classes() {
37
-		require_once LSX_PROJECTS_PATH . 'classes/admin/class-settings.php';
38
-		$this->settings = \lsx\projects\classes\admin\Settings::get_instance();
39
-
40
-		require_once LSX_PROJECTS_PATH . 'classes/admin/class-settings-theme.php';
41
-		$this->settings_theme = \lsx\projects\classes\admin\Settings_Theme::get_instance();
42
-	}
43
-
44
-	/**
45
-	 * Register the Project and Product Tag post type
46
-	 */
47
-	public function post_type_setup() {
48
-		$labels = array(
49
-			'name'               => esc_html_x( 'Projects', 'post type general name', 'lsx-projects' ),
50
-			'singular_name'      => esc_html_x( 'Project', 'post type singular name', 'lsx-projects' ),
51
-			'add_new'            => esc_html_x( 'Add New', 'post type general name', 'lsx-projects' ),
52
-			'add_new_item'       => esc_html__( 'Add New Project', 'lsx-projects' ),
53
-			'edit_item'          => esc_html__( 'Edit Project', 'lsx-projects' ),
54
-			'new_item'           => esc_html__( 'New Project', 'lsx-projects' ),
55
-			'all_items'          => esc_html__( 'All Projects', 'lsx-projects' ),
56
-			'view_item'          => esc_html__( 'View Project', 'lsx-projects' ),
57
-			'search_items'       => esc_html__( 'Search Projects', 'lsx-projects' ),
58
-			'not_found'          => esc_html__( 'No projects found', 'lsx-projects' ),
59
-			'not_found_in_trash' => esc_html__( 'No projects found in Trash', 'lsx-projects' ),
60
-			'parent_item_colon'  => '',
61
-			'menu_name'          => esc_html_x( 'Projects', 'admin menu', 'lsx-projects' ),
62
-		);
63
-
64
-		$args = array(
65
-			'labels'             => $labels,
66
-			'public'             => true,
67
-			'publicly_queryable' => true,
68
-			'show_ui'            => true,
69
-			'show_in_menu'       => true,
70
-			'menu_icon'          => 'dashicons-portfolio',
71
-			'query_var'          => true,
72
-			'rewrite'            => array(
73
-				'slug' => 'portfolio',
74
-			),
75
-			'capability_type'    => 'post',
76
-			'has_archive'        => 'portfolio',
77
-			'hierarchical'       => false,
78
-			'menu_position'      => null,
79
-			'supports'           => array(
80
-				'title',
81
-				'editor',
82
-				'thumbnail',
83
-				'excerpt',
84
-				'custom-fields',
85
-			),
86
-			'show_in_rest'       => true,
87
-		);
88
-
89
-		register_post_type( 'project', $args );
90
-	}
91
-
92
-	/**
93
-	 * Register the Group taxonomy
94
-	 */
95
-	public function taxonomy_setup() {
96
-		$labels = array(
97
-			'name'              => esc_html_x( 'Project Groups', 'taxonomy general name', 'lsx-projects' ),
98
-			'singular_name'     => esc_html_x( 'Group', 'taxonomy singular name', 'lsx-projects' ),
99
-			'search_items'      => esc_html__( 'Search Groups', 'lsx-projects' ),
100
-			'all_items'         => esc_html__( 'All Groups', 'lsx-projects' ),
101
-			'parent_item'       => esc_html__( 'Parent Group', 'lsx-projects' ),
102
-			'parent_item_colon' => esc_html__( 'Parent Group:', 'lsx-projects' ),
103
-			'edit_item'         => esc_html__( 'Edit Group', 'lsx-projects' ),
104
-			'update_item'       => esc_html__( 'Update Group', 'lsx-projects' ),
105
-			'add_new_item'      => esc_html__( 'Add New Group', 'lsx-projects' ),
106
-			'new_item_name'     => esc_html__( 'New Group Name', 'lsx-projects' ),
107
-			'menu_name'         => esc_html__( 'Groups', 'lsx-projects' ),
108
-		);
109
-
110
-		$args = array(
111
-			'hierarchical'      => true,
112
-			'labels'            => $labels,
113
-			'show_ui'           => true,
114
-			'show_admin_column' => true,
115
-			'query_var'         => true,
116
-			'rewrite'           => array(
117
-				'slug' => 'portfolio-group',
118
-			),
119
-		);
120
-
121
-		register_taxonomy( 'project-group', array( 'project' ), $args );
122
-	}
123
-
124
-	/**
125
-	 * Register the Type taxonomy
126
-	 */
127
-	public function taxonomy_project_type_setup() {
128
-		$labels = array(
129
-			'name'              => esc_html_x( 'Project Types', 'taxonomy general name', 'lsx-projects' ),
130
-			'singular_name'     => esc_html_x( 'Type', 'taxonomy singular name', 'lsx-projects' ),
131
-			'search_items'      => esc_html__( 'Search Types', 'lsx-projects' ),
132
-			'all_items'         => esc_html__( 'All Types', 'lsx-projects' ),
133
-			'parent_item'       => esc_html__( 'Parent Type', 'lsx-projects' ),
134
-			'parent_item_colon' => esc_html__( 'Parent Type:', 'lsx-projects' ),
135
-			'edit_item'         => esc_html__( 'Edit Type', 'lsx-projects' ),
136
-			'update_item'       => esc_html__( 'Update Type', 'lsx-projects' ),
137
-			'add_new_item'      => esc_html__( 'Add New Type', 'lsx-projects' ),
138
-			'new_item_name'     => esc_html__( 'New Type Name', 'lsx-projects' ),
139
-			'menu_name'         => esc_html__( 'Types', 'lsx-projects' ),
140
-		);
141
-
142
-		$args = array(
143
-			'hierarchical'      => true,
144
-			'labels'            => $labels,
145
-			'show_ui'           => true,
146
-			'show_admin_column' => true,
147
-			'query_var'         => true,
148
-			'rewrite'           => array(
149
-				'slug' => 'project-type',
150
-			),
151
-			'show_in_rest'      => true,
152
-		);
153
-
154
-		register_taxonomy( 'project-type', array( 'project' ), $args );
155
-	}
156
-
157
-	/**
158
-	 * Register the Tag taxonomy
159
-	 */
160
-	public function taxonomy_project_tag_setup() {
161
-		$labels = array(
162
-			'name'              => esc_html_x( 'Project Tags', 'taxonomy general name', 'lsx-projects' ),
163
-			'singular_name'     => esc_html_x( 'Tag', 'taxonomy singular name', 'lsx-projects' ),
164
-			'search_items'      => esc_html__( 'Search Tags', 'lsx-projects' ),
165
-			'all_items'         => esc_html__( 'All Tags', 'lsx-projects' ),
166
-			'parent_item'       => esc_html__( 'Parent Tag', 'lsx-projects' ),
167
-			'parent_item_colon' => esc_html__( 'Parent Tag:', 'lsx-projects' ),
168
-			'edit_item'         => esc_html__( 'Edit Tag', 'lsx-projects' ),
169
-			'update_item'       => esc_html__( 'Update Tag', 'lsx-projects' ),
170
-			'add_new_item'      => esc_html__( 'Add New Tag', 'lsx-projects' ),
171
-			'new_item_name'     => esc_html__( 'New Tag Name', 'lsx-projects' ),
172
-			'menu_name'         => esc_html__( 'Tags', 'lsx-projects' ),
173
-		);
174
-
175
-		$args = array(
176
-			'hierarchical'      => true,
177
-			'labels'            => $labels,
178
-			'show_ui'           => true,
179
-			'show_admin_column' => true,
180
-			'query_var'         => true,
181
-			'rewrite'           => array(
182
-				'slug' => 'project-tag',
183
-			),
184
-			'show_in_rest'      => true,
185
-		);
186
-
187
-		register_taxonomy( 'project-tag', array( 'project' ), $args );
188
-	}
189
-
190
-	/**
191
-	 * Add metabox with custom fields to the Project post type
192
-	 */
193
-	public function field_setup() {
194
-		$prefix = 'lsx_project_';
195
-
196
-		$cmb = new_cmb2_box(
197
-			array(
198
-				'id'           => $prefix . '_project',
199
-				'title'        => __( 'General', 'lsx-projects' ),
200
-				'object_types' => 'project',
201
-				'context'      => 'normal',
202
-				'priority'     => 'low',
203
-				'show_names'   => true,
204
-			)
205
-		);
206
-
207
-		$cmb->add_field(
208
-			array(
209
-				'name'         => esc_html__( 'Featured:', 'lsx-projects' ),
210
-				'id'           => $prefix . 'featured',
211
-				'type'         => 'checkbox',
212
-				'value'        => 1,
213
-				'default'      => 0,
214
-				'show_in_rest' => true,
215
-			)
216
-		);
217
-
218
-		$cmb->add_field(
219
-			array(
220
-				'name'         => esc_html__( 'Client:', 'lsx-projects' ),
221
-				'id'           => $prefix . 'client',
222
-				'type'         => 'text',
223
-				'show_in_rest' => true,
224
-			)
225
-		);
226
-
227
-		$cmb->add_field(
228
-			array(
229
-				'name'         => esc_html__( 'Client logo:', 'lsx-projects' ),
230
-				'id'           => $prefix . 'client_logo',
231
-				'type'         => 'file',
232
-				'desc'         => esc_html__( 'Recommended image size: 320 x 50~60', 'lsx-projects' ),
233
-				'options'      => array(
234
-					'url' => false, // Hide the text input for the url.
235
-				),
236
-				'text'         => array(
237
-					'add_upload_file_text' => 'Choose Image',
238
-				),
239
-				'show_in_rest' => true,
240
-			)
241
-		);
242
-
243
-		$cmb->add_field(
244
-			array(
245
-				'name'         => esc_html__( 'URL for the finished project:', 'lsx-projects' ),
246
-				'id'           => $prefix . 'url',
247
-				'type'         => 'text',
248
-				'show_in_rest' => true,
249
-			)
250
-		);
251
-	}
252
-
253
-	/**
254
-	 * Project Services Metaboxes.
255
-	 */
256
-	public function projects_services_metaboxes() {
257
-		$prefix = 'lsx_project_';
258
-
259
-		$cmb = new_cmb2_box(
260
-			array(
261
-				'id'           => $prefix . '_project',
262
-				'object_types' => 'projects',
263
-				'context'      => 'normal',
264
-				'priority'     => 'low',
265
-				'show_names'   => true,
266
-			)
267
-		);
268
-
269
-		$cmb->add_field(
270
-			array(
271
-				'name'         => esc_html__( 'Services related to this project:', 'lsx-projects' ),
272
-				'id'           => 'page_to_project',
273
-				'type'         => 'post_search_ajax',
274
-				'show_in_rest' => true,
275
-				'limit'        => 15,
276
-				'sortable'     => true,
277
-				'query_args'   => array(
278
-					'post_type'      => array( 'project' ),
279
-					'post_status'    => array( 'publish' ),
280
-					'nopagin'        => true,
281
-					'posts_per_page' => '50',
282
-					'orderby'        => 'title',
283
-					'order'          => 'ASC',
284
-				),
285
-			)
286
-		);
287
-	}
288
-
289
-	/**
290
-	 * Project Testimonials Metaboxes.
291
-	 */
292
-	public function projects_testimonials_metaboxes() {
293
-		$prefix = 'lsx_project_';
294
-
295
-		$cmb = new_cmb2_box(
296
-			array(
297
-				'id'           => $prefix . '_project',
298
-				'object_types' => 'projects',
299
-				'context'      => 'normal',
300
-				'priority'     => 'low',
301
-				'show_names'   => true,
302
-			)
303
-		);
304
-
305
-		if ( class_exists( 'LSX_Testimonials' ) ) {
306
-			$cmb->add_field(
307
-				array(
308
-					'name'         => esc_html__( 'Testimonials related to this project:', 'lsx-projects' ),
309
-					'id'           => 'testimonial_to_project',
310
-					'type'         => 'post_search_ajax',
311
-					'show_in_rest' => true,
312
-					'limit'        => 15,
313
-					'sortable'     => true,
314
-					'query_args'   => array(
315
-						'post_type'      => array( 'testimonial' ),
316
-						'post_status'    => array( 'publish' ),
317
-						'nopagin'        => true,
318
-						'posts_per_page' => '50',
319
-						'orderby'        => 'title',
320
-						'order'          => 'ASC',
321
-					),
322
-				)
323
-			);
324
-		}
325
-	}
326
-
327
-	/**
328
-	 * Project Team Metaboxes.
329
-	 */
330
-	public function projects_team_metaboxes() {
331
-		$prefix = 'lsx_project_';
332
-
333
-		$cmb = new_cmb2_box(
334
-			array(
335
-				'id'           => $prefix . '_project',
336
-				'object_types' => 'project',
337
-				'context'      => 'normal',
338
-				'priority'     => 'low',
339
-				'show_names'   => true,
340
-			)
341
-		);
342
-
343
-		if ( class_exists( 'LSX_Team' ) ) {
344
-			$cmb->add_field(
345
-				array(
346
-					'name'         => esc_html__( 'Team members involved with this project:', 'lsx-projects' ),
347
-					'id'           => 'team_to_project',
348
-					'type'         => 'post_search_ajax',
349
-					'show_in_rest' => true,
350
-					'limit'        => 15,
351
-					'sortable'     => true,
352
-					'query_args'   => array(
353
-						'post_type'      => array( 'team' ),
354
-						'post_status'    => array( 'publish' ),
355
-						'nopagin'        => true,
356
-						'posts_per_page' => '50',
357
-						'orderby'        => 'title',
358
-						'order'          => 'ASC',
359
-					),
360
-				)
361
-			);
362
-		}
363
-	}
364
-
365
-	/**
366
-	 * Project Woocommerce Metaboxes.
367
-	 */
368
-	public function projects_woocommerce_metaboxes() {
369
-		$prefix = 'lsx_project_';
370
-
371
-		$cmb = new_cmb2_box(
372
-			array(
373
-				'id'           => $prefix . '_project',
374
-				'object_types' => 'projects',
375
-				'context'      => 'normal',
376
-				'priority'     => 'low',
377
-				'show_names'   => true,
378
-			)
379
-		);
380
-
381
-		if ( class_exists( 'woocommerce' ) ) {
382
-			$cmb->add_field(
383
-				array(
384
-					'name'         => esc_html__( 'Products used for this project:', 'lsx-projects' ),
385
-					'id'           => 'product_to_project',
386
-					'type'         => 'post_search_ajax',
387
-					'show_in_rest' => true,
388
-					'limit'        => 15,
389
-					'sortable'     => true,
390
-					'query_args'   => array(
391
-						'post_type'      => array( 'product' ),
392
-						'post_status'    => array( 'publish' ),
393
-						'nopagin'        => true,
394
-						'posts_per_page' => '50',
395
-						'orderby'        => 'title',
396
-						'order'          => 'ASC',
397
-					),
398
-				)
399
-			);
400
-		}
401
-	}
402
-
403
-	/**
404
-	 * Add Alt Product metabox with custom fields to the Project post type
405
-	 */
406
-	public function project_field_setup_product() {
407
-		$prefix = 'lsx_project_';
408
-
409
-		$cmb = new_cmb2_box(
410
-			array(
411
-				'id'           => $prefix . '_project',
412
-				'title'        => __( 'General', 'lsx-projects' ),
413
-				'object_types' => 'project',
414
-				'context'      => 'normal',
415
-				'priority'     => 'low',
416
-				'show_names'   => true,
417
-			)
418
-		);
419
-
420
-		$tip_group = $cmb->add_field(
421
-			array(
422
-				'id'      => $prefix . '_alt_products',
423
-				'type'    => 'group',
424
-				'options' => array(
425
-					'group_title'   => __( 'Alternative Products', 'lsx-projects' ),
426
-					'add_button'    => __( 'Add Product', 'lsx-projects' ),
427
-					'remove_button' => __( 'Remove Product', 'lsx-projects' ),
428
-					'sortable'      => true,
429
-				),
430
-				'classes' => 'lsx-admin-row',
431
-			)
432
-		);
433
-
434
-		$cmb->add_group_field(
435
-			$tip_group,
436
-			array(
437
-				'name'         => esc_html__( 'Alt Product Name:', 'lsx-projects' ),
438
-				'id'           => $prefix . 'alt_product_title',
439
-				'type'         => 'text',
440
-				'show_in_rest' => true,
441
-			)
442
-		);
443
-
444
-		$cmb->add_group_field(
445
-			$tip_group,
446
-			array(
447
-				'name'         => esc_html__( 'Alt Product Link:', 'lsx-projects' ),
448
-				'id'           => $prefix . 'alt_product_link',
449
-				'type'         => 'text',
450
-				'show_in_rest' => true,
451
-			)
452
-		);
453
-
454
-	}
455
-
456
-	/**
457
-	 * Sets up the "post relations".
458
-	 */
459
-	public function post_relations( $post_id, $field, $value ) {
460
-		$connections = array(
461
-			// 'project_to_project',
462
-
463
-			'page_to_project',
464
-			'project_to_page',
465
-
466
-			'project_to_service',
467
-			'service_to_project',
468
-
469
-			'project_to_testimonial',
470
-			'testimonial_to_project',
471
-
472
-			'project_to_team',
473
-			'team_to_project',
474
-		);
475
-
476
-		if ( in_array( $field['id'], $connections ) ) {
477
-			$this->save_related_post( $connections, $post_id, $field, $value );
478
-		}
479
-	}
480
-
481
-	/**
482
-	 * Save the reverse post relation.
483
-	 */
484
-	public function save_related_post( $connections, $post_id, $field, $value ) {
485
-		$ids = explode( '_to_', $field['id'] );
486
-		$relation = $ids[1] . '_to_' . $ids[0];
487
-
488
-		if ( in_array( $relation, $connections ) ) {
489
-			$previous_values = get_post_meta( $post_id, $field['id'], false );
490
-
491
-			if ( ! empty( $previous_values ) ) {
492
-				foreach ( $previous_values as $v ) {
493
-					delete_post_meta( $v, $relation, $post_id );
494
-				}
495
-			}
496
-
497
-			if ( is_array( $value ) ) {
498
-				foreach ( $value as $v ) {
499
-					if ( ! empty( $v ) ) {
500
-						add_post_meta( $v, $relation, $post_id );
501
-					}
502
-				}
503
-			}
504
-		}
505
-	}
506
-
507
-	public function assets() {
508
-		//wp_enqueue_media();
509
-		wp_enqueue_script( 'media-upload' );
510
-		wp_enqueue_script( 'thickbox' );
511
-		wp_enqueue_style( 'thickbox' );
512
-
513
-		wp_enqueue_script( 'lsx-projects-admin', LSX_PROJECTS_URL . 'assets/js/lsx-projects-admin.min.js', array( 'jquery' ), LSX_PROJECTS_VER, true );
514
-		wp_enqueue_style( 'lsx-projects-admin', LSX_PROJECTS_URL . 'assets/css/lsx-projects-admin.css', array(), LSX_PROJECTS_VER );
515
-	}
516
-
517
-	/**
518
-	 * Change the "Insert into Post" button text when media modal is used for feature images
519
-	 */
520
-	public function change_attachment_field_button( $html ) {
521
-		if ( isset( $_GET['feature_image_text_button'] ) ) {
522
-			$html = str_replace( 'value="Insert into Post"', sprintf( 'value="%s"', esc_html__( 'Select featured image', 'lsx-projects' ) ), $html );
523
-		}
524
-
525
-		return $html;
526
-	}
527
-
528
-	public function change_title_text( $title ) {
529
-		$screen = get_current_screen();
530
-
531
-		if ( 'project' === $screen->post_type ) {
532
-			$title = esc_attr__( 'Enter project title', 'lsx-projects' );
533
-		}
534
-
535
-		return $title;
536
-	}
13
+     public function __construct() {
14
+          $this->load_classes();
15
+
16
+          add_action( 'init', array( $this, 'post_type_setup' ) );
17
+          add_action( 'init', array( $this, 'taxonomy_setup' ) );
18
+          add_action( 'init', array( $this, 'taxonomy_project_type_setup' ) );
19
+          add_action( 'init', array( $this, 'taxonomy_project_tag_setup' ) );
20
+          add_filter( 'cmb2_admin_init', array( $this, 'field_setup' ) );
21
+          add_filter( 'cmb2_admin_init', array( $this, 'projects_services_metaboxes' ) );
22
+          add_filter( 'cmb2_admin_init', array( $this, 'projects_testimonials_metaboxes' ) );
23
+          add_filter( 'cmb2_admin_init', array( $this, 'projects_team_metaboxes' ) );
24
+          add_filter( 'cmb2_admin_init', array( $this, 'projects_woocommerce_metaboxes' ) );
25
+          add_filter( 'cmb2_admin_init', array( $this, 'project_field_setup_product' ) );
26
+          add_action( 'cmb_save_custom', array( $this, 'post_relations' ), 3, 20 );
27
+          add_action( 'admin_enqueue_scripts', array( $this, 'assets' ) );
28
+
29
+          add_filter( 'type_url_form_media', array( $this, 'change_attachment_field_button' ), 20, 1 );
30
+          add_filter( 'enter_title_here', array( $this, 'change_title_text' ) );
31
+     }
32
+
33
+     /**
34
+      * Loads the admin subclasses
35
+      */
36
+     private function load_classes() {
37
+          require_once LSX_PROJECTS_PATH . 'classes/admin/class-settings.php';
38
+          $this->settings = \lsx\projects\classes\admin\Settings::get_instance();
39
+
40
+          require_once LSX_PROJECTS_PATH . 'classes/admin/class-settings-theme.php';
41
+          $this->settings_theme = \lsx\projects\classes\admin\Settings_Theme::get_instance();
42
+     }
43
+
44
+     /**
45
+      * Register the Project and Product Tag post type
46
+      */
47
+     public function post_type_setup() {
48
+          $labels = array(
49
+               'name'               => esc_html_x( 'Projects', 'post type general name', 'lsx-projects' ),
50
+               'singular_name'      => esc_html_x( 'Project', 'post type singular name', 'lsx-projects' ),
51
+               'add_new'            => esc_html_x( 'Add New', 'post type general name', 'lsx-projects' ),
52
+               'add_new_item'       => esc_html__( 'Add New Project', 'lsx-projects' ),
53
+               'edit_item'          => esc_html__( 'Edit Project', 'lsx-projects' ),
54
+               'new_item'           => esc_html__( 'New Project', 'lsx-projects' ),
55
+               'all_items'          => esc_html__( 'All Projects', 'lsx-projects' ),
56
+               'view_item'          => esc_html__( 'View Project', 'lsx-projects' ),
57
+               'search_items'       => esc_html__( 'Search Projects', 'lsx-projects' ),
58
+               'not_found'          => esc_html__( 'No projects found', 'lsx-projects' ),
59
+               'not_found_in_trash' => esc_html__( 'No projects found in Trash', 'lsx-projects' ),
60
+               'parent_item_colon'  => '',
61
+               'menu_name'          => esc_html_x( 'Projects', 'admin menu', 'lsx-projects' ),
62
+          );
63
+
64
+          $args = array(
65
+               'labels'             => $labels,
66
+               'public'             => true,
67
+               'publicly_queryable' => true,
68
+               'show_ui'            => true,
69
+               'show_in_menu'       => true,
70
+               'menu_icon'          => 'dashicons-portfolio',
71
+               'query_var'          => true,
72
+               'rewrite'            => array(
73
+                    'slug' => 'portfolio',
74
+               ),
75
+               'capability_type'    => 'post',
76
+               'has_archive'        => 'portfolio',
77
+               'hierarchical'       => false,
78
+               'menu_position'      => null,
79
+               'supports'           => array(
80
+                    'title',
81
+                    'editor',
82
+                    'thumbnail',
83
+                    'excerpt',
84
+                    'custom-fields',
85
+               ),
86
+               'show_in_rest'       => true,
87
+          );
88
+
89
+          register_post_type( 'project', $args );
90
+     }
91
+
92
+     /**
93
+      * Register the Group taxonomy
94
+      */
95
+     public function taxonomy_setup() {
96
+          $labels = array(
97
+               'name'              => esc_html_x( 'Project Groups', 'taxonomy general name', 'lsx-projects' ),
98
+               'singular_name'     => esc_html_x( 'Group', 'taxonomy singular name', 'lsx-projects' ),
99
+               'search_items'      => esc_html__( 'Search Groups', 'lsx-projects' ),
100
+               'all_items'         => esc_html__( 'All Groups', 'lsx-projects' ),
101
+               'parent_item'       => esc_html__( 'Parent Group', 'lsx-projects' ),
102
+               'parent_item_colon' => esc_html__( 'Parent Group:', 'lsx-projects' ),
103
+               'edit_item'         => esc_html__( 'Edit Group', 'lsx-projects' ),
104
+               'update_item'       => esc_html__( 'Update Group', 'lsx-projects' ),
105
+               'add_new_item'      => esc_html__( 'Add New Group', 'lsx-projects' ),
106
+               'new_item_name'     => esc_html__( 'New Group Name', 'lsx-projects' ),
107
+               'menu_name'         => esc_html__( 'Groups', 'lsx-projects' ),
108
+          );
109
+
110
+          $args = array(
111
+               'hierarchical'      => true,
112
+               'labels'            => $labels,
113
+               'show_ui'           => true,
114
+               'show_admin_column' => true,
115
+               'query_var'         => true,
116
+               'rewrite'           => array(
117
+                    'slug' => 'portfolio-group',
118
+               ),
119
+          );
120
+
121
+          register_taxonomy( 'project-group', array( 'project' ), $args );
122
+     }
123
+
124
+     /**
125
+      * Register the Type taxonomy
126
+      */
127
+     public function taxonomy_project_type_setup() {
128
+          $labels = array(
129
+               'name'              => esc_html_x( 'Project Types', 'taxonomy general name', 'lsx-projects' ),
130
+               'singular_name'     => esc_html_x( 'Type', 'taxonomy singular name', 'lsx-projects' ),
131
+               'search_items'      => esc_html__( 'Search Types', 'lsx-projects' ),
132
+               'all_items'         => esc_html__( 'All Types', 'lsx-projects' ),
133
+               'parent_item'       => esc_html__( 'Parent Type', 'lsx-projects' ),
134
+               'parent_item_colon' => esc_html__( 'Parent Type:', 'lsx-projects' ),
135
+               'edit_item'         => esc_html__( 'Edit Type', 'lsx-projects' ),
136
+               'update_item'       => esc_html__( 'Update Type', 'lsx-projects' ),
137
+               'add_new_item'      => esc_html__( 'Add New Type', 'lsx-projects' ),
138
+               'new_item_name'     => esc_html__( 'New Type Name', 'lsx-projects' ),
139
+               'menu_name'         => esc_html__( 'Types', 'lsx-projects' ),
140
+          );
141
+
142
+          $args = array(
143
+               'hierarchical'      => true,
144
+               'labels'            => $labels,
145
+               'show_ui'           => true,
146
+               'show_admin_column' => true,
147
+               'query_var'         => true,
148
+               'rewrite'           => array(
149
+                    'slug' => 'project-type',
150
+               ),
151
+               'show_in_rest'      => true,
152
+          );
153
+
154
+          register_taxonomy( 'project-type', array( 'project' ), $args );
155
+     }
156
+
157
+     /**
158
+      * Register the Tag taxonomy
159
+      */
160
+     public function taxonomy_project_tag_setup() {
161
+          $labels = array(
162
+               'name'              => esc_html_x( 'Project Tags', 'taxonomy general name', 'lsx-projects' ),
163
+               'singular_name'     => esc_html_x( 'Tag', 'taxonomy singular name', 'lsx-projects' ),
164
+               'search_items'      => esc_html__( 'Search Tags', 'lsx-projects' ),
165
+               'all_items'         => esc_html__( 'All Tags', 'lsx-projects' ),
166
+               'parent_item'       => esc_html__( 'Parent Tag', 'lsx-projects' ),
167
+               'parent_item_colon' => esc_html__( 'Parent Tag:', 'lsx-projects' ),
168
+               'edit_item'         => esc_html__( 'Edit Tag', 'lsx-projects' ),
169
+               'update_item'       => esc_html__( 'Update Tag', 'lsx-projects' ),
170
+               'add_new_item'      => esc_html__( 'Add New Tag', 'lsx-projects' ),
171
+               'new_item_name'     => esc_html__( 'New Tag Name', 'lsx-projects' ),
172
+               'menu_name'         => esc_html__( 'Tags', 'lsx-projects' ),
173
+          );
174
+
175
+          $args = array(
176
+               'hierarchical'      => true,
177
+               'labels'            => $labels,
178
+               'show_ui'           => true,
179
+               'show_admin_column' => true,
180
+               'query_var'         => true,
181
+               'rewrite'           => array(
182
+                    'slug' => 'project-tag',
183
+               ),
184
+               'show_in_rest'      => true,
185
+          );
186
+
187
+          register_taxonomy( 'project-tag', array( 'project' ), $args );
188
+     }
189
+
190
+     /**
191
+      * Add metabox with custom fields to the Project post type
192
+      */
193
+     public function field_setup() {
194
+          $prefix = 'lsx_project_';
195
+
196
+          $cmb = new_cmb2_box(
197
+               array(
198
+                    'id'           => $prefix . '_project',
199
+                    'title'        => __( 'General', 'lsx-projects' ),
200
+                    'object_types' => 'project',
201
+                    'context'      => 'normal',
202
+                    'priority'     => 'low',
203
+                    'show_names'   => true,
204
+               )
205
+          );
206
+
207
+          $cmb->add_field(
208
+               array(
209
+                    'name'         => esc_html__( 'Featured:', 'lsx-projects' ),
210
+                    'id'           => $prefix . 'featured',
211
+                    'type'         => 'checkbox',
212
+                    'value'        => 1,
213
+                    'default'      => 0,
214
+                    'show_in_rest' => true,
215
+               )
216
+          );
217
+
218
+          $cmb->add_field(
219
+               array(
220
+                    'name'         => esc_html__( 'Client:', 'lsx-projects' ),
221
+                    'id'           => $prefix . 'client',
222
+                    'type'         => 'text',
223
+                    'show_in_rest' => true,
224
+               )
225
+          );
226
+
227
+          $cmb->add_field(
228
+               array(
229
+                    'name'         => esc_html__( 'Client logo:', 'lsx-projects' ),
230
+                    'id'           => $prefix . 'client_logo',
231
+                    'type'         => 'file',
232
+                    'desc'         => esc_html__( 'Recommended image size: 320 x 50~60', 'lsx-projects' ),
233
+                    'options'      => array(
234
+                         'url' => false, // Hide the text input for the url.
235
+                    ),
236
+                    'text'         => array(
237
+                         'add_upload_file_text' => 'Choose Image',
238
+                    ),
239
+                    'show_in_rest' => true,
240
+               )
241
+          );
242
+
243
+          $cmb->add_field(
244
+               array(
245
+                    'name'         => esc_html__( 'URL for the finished project:', 'lsx-projects' ),
246
+                    'id'           => $prefix . 'url',
247
+                    'type'         => 'text',
248
+                    'show_in_rest' => true,
249
+               )
250
+          );
251
+     }
252
+
253
+     /**
254
+      * Project Services Metaboxes.
255
+      */
256
+     public function projects_services_metaboxes() {
257
+          $prefix = 'lsx_project_';
258
+
259
+          $cmb = new_cmb2_box(
260
+               array(
261
+                    'id'           => $prefix . '_project',
262
+                    'object_types' => 'projects',
263
+                    'context'      => 'normal',
264
+                    'priority'     => 'low',
265
+                    'show_names'   => true,
266
+               )
267
+          );
268
+
269
+          $cmb->add_field(
270
+               array(
271
+                    'name'         => esc_html__( 'Services related to this project:', 'lsx-projects' ),
272
+                    'id'           => 'page_to_project',
273
+                    'type'         => 'post_search_ajax',
274
+                    'show_in_rest' => true,
275
+                    'limit'        => 15,
276
+                    'sortable'     => true,
277
+                    'query_args'   => array(
278
+                         'post_type'      => array( 'project' ),
279
+                         'post_status'    => array( 'publish' ),
280
+                         'nopagin'        => true,
281
+                         'posts_per_page' => '50',
282
+                         'orderby'        => 'title',
283
+                         'order'          => 'ASC',
284
+                    ),
285
+               )
286
+          );
287
+     }
288
+
289
+     /**
290
+      * Project Testimonials Metaboxes.
291
+      */
292
+     public function projects_testimonials_metaboxes() {
293
+          $prefix = 'lsx_project_';
294
+
295
+          $cmb = new_cmb2_box(
296
+               array(
297
+                    'id'           => $prefix . '_project',
298
+                    'object_types' => 'projects',
299
+                    'context'      => 'normal',
300
+                    'priority'     => 'low',
301
+                    'show_names'   => true,
302
+               )
303
+          );
304
+
305
+          if ( class_exists( 'LSX_Testimonials' ) ) {
306
+               $cmb->add_field(
307
+                    array(
308
+                         'name'         => esc_html__( 'Testimonials related to this project:', 'lsx-projects' ),
309
+                         'id'           => 'testimonial_to_project',
310
+                         'type'         => 'post_search_ajax',
311
+                         'show_in_rest' => true,
312
+                         'limit'        => 15,
313
+                         'sortable'     => true,
314
+                         'query_args'   => array(
315
+                              'post_type'      => array( 'testimonial' ),
316
+                              'post_status'    => array( 'publish' ),
317
+                              'nopagin'        => true,
318
+                              'posts_per_page' => '50',
319
+                              'orderby'        => 'title',
320
+                              'order'          => 'ASC',
321
+                         ),
322
+                    )
323
+               );
324
+          }
325
+     }
326
+
327
+     /**
328
+      * Project Team Metaboxes.
329
+      */
330
+     public function projects_team_metaboxes() {
331
+          $prefix = 'lsx_project_';
332
+
333
+          $cmb = new_cmb2_box(
334
+               array(
335
+                    'id'           => $prefix . '_project',
336
+                    'object_types' => 'project',
337
+                    'context'      => 'normal',
338
+                    'priority'     => 'low',
339
+                    'show_names'   => true,
340
+               )
341
+          );
342
+
343
+          if ( class_exists( 'LSX_Team' ) ) {
344
+               $cmb->add_field(
345
+                    array(
346
+                         'name'         => esc_html__( 'Team members involved with this project:', 'lsx-projects' ),
347
+                         'id'           => 'team_to_project',
348
+                         'type'         => 'post_search_ajax',
349
+                         'show_in_rest' => true,
350
+                         'limit'        => 15,
351
+                         'sortable'     => true,
352
+                         'query_args'   => array(
353
+                              'post_type'      => array( 'team' ),
354
+                              'post_status'    => array( 'publish' ),
355
+                              'nopagin'        => true,
356
+                              'posts_per_page' => '50',
357
+                              'orderby'        => 'title',
358
+                              'order'          => 'ASC',
359
+                         ),
360
+                    )
361
+               );
362
+          }
363
+     }
364
+
365
+     /**
366
+      * Project Woocommerce Metaboxes.
367
+      */
368
+     public function projects_woocommerce_metaboxes() {
369
+          $prefix = 'lsx_project_';
370
+
371
+          $cmb = new_cmb2_box(
372
+               array(
373
+                    'id'           => $prefix . '_project',
374
+                    'object_types' => 'projects',
375
+                    'context'      => 'normal',
376
+                    'priority'     => 'low',
377
+                    'show_names'   => true,
378
+               )
379
+          );
380
+
381
+          if ( class_exists( 'woocommerce' ) ) {
382
+               $cmb->add_field(
383
+                    array(
384
+                         'name'         => esc_html__( 'Products used for this project:', 'lsx-projects' ),
385
+                         'id'           => 'product_to_project',
386
+                         'type'         => 'post_search_ajax',
387
+                         'show_in_rest' => true,
388
+                         'limit'        => 15,
389
+                         'sortable'     => true,
390
+                         'query_args'   => array(
391
+                              'post_type'      => array( 'product' ),
392
+                              'post_status'    => array( 'publish' ),
393
+                              'nopagin'        => true,
394
+                              'posts_per_page' => '50',
395
+                              'orderby'        => 'title',
396
+                              'order'          => 'ASC',
397
+                         ),
398
+                    )
399
+               );
400
+          }
401
+     }
402
+
403
+     /**
404
+      * Add Alt Product metabox with custom fields to the Project post type
405
+      */
406
+     public function project_field_setup_product() {
407
+          $prefix = 'lsx_project_';
408
+
409
+          $cmb = new_cmb2_box(
410
+               array(
411
+                    'id'           => $prefix . '_project',
412
+                    'title'        => __( 'General', 'lsx-projects' ),
413
+                    'object_types' => 'project',
414
+                    'context'      => 'normal',
415
+                    'priority'     => 'low',
416
+                    'show_names'   => true,
417
+               )
418
+          );
419
+
420
+          $tip_group = $cmb->add_field(
421
+               array(
422
+                    'id'      => $prefix . '_alt_products',
423
+                    'type'    => 'group',
424
+                    'options' => array(
425
+                         'group_title'   => __( 'Alternative Products', 'lsx-projects' ),
426
+                         'add_button'    => __( 'Add Product', 'lsx-projects' ),
427
+                         'remove_button' => __( 'Remove Product', 'lsx-projects' ),
428
+                         'sortable'      => true,
429
+                    ),
430
+                    'classes' => 'lsx-admin-row',
431
+               )
432
+          );
433
+
434
+          $cmb->add_group_field(
435
+               $tip_group,
436
+               array(
437
+                    'name'         => esc_html__( 'Alt Product Name:', 'lsx-projects' ),
438
+                    'id'           => $prefix . 'alt_product_title',
439
+                    'type'         => 'text',
440
+                    'show_in_rest' => true,
441
+               )
442
+          );
443
+
444
+          $cmb->add_group_field(
445
+               $tip_group,
446
+               array(
447
+                    'name'         => esc_html__( 'Alt Product Link:', 'lsx-projects' ),
448
+                    'id'           => $prefix . 'alt_product_link',
449
+                    'type'         => 'text',
450
+                    'show_in_rest' => true,
451
+               )
452
+          );
453
+
454
+     }
455
+
456
+     /**
457
+      * Sets up the "post relations".
458
+      */
459
+     public function post_relations( $post_id, $field, $value ) {
460
+          $connections = array(
461
+               // 'project_to_project',
462
+
463
+               'page_to_project',
464
+               'project_to_page',
465
+
466
+               'project_to_service',
467
+               'service_to_project',
468
+
469
+               'project_to_testimonial',
470
+               'testimonial_to_project',
471
+
472
+               'project_to_team',
473
+               'team_to_project',
474
+          );
475
+
476
+          if ( in_array( $field['id'], $connections ) ) {
477
+               $this->save_related_post( $connections, $post_id, $field, $value );
478
+          }
479
+     }
480
+
481
+     /**
482
+      * Save the reverse post relation.
483
+      */
484
+     public function save_related_post( $connections, $post_id, $field, $value ) {
485
+          $ids = explode( '_to_', $field['id'] );
486
+          $relation = $ids[1] . '_to_' . $ids[0];
487
+
488
+          if ( in_array( $relation, $connections ) ) {
489
+               $previous_values = get_post_meta( $post_id, $field['id'], false );
490
+
491
+               if ( ! empty( $previous_values ) ) {
492
+                    foreach ( $previous_values as $v ) {
493
+                         delete_post_meta( $v, $relation, $post_id );
494
+                    }
495
+               }
496
+
497
+               if ( is_array( $value ) ) {
498
+                    foreach ( $value as $v ) {
499
+                         if ( ! empty( $v ) ) {
500
+                              add_post_meta( $v, $relation, $post_id );
501
+                         }
502
+                    }
503
+               }
504
+          }
505
+     }
506
+
507
+     public function assets() {
508
+          //wp_enqueue_media();
509
+          wp_enqueue_script( 'media-upload' );
510
+          wp_enqueue_script( 'thickbox' );
511
+          wp_enqueue_style( 'thickbox' );
512
+
513
+          wp_enqueue_script( 'lsx-projects-admin', LSX_PROJECTS_URL . 'assets/js/lsx-projects-admin.min.js', array( 'jquery' ), LSX_PROJECTS_VER, true );
514
+          wp_enqueue_style( 'lsx-projects-admin', LSX_PROJECTS_URL . 'assets/css/lsx-projects-admin.css', array(), LSX_PROJECTS_VER );
515
+     }
516
+
517
+     /**
518
+      * Change the "Insert into Post" button text when media modal is used for feature images
519
+      */
520
+     public function change_attachment_field_button( $html ) {
521
+          if ( isset( $_GET['feature_image_text_button'] ) ) {
522
+               $html = str_replace( 'value="Insert into Post"', sprintf( 'value="%s"', esc_html__( 'Select featured image', 'lsx-projects' ) ), $html );
523
+          }
524
+
525
+          return $html;
526
+     }
527
+
528
+     public function change_title_text( $title ) {
529
+          $screen = get_current_screen();
530
+
531
+          if ( 'project' === $screen->post_type ) {
532
+               $title = esc_attr__( 'Enter project title', 'lsx-projects' );
533
+          }
534
+
535
+          return $title;
536
+     }
537 537
 }
538 538
 
539 539
 $lsx_projects_admin = new LSX_Projects_Admin();
Please login to merge, or discard this patch.