Passed
Push — add/multiplan ( 57784a...24f151 )
by Virginia
03:20
created

lsx_health_plan_all_plans_block()   D

Complexity

Conditions 16
Paths 4

Size

Total Lines 113
Code Lines 96

Duplication

Lines 0
Ratio 0 %

Importance

Changes 5
Bugs 0 Features 0
Metric Value
cc 16
eloc 96
c 5
b 0
f 0
nc 4
nop 0
dl 0
loc 113
rs 4.5406

How to fix   Long Method    Complexity   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
/**
3
 * LSX Health Plan Template Tags.
4
 *
5
 * @package lsx-health-plan
6
 */
7
8
/**
9
 * Outputs the warmup box on the single plan page.
10
*
11
* @return void
12
*/
13
function lsx_health_plan_warmup_box() {
14
	?>
15
	<div class="col-md-4" >
16
		<div class="lsx-health-plan-box">
17
			<h3 class="title warm-up-title title-lined"><?php esc_html_e( 'Your Warm-up', 'lsx-health-plan' ); ?><?php lsx_get_svg_icon( 'warm.svg' ); ?></h3>
18
			<div class="spacer"></div>
19
			<?php
20
			$intro_text = \lsx_health_plan\functions\get_option( 'warmup_intro', false );
21
			if ( false !== $intro_text ) {
22
				?>
23
				<div class="excerpt">
24
					<p><?php echo wp_kses_post( $intro_text ); ?></p>
0 ignored issues
show
Bug introduced by
It seems like $intro_text can also be of type array; however, parameter $data of wp_kses_post() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

24
					<p><?php echo wp_kses_post( /** @scrutinizer ignore-type */ $intro_text ); ?></p>
Loading history...
25
				</div>
26
				<?php
27
			}
28
			$warm_up = \lsx_health_plan\functions\get_option( 'endpoint_warm_up', false );
29
			if ( false === $warm_up ) {
30
				$warm_up = 'warm-up';
31
			}
32
			?>
33
			<a href="<?php the_permalink(); ?><?php echo esc_attr( $warm_up ); ?>/" class="btn"><?php esc_html_e( 'Start your warm-up', 'lsx-health-plan' ); ?></a>
34
		</div>
35
	</div>
36
<?php
37
}
38
39
/**
40
 * Outputs the workout box on the single plan page.
41
*
42
* @return void
43
*/
44
function lsx_health_plan_workout_box() {
45
	if ( ! post_type_exists( 'workout' ) ) {
46
		return;
47
	}
48
	?>
49
	<div class="col-md-4" >
50
		<div class="lsx-health-plan-box">
51
			<h3 class="title work-out-title title-lined"><?php esc_html_e( 'Your Workout', 'lsx-health-plan' ); ?><?php lsx_get_svg_icon( 'work.svg' ); ?></h3>
52
			<div class="spacer"></div>
53
			<?php
54
			$intro_text = \lsx_health_plan\functions\get_option( 'workout_intro', false );
55
			if ( false !== $intro_text ) {
56
				?>
57
				<div class="excerpt">
58
					<p><?php echo wp_kses_post( $intro_text ); ?></p>
0 ignored issues
show
Bug introduced by
It seems like $intro_text can also be of type array; however, parameter $data of wp_kses_post() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

58
					<p><?php echo wp_kses_post( /** @scrutinizer ignore-type */ $intro_text ); ?></p>
Loading history...
59
				</div>
60
				<?php
61
			}
62
			$workout = \lsx_health_plan\functions\get_option( 'endpoint_workout', false );
63
			if ( false === $workout ) {
64
				$workout = 'workout';
65
			}
66
			?>
67
			<a href="<?php the_permalink(); ?><?php echo esc_attr( $workout ); ?>/" class="btn"><?php esc_html_e( 'Start your workout', 'lsx-health-plan' ); ?></a>
68
		</div>
69
	</div>
70
<?php
71
}
72
73
/**
74
 * Outputs the meal plan box on the single plan page.
75
*
76
* @return void
77
*/
78
function lsx_health_plan_meal_box() {
79
	if ( ! post_type_exists( 'meal' ) ) {
80
		return;
81
	}
82
	?>
83
	<div class="col-md-4" >
84
		<div class="lsx-health-plan-box">
85
			<h3 class="title meal-plan-title title-lined"><?php esc_html_e( 'Your Meal Plan', 'lsx-health-plan' ); ?><?php lsx_get_svg_icon( 'meal.svg' ); ?></h3>
86
			<div class="spacer"></div>
87
			<?php
88
			$intro_text = \lsx_health_plan\functions\get_option( 'meal_plan_intro', false );
89
			if ( false !== $intro_text ) {
90
				?>
91
				<div class="excerpt">
92
					<p><?php echo wp_kses_post( $intro_text ); ?></p>
0 ignored issues
show
Bug introduced by
It seems like $intro_text can also be of type array; however, parameter $data of wp_kses_post() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

92
					<p><?php echo wp_kses_post( /** @scrutinizer ignore-type */ $intro_text ); ?></p>
Loading history...
93
				</div>
94
				<?php
95
			}
96
			$meal = \lsx_health_plan\functions\get_option( 'endpoint_meal', false );
97
			if ( false === $meal ) {
98
				$meal = 'meal';
99
			}
100
			?>
101
			<a href="<?php the_permalink(); ?><?php echo esc_attr( $meal ); ?>/" class="btn"><?php esc_html_e( 'View your meal plan', 'lsx-health-plan' ); ?></a>
102
		</div>
103
	</div>
104
<?php
105
}
106
107
/**
108
 * Outputs the recipe box on the single plan page.
109
*
110
* @return void
111
*/
112
function lsx_health_plan_recipe_box() {
113
	if ( ! post_type_exists( 'recipe' ) ) {
114
		return;
115
	}
116
	?>
117
	<div class="col-md-4" >
118
		<div class="lsx-health-plan-box">
119
			<h3 class="title recipes-title title-lined"><?php esc_html_e( 'Recipes', 'lsx-health-plan' ); ?><?php lsx_get_svg_icon( 'recipes.svg' ); ?></h3>
120
			<div class="spacer"></div>
121
			<?php
122
			$intro_text = \lsx_health_plan\functions\get_option( 'recipes_intro', false );
123
			if ( false !== $intro_text ) {
124
				?>
125
				<div class="excerpt">
126
					<p><?php echo wp_kses_post( $intro_text ); ?></p>
0 ignored issues
show
Bug introduced by
It seems like $intro_text can also be of type array; however, parameter $data of wp_kses_post() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

126
					<p><?php echo wp_kses_post( /** @scrutinizer ignore-type */ $intro_text ); ?></p>
Loading history...
127
				</div>
128
				<?php
129
			}
130
			$recipes = \lsx_health_plan\functions\get_option( 'endpoint_recipe', false );
131
			if ( false === $recipes ) {
132
				$recipes = 'recipes';
133
			}
134
			?>
135
			<a href="<?php the_permalink(); ?><?php echo esc_attr( $recipes ); ?>/" class="btn"><?php esc_html_e( 'View all recipes', 'lsx-health-plan' ); ?></a>
136
		</div>
137
	</div>
138
<?php
139
}
140
141
/**
142
 * Outputs the downloads box on the single plan page.
143
*
144
* @return void
145
*/
146
function lsx_health_plan_downloads_box() {
147
	global $current_user;
148
	?>
149
	<div class="col-md-4 day-download-box" >
150
		<div class="lsx-health-plan-box">
151
			<h3 class="title downloads-title title-lined"><?php esc_html_e( 'Downloads', 'lsx-health-plan' ); ?><?php lsx_get_svg_icon( 'download.svg' ); ?></h3>
152
			<div class="spacer"></div>
153
			<div class="download-list">
154
				<ul>
155
					<?php
156
					$downloads = \lsx_health_plan\functions\get_downloads();
157
					if ( ! empty( $downloads ) ) {
158
						foreach ( $downloads as $download ) {
0 ignored issues
show
Bug introduced by
The expression $downloads of type void is not traversable.
Loading history...
159
							echo wp_kses_post( '<li><a href=""><i class="fa fa-file-pdf"></i>' . do_shortcode( '[download id="' . $download . '"]' ) . '</a></li>' );
160
						}
161
					}
162
					?>
163
				</ul>
164
			</div>
165
		</div>
166
	</div>
167
<?php
168
}
169
170
/**
171
 * outputs the dynamic classes for the nav tabs.
172
 *
173
 * @param string $tab
174
 * @return void
175
 */
176
function lsx_health_plan_nav_class( $tab = '' ) {
177
	$nav_classes = array();
178
	if ( function_exists( 'is_wc_endpoint_url' ) && 'edit-account' === $tab && is_wc_endpoint_url( 'edit-account' ) ) {
179
		$nav_classes[] = 'active';
180
	} elseif ( lsx_health_plan_is_current_tab( $tab ) ) {
181
		$nav_classes[] = 'active';
182
	}
183
	if ( ! empty( $nav_classes ) ) {
184
		echo wp_kses_post( implode( ' ', $nav_classes ) );
185
	}
186
}
187
188
/**
189
 * Outputs the my profile tabs
190
 *
191
 * @return void
192
 */
193
function lsx_health_plan_my_profile_tabs() {
194
	?>
195
	<div id="account-nav">
196
		<ul class="nav nav-pills">
197
			<li class="
198
			<?php
199
			if ( ( function_exists( 'is_wc_endpoint_url' ) && ! is_wc_endpoint_url( 'edit-account' ) ) || ! function_exists( 'is_wc_endpoint_url' ) ) {
200
				echo esc_attr( 'active' );
201
			}
202
			?>
203
			"><a class="my-plan-tab" href="<?php the_permalink(); ?>"><?php esc_html_e( 'My Plans', 'lsx-health-plan' ); ?></a></li>
204
			<li class="
205
			<?php
206
			if ( function_exists( 'is_wc_endpoint_url' ) && is_wc_endpoint_url( 'edit-account' ) ) {
207
				echo esc_attr( 'active' );
208
			}
209
			?>
210
			"><a class="account-details-tab" href="<?php the_permalink(); ?>edit-account/"><?php esc_html_e( 'Account Details', 'lsx-health-plan' ); ?></a></li>
211
			<li class=""><a class="logout-tab" href="<?php echo esc_url( wp_logout_url( get_permalink() ) ); ?>"><?php esc_html_e( 'Logout', 'lsx-health-plan' ); ?></a></li>
0 ignored issues
show
Bug introduced by
It seems like get_permalink() can also be of type false; however, parameter $redirect of wp_logout_url() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

211
			<li class=""><a class="logout-tab" href="<?php echo esc_url( wp_logout_url( /** @scrutinizer ignore-type */ get_permalink() ) ); ?>"><?php esc_html_e( 'Logout', 'lsx-health-plan' ); ?></a></li>
Loading history...
212
		</ul>
213
	</div>
214
	<?php
215
}
216
217
/**
218
 * Outputs the my profile box
219
 *
220
 * @return void
221
 */
222
function lsx_health_plan_my_profile_box() {
223
	?>
224
	<div class="lsx-health-plan my-profile-block wp-block-cover alignfull">
225
		<div class="wp-block-cover__inner-container">
226
			<h2><?php esc_html_e( 'My Dashboard', 'lsx-health-plan' ); ?></h2>
227
			<section id="dashboard-card">
228
				<div class="profile-navigation">
229
					<div class="profile-photo">
230
					<?php
231
						global $current_user;
232
						get_current_user();
233
						echo get_avatar( $current_user->ID, 240 );
0 ignored issues
show
Bug introduced by
Are you sure get_avatar($current_user->ID, 240) of type false|string can be used in echo? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

233
						echo /** @scrutinizer ignore-type */ get_avatar( $current_user->ID, 240 );
Loading history...
234
						?>
235
					</div>
236
				</div>
237
				<div class="profile-details">
238
					<h1 class="title-lined has-text-color"><?php echo esc_html( $current_user->display_name ); ?></h1>
239
					<?php
240
					$disable_stats = \lsx_health_plan\functions\get_option( 'disable_all_stats', false );
241
					if ( 'on' !== $disable_stats ) {
242
243
						$is_weight_disabled  = \lsx_health_plan\functions\get_option( 'disable_weight_checkbox', false );
244
						$is_height_disabled  = \lsx_health_plan\functions\get_option( 'disable_height_checkbox', false );
245
						$is_waist_disabled   = \lsx_health_plan\functions\get_option( 'disable_waist_checkbox', false );
246
						$is_bmi_disabled = \lsx_health_plan\functions\get_option( 'disable_bmi_checkbox', false );
247
248
						$weight = get_user_meta( get_current_user_id(), 'weight', true );
249
						$waist = get_user_meta( get_current_user_id(), 'waist', true );
250
						$height = get_user_meta( get_current_user_id(), 'height', true );
251
252
						$height_m = $height / 100;
253
254
						if ( 1 < $weight && 1 < $height_m ) {
255
							$bmi = $weight / ( $height_m * $height_m );
256
							$bmi = number_format( $bmi, 1 );
257
						} else {
258
							$bmi = __( 'Add more data', 'lsx-health-plan' );
259
						}
260
261
						?>
262
263
						<div>
264
							<?php if ( 'on' !== $is_weight_disabled ) { ?>
265
								<span><strong><?php esc_html_e( 'Weight:', 'lsx-health-plan' ); ?></strong>
266
								<?php
267
								if ( '' !== $weight ) {
268
									echo wp_kses_post( $weight . ' kg' );
269
								} else {
270
									echo '/';
271
								}
272
								?>
273
								</span>
274
							<?php }
275
							if ( 'on' !== $is_waist_disabled ) {
276
								?>
277
								<span><strong><?php esc_html_e( 'Waist:', 'lsx-health-plan' ); ?></strong>
278
								<?php
279
								if ( '' !== $waist ) {
280
									echo wp_kses_post( $waist . ' cm' );
281
								} else {
282
									echo '/';
283
								}
284
								?>
285
								</span>
286
							<?php }
287
							if ( 'on' !== $is_bmi_disabled ) {
288
								?>
289
								<span><strong><?php esc_html_e( 'BMI:', 'lsx-health-plan' ); ?></strong>
290
								<?php
291
								if ( '' !== $bmi ) {
292
									echo wp_kses_post( $bmi );
293
								} else {
294
									echo '/';
295
								}
296
								?>
297
								</span>
298
							<?php } ?>
299
						</div>
300
					<?php
301
					}
302
					?>
303
					<div class="edit-profile">
304
						<?php
305
						if ( function_exists( 'wc_get_page_id' ) ) {
306
							$url_id = wc_get_page_id( 'myaccount' );
307
						} else {
308
							$url_id = '';
309
						}
310
						?>
311
						<a href="<?php echo esc_url( get_permalink( $url_id ) ); ?>edit-account/"><?php esc_html_e( 'Edit', 'lsx-health-plan' ); ?></a>
0 ignored issues
show
Bug introduced by
It seems like get_permalink($url_id) can also be of type false; however, parameter $url of esc_url() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

311
						<a href="<?php echo esc_url( /** @scrutinizer ignore-type */ get_permalink( $url_id ) ); ?>edit-account/"><?php esc_html_e( 'Edit', 'lsx-health-plan' ); ?></a>
Loading history...
312
					</div>
313
				</div>
314
			</section>
315
		</div>
316
	</div>
317
	<?php
318
}
319
320
/**
321
 * Outputs the my profile list of plans box
322
 *
323
 * @return void
324
 */
325
function lsx_health_plan_all_plans_block() {
326
	global $post, $product;
327
328
	$args = array(
329
		'orderby'        => 'menu_order',
330
		'order'          => 'ASC',
331
		'post_type'      => 'plan',
332
		'nopagin'        => true,
333
		'post_parent'    => 0,
334
	);
335
336
	$product_ids = \lsx_health_plan\functions\woocommerce\get_membership_products();
337
	if ( ! empty( $product_ids ) ) {
338
		$args['meta_query'] = array(
339
			'relation' => 'OR',
340
			array(
341
				'key'     => '_plan_product_id',
342
				'value'   => $product_ids,
343
				'compare' => 'IN',
344
			),
345
			array(
346
				'key'     => '_plan_product_id',
347
				'compare' => 'NOT EXISTS',
348
			),
349
		);
350
	}
351
352
	$the_query = new WP_Query( $args );
353
	?>
354
	<div class="all-plans-block plan-grid block-all-plans-block">
355
		<div class="row">
356
			<?php
357
			if ( $the_query->have_posts() ) :
358
				while ( $the_query->have_posts() ) :
359
					$the_query->the_post();
360
					lsx_entry_before();
0 ignored issues
show
Bug introduced by
The function lsx_entry_before was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

360
					/** @scrutinizer ignore-call */ 
361
     lsx_entry_before();
Loading history...
361
					$completed_class = '';
362
					$linked_product  = false;
363
					$restricted      = false;
364
					$product         = null;
365
					if ( \lsx_health_plan\functions\woocommerce\plan_has_products() ) {
366
						$products       = \lsx_health_plan\functions\woocommerce\get_plan_products();
367
						$linked_product = wc_get_product( $products[0] );
0 ignored issues
show
Bug introduced by
The function wc_get_product was not found. Maybe you did not declare it correctly or list all dependencies? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

367
						$linked_product = /** @scrutinizer ignore-call */ wc_get_product( $products[0] );
Loading history...
368
						$product        = $linked_product;
369
					}
370
					if ( function_exists( 'wc_memberships_is_post_content_restricted' ) ) {
371
						$restricted = wc_memberships_is_post_content_restricted( get_the_ID() ) && ! current_user_can( 'wc_memberships_view_restricted_post_content', get_the_ID() );
372
					}
373
374
					if ( lsx_health_plan_is_plan_complete() ) {
375
						$completed_class = 'completed';
376
					}
377
					$round_progress     = '';
378
					$completed_progress = '100';
379
					if ( false === $restricted ) {
380
						$round_progress = round( \lsx_health_plan\functions\get_progress( get_the_ID() ), 0 );
0 ignored issues
show
Bug introduced by
It seems like get_the_ID() can also be of type false; however, parameter $plan_id of lsx_health_plan\functions\get_progress() does only seem to accept integer, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

380
						$round_progress = round( \lsx_health_plan\functions\get_progress( /** @scrutinizer ignore-type */ get_the_ID() ), 0 );
Loading history...
381
					}
382
					?>
383
					<div class="col-xs-12 col-sm-6 col-md-4">
384
						<article class="lsx-slot lsx-hp-shadow <?php echo esc_html( 'progress-') . $round_progress; ?>">
385
							<div class="plan-feature-img">
386
								<?php if ( (int)$completed_progress === (int)$round_progress ) { ?>
387
									<span class="featured-plan"><?php lsx_get_svg_icon( 'icon-completed.svg' ); ?></span>
388
								<?php } ?>
389
								<a href="<?php echo esc_url( get_permalink() ); ?>">
0 ignored issues
show
Bug introduced by
It seems like get_permalink() can also be of type false; however, parameter $url of esc_url() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

389
								<a href="<?php echo esc_url( /** @scrutinizer ignore-type */ get_permalink() ); ?>">
Loading history...
390
								<?php
391
								$featured_image = get_the_post_thumbnail();
392
								if ( ! empty( $featured_image ) && '' !== $featured_image ) {
393
									the_post_thumbnail( 'lsx-thumbnail', array(
394
										'class' => 'aligncenter',
395
									) );
396
								} else {
397
									?>
398
									<img loading="lazy"  class="placeholder" src="<?php echo esc_attr( plugin_dir_url( __FILE__ ) . '../assets/images/placeholder.jpg' ); ?>">
399
									<?php
400
								}
401
								?>
402
								</a>
403
							</div>
404
							<div class="content-box plan-content-box">
405
								<h3 class="plan id-<?php the_ID(); ?> <?php echo esc_attr( $completed_class ); ?>"><a href="<?php echo esc_url( get_permalink() ); ?>"><?php the_title(); ?></a></h3>
406
								<?php
407
									echo wp_kses_post( \lsx_health_plan\functions\hp_get_plan_type_meta( $post ) );
0 ignored issues
show
Bug introduced by
hp_get_plan_type_meta($post) of type void is incompatible with the type string expected by parameter $data of wp_kses_post(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

407
									echo wp_kses_post( /** @scrutinizer ignore-type */ \lsx_health_plan\functions\hp_get_plan_type_meta( $post ) );
Loading history...
408
								?>
409
								<?php
410
								if ( false !== $linked_product && false !== $restricted ) {
411
									echo wp_kses_post( $linked_product->get_price_html() );
412
								}
413
								?>
414
								<div class="excerpt">
415
									<?php
416
									if ( ! has_excerpt() ) {
417
										$content = wp_trim_words( get_the_content(), 20 );
418
										$content = '<p>' . $content . '</pre>';
419
									} else {
420
										$content = apply_filters( 'the_excerpt', get_the_excerpt() );
421
									}
422
									echo wp_kses_post( $content );
423
									?>
424
								</div>
425
								<?php
426
								if ( false === $restricted ) {
427
									echo wp_kses_post( '<span class="progress"><progress class="bar" value="' . \lsx_health_plan\functions\get_progress( get_the_ID() ) . '" max="100"> ' . \lsx_health_plan\functions\get_progress( get_the_ID() ) . '% </progress><span>' . $round_progress . '%</span></span>' );
428
								}
429
								?>
430
							</div>
431
						</article>
432
					</div>
433
				<?php endwhile; ?>
434
			<?php endif; ?>
435
		</div>
436
		<?php wp_reset_postdata(); ?>
437
	</div>
438
439
<?php
440
}
441
442
/**
443
 * Outputs the my profile day view box
444
 *
445
 * @return void
446
 */
447
function lsx_health_plan_day_plan_block( $args = array() ) {
448
	$defaults = array(
449
		'plan' => '',
450
	);
451
	$args     = wp_parse_args( $args, $defaults );
452
453
	if ( isset( $args['plan'] ) && '' !== $args['plan'] && \lsx_health_plan\functions\plan\has_sections( $args['plan'] ) ) {
454
		$sections = \lsx_health_plan\functions\plan\get_sections( $args['plan'] );
455
		?>
456
		<div class="daily-plan-block day-grid">
457
			<?php
458
			foreach ( $sections as $section_key => $section_values ) {
459
				$defaults    = array(
460
					'title' => __( 'Day', 'lsx-health-plan' ) . ' ' . ( $section_key + 1 ),
461
				);
462
				$section_args = wp_parse_args( $section_values, $defaults );
463
464
				$completed_class = '';
465
				if ( lsx_health_plan_is_day_complete() ) {
466
					$completed_class = 'completed';
467
				}
468
				?>
469
				<a href="<?php echo esc_attr( \lsx_health_plan\functions\plan\get_permalink( $args['plan'], $section_args['title'] ) ); ?>" class="day id-<?php echo esc_attr( $section_key + 1 ); ?> <?php echo esc_attr( $completed_class ); ?>">
0 ignored issues
show
Bug introduced by
get_permalink($args['pla...$section_args['title']) of type array is incompatible with the type string expected by parameter $text of esc_attr(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

469
				<a href="<?php echo esc_attr( /** @scrutinizer ignore-type */ \lsx_health_plan\functions\plan\get_permalink( $args['plan'], $section_args['title'] ) ); ?>" class="day id-<?php echo esc_attr( $section_key + 1 ); ?> <?php echo esc_attr( $completed_class ); ?>">
Loading history...
470
					<div class="plan-content"><?php echo esc_attr( $section_args['title'] ); ?></div>
471
				</a>
472
				<?php
473
			}
474
			?>
475
		</div>
476
		<?php
477
	}
478
}
479
480
/**
481
 * Outputs the my profile week view box
482
 *
483
 * @param  array $args An array of arguments.
484
 * @return void
485
 */
486
function lsx_health_plan_week_plan_block( $args = array() ) {
487
	$defaults = array(
488
		'show_downloads' => false,
489
		'plan'           => '',
490
	);
491
	$args     = wp_parse_args( $args, $defaults );
492
493
	if ( isset( $args['plan'] ) && '' !== $args['plan'] && \lsx_health_plan\functions\plan\has_sections( $args['plan'] ) ) {
494
		$groups = \lsx_health_plan\functions\plan\get_sections( $args['plan'], true );
495
496
		if ( ! empty( $groups ) ) {
497
			$counter    = 1;
498
			$group_open = false;
499
500
			foreach ( $groups as $group_key => $sections ) {
501
				$collapse_class = '';
502
				$group_title    = \lsx_health_plan\functions\plan\get_group_title( $sections );
503
504
				// Determine if the current week is complete.
505
				$day_ids = wp_list_pluck( $sections, 'title' );
506
				if ( false === $group_open ) {
507
					if ( 1 === $counter && ! \lsx_health_plan\functions\is_week_complete( false, $day_ids, $group_title ) ) {
508
						$collapse_class = 'in';
509
						$group_open   = true;
510
					} elseif ( ! \lsx_health_plan\functions\is_week_complete( false, $day_ids, $group_title ) ) {
511
						$collapse_class = 'in';
512
						$group_open   = true;
513
					}
514
				}
515
516
				// Determine if there are any weekly downloads.
517
				$week_downloads_view = '';
518
				/*if ( isset( $args['show_downloads'] ) && false !== $args['show_downloads'] ) {
519
					$weekly_downloads = \lsx_health_plan\functions\get_weekly_downloads( $group_key );
520
					if ( ! empty( $weekly_downloads ) ) {
521
						$week_downloads_view = 'week-downloads-view-on';
522
					}
523
				}*/
524
				?>
525
				<div class="daily-plan-block week-grid">
526
					<a href="#group-<?php echo esc_attr( $group_key ); ?>" data-toggle="collapse" class="week-title"><?php echo esc_attr( $group_title ); ?></a>
0 ignored issues
show
Bug introduced by
$group_title of type array is incompatible with the type string expected by parameter $text of esc_attr(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

526
					<a href="#group-<?php echo esc_attr( $group_key ); ?>" data-toggle="collapse" class="week-title"><?php echo esc_attr( /** @scrutinizer ignore-type */ $group_title ); ?></a>
Loading history...
527
					<div id="group-<?php echo esc_attr( $group_key ); ?>" class="week-row collapse <?php echo esc_attr( $collapse_class ); ?>">
528
						<div class="week-row-inner <?php echo esc_html( $week_downloads_view ); ?>">
529
							<div class="week-meals-recipes-box">
530
531
								<?php if ( ! empty( $week_downloads_view ) ) { ?>
532
									<h3 class="title"><?php lsx_get_svg_icon( 'daily-plan.svg' ); ?><?php echo esc_html_e( 'Daily Plan', 'lsx-health-plan' ); ?></h3>
533
								<?php } ?>
534
535
								<div class="week-meals-recipes-box-inner">
536
								<?php
537
538
								foreach ( $sections as $section_key => $section_values ) {
539
540
									$defaults    = array(
541
										'title' => __( 'Day', 'lsx-health-plan' ) . ' ' . ( $section_key + 1 ),
542
									);
543
									$section_args = wp_parse_args( $section_values, $defaults );
544
545
									$completed_class = '';
546
									if ( lsx_health_plan_is_day_complete( $args['plan'], $section_args['title'] ) ) {
547
										$completed_class = 'completed';
548
									}
549
									?>
550
									<a href="<?php echo esc_attr( \lsx_health_plan\functions\plan\get_permalink( $args['plan'], $section_args['title'] ) ); ?>" class="day id-<?php echo esc_attr( $section_key + 1 ); ?> <?php echo esc_attr( $completed_class ); ?>">
551
										<div class="plan-content"><?php echo esc_attr( $section_args['title'] ); ?></div>
552
									</a>
553
									<?php
554
								}
555
								?>
556
								</div>
557
							</div>
558
							<?php
559
							if ( ! empty( $week_downloads_view ) ) {
560
								//lsx_health_plan_weekly_downloads( $weekly_downloads );
561
							}
562
							?>
563
						</div>
564
					</div>
565
				</div>
566
				<?php
567
			}
568
		}
569
	}
570
}
571
572
/**
573
 * Outputs the weekly downloads box.
574
 *
575
 * @param array $weekly_downloads An array of the download ids.
576
 * @return void
577
 */
578
function lsx_health_plan_weekly_downloads( $weekly_downloads = array() ) {
579
	if ( ! empty( $weekly_downloads ) ) {
580
		?>
581
		<div class="week-download-box">
582
			<h3 class="title"><?php lsx_get_svg_icon( 'download.svg' ); ?><?php echo esc_html_e( 'Downloads', 'lsx-health-plan' ); ?></h3>
583
			<ul class="week-download-box-list">
584
				<?php
585
				foreach ( $weekly_downloads as $weekly_download ) {
586
					?>
587
					<li><?php echo wp_kses_post( do_shortcode( '[download id="' . $weekly_download . '"]' ) ); ?></li>
588
					<?php
589
				}
590
				?>
591
			</ul>
592
		</div>
593
		<?php
594
	}
595
}
596
597
/**
598
 * Outputs the featured items of any type shortcode (intended for exercises)
599
 *
600
 * @return void
601
 */
602
function lsx_health_plan_items( $args = array() ) {
603
	global $shortcode_args;
604
	$shortcode_args = $args;
605
	include LSX_HEALTH_PLAN_PATH . '/templates/partials/shortcode-loop.php';
606
}
607
608
/**
609
 * Outputs the featured video shortcode
610
 *
611
 * @return void
612
 */
613
function lsx_health_plan_featured_video_block() {
614
	if ( ! post_type_exists( 'video' ) ) {
615
		return;
616
	}
617
	include LSX_HEALTH_PLAN_PATH . '/templates/featured-videos.php';
618
}
619
620
/**
621
 * Outputs the featured recipes shortcode
622
 *
623
 * @return void
624
 */
625
function lsx_health_plan_featured_recipes_block() {
626
	if ( ! post_type_exists( 'recipe' ) ) {
627
		return;
628
	}
629
	include LSX_HEALTH_PLAN_PATH . '/templates/featured-recipes.php';
630
}
631
632
/**
633
 * Outputs the featured tips shortcode
634
 *
635
 * @return void
636
 */
637
function lsx_health_plan_featured_tips_block() {
638
	include LSX_HEALTH_PLAN_PATH . '/templates/featured-tips.php';
639
}
640
641
/**
642
 * Outputs the Health Plan Buttons
643
 *
644
 * @param string $button
645
 * @return void
646
 */
647
function lsx_health_plan_day_button() {
648
	if ( lsx_health_plan_is_day_complete() ) {
649
		lsx_health_plan_unlock_button();
650
	} else {
651
		lsx_health_plan_complete_button();
652
	}
653
}
654
655
/**
656
 * Outputs the health plan complete button.
657
 *
658
 * @return void
659
 */
660
function lsx_health_plan_complete_button() {
661
	?>
662
	<div class="single-plan-inner-buttons">
663
		<form action="<?php the_permalink(); ?>" method="post" class="form-complete-day complete-plan-btn">
664
			<?php wp_nonce_field( 'complete', 'lsx-health-plan-actions' ); ?>
665
			<input type="hidden" name="lsx-health-plan-id" value="<?php echo esc_attr( \lsx_health_plan\functions\plan\generate_section_id() ); ?>" />
666
			<button class="btn cta-btn" type="submit"><?php esc_html_e( 'Complete Day', 'lsx-health-plan' ); ?></button>
667
		</form>
668
		<?php lsx_health_plan_back_to_plan_button(); ?>
669
	</div>
670
	<?php
671
}
672
673
/**
674
 * Outputs the health plan unlock button.
675
 *
676
 * @return void
677
 */
678
function lsx_health_plan_unlock_button() {
679
	?>
680
	<div class="single-plan-inner-buttons">
681
		<form action="<?php the_permalink(); ?>" method="post" class="form-complete-day complete-plan-btn">
682
			<?php wp_nonce_field( 'unlock', 'lsx-health-plan-actions' ); ?>
683
			<input type="hidden" name="lsx-health-plan-id" value="<?php echo esc_attr( \lsx_health_plan\functions\plan\generate_section_id() ); ?>" />
684
			<button class="btn secondary-btn" type="submit"><?php esc_html_e( 'Im not done!', 'lsx-health-plan' ); ?></button>
685
		</form>
686
		<?php lsx_health_plan_back_to_plan_button(); ?>
687
	</div>
688
	<?php
689
}
690
691
/**
692
 * Outputs the Single Plan Endpoint Tabs
693
 *
694
 * @param string $button
695
 * @return void
696
 */
697
function lsx_health_plan_single_nav() {
698
	$tab_template_path = apply_filters( 'lsx_health_plan_single_nav_path', LSX_HEALTH_PLAN_PATH . '/templates/single-plan-tabs.php' );
699
	if ( '' !== $tab_template_path ) {
700
		require $tab_template_path;
701
	}
702
}
703
704
/**
705
 * Outputs the Single Plan Tab based on the endpoint
706
 *
707
 * @param string $button
708
 * @return void
709
 */
710
function lsx_health_plan_single_tabs() {
711
	$endpoint = get_query_var( 'endpoint' );
712
	switch ( $endpoint ) {
713
		case 'meal':
714
			$tab_template_path = LSX_HEALTH_PLAN_PATH . '/templates/tab-content-meal.php';
715
			break;
716
717
		case 'recipes':
718
			$tab_template_path = LSX_HEALTH_PLAN_PATH . '/templates/tab-content-recipes.php';
719
			break;
720
721
		case 'workout':
722
			$tab_template_path = LSX_HEALTH_PLAN_PATH . '/templates/tab-content-workout.php';
723
			break;
724
725
		case 'warm-up':
726
			$tab_template_path = LSX_HEALTH_PLAN_PATH . '/templates/tab-content-warm-up.php';
727
			break;
728
729
		default:
730
			$tab_template_path = LSX_HEALTH_PLAN_PATH . '/templates/tab-content-plan.php';
731
			break;
732
	}
733
	$tab_template_path = apply_filters( 'lsx_health_plan_single_tab_path', $tab_template_path );
734
	if ( '' !== $tab_template_path ) {
735
		include $tab_template_path;
736
	}
737
}
738
739
/**
740
 * Outputs the recipe info on a table.
741
 *
742
 * @return void
743
 */
744
function lsx_health_plan_recipe_data() {
745
	include LSX_HEALTH_PLAN_PATH . '/templates/table-recipe-data.php';
746
}
747
748
/**
749
 * Outputs the recipe type.
750
 *
751
 * @return recipe_type
0 ignored issues
show
Bug introduced by
The type recipe_type was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
752
 */
753
function lsx_health_plan_recipe_type() {
754
	$term_obj_list = get_the_terms( get_the_ID(), 'recipe-type' );
0 ignored issues
show
Bug introduced by
It seems like get_the_ID() can also be of type false; however, parameter $post of get_the_terms() does only seem to accept WP_Post|integer, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

754
	$term_obj_list = get_the_terms( /** @scrutinizer ignore-type */ get_the_ID(), 'recipe-type' );
Loading history...
755
	$recipe_type   = $term_obj_list[0]->name;
756
	if ( ! empty( $recipe_type ) ) {
757
		return $recipe_type;
758
	}
759
}
760
761
/**
762
 * Outputs the modal button and registers the video modal to show.
763
 *
764
 * @param int $m
765
 * @param array $group
766
 * @return void
767
 */
768
function lsx_health_plan_workout_video_play_button( $m, $group, $echo = true ) {
769
	$workout_video = '';
770
	$giphy         = '';
771
	$youtube       = '';
772
	if ( isset( $group['connected_videos'] ) && '' !== $group['connected_videos'] ) {
773
		$workout_video = esc_html( $group['connected_videos'] );
774
		$giphy         = get_post_meta( $workout_video, 'video_giphy_source', true );
0 ignored issues
show
Bug introduced by
$workout_video of type string is incompatible with the type integer expected by parameter $post_id of get_post_meta(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

774
		$giphy         = get_post_meta( /** @scrutinizer ignore-type */ $workout_video, 'video_giphy_source', true );
Loading history...
775
		$youtube       = esc_url( get_post_meta( $workout_video, 'video_youtube_source', 1 ) );
776
		$content       = get_post_field( 'post_content', $workout_video );
0 ignored issues
show
Bug introduced by
$workout_video of type string is incompatible with the type WP_Post|integer expected by parameter $post of get_post_field(). ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

776
		$content       = get_post_field( 'post_content', /** @scrutinizer ignore-type */ $workout_video );
Loading history...
777
		$play_button   = '<button data-toggle="modal" data-target="#workout-video-modal-' . $m . '"><span class="fa fa-play-circle"></span></button>';
778
779
		$modal_body = '';
780
		if ( ! empty( $giphy ) ) {
781
			$giphy      = \lsx_health_plan\functions\get_video_url( $giphy );
782
			$modal_body = $giphy; // WPCS: XSS OK.
783
		} elseif ( ! empty( $youtube ) ) {
784
			$modal_body = wp_oembed_get( $youtube, array( // WPCS: XSS OK.
785
				'width' => 480,
786
			) );
787
		}
788
		$modal_body .= '<h5 class="modal-title title-lined">' . $group['name'] . '</h5>';
789
		$modal_body .= $content;
790
		\lsx_health_plan\functions\register_modal( 'workout-video-modal-' . $m, '', $modal_body );
791
792
		if ( true === $echo ) {
793
			echo wp_kses_post( $play_button );
794
		} else {
795
			return $play_button;
796
		}
797
	}
798
}
799
800
/**
801
 * Outputs the recipe description if it is included.
802
 *
803
 * @return void
804
 */
805
function lsx_health_plan_recipe_archive_description() {
806
	$description = '';
807
	if ( is_post_type_archive( 'recipe' ) ) {
808
		$description = \lsx_health_plan\functions\get_option( 'recipe_archive_description', '' );
809
	} elseif ( is_post_type_archive( 'exercise' ) ) {
810
		$description = \lsx_health_plan\functions\get_option( 'exercise_archive_description', '' );
811
	} elseif ( is_tax() ) {
812
		$description = get_the_archive_description();
813
	}
814
	if ( '' !== $description ) {
815
		?>
816
		<div class="lsx-hp-archive-description row">
817
			<div class="col-xs-12 description-wrapper"><?php echo wp_kses_post( $description ); ?></div>
818
		</div>
819
		<?php
820
	}
821
}
822
823
/**
824
 * Outputs the Single Plan main content.
825
 *
826
 * @return void
827
 */
828
function lsx_health_plan_main_content() {
829
	// Getting translated endpoint.
830
	$plan = \lsx_health_plan\functions\get_option( 'endpoint_plan', 'plan' );
831
832
	$connected_members = get_post_meta( get_the_ID(), ( $plan . '_connected_team_member' ), true );
0 ignored issues
show
Bug introduced by
It seems like get_the_ID() can also be of type false; however, parameter $post_id of get_post_meta() does only seem to accept integer, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

832
	$connected_members = get_post_meta( /** @scrutinizer ignore-type */ get_the_ID(), ( $plan . '_connected_team_member' ), true );
Loading history...
Bug introduced by
Are you sure $plan of type array|mixed can be used in concatenation? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

832
	$connected_members = get_post_meta( get_the_ID(), ( /** @scrutinizer ignore-type */ $plan . '_connected_team_member' ), true );
Loading history...
833
	$small_description = get_post_meta( get_the_ID(), ( $plan . '_short_description' ), true );
834
835
	$content_plan = '';
836
	if ( $small_description || $connected_members || lsx_health_plan_has_tips() ) {
837
		$content_plan .= '<div class="set-box set content-box entry-content">';
838
		$content_plan .= '<div class="the-content">';
839
		$content_plan .= lsx_hp_member_connected( $connected_members, $plan );
840
		$content_plan .= '<span>' . $small_description . '</span>';
841
		$content_plan .= '</div>';
842
		$content_plan .= do_shortcode( '[lsx_health_plan_featured_tips_block]' );
843
		$content_plan .= '</div>';
844
	}
845
846
	return $content_plan;
847
}
848
849
/**
850
 * Outputs the Single Plan Workout main content.
851
 *
852
 * @return void
853
 */
854
function lsx_health_plan_workout_main_content() {
855
	// Getting translated endpoint.
856
	$workout = \lsx_health_plan\functions\get_option( 'endpoint_workout', 'workout' );
857
858
	$connected_members = get_post_meta( get_the_ID(), ( $workout . '_connected_team_member' ), true );
0 ignored issues
show
Bug introduced by
Are you sure $workout of type array|mixed can be used in concatenation? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

858
	$connected_members = get_post_meta( get_the_ID(), ( /** @scrutinizer ignore-type */ $workout . '_connected_team_member' ), true );
Loading history...
Bug introduced by
It seems like get_the_ID() can also be of type false; however, parameter $post_id of get_post_meta() does only seem to accept integer, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

858
	$connected_members = get_post_meta( /** @scrutinizer ignore-type */ get_the_ID(), ( $workout . '_connected_team_member' ), true );
Loading history...
859
	$small_description = get_post_meta( get_the_ID(), ( $workout . '_short_description' ), true );
860
861
	$content = '';
862
	if ( $small_description || $connected_members || lsx_health_plan_has_tips() ) {
863
		$content .= '<div class="set-box set content-box entry-content">';
864
		$content .= '<div class="the-content">';
865
		$content .= lsx_hp_member_connected( $connected_members, $workout );
866
		$content .= '<span>' . $small_description . '</span>';
867
		$content .= '</div>';
868
		$content .= do_shortcode( '[lsx_health_plan_featured_tips_block]' );
869
		$content .= '</div>';
870
	}
871
	return $content;
872
}
873
874
/**
875
 * Outputs the Single Plan Workout main content.
876
 *
877
 * @return void
878
 */
879
function lsx_health_plan_meal_main_content() {
880
	// Getting translated endpoint.
881
	$meal = \lsx_health_plan\functions\get_option( 'endpoint_meal', 'meal' );
882
883
	$connected_members = get_post_meta( get_the_ID(), ( $meal . '_connected_team_member' ), true );
0 ignored issues
show
Bug introduced by
Are you sure $meal of type array|mixed can be used in concatenation? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

883
	$connected_members = get_post_meta( get_the_ID(), ( /** @scrutinizer ignore-type */ $meal . '_connected_team_member' ), true );
Loading history...
Bug introduced by
It seems like get_the_ID() can also be of type false; however, parameter $post_id of get_post_meta() does only seem to accept integer, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

883
	$connected_members = get_post_meta( /** @scrutinizer ignore-type */ get_the_ID(), ( $meal . '_connected_team_member' ), true );
Loading history...
884
	$small_description = get_post_meta( get_the_ID(), ( $meal . '_short_description' ), true );
885
886
	$content_meal = '';
887
	if ( $small_description || $connected_members || lsx_health_plan_has_tips() ) {
888
		$content_meal .= '<div class="set-box set content-box entry-content">';
889
		$content_meal .= '<div class="the-content">';
890
		$content_meal .= lsx_hp_member_connected( $connected_members, $meal );
891
		$content_meal .= '<span>' . $small_description . '</span>';
892
		$content_meal .= '</div>';
893
		$content_meal .= do_shortcode( '[lsx_health_plan_featured_tips_block]' );
894
		$content_meal .= '</div>';
895
	}
896
	return $content_meal;
897
}
898
899
900
/**
901
 * Outputs the Single Plan Workout Tab based on the layout selected.
902
 *
903
 * @param  string $index
904
 * @return void
905
 */
906
function lsx_health_plan_workout_tab_content( $index = 1 ) {
907
	global $group_name,$shortcode_args;
908
	$group_name = 'workout_section_' . $index;
909
	if ( false !== \lsx_health_plan\functions\get_option( 'exercise_enabled', false ) ) {
910
		$layout = strtolower( \lsx_health_plan\functions\get_option( 'workout_tab_layout', 'table' ) );
0 ignored issues
show
Bug introduced by
It seems like get_option('workout_tab_layout', 'table') can also be of type array; however, parameter $str of strtolower() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

910
		$layout = strtolower( /** @scrutinizer ignore-type */ \lsx_health_plan\functions\get_option( 'workout_tab_layout', 'table' ) );
Loading history...
911
912
		// Check for shortcode overrides.
913
		if ( null !== $shortcode_args && isset( $shortcode_args['layout'] ) ) {
914
			$layout = $shortcode_args['layout'];
915
		}
916
	} else {
917
		$layout = 'table';
918
	}
919
920
	switch ( $layout ) {
921
		case 'list':
922
			$tab_template_path = LSX_HEALTH_PLAN_PATH . 'templates/partials/workout-list.php';
923
			break;
924
925
		case 'grid':
926
			$tab_template_path = LSX_HEALTH_PLAN_PATH . 'templates/partials/workout-grid.php';
927
			break;
928
929
		case 'table':
930
			$tab_template_path = LSX_HEALTH_PLAN_PATH . 'templates/partials/workout-table.php';
931
			break;
932
	}
933
	$tab_template_path = apply_filters( 'lsx_health_plan_workout_tab_content_path', $tab_template_path );
934
	if ( '' !== $tab_template_path ) {
935
		include $tab_template_path;
936
	}
937
}
938
939
/**
940
 * This will detect and include the Workout sets loop.
941
 *
942
 * @return void
943
 */
944
function lsx_health_plan_workout_sets() {
945
	if ( is_singular( 'workout' ) ) {
946
		global $connected_workouts;
947
		$connected_workouts = array( get_the_ID() );
948
	}
949
	if ( is_singular( 'plan' ) ) {
950
951
		global $connected_workouts;
952
953
		$section_key  = get_query_var( 'section' );
954
		if ( '' !== $section && \lsx_health_plan\functions\plan\has_sections() ) {
955
			$section_info = \lsx_health_plan\functions\plan\get_section_info( $section_key );
956
			if ( isset( $section_info['connected_workouts'] ) && '' !== $section_info['connected_workouts'] ) {
957
958
				$connected_workouts = \lsx_health_plan\functions\prep_array( $section_info['connected_workouts'] );
959
			}
960
		}
961
	}
962
	$template_path = LSX_HEALTH_PLAN_PATH . 'templates/partials/workout-sets.php';
963
	$template_path = apply_filters( 'lsx_health_plan_workout_set_template_path', $template_path );
964
	if ( '' !== $template_path && ! empty( $template_path ) ) {
965
		include $template_path;
966
	}
967
}
968
969
/**
970
 * Outputs the recipes connected to the meal plan.
971
 *
972
 * @param array $args
973
 * @return void
974
 */
975
function lsx_hp_meal_plan_recipes( $args = array() ) {
976
	$defaults = array(
977
		'meal_id'   => false,
978
		'meal_time' => '',
979
		'modal'     => true,
980
	);
981
	$args     = wp_parse_args( $args, $defaults );
982
	// Looking for recipes.
983
	$connected_recipes = get_post_meta( $args['meal_id'], $args['meal_time'] . '_recipes', true );
984
	if ( ! empty( $connected_recipes ) ) {
985
		$query_args    = array(
986
			'orderby'   => 'date',
987
			'order'     => 'DESC',
988
			'post_type' => 'recipe',
989
			'post__in'  => $connected_recipes,
990
		);
991
		$recipes = new WP_Query( $query_args );
992
		?>
993
		<div class="recipes">
994
			<div class="row eating-row">
995
			<?php
996
			if ( $recipes->have_posts() ) {
997
				while ( $recipes->have_posts() ) {
998
					$recipes->the_post();
999
					if ( false !== $args['modal'] ) {
1000
						\lsx_health_plan\functions\recipes\register_recipe_modal();
1001
					}
1002
					?>
1003
					<div class="recipe-column">
1004
						<a data-toggle="modal" data-target="#recipe-modal-<?php echo esc_attr( get_the_ID() ); ?>" href="#recipe-modal-<?php echo esc_attr( get_the_ID() ); ?>" class="recipe-box box-shadow">
0 ignored issues
show
Bug introduced by
It seems like get_the_ID() can also be of type false; however, parameter $text of esc_attr() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1004
						<a data-toggle="modal" data-target="#recipe-modal-<?php echo esc_attr( /** @scrutinizer ignore-type */ get_the_ID() ); ?>" href="#recipe-modal-<?php echo esc_attr( get_the_ID() ); ?>" class="recipe-box box-shadow">
Loading history...
1005
							<div class="recipe-feature-img">
1006
								<?php
1007
								$featured_image = get_the_post_thumbnail();
1008
								if ( ! empty( $featured_image ) && '' !== $featured_image ) {
1009
									the_post_thumbnail( 'lsx-thumbnail-square', array(
1010
										'class' => 'aligncenter',
1011
									) );
1012
								} else {
1013
									?>
1014
									<img loading="lazy" src="<?php echo esc_attr( plugin_dir_url( __DIR__ ) . 'assets/images/placeholder.jpg' ); ?>">
1015
									<?php
1016
								}
1017
								?>
1018
							</div>
1019
							<div class="recipe-content">
1020
								<h3 class="recipe-title"><?php the_title(); ?></h3>
1021
								<?php lsx_health_plan_recipe_data(); ?>
1022
							</div>
1023
						</a>
1024
					</div>
1025
				<?php
1026
				}
1027
			}
1028
			wp_reset_postdata();
1029
			?>
1030
			</div>
1031
		</div>
1032
		<?php
1033
1034
	}
1035
}
1036
1037
/**
1038
 * Output the connected.
1039
 */
1040
function lsx_hp_recipe_plan_meta( $args = array() ) {
1041
	$defaults = array();
1042
	$top_level_plans = array();
1043
	// Get meals this exercise is connected to.
1044
	$plans = get_post_meta( get_the_ID(), 'connected_plans', true );
0 ignored issues
show
Bug introduced by
It seems like get_the_ID() can also be of type false; however, parameter $post_id of get_post_meta() does only seem to accept integer, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1044
	$plans = get_post_meta( /** @scrutinizer ignore-type */ get_the_ID(), 'connected_plans', true );
Loading history...
1045
	if ( ! empty( $plans ) ) {
1046
		$plan       = end( $plans );
0 ignored issues
show
Bug introduced by
It seems like $plans can also be of type string; however, parameter $array of end() does only seem to accept array, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1046
		$plan       = end( /** @scrutinizer ignore-type */ $plans );
Loading history...
1047
		$has_parent = wp_get_post_parent_id( $plan );
1048
		if ( 0 === $has_parent ) {
1049
			$top_level_plans[] = $plan;
1050
		} elseif ( false !== $top_level_plans ) {
0 ignored issues
show
introduced by
The condition false !== $top_level_plans is always true.
Loading history...
1051
			$top_level_plans[] = $has_parent;
1052
		}
1053
	}
1054
	if ( ! empty( $top_level_plans ) && ( '' !== $top_level_plans ) ) {
1055
		$top_level_plans = array_unique( $top_level_plans );
1056
		$top_level_plan  = end( $top_level_plans );
1057
		?>
1058
			<span class="recipe-type recipe-parent"><?php echo esc_html( get_the_title( $top_level_plan ) ); ?></span>
1059
		<?php
1060
	}
1061
}
1062
1063
/**
1064
 * Output the connected.
1065
 */
1066
function lsx_hp_exercise_plan_meta() {
1067
1068
	$top_level_plans = array();
1069
1070
	// Get workouts this exercise is connected to.
1071
	$workouts = get_post_meta( get_the_ID(), 'connected_workouts', true );
0 ignored issues
show
Bug introduced by
It seems like get_the_ID() can also be of type false; however, parameter $post_id of get_post_meta() does only seem to accept integer, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1071
	$workouts = get_post_meta( /** @scrutinizer ignore-type */ get_the_ID(), 'connected_workouts', true );
Loading history...
1072
1073
	if ( '' !== $workouts && ! is_array( $workouts ) ) {
1074
		$workouts = array( $workouts );
1075
	}
1076
	if ( ! empty( $workouts ) ) {
1077
		foreach ( $workouts as $workout ) {
1078
			// Get the plans this workout is connected to.
1079
			$plans = get_post_meta( $workout, 'connected_plans', true );
1080
1081
			if ( '' !== $plans && ! is_array( $plans ) ) {
1082
				$plans = array( $plans );
1083
			}
1084
			if ( ! empty( $plans ) ) {
1085
				foreach ( $plans as $plan ) {
1086
					$has_parent = wp_get_post_parent_id( $plan );
1087
					if ( 0 === $has_parent ) {
1088
						$top_level_plans = $plan;
1089
					} else {
1090
						$top_level_plans = $has_parent;
1091
					}
1092
				}
1093
			}
1094
		}
1095
	}
1096
1097
	if ( ! empty( $top_level_plans ) && ( '' !== $top_level_plans ) ) {
1098
		$top_level_plans = array_unique( $top_level_plans );
1099
		$top_level_plan  = end( $top_level_plans );
1100
		?>
1101
			<span class="recipe-type recipe-parent"><?php echo esc_html( get_the_title( $top_level_plan ) ); ?></span>
1102
		<?php
1103
	}
1104
}
1105
1106
/**
1107
 * Template for related content box for all singles.
1108
 *
1109
 * @param [type] $related_content
0 ignored issues
show
Documentation Bug introduced by
The doc comment [type] at position 0 could not be parsed: Unknown type name '[' at position 0 in [type].
Loading history...
1110
 * @return void
1111
 */
1112
function lsx_hp_single_related( $related_content, $post_type_text ) {
1113
	?>
1114
	<section id="lsx-hp-related">
1115
		<div class="row lsx-related-posts lsx-related-posts-title">
1116
			<div class="col-xs-12">
1117
				<h2 class="lsx-related-posts-headline"><?php echo esc_html( $post_type_text ); ?></h2>
1118
			</div>
1119
		</div>
1120
		<div class="row lsx-related-posts lsx-related-posts-content">
1121
			<div class="col-xs-12">
1122
				<div class="lsx-related-posts-wrapper">
1123
					<?php
1124
					foreach ( $related_content as $article ) {
1125
						$post_title      = get_the_title( $article );
1126
						$post_categories = wp_get_post_categories( $article );
1127
						$post_link       = get_permalink( $article );
1128
1129
						$cats = array();
1130
						?>
1131
						<article id="post-<?php echo esc_html( $article ); ?>" class="lsx-slot post">
1132
							<div class="entry-layout lsx-hp-shadow">
1133
								<div class="entry-layout-content">
1134
									<header class="entry-header">
1135
										<div class="entry-image">
1136
											<a href="<?php echo esc_url( $post_link ); ?>" class="thumbnail">
0 ignored issues
show
Bug introduced by
It seems like $post_link can also be of type false; however, parameter $url of esc_url() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1136
											<a href="<?php echo esc_url( /** @scrutinizer ignore-type */ $post_link ); ?>" class="thumbnail">
Loading history...
1137
											<?php
1138
											$featured_image = get_the_post_thumbnail( $article, 'lsx-thumbnail-wide' );
1139
											if ( ! empty( $featured_image ) && '' !== $featured_image ) {
1140
												echo wp_kses_post( $featured_image );
1141
											} else {
1142
												?>
1143
												<img loading="lazy" class="placeholder" src="<?php echo esc_attr( plugin_dir_url( __FILE__ ) . '../assets/images/placeholder.jpg' ); ?>">
1144
												<?php
1145
											}
1146
											?>
1147
											</a>
1148
										</div>
1149
										<div class="entry-meta">
1150
										<?php
1151
										foreach ( $post_categories as $c ) {
1152
											$cat = get_category( $c );
1153
											/* Translators: %s: category name */
1154
											$cats[] = '<a href="' . esc_url( get_category_link( $cat->term_id ) ) . '" title="' . sprintf( esc_html__( 'Posts in %s', 'lsx-blog-customizer' ), $cat->name ) . '">' . $cat->name . '</a>';
0 ignored issues
show
Bug introduced by
The property name does not seem to exist on WP_Error.
Loading history...
Bug introduced by
The property term_id does not seem to exist on WP_Error.
Loading history...
1155
										}
1156
										if ( ! empty( $cats ) ) { ?>
1157
											<div class="post-categories"><span></span><?php echo wp_kses_post( implode( ', ', $cats ) ); ?></div>
1158
										<?php } ?>
1159
										</div>
1160
										<h2 class="entry-title">
1161
											<a href="<?php echo esc_url( $post_link ); ?>">
1162
												<?php echo esc_html( $post_title ); ?>
1163
											</a>
1164
										</h2>
1165
									</header>
1166
								</div>
1167
							</div>
1168
						</article>
1169
1170
					<?php } ?>
1171
				</div>
1172
			</div>
1173
		</div>
1174
	</section>
1175
	<?php
1176
}
1177
1178
/**
1179
 * Template for connected members.
1180
 *
1181
 * @param [type] $connected_members
0 ignored issues
show
Documentation Bug introduced by
The doc comment [type] at position 0 could not be parsed: Unknown type name '[' at position 0 in [type].
Loading history...
1182
 * @return void
1183
 */
1184
function lsx_hp_member_connected( $connected_members, $post_type ) {
1185
	if ( ! empty( $connected_members ) ) {
1186
		$content = '<div id="hp-connected-members" class="hp-connected-members connected-' . $post_type . '">';
1187
		foreach ( $connected_members as $member ) {
1188
			$post_link   = get_permalink( $member );
1189
			$member_name = get_the_title( $member );
1190
			$member_name = '<span class="lsx-team-name">' . $member_name . '</span>';
1191
1192
			$member_link = '<a href="' . $post_link . '" >' . $member_name . '</a>';
0 ignored issues
show
Bug introduced by
Are you sure $post_link of type false|string can be used in concatenation? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

1192
			$member_link = '<a href="' . /** @scrutinizer ignore-type */ $post_link . '" >' . $member_name . '</a>';
Loading history...
1193
1194
			$roles = '';
1195
			$terms = get_the_terms( $member, 'team_role' );
1196
1197
			if ( $terms && ! is_wp_error( $terms ) ) {
1198
				$roles = array();
1199
1200
				foreach ( $terms as $term ) {
1201
					$roles[] = $term->name;
1202
				}
1203
1204
				$roles = join( ', ', $roles );
1205
			}
1206
			$member_roles = '' !== $roles ? "<small class='lsx-team-roles'>$roles</small>" : '';
1207
1208
			$content .= '<p>' . $member_roles . ': ' . $member_link . '</p>';
1209
		}
1210
		$content .= '</div>';
1211
		return $content;
1212
	}
1213
}
1214