Files
CHIEFSOFT\ameye e9e5c0546c first commit
2023-11-30 13:20:54 -05:00

866 lines
21 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* The basic helpers functions
*
* @package Powerkit
* @subpackage Core
* @version 1.0.0
* @since 1.0.0
*/
/**
* Output error message.
*
* @param string $message The error message.
*/
function powerkit_alert_warning( $message ) {
if ( current_user_can( 'editor' ) || current_user_can( 'administrator' ) ) {
?>
<p class="pk-alert pk-alert-warning" role="alert">
<object>
<?php call_user_func( 'printf', '%s', $message ); ?>
</object>
<?php esc_html_e( ' Dont worry, this error is visible to site admins only, and your site visitors wont see it.', 'powerkit' ); ?>
</p>
<?php
}
}
/**
* Processing path of style.
*
* @param string $path URL to the stylesheet.
*/
function powerkit_style( $path ) {
// Check RTL.
if ( is_rtl() ) {
return $path;
}
// Check Dev.
$dev = POWERKIT_PATH . 'assets/css/powerkit-dev.css';
if ( file_exists( $dev ) ) {
return str_replace( '.css', '-dev.css', $path );
}
return $path;
}
/**
* Generate AMP style.
*
* @param string $path Path to the stylesheet.
*/
function powerkit_amp_style( $path ) {
if ( file_exists( $path ) ) {
$output = call_user_func( 'file_get_contents', $path );
call_user_func( 'printf', '%s', $output );
}
}
/**
* Check post views module.
*
* @return string Type.
*/
function powerkit_post_views_enabled() {
// Post Views Counter.
if ( class_exists( 'Post_Views_Counter' ) ) {
return 'post_views';
}
// Powerkit Post Views.
if ( powerkit_module_enabled( 'post_views' ) ) {
return 'pk_post_views';
}
}
/**
* Process shortcode atts.
*
* @param array $atts Attributes in shortcode tag.
*/
function powerkit_shortcode_atts( $atts ) {
if ( is_array( $atts ) ) {
foreach ( $atts as $name => $val ) {
if ( is_string( $val ) && 'true' === $val ) {
$atts[ $name ] = true;
}
if ( is_string( $val ) && 'false' === $val ) {
$atts[ $name ] = false;
}
}
}
return $atts;
}
/**
* Retrieves a post meta field for the given post ID.
*
* @param int $post_id Post ID.
* @param string $key Optional. The meta key to retrieve. By default, returns
* data for all keys. Default empty.
* @param bool $single Optional. If true, returns only the first value for the specified meta key.
* This parameter has no effect if $key is not specified. Default false.
* @param mixed $default Default value.
* @return mixed Will be an array if $single is false. Will be value of the meta
* field if $single is true.
*/
function powerkit_get_post_metadata( $post_id, $key = '', $single = false, $default = null ) {
if ( ! metadata_exists( 'post', $post_id, $key ) && $default ) {
return $default;
}
return get_metadata( 'post', $post_id, $key, $single );
}
/**
* Get locale in uniform format.
*/
function powerkit_get_locale() {
$locale = get_locale();
if ( preg_match( '#^[a-z]{2}\-[A-Z]{2}$#', $locale ) ) {
$locale = str_replace( '-', '_', $locale );
} elseif ( preg_match( '#^[a-z]{2}$#', $locale ) ) {
if ( function_exists( 'mb_strtoupper' ) ) {
$locale .= '_' . mb_strtoupper( $locale, 'UTF-8' );
} else {
$locale .= '_' . mb_strtoupper( $locale );
}
}
if ( empty( $locale ) ) {
$locale = 'en_US';
}
return apply_filters( 'powerkit_locale', $locale );
}
/**
* Get rounded number.
*
* @param int $number Input number.
* @param int $min_value Minimum value to round number.
* @param int $decimal How may decimals shall be in the rounded number.
*/
function powerkit_get_round_number( $number, $min_value = 1000, $decimal = 1 ) {
if ( $number < $min_value ) {
return number_format_i18n( $number );
}
$alphabets = array(
1000000000 => esc_html__( 'B', 'powerkit' ),
1000000 => esc_html__( 'M', 'powerkit' ),
1000 => esc_html__( 'K', 'powerkit' ),
);
foreach ( $alphabets as $key => $value ) {
if ( $number >= $key ) {
return number_format_i18n( round( $number / $key, $decimal ), $decimal ) . $value;
}
}
}
/**
* Convert dates to readable format
*
* @param string $a Time string (timeformat).
* @return string Formatted time.
*/
function powerkit_relative_time( $a ) {
// Get current timestampt.
$b = strtotime( 'now' );
// Get timestamp when tweet created.
$c = strtotime( $a );
// Get difference.
$d = $b - $c;
// Calculate different time values.
$minute = 60;
$hour = $minute * 60;
$day = $hour * 24;
$week = $day * 7;
if ( is_numeric( $d ) && $d > 0 ) :
// If less then 3 seconds.
if ( $d < 3 ) {
return esc_html__( 'right now', 'powerkit' );
}
// If less then minute.
if ( $d < $minute ) {
return floor( $d ) . esc_html__( ' seconds ago', 'powerkit' );
}
// If less then 2 minutes.
if ( $d < $minute * 2 ) {
return esc_html__( 'about 1 minute ago', 'powerkit' );
}
// If less then hour.
if ( $d < $hour ) {
return floor( $d / $minute ) . esc_html__( ' minutes ago', 'powerkit' );
}
// If less then 2 hours.
if ( $d < $hour * 2 ) {
return esc_html__( 'about 1 hour ago', 'powerkit' );
}
// If less then day.
if ( $d < $day ) {
return floor( $d / $hour ) . esc_html__( ' hours ago', 'powerkit' );
}
// If more then day, but less then 2 days.
if ( $d > $day && $d < $day * 2 ) {
return esc_html__( 'yesterday', 'powerkit' );
}
// If less then year.
if ( $d < $day * 365 ) {
return floor( $d / $day ) . esc_html__( ' days ago', 'powerkit' );
}
// else return more than a year.
return esc_html__( 'over a year ago', 'powerkit' );
endif;
}
/**
* Truncates string with specified length
*
* @param string $string Text string.
* @param int $length Letters length.
* @param string $etc End truncate.
* @param bool $break_words Break words or not.
* @return string
*/
function powerkit_str_truncate( $string, $length = 80, $etc = '&hellip;', $break_words = false ) {
if ( 0 === $length ) {
return '';
}
if ( function_exists( 'mb_strlen' ) ) {
// MultiBite string functions.
if ( mb_strlen( $string ) > $length ) {
$length -= min( $length, mb_strlen( $etc ) );
if ( ! $break_words ) {
$string = preg_replace( '/\s+?(\S+)?$/', '', mb_substr( $string, 0, $length + 1 ) );
}
return mb_substr( $string, 0, $length ) . $etc;
}
} else {
// Default string functions.
if ( strlen( $string ) > $length ) {
$length -= min( $length, strlen( $etc ) );
if ( ! $break_words ) {
$string = preg_replace( '/\s+?(\S+)?$/', '', substr( $string, 0, $length + 1 ) );
}
return substr( $string, 0, $length ) . $etc;
}
}
return $string;
}
/**
* Set number to Short Form
*
* @param int $n The number.
* @param int $decimal The decimal.
*/
function powerkit_abridged_number( $n, $decimal = 1 ) {
// First strip any formatting.
$n = (float) str_replace( ',', '', $n );
// Is this a number?
if ( ! is_numeric( $n ) ) {
return false;
}
// Return current count.
if ( $n < 1000 ) {
return number_format_i18n( $n );
}
// Add suffix.
$suffix = array(
1000000000 => esc_html__( 'B', 'powerkit' ), // Billion.
1000000 => esc_html__( 'M', 'powerkit' ), // Million.
1000 => esc_html__( 'K', 'powerkit' ), // Thousand.
);
foreach ( $suffix as $k => $v ) {
if ( $n >= $k ) {
return number_format_i18n( $n / $k, $decimal ) . $v;
}
}
}
/**
* Time ago
*
* @param string $time The time.
* @return string
*/
function powerkit_timing_ago( $time ) {
$periods = array( esc_html__( 'second', 'powerkit' ), esc_html__( 'minute', 'powerkit' ), esc_html__( 'hour', 'powerkit' ), esc_html__( 'day', 'powerkit' ), esc_html__( 'week', 'powerkit' ), esc_html__( 'month', 'powerkit' ), esc_html__( 'year', 'powerkit' ), esc_html__( 'decade', 'powerkit' ) );
$lengths = array( '60', '60', '24', '7', '4.35', '12', '10' );
$now = time();
$difference = $now - $time;
$tense = esc_html__( 'ago', 'powerkit' );
$lengths_count = count( $lengths );
for ( $j = 0; $difference >= $lengths[ $j ] && $j < $lengths_count - 1; $j++ ) {
$difference /= $lengths[ $j ];
}
$difference = round( $difference );
if ( 1 !== $difference ) {
$periods[ $j ] .= 's';
}
return "$difference $periods[$j] {$tense} ";
}
/**
* Encode data
*
* @param mixed $content The content.
* @param string $secret_key The key.
* @return string
*/
function powerkit_encode_data( $content, $secret_key = 'powerkit' ) {
$content = wp_json_encode( $content );
return base64_encode( $content );
}
/**
* Decode data
*
* @param string $content The content.
* @param string $secret_key The key.
* @return string
*/
function powerkit_decode_data( $content, $secret_key = 'powerkit' ) {
$content = base64_decode( $content );
return json_decode( $content );
}
/**
* Encrypt data
*
* @param mixed $content The content.
* @param string $secret_key The key.
* @return string
*/
function powerkit_encrypt_data( $content, $secret_key = 'powerkit' ) {
$content = maybe_serialize( $content );
if ( function_exists( 'openssl_encrypt' ) && function_exists( 'hash' ) ) {
$encrypt_method = 'AES-256-CBC';
$key = hash( 'sha256', $secret_key );
$iv = substr( hash( 'sha256', 'secret key' ), 0, 16 );
return base64_encode( openssl_encrypt( $content, $encrypt_method, $key, 0, $iv ) );
} else {
return base64_encode( $content );
}
}
/**
* Decrypt data
*
* @param string $content The content.
* @param string $secret_key The key.
* @return string
*/
function powerkit_decrypt_data( $content, $secret_key = 'powerkit' ) {
if ( function_exists( 'openssl_encrypt' ) && function_exists( 'hash' ) ) {
$encrypt_method = 'AES-256-CBC';
$key = hash( 'sha256', $secret_key );
$iv = substr( hash( 'sha256', 'secret key' ), 0, 16 );
$content = openssl_decrypt( base64_decode( $content ), $encrypt_method, $key, 0, $iv );
} else {
$content = base64_decode( $content );
}
$content = maybe_unserialize( $content );
return $content;
}
/**
* Generate uuid hash
*
* @param string $name The name.
* @param string $action The action.
*/
function powerkit_uuid_hash( $name = '_wpnonce', $action = -1 ) {
$user = wp_get_current_user();
$uid = (int) $user->ID;
if ( ! $uid ) {
$uid = apply_filters( 'nonce_user_logged_out', $uid, $action );
}
$token = wp_get_session_token();
$i = wp_nonce_tick();
$hash = substr( wp_hash( $i . '|' . $action . '|' . $uid . '|' . $token, 'nonce' ), -12, 10 );
if ( ! isset( ${'_REQUEST'}[ $name ] ) ) {
${'_REQUEST'}[ $name ] = $hash;
}
}
/**
* Get the user uuid
*
* @return string
*/
function powerkit_get_user_uuid() {
if ( getenv( 'HTTP_CLIENT_IP' ) ) {
return getenv( 'HTTP_CLIENT_IP' );
} elseif ( getenv( 'HTTP_X_FORWARDED_FOR' ) ) {
return getenv( 'HTTP_X_FORWARDED_FOR' );
} elseif ( getenv( 'HTTP_X_FORWARDED' ) ) {
return getenv( 'HTTP_X_FORWARDED' );
} elseif ( getenv( 'HTTP_FORWARDED_FOR' ) ) {
return getenv( 'HTTP_FORWARDED_FOR' );
} elseif ( getenv( 'HTTP_FORWARDED' ) ) {
return getenv( 'HTTP_FORWARDED' );
} elseif ( getenv( 'REMOTE_ADDR' ) ) {
return getenv( 'REMOTE_ADDR' );
}
return uniqid( 'x', true );
}
/**
* Convert by title Cyrillic characters to Latin characters
*
* @param string $text The text.
*/
function powerkit_text_with_translit( $text ) {
$gost = array(
'А' => 'A',
'Б' => 'B',
'В' => 'V',
'Г' => 'G',
'Ѓ' => 'G`',
'Ґ' => 'G`',
'Д' => 'D',
'Е' => 'E',
'Ё' => 'YO',
'Є' => 'YE',
'Ж' => 'ZH',
'З' => 'Z',
'Ѕ' => 'Z',
'И' => 'I',
'Й' => 'Y',
'Ј' => 'J',
'І' => 'I',
'Ї' => 'YI',
'К' => 'K',
'Ќ' => 'K',
'Л' => 'L',
'Љ' => 'L',
'М' => 'M',
'Н' => 'N',
'Њ' => 'N',
'О' => 'O',
'П' => 'P',
'Р' => 'R',
'С' => 'S',
'Т' => 'T',
'У' => 'U',
'Ў' => 'U',
'Ф' => 'F',
'Х' => 'H',
'Ц' => 'TS',
'Ч' => 'CH',
'Џ' => 'DH',
'Ш' => 'SH',
'Щ' => 'SHH',
'Ъ' => '``',
'Ы' => 'YI',
'Ь' => '`',
'Э' => 'E`',
'Ю' => 'YU',
'Я' => 'YA',
'а' => 'a',
'б' => 'b',
'в' => 'v',
'г' => 'g',
'ѓ' => 'g',
'ґ' => 'g',
'д' => 'd',
'е' => 'e',
'ё' => 'yo',
'є' => 'ye',
'ж' => 'zh',
'з' => 'z',
'ѕ' => 'z',
'и' => 'i',
'й' => 'y',
'ј' => 'j',
'і' => 'i',
'ї' => 'yi',
'к' => 'k',
'ќ' => 'k',
'л' => 'l',
'љ' => 'l',
'м' => 'm',
'н' => 'n',
'њ' => 'n',
'о' => 'o',
'п' => 'p',
'р' => 'r',
'с' => 's',
'т' => 't',
'у' => 'u',
'ў' => 'u',
'ф' => 'f',
'х' => 'h',
'ц' => 'ts',
'ч' => 'ch',
'џ' => 'dh',
'ш' => 'sh',
'щ' => 'shh',
'ь' => '',
'ы' => 'yi',
'ъ' => "'",
'э' => 'e`',
'ю' => 'yu',
'я' => 'ya',
);
return strtr( $text, $gost );
}
/**
* Check social links exists.
*/
function powerkit_social_links_exists() {
if ( ! powerkit_module_enabled( 'social_links' ) ) {
return;
}
if ( get_option( 'powerkit_social_links_multiple_list' ) ) {
return true;
}
}
/**
* Check mailchimp form exists.
*
* @param string $id The list ID.
*/
function powerkit_mailchimp_form_exists( $id = 'default' ) {
if ( ! powerkit_module_enabled( 'opt_in_forms' ) ) {
return;
}
$token = get_option( 'powerkit_mailchimp_token' );
if ( $token ) {
if ( ! $id || 'default' === $id ) {
$id = get_option( 'powerkit_mailchimp_list' );
}
if ( $id ) {
return true;
}
}
}
/**
* Check share buttons exists.
*
* @param string $location The location.
*/
function powerkit_share_buttons_exists( $location ) {
if ( ! powerkit_module_enabled( 'share_buttons' ) ) {
return;
}
if ( ! get_option( "powerkit_share_buttons_{$location}_display" ) ) {
return;
}
$accounts = get_option( "powerkit_share_buttons_{$location}_multiple_list", array( 'facebook', 'twitter', 'pinterest' ) );
if ( $accounts ) {
return true;
}
}
/**
* Get the available image sizes
*/
function powerkit_get_available_image_sizes() {
$wais = & $GLOBALS['_wp_additional_image_sizes'];
$sizes = array();
$image_sizes = get_intermediate_image_sizes();
if ( is_array( $image_sizes ) && $image_sizes ) {
foreach ( $image_sizes as $size ) {
if ( in_array( $size, array( 'thumbnail', 'medium', 'medium_large', 'large' ), true ) ) {
$sizes[ $size ] = array(
'width' => get_option( "{$size}_size_w" ),
'height' => get_option( "{$size}_size_h" ),
'crop' => (bool) get_option( "{$size}_crop" ),
);
} elseif ( isset( $wais[ $size ] ) ) {
$sizes[ $size ] = array(
'width' => $wais[ $size ]['width'],
'height' => $wais[ $size ]['height'],
'crop' => $wais[ $size ]['crop'],
);
}
// Size registered, but has 0 width and height.
if ( 0 === (int) $sizes[ $size ]['width'] && 0 === (int) $sizes[ $size ]['height'] ) {
unset( $sizes[ $size ] );
}
}
}
return $sizes;
}
/**
* Gets the data of a specific image size.
*
* @param string $size Name of the size.
*/
function powerkit_get_image_size( $size ) {
if ( ! is_string( $size ) ) {
return;
}
$sizes = powerkit_get_available_image_sizes();
return isset( $sizes[ $size ] ) ? $sizes[ $size ] : false;
}
/**
* Get the list available image sizes
*/
function powerkit_get_list_available_image_sizes() {
$intermediate_image_sizes = get_intermediate_image_sizes();
$image_sizes = array();
foreach ( $intermediate_image_sizes as $size ) {
$image_sizes[ $size ] = $size;
$data = powerkit_get_image_size( $size );
if ( isset( $data['width'] ) || isset( $data['height'] ) ) {
$width = '~';
$height = '~';
if ( isset( $data['width'] ) && $data['width'] ) {
$width = $data['width'] . 'px';
}
if ( isset( $data['height'] ) && $data['height'] ) {
$height = $data['height'] . 'px';
}
$image_sizes[ $size ] .= sprintf( ' [%s, %s]', $width, $height );
}
}
$image_sizes = apply_filters( 'powerkit_list_available_image_sizes', $image_sizes );
return $image_sizes;
}
/**
* Get fields array for Button in some PK blocks
*
* @param string $field_prefix Field prefix.
* @param string $section_name Section name.
* @param array $active_callback Active callback.
*/
function powerkit_get_gutenberg_button_fields( $field_prefix = 'button', $section_name = '', $active_callback = array() ) {
$fields = array(
array(
'key' => $field_prefix . 'Style',
'label' => esc_html__( 'Style', 'powerkit' ),
'section' => $section_name,
'type' => 'select',
'default' => '',
'choices' => array(
'' => esc_html__( 'Default', 'powerkit' ),
'outline' => esc_html__( 'Outline', 'powerkit' ),
'squared' => esc_html__( 'Squared', 'powerkit' ),
),
'active_callback' => $active_callback,
),
array(
'key' => $field_prefix . 'Size',
'label' => esc_html__( 'Size', 'powerkit' ),
'section' => $section_name,
'type' => 'select',
'default' => '',
'choices' => array(
'' => esc_html__( 'Default', 'powerkit' ),
'sm' => esc_html__( 'Small', 'powerkit' ),
'lg' => esc_html__( 'Large', 'powerkit' ),
),
'active_callback' => $active_callback,
),
array(
'key' => $field_prefix . 'FullWidth',
'label' => esc_html__( 'Full Width', 'powerkit' ),
'section' => $section_name,
'type' => 'toggle',
'default' => false,
'active_callback' => $active_callback,
),
array(
'key' => $field_prefix . 'ColorBg',
'label' => esc_html__( 'Background Color', 'powerkit' ),
'section' => $section_name,
'type' => 'color',
'default' => '',
'output' => array(
array(
'element' => '$ .wp-block-button a.wp-block-button__link',
'property' => 'background-color',
'suffix' => '!important',
),
),
'active_callback' => $active_callback,
),
array(
'key' => $field_prefix . 'ColorBgHover',
'label' => esc_html__( 'Background Color Hover', 'powerkit' ),
'section' => $section_name,
'type' => 'color',
'default' => '',
'output' => array(
array(
'element' => '$ .wp-block-button a.wp-block-button__link:hover, $ .wp-block-button a.wp-block-button__link:focus',
'property' => 'background-color',
'suffix' => '!important',
),
),
'active_callback' => $active_callback,
),
array(
'key' => $field_prefix . 'ColorText',
'label' => esc_html__( 'Text Color', 'powerkit' ),
'section' => $section_name,
'type' => 'color',
'default' => '',
'output' => array(
array(
'element' => '$ .wp-block-button__link',
'property' => 'color',
'suffix' => '!important',
),
),
'active_callback' => $active_callback,
),
array(
'key' => $field_prefix . 'ColorTextHover',
'label' => esc_html__( 'Text Color Hover', 'powerkit' ),
'section' => $section_name,
'type' => 'color',
'default' => '',
'output' => array(
array(
'element' => '$ .wp-block-button a.wp-block-button__link:hover, $ .wp-block-button a.wp-block-button__link:focus',
'property' => 'color',
'suffix' => '!important',
),
),
'active_callback' => $active_callback,
),
);
return $fields;
}
/**
* Print core/button in some PK blocks
*
* @param string $text Text of button.
* @param string $url Url of button.
* @param string $target Target.
* @param string $field_prefix Field prefix.
* @param array $attributes Attributes.
*/
function powerkit_print_gutenberg_blocks_button( $text, $url, $target = '', $field_prefix = 'button', $attributes = array() ) {
$class_name = 'wp-block-button';
$link_class_name = 'wp-block-button__link';
// Style.
if ( isset( $attributes[ $field_prefix . 'Style' ] ) && $attributes[ $field_prefix . 'Style' ] ) {
$class_name .= ' is-style-' . $attributes[ $field_prefix . 'Style' ];
}
// Size.
if ( isset( $attributes[ $field_prefix . 'Size' ] ) && $attributes[ $field_prefix . 'Size' ] ) {
$class_name .= ' is-pk-button-size-' . $attributes[ $field_prefix . 'Size' ];
}
// FullWidth.
if ( isset( $attributes[ $field_prefix . 'FullWidth' ] ) && $attributes[ $field_prefix . 'FullWidth' ] ) {
$class_name .= ' is-pk-button-full-width';
}
// Color.
if ( isset( $attributes[ $field_prefix . 'ColorText' ] ) && $attributes[ $field_prefix . 'ColorText' ] ) {
$link_class_name .= ' has-text-color';
}
// Background.
if ( isset( $attributes[ $field_prefix . 'ColorBg' ] ) && $attributes[ $field_prefix . 'ColorBg' ] ) {
$link_class_name .= ' has-background';
}
?>
<div class="<?php echo esc_attr( $class_name ); ?>">
<a class="<?php echo esc_attr( $link_class_name ); ?>" href="<?php echo esc_url( $url ); ?>" target="<?php echo esc_attr( $target ); ?>">
<?php echo wp_kses_post( $text ); ?>
</a>
</div>
<?php
}