HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux WebLive 5.15.0-79-generic #86-Ubuntu SMP Mon Jul 10 16:07:21 UTC 2023 x86_64
User: ubuntu (1000)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/html/wpkoopkj/wp-content/themes/ohio/inc/framework/components/helper.php
<?php

class OhioHelper {

	/* Return CSS code for element and add Google Fonts to queue */
	static function parse_acf_typo_to_css( $typo_object, $cond = false ) {
		$result_css = '';
		$result_fields = array(
			'font-family',
			'font-size',
			'font-style',
			'line-height',
			'font-weight',
			'letter-spacing',
			'color'
		);
		if ( $typo_object && is_string( $typo_object ) ) {
			$typo_object = json_decode( $typo_object );
		}

		if ( is_array( $cond ) && isset( $cond['rule'] ) ) {
			if ( $cond['rule'] == 'only_color' && isset( $typo_object->color ) ) {
				return $typo_object->color;
			}
			if ( isset( $cond['fields'] ) ) {
				if ( $cond['rule'] == 'include' && is_array( $cond['fields'] ) ) {
					$result_fields = $cond['fields'];
				}
				if ( $cond['rule'] == 'exclude' ) {
					foreach ( $cond['fields'] as $field ) {
						if ( ( $key = array_search( $field, $result_fields ) ) !== false ) {
							unset( $result_fields[$key] );
						}
					}
				}
			}
		}

		if ( $typo_object && is_object( $typo_object ) ) {

			if ( isset( $typo_object->font_family ) && in_array( 'font-family', $result_fields ) ) {
				$result_css .= 'font-family:\'' . $typo_object->font_family . '\', sans-serif;';

				$font_key_array = array();
				$font_key_array['font'] = $typo_object->font_family;
				$font_key_array['variants'] = array();
				$font_key_array['subsets'] = array();
				if ( isset( $typo_object->font_variants ) && is_array( $typo_object->font_variants ) ) {
					foreach ( $typo_object->font_variants as $font_variant ) {
						$font_key_array['variants'][] = $font_variant;
					}
				}
				if ( isset( $typo_object->font_subsets ) && is_array( $typo_object->font_subsets ) ) {
					foreach ( $typo_object->font_subsets as $font_subset ) {
						$font_key_array['subsets'][] = $font_subset;
					}
				}
				$GLOBALS['ohio_google_fonts'][] = $font_key_array;
			}
			if ( isset( $typo_object->size ) && $typo_object->size && in_array( 'font-size', $result_fields ) ) {
				$result_css .= 'font-size:' . $typo_object->size . ';';
			}
			if ( isset( $typo_object->style ) && $typo_object->style && in_array( 'font-style', $result_fields ) ) {
				$result_css .= 'font-style:' . $typo_object->style . ';';
			}
			if ( isset( $typo_object->height ) && $typo_object->height && in_array( 'line-height', $result_fields ) ) {
				$result_css .= 'line-height:' . $typo_object->height . ';';
			}
			if ( isset( $typo_object->weight ) && $typo_object->weight && in_array( 'font-weight', $result_fields ) ) {
				$result_css .= 'font-weight:' . $typo_object->weight . ';';
			}
			if ( isset( $typo_object->spacing ) && $typo_object->spacing && in_array( 'letter-spacing', $result_fields ) ) {
				$result_css .= 'letter-spacing:' . $typo_object->spacing . ';';
			}
			if ( isset( $typo_object->color ) && $typo_object->color && in_array( 'color', $result_fields ) ) {
				$result_css .= 'color:' . $typo_object->color . ';';
			}
		}
		return ( $result_css ) ? $result_css : false;
	}

	/* Parse global array with Google Fonts list */
	static function parse_google_fonts_to_query_string( $list ) {
		$fonts_type = OhioOptions::get_global( 'page_font_type', 'google_fonts' );

		switch ( $fonts_type ) {
			case 'adobe_fonts':
				if ( $ohio_adobekit_url = OhioOptions::get_global( 'adobekit_url' ) ) {
					return '//use.typekit.net/' . $ohio_adobekit_url . '.css';
				} else {
					return false;
				}
				break;

			case 'manual_custom_fonts':
				return OhioHelper::get_custom_fonts_url( $list );
				break;

			default:
				if ( is_array( $list ) && count( $list ) > 0) {
					$names = array();
					$subsets = array();
					foreach ($list as $font_item) {
						$_name = $font_item['font'];
						$_weights = array();
						if ( is_array( $font_item['variants'] ) ) {
							foreach ( $font_item['variants'] as $weight ) {
								if ( $weight == 'regular' ) {
									$weight = '400';
								}
								if ( $weight == 'italic' ) {
									$weight = '400italic';
								}
								$weight = str_replace( 'italic', 'i', $weight );
								$_weights[] = $weight;
							}
						}
						if ( count( $_weights ) > 0 ) {
							$_name .= ':' . implode( ',', $_weights );
						}
						$names[] = $_name;

						if ( is_array( $font_item['subsets'] ) ) {
							foreach ( $font_item['subsets'] as $subset ) {
								if ( $subset != 'latin' ) {
									$subsets[] = $subset;
								}
							}
						}
					}
					$names = array_unique( $names );
					$family_string = implode( '|', $names );
					if ( count( $subsets ) > 0 ) {
						$family_string .= '&subset=' . implode( ',', $subsets );
					}
					$family_string .= '&display=swap';

					return add_query_arg( 'family', urlencode( $family_string ), "//fonts.googleapis.com/css" );
				} else {
					return false;
				}
				break;
		}
	}

	/* Format HEX-color to rgba with alpha value */
	static function hex_to_rgba( $color, $opacity = false ) {
		$default = 'rgb(0,0,0)';

		$opacity = (float) abs( $opacity );

		if( empty( $color ) ) {
			return $default;
		}
		if ( $color[0] == '#' ) {
			$color = substr( $color, 1 );
		}
		if ( strlen( $color ) == 6 ) {
			$hex = array( $color[0] . $color[1], $color[2] . $color[3], $color[4] . $color[5] );
		} elseif ( strlen( $color ) == 3 ) {
			$hex = array( $color[0] . $color[0], $color[1] . $color[1], $color[2] . $color[2] );
		} else {
			return $default;
		}

		$rgb = array_map( 'hexdec', $hex );

		if( $opacity && $opacity < 1 ){
			return 'rgba(' . implode( ",", $rgb ) . ',' . $opacity . ')';
		} else {
			return 'rgb(' . implode( ",", $rgb ) . ')';
		}
	}

	/*
	* Get post excerpt
	*/
	static function get_post_excerpt( $post_id ) {
		return get_the_excerpt( get_post( $post_id ) );
	}

	/*
	* Get new post gallery layout
	*/
	static function parse_gallery_layout( $atts ) {
		$posts_layout_item = OhioOptions::get( 'blog_item_layout_type', 'blog_grid_1' );
		$posts_layout_type = OhioOptions::get( 'blog_equal_height' );

		if ( $atts && isset( $atts['ids'] ) ) {
			if ( is_array( $atts['ids'] ) ) {
				$attach_ids = $atts['ids'];
			} else {
				$attach_ids = explode( ',', $atts['ids'] );
			}
		} else {
			return false;
		}

		$layout = '<div class="slider blog-slider" data-ohio-slider-simple="true">';

		if ( $posts_layout_type ) {
			foreach ( $attach_ids as $attach_id ) {
				$_url = wp_get_attachment_url( $attach_id );
				if ( $_url ) {
					$layout .= '<div class="blog-metro-image" style="background-image: url(' . esc_url( $_url ) . ')"></div>';
				}
			}
		} else {
			foreach ( $attach_ids as $attach_id ) {
				$_url = wp_get_attachment_url( $attach_id );
				if ( $_url ) {
					$layout .= '<img class="full-width" src="' . esc_url( $_url ) . '" alt="' . esc_attr__( 'Gallery slide', 'ohio' ) . '">';
				}
			}
		}

		$layout .= '</div>';

		return $layout;
	}

	/*
	* Add required script
	*/
	static function add_required_script( $key ) {
		$GLOBALS['ohio_required_scripts'][] = $key;
	}

	/*
	* Check required script including
	*/
	static function is_script_required( $key ) {
		if  ( is_array ( $GLOBALS['ohio_required_scripts'] ) ) {
			$list = array_unique( $GLOBALS['ohio_required_scripts'] );
			return (bool) in_array( $key, $list );
		} else {
			return false;
		}
	}

	/*
	* Bridge for locate temp variables to views
	*/
	static function get_storage_item_data() {
		$temp_data = $GLOBALS['ohio_storage_tmp_data'];
		$GLOBALS['ohio_storage_tmp_data'] = false;
		return ( $temp_data ) ? $temp_data : false;
	}

	static function set_storage_item_data( $data ) {
		$GLOBALS['ohio_storage_tmp_data'] = $data;
		return true;
	}

	/*
	* Insert icon link-tag with font style by key value
	*/

	static function iconset_url_by_icon( $font_key ) {
		$key_allias = array(
			"linea-arrows" => "linea/arrows",
			"linea-basic-elaboration" => "linea/basic_ela",
			"linea-basic" => "linea/basic",
			"linea-ecommerce" => "linea/ecommerce",
			"linea-music" => "linea/music",
			"linea-software" => "linea/software",
			"linea-weather" => "linea/weather",
		);

		if ( isset( $key_allias[$font_key] ) ) {
			if ( file_exists( get_template_directory() . '/assets/fonts/' . $key_allias[$font_key] . '/css/style.css' ) ) {
				return get_template_directory_uri() . '/assets/fonts/' . $key_allias[$font_key] . '/css/style.css';
			}
		}
	}

	/*
	* Insert icon link-tag with font style by key value
	*/
	static function parse_iconset_to_url( $list ) {
		if ( is_array( $list ) && count( $list ) > 0 ) {
			$urls = array();
			foreach ( $list as $font_class ) {
				if ( substr( $font_class, 0, 6 ) == 'fa fa-' ) { // fontawesome required
					$icon_key = "fontawesome";
				} else if ( substr( $font_class, 0, 6 ) == 'linea-' ) { // linea required
					$icon_key = 'linea-' . substr( substr( $font_class, 6 ), 0, strpos( substr( $font_class, 6 ), '-' ) );
					if ( $icon_key == 'linea-basic' && substr( $font_class, 0, 23 ) == 'linea-basic-elaboration' ){
						$icon_key = 'linea-basic-elaboration';
					}
				} else {
					$icon_key = substr( substr( $font_class, 8 ), 0, strpos( substr( $font_class, 8 ), '-' ) );
				}
				$icon_value = OhioHelper::iconset_url_by_icon( $icon_key );
				$urls[$icon_key] = $icon_value;
			}
			return $urls;
		} else {
			return false;
		}
	}

	/* Parse acf columns css */
	static function parse_columns_to_css( $value, $is_double = false, $parent = false ) {
		$value_array = explode( '-', $value );

		if ( $parent != false ) {
			$parent = explode( '-', $parent );
			for ( $i = 0; $i < count( $value_array ); $i++ ) {
				if ( $value_array[$i] == 'i' ) {
					$value_array[$i] = $parent[$i] ?? 1;
				}
			}
		}

		for ( $i = 0; $i < count( $value_array ); $i++ ) {
			switch ( intval( $value_array[$i] ) ) {
				case '1':
					$value_array[$i] = 12;
					break;
				case '2':
					$value_array[$i] = ( $is_double ) ? 12 : 6;
					break;
				case '3':
					$value_array[$i] = ( $is_double ) ? 8 : 4;
					break;
				case '4':
					$value_array[$i] = ( $is_double ) ? 6 : 3;
					break;
				case '5':
					$value_array[$i] = ( $is_double ) ? '2_5th' : '5th';
					break;
				case '6':
					$value_array[$i] = ( $is_double ) ? 4 : 2;
					break;
				case '12':
					$value_array[$i] = ( $is_double ) ? 2 : 1;
					break;
			}
		}
		$classes = '';

		if ( isset( $value_array[0] ) ) {
			$classes .= 'vc_col-lg-' . $value_array[0];
		}
		if ( isset( $value_array[1] ) ) {
			$classes .= ' vc_col-md-' . $value_array[1];
		}
		if ( isset( $value_array[2] ) ) {
			$classes .= ' vc_col-xs-' . $value_array[2];
		}

		return $classes;
	}

	/* Parse acf responsive height css */
	static function parse_responsive_height_to_css( $value, $css = '${height}' ) {
		$value_array = explode( '-', $value );

		return array(
			'desktop' => empty( $value_array[0] ) ? false : str_replace( '${height}', $value_array[0], $css ),
			'tablet' =>  empty( $value_array[1] ) ? false : str_replace( '${height}', $value_array[1], $css ),
			'mobile' =>  empty( $value_array[2] ) ? false : str_replace( '${height}', $value_array[2], $css )
		);
	}

	static function parse_responsive_font_sizes( $value ) {
		$result = new stdClass();
		$parsed_data = json_decode($value);

		$result->laptop_size = ( isset( $parsed_data->laptop_size ) ) ? $parsed_data->laptop_size : false;
		$result->tablet_size = ( isset( $parsed_data->tablet_size ) ) ? $parsed_data->tablet_size : false;
		$result->mobile_size = ( isset( $parsed_data->mobile_size ) ) ? $parsed_data->mobile_size : false;
		$result->laptop_height = ( isset( $parsed_data->laptop_height ) ) ? $parsed_data->laptop_height : false;
		$result->tablet_height = ( isset( $parsed_data->tablet_height ) ) ? $parsed_data->tablet_height : false;
		$result->mobile_height = ( isset( $parsed_data->mobile_height ) ) ? $parsed_data->mobile_height : false;

		return $result;
	}

	static function get_responsive_font_css( $data, $selector = '' ) {
		$result = new stdClass();
		$result->laptop = $result->tablet = $result->mobile = '';

		// laptop devices
		if ( ( isset( $data->laptop_size ) && !empty( $data->laptop_size ) ) ) {
			$result->laptop .= '@media screen and (max-width: 1440px) { ';
			$result->laptop .= $selector . ' { font-size:' . $data->laptop_size . '; } ';
			$result->laptop .= '}';
		}
		if ( ( isset( $data->laptop_height ) && !empty( $data->laptop_height ) ) ) {
			$result->laptop .= '@media screen and (max-width: 1440px) { ';
			$result->laptop .= $selector . ' { line-height:' . $data->laptop_height . '; } ';
			$result->laptop .= '}';
		}

		// tablet devices
		if ( isset( $data->tablet_size ) && !empty( $data->tablet_size ) ) {
			$result->tablet .= '@media screen and (max-width: 1024px) { ';
			$result->tablet .= $selector . ' { font-size:' . $data->tablet_size . '; } ';
			$result->tablet .= '}';
		}
		if ( isset( $data->tablet_height ) && !empty( $data->tablet_height ) ) {
			$result->tablet .= '@media screen and (max-width: 1024px) { ';
			$result->tablet .= $selector . ' { line-height:' . $data->tablet_height . '; } ';
			$result->tablet .= '}';
		}

		// mobile devices
		if ( isset( $data->mobile_size ) && !empty( $data->mobile_size ) ) {
			$result->mobile .= '@media screen and (max-width: 768px) { ';
			$result->mobile .= $selector . ' { font-size:' . $data->mobile_size . '; } ';
			$result->mobile .= '}';
		}
		if ( isset( $data->mobile_height ) && !empty( $data->mobile_height ) ) {
			$result->mobile .= '@media screen and (max-width: 768px) { ';
			$result->mobile .= $selector . ' { line-height:' . $data->mobile_height . '; } ';
			$result->mobile .= '}';
		}

		return $result;
	}

	static function get_all_responsive_font_css( $data, $selector = '' ) {
		$result = self::get_responsive_font_css($data, $selector);
		return $result->laptop . ' ' . $result->tablet . ' ' . $result->mobile;
	}

	static function wrap_css_to_selector( $css, $selector ) {
		return $selector . '{' . $css . '} ';
	}

	static function get_attachment_id( $url ) {
		$attachment_id = 0;
		$dir = wp_upload_dir();
		if ( false !== strpos( $url, $dir['baseurl'] . '/' ) ) {
			$file = basename( $url );
			$query_args = array(
				'post_type'   => 'attachment',
				'post_status' => 'inherit',
				'fields'      => 'ids',
				'meta_query'  => array(
					array(
						'value'   => $file,
						'compare' => 'LIKE',
						'key'     => '_wp_attachment_metadata',
					),
				)
			);
			$query = new WP_Query( $query_args );
			if ( $query->have_posts() ) {
				foreach ( $query->posts as $post_id ) {
					$meta = wp_get_attachment_metadata( $post_id );
					$original_file       = basename( $meta['file'] );
					$cropped_image_files = ( isset( $meta['sizes'] ) ) ? wp_list_pluck( $meta['sizes'], 'file' ) : [];
					if ( $original_file === $file || in_array( $file, $cropped_image_files ) ) {
						$attachment_id = $post_id;
						break;
					}
				}
			}
		}
		return $attachment_id;
	}

	/**
	 * Prepares CSS code for background image and image params (size, position, repeat, attachment)
	 *
	 * @param string $prefix Option name prefix
	 * @param string $select_type
	 * @param boolean $ignore_image
	 * @return string
	 */
	static public function get_background_image_css_by_type( $prefix, $select_type, $ignore_image = false, $image_size = false ) {
		$result = '';

		if ( !$ignore_image ) {
			$image = OhioOptions::get_by_type( $prefix . '_background_image', $select_type );
			if ( $image ) {
				// ----------------------------------------------------------------
				if ( $image_size ) {
					$image_id = attachment_url_to_postid( $image );
					$resized_image = wp_get_attachment_image_src( $image_id, $image_size );
					if ( isset( $resized_image[0] ) ) $image = $resized_image[0];
				}

				// ----------------------------------------------------------------
				$result .= 'background-image:url(\'' . $image . '\');';
			} else {
				return '';
			}
		}

		$image_size = OhioOptions::get_by_type( $prefix . '_background_size', $select_type );
		switch ( $image_size ) {
			case 'auto':
				$result .= 'background-size:auto;';
				break;
			case 'cover':
				$result .= 'background-size:cover;';
				break;
			case 'contain':
				$result .= 'background-size:contain;';
				break;
			case '100per':
				$result .= 'background-size:100% 100%;';
				break;
		}

		if ( $image_size != '100per' || !$image_size ) {
			$image_position = OhioOptions::get_by_type( $prefix . '_background_position', $select_type );
			switch ( $image_position ) {
				case 'left_top':
					$result .= 'background-position:left top;';
					break;
				case 'left_center':
					$result .= 'background-position:left center;';
					break;
				case 'left_bottom':
					$result .= 'background-position:left bottom;';
					break;
				case 'center_top':
					$result .= 'background-position:center top;';
					break;
				case 'center':
					$result .= 'background-position:center center;';
					break;
				case 'center_bottom':
					$result .= 'background-position:center bottom;';
					break;
				case 'right_top':
					$result .= 'background-position:right top;';
					break;
				case 'right_center':
					$result .= 'background-position:right center;';
					break;
				case 'right_bottom':
					$result .= 'background-position:right bottom;';
					break;
			}

			$image_repeat = OhioOptions::get_by_type( $prefix . '_background_repeat', $select_type );
			switch ( $image_repeat ) {
				case 'repeat':
					$result .= 'background-repeat:repeat;';
					break;
				case 'no_repeat':
					$result .= 'background-repeat:no-repeat;';
					break;
				case 'repeat_x':
					$result .= 'background-repeat:repeat-x;';
					break;
				case 'repeat_y':
					$result .= 'background-repeat:repeat-y;';
					break;
			}
		}

		$image_attach = OhioOptions::get_by_type( $prefix . '_background_attach', $select_type );
		if ( $image_attach && $image_attach != 'false' ) {
			$result .= 'background-attachment:fixed;';
		}

		return $result;
	}

	static public function get_reading_estimate( $content ) {
		$average_reading_speed = 140;
		$estimate = ceil( str_word_count( $content ) / $average_reading_speed );
		if (!$estimate) $estimate = 1;

		return $estimate;
	}

	static public function get_custom_fonts_url( $list ) {
		$all_fonts = OhioOptions::get_global( 'manual_custom_fonts' );
		$enqueues = [];

		foreach ( $list as $item ) {
			foreach ( $all_fonts as $font ) {
				foreach ( $item['variants'] as $variant ) {
					if ( $item['font'] != $font['font_name'] ) continue;
					if ( strpos( $variant, 'italic' ) !== false xor $font['font_style'] == 'italic' ) continue;
					if ( strpos( $variant,  $font['font_weight'] ) === false ) continue;

					$key = $item['font'] . $variant;
					if ( ! isset( $enqueues[$key] ) ) {
						$enqueues[$key] = $font;
					}
				}
			}
		}

		$faces = [];
		foreach ( $enqueues as $enqueue ) {
			$font_url = false;

			if ( $enqueue['ttfotf_font_file'] ) {
				$font_url = $enqueue['ttfotf_font_file'];
			}
			if ( $enqueue['woff_font_file'] ) {
				$font_url = $enqueue['woff_font_file'];
			}
			if ( !$font_url ) continue;

			$font_url = str_replace( 'http://', '//', $font_url );

			$face = '@font-face { font-family: "' . $enqueue ['font_name']. '"; src: url("' . $font_url . '");';
			if ( $enqueue['font_style'] == 'italic' ) {
				$face .= ' font-style: italic;';
			}
			if ( $enqueue['font_weight'] != 400 ) {
				$face .= ' font-weight: ' . $enqueue['font_weight'] . ';';
			}
			$face .= ' font-display: swap;}';
			$faces[] = $face;
		}

		// wp_add_inline_style( 'ohio-style', implode( "\n", $faces ) );
		OhioLayout::append_to_shortcodes_css_buffer( implode( "\n", $faces ) );

		return false;
	}

	static public function projects_get_adjacent_post( $_post, $direction = 'prev' ) {
		global $wpdb;

		if ( empty( $_post) ) return NULL;

		$current_post_date = $_post->post_date;

		$join = '';
		$in_same_cat = FALSE;
		$excluded_categories = '';
		$adjacent = $direction == 'prev' ? 'next' : 'previous';
		$op = $direction == 'prev' ? '>' : '<';
		$order = $direction == 'prev' ? 'ASC' : 'DESC';

		$join  = apply_filters( "get_{$adjacent}_post_join", $join, $in_same_cat, $excluded_categories, 'ohio_portfolio_category', $_post );
		$where = apply_filters( "get_{$adjacent}_post_where", $wpdb->prepare("WHERE p.post_date $op %s AND p.post_type = 'ohio_portfolio' AND p.ID <> %d AND p.post_status = 'publish'", $current_post_date, $_post->ID), $in_same_cat, $excluded_categories, 'ohio_portfolio_category', $_post );
		$sort  = apply_filters( "get_{$adjacent}_post_sort", "ORDER BY p.post_date $order LIMIT 1", $_post, $order );

		$query = "SELECT p.* FROM $wpdb->posts AS p $join $where $sort";

		$result = $wpdb->get_row( "SELECT p.* FROM $wpdb->posts AS p $join $where $sort" );

		if ( null === $result )
			$result = '';

		return $result;
	}

	static public function projects_get_bounding_post( $type = 'first' ) {
		global $wpdb;

		$in_same_cat = false;
		$excluded_categories = '';
		$adjacent = $type == 'first' ? 'previous' : 'next';
		$order = $type == 'first' ? 'DESC' : 'ASC';
		$post = get_post();

		$join  = apply_filters( "get_{$adjacent}_post_join", '', $in_same_cat, $excluded_categories, 'ohio_portfolio_category', $post );
		$where = apply_filters( "get_{$adjacent}_post_where", "WHERE p.post_type = 'ohio_portfolio' AND p.post_status = 'publish'", $in_same_cat, $excluded_categories, 'ohio_portfolio_category', $post );
		$sort  = apply_filters( "get_{$adjacent}_post_sort", "ORDER BY p.post_date $order LIMIT 1", $post, $order );

		// $query = "SELECT p.* FROM $wpdb->posts AS p $join $where $sort";
		$result = $wpdb->get_row("SELECT p.* FROM $wpdb->posts AS p $join $where $sort");

		return ( null === $result ) ? '' : $result;
	}

	static public function get_current_pagenum() {
		$pagination_page = 1;

		if ( get_query_var( 'paged' ) ) {
			$pagination_page = get_query_var( 'paged' );
		} elseif ( get_query_var( 'page' ) ) {
			$pagination_page = get_query_var( 'page' );
		} elseif ( isset( $_POST['paged'] ) ) {
			$pagination_page = $_POST['paged'];
		} elseif ( isset( $_GET['paged'] ) ) {
			$pagination_page = $_GET['paged'];
		}

		return max( 1, (int)$pagination_page );
	}

	static public function slug_from_string( $value ) {
		$value = preg_replace('~[^\pL\d]+~u', '-', $value); // replace non letter or digits by -
		$value = iconv('utf-8', 'us-ascii//TRANSLIT', $value); // transliterate
		$value = preg_replace('~[^-\w]+~', '', $value); // remove unwanted characters
		$value = trim($value, '-'); // trim
		$value = preg_replace('~-+~', '-', $value); // remove duplicate -
		$value = strtolower($value); // lowercase

		return $value;
	}

	static public function get_AOS_animation_attrs( $animation_type, $animation_effect, $in_row, $index ) {
		$attrs = [];

		if ( in_array( $animation_type, [ 'sync', 'async' ] ) ) {
			$attrs[] = 'data-aos-once="true"';
			$attrs[] = 'data-aos="' . $animation_effect . '"';

			if ( $animation_type == 'async' ) {
				$delay = ( 400 / $in_row ) * ( $index % $in_row );
				$delay = (int) $delay - ( $delay % 50 );
				$attrs[] = 'data-aos-delay="' . $delay . '"';
			}
		}

		return $attrs;
	}

	static public function calculate_custom_fonts_inline() {
		if ( isset( $GLOBALS['ohio_google_fonts'] ) ) {
			$fonts_type = OhioOptions::get_global( 'page_font_type', 'google_fonts' );

			if ( $fonts_type == 'manual_custom_fonts' ) {
				OhioHelper::get_custom_fonts_url( $GLOBALS['ohio_google_fonts'] );
			}
		}
	}

	/**
	 * Optimize render flow by excluding some parts
	 *
	 * @param string $slug Excluded part
	 * @return boolean
	 */
	static public function is_optimized_flow( $slug ) {
		$slugs = isset( $_GET['ohio_of'] ) ? explode( ',', $_GET['ohio_of'] ) : [];

		return in_array( $slug, $slugs );
	}

	/**
	 * Pagination draw facade helper
	 *
	 * @param string $type Pagination type.
	 * @param int $pages_total Pages total.
	 * @param int $page_current Page current.
	 * @param string $position Alignment position.
	 */
	static public function show_pagination( $type, $pages_total, $page_current, $position, $style = 'default', $size = 'medium', $scope = 'posts' ) {
		if ( $pages_total === 1 ) {
			return;
		}

		$large_number = 10000000;
		$paginator_pattern = str_replace( $large_number, '{{page}}', get_pagenum_link( $large_number ) );
		$paginator_pattern = remove_query_arg( 'add-to-cart', $paginator_pattern );
		$paginator_pattern = str_replace( '#038;', '&', $paginator_pattern );

		$additional_classes = [];
		if ( in_array( $position, [ 'center', 'right' ], true ) ) {
			$additional_classes[] = '-' . $position . '-flex';
		}
		if ( in_array( $style, [ 'outlined', 'flat' ], true ) ) {
			$additional_classes[] = '-' . $style;
		}
		if ( in_array( $size, [ 'large', 'small' ], true ) ) {
			$additional_classes[] = '-' . $size;
		}

		switch ( $type ) {
			case 'standard':
				echo '<div class="pagination-standard">';
				OhioLayout::the_paginator_layout( $page_current, $pages_total, $position, $style, $size );
				echo '</div>';
				break;

			case 'lazy_scroll':
			case 'lazy_load':
				echo '<div class="lazy-load loading ' . implode( ' ', $additional_classes ) . '" data-lazy-load="scroll" ';
				echo 'data-lazy-pages-count="' . esc_attr( $pages_total ) . '" ';
				echo 'data-lazy-load-url-pattern="' . esc_attr( $paginator_pattern ) . '" ';
				echo 'data-lazy-load-scope="' . $scope . '">';
				echo '<button class="button -pagination">';
				echo '<span class="loading-text">' . esc_html__( 'Loading', 'ohio-extra' ) . '</span>';
				echo '</button>';
				echo '</div>';
				break;

			case 'lazy_button':
			case 'load_more':
				echo '<div class="lazy-load load-more ' . implode( ' ', $additional_classes ) . '" data-lazy-load="click" ';
				echo 'data-lazy-pages-count="' . esc_attr( $pages_total ) . '" ';
				echo 'data-lazy-load-url-pattern="' . esc_attr( $paginator_pattern ) . '" ';
				echo 'data-lazy-load-scope="' . $scope . '">';
				echo '<button class="button -pagination">';
				echo '<span class="loadmore-text">' . esc_html__( 'Load More', 'ohio-extra' ) . '</span>';
				echo '<span class="loading-text">' . esc_html__( 'Loading', 'ohio-extra' ) . '</span>';
				echo '</button>';
				echo '</div>';
				break;
		}
	}
}