<?php
/**
* Class description
*
* @package package_name
* @author Cherry Team
* @license GPL-2.0+
*/
// If this file is called directly, abort.
if ( ! defined( 'WPINC' ) ) {
die;
}
if ( ! class_exists( 'Jet_Popup_Utils' ) ) {
/**
* Define Jet_Popup_Utils class
*/
class Jet_Popup_Utils {
/**
* [get_plugin_license description]
* @return [type] [description]
*/
public static function get_plugin_license() {
$license_key = \Jet_Dashboard\Utils::get_plugin_license_key( 'jet-popup/jet-popup.php' );
if ( ! empty( $license_key ) ) {
return true;
}
return false;
}
/**
* Get post types options list
*
* @return array
*/
public static function get_post_types() {
$post_types = get_post_types( array( 'public' => true ), 'objects' );
$deprecated = apply_filters(
'jet-popup/post-types-list/deprecated',
array(
'attachment',
'elementor_library',
jet_popup()->post_type->slug(),
)
);
$result = array();
if ( empty( $post_types ) ) {
return $result;
}
foreach ( $post_types as $slug => $post_type ) {
if ( in_array( $slug, $deprecated ) ) {
continue;
}
$result[ $slug ] = $post_type->label;
}
return $result;
}
/**
* Get cherry popups query
*
* @since 1.0.0
* @return object
*/
public static function get_avaliable_popups() {
$avaliable_popups = [];
$avaliable_popups = [
'' => esc_html__( 'Not Selected', 'jet-popup' ),
];
$query_args = apply_filters( 'jet_popup_default_query_args',
[
'post_type' => jet_popup()->post_type->slug(),
'order' => 'DESC',
'orderby' => 'date',
'posts_per_page' => -1,
'post_status' => 'publish',
]
);
$popups_query = new WP_Query( $query_args );
if ( is_wp_error( $popups_query ) ) {
return false;
}
if ( $popups_query->have_posts() ) {
foreach ( $popups_query->posts as $popup ) {
$post_id = $popup->ID;
$post_title = $popup->post_title;
$avaliable_popups[ $post_id ] = $post_title;
}
} else {
return false;
}
return $avaliable_popups;
}
/**
* [get_avaliable_popups description]
* @return [type] [description]
*/
public static function get_roles_list() {
if ( ! function_exists( 'get_editable_roles' ) ) {
require_once ABSPATH . 'wp-admin/includes/user.php';
}
$roles['guest'] = esc_html__( 'Guest', 'jet-popup' );
foreach ( get_editable_roles() as $role_slug => $role_data ) {
$roles[ $role_slug ] = $role_data['name'];
}
return $roles;
}
/**
* [is_avaliable_for_user description]
* @param [type] $popup_roles [description]
* @return boolean [description]
*/
public static function is_avaliable_for_user( $roles ) {
if ( empty( $roles ) ) {
return true;
}
$user = wp_get_current_user();
$is_guest = empty( $user->roles ) ? true : false;
if ( ! $is_guest ) {
$user_role = $user->roles[0];
} else {
$user_role = 'guest';
}
if ( in_array( $user_role, $roles ) ) {
return true;
}
return false;
}
/**
* Returns all custom taxonomies
*
* @return [type] [description]
*/
public static function get_taxonomies() {
$taxonomies = get_taxonomies( array(
'public' => true,
'_builtin' => false
), 'objects' );
$deprecated = apply_filters(
'jet-popup/taxonomies-list/deprecated',
array()
);
$result = array();
if ( empty( $taxonomies ) ) {
return $result;
}
foreach ( $taxonomies as $slug => $tax ) {
if ( in_array( $slug, $deprecated ) ) {
continue;
}
$result[ $slug ] = $tax->label;
}
return $result;
}
/**
* [search_posts_by_type description]
* @param [type] $type [description]
* @param [type] $query [description]
* @return [type] [description]
*/
public static function search_posts_by_type( $type, $query ) {
add_filter( 'posts_where', array( __CLASS__, 'force_search_by_title' ), 10, 2 );
$posts = get_posts( array(
'post_type' => $type,
'ignore_sticky_posts' => true,
'posts_per_page' => -1,
'suppress_filters' => false,
's_title' => $query,
'post_status' => [ 'publish', 'private' ],
) );
remove_filter( 'posts_where', array( __CLASS__, 'force_search_by_title' ), 10, 2 );
$result = array();
if ( ! empty( $posts ) ) {
foreach ( $posts as $post ) {
$result[] = array(
'id' => $post->ID,
'text' => $post->post_title,
);
}
}
return $result;
}
/**
* Force query to look in post title while searching
* @return [type] [description]
*/
public static function force_search_by_title( $where, $query ) {
$args = $query->query;
if ( ! isset( $args['s_title'] ) ) {
return $where;
} else {
global $wpdb;
$searh = esc_sql( $wpdb->esc_like( $args['s_title'] ) );
$where .= " AND {$wpdb->posts}.post_title LIKE '%$searh%'";
}
return $where;
}
/**
* [search_terms_by_tax description]
* @param [type] $tax [description]
* @param [type] $query [description]
* @return [type] [description]
*/
public static function search_terms_by_tax( $tax, $query ) {
$terms = get_terms( array(
'taxonomy' => $tax,
'hide_empty' => false,
'name__like' => $query,
) );
$result = array();
if ( ! empty( $terms ) ) {
foreach ( $terms as $term ) {
$result[] = array(
'id' => $term->term_id,
'text' => $term->name,
);
}
}
return $result;
}
/**
* [get_avaliable_mailchimp_list description]
*/
public static function get_avaliable_mailchimp_list() {
$mailchimp_data = get_option( 'jet-popup-settings_mailchimp', [] );
$apikey = jet_popup()->settings->get( 'apikey', '' );
if ( empty( $mailchimp_data ) ) {
return false;
}
if ( empty( $apikey ) ) {
return false;
}
if ( ! array_key_exists( $apikey , $mailchimp_data ) ) {
return false;
}
$mailchimp_account = $mailchimp_data[ $apikey ];
if ( ! array_key_exists( 'lists' , $mailchimp_account ) ) {
return false;
}
$lists = $mailchimp_account['lists'];
$avaliable_lists = [];
foreach ( $lists as $key => $data ) {
$info = $data['info'];
$avaliable_lists[ $info['id'] ] = $info['name'];
}
if ( ! empty( $avaliable_lists ) ) {
return $avaliable_lists;
}
return false;
}
/**
* [get_avaliable_mailchimp_merge_fields description]
* @param [type] $list_id [description]
* @return [type] [description]
*/
public static function get_avaliable_mailchimp_merge_fields( $list_id ) {
$mailchimp_data = get_option( 'jet-popup-settings_mailchimp', [] );
$apikey = jet_popup()->settings->get( 'apikey', '' );
if ( empty( $mailchimp_data ) ) {
return false;
}
if ( empty( $apikey ) ) {
return false;
}
if ( ! array_key_exists( $apikey , $mailchimp_data ) ) {
return false;
}
$mailchimp_account = $mailchimp_data[ $apikey ];
if ( ! array_key_exists( 'lists', $mailchimp_account ) ) {
return false;
}
$lists = $mailchimp_account['lists'];
if ( ! array_key_exists( $list_id, $lists ) ){
return false;
}
$list = $lists[ $list_id ];
if ( ! array_key_exists( 'merge_fields', $list ) ) {
return false;
}
return $list['merge_fields'];
}
/**
* Print HTML icon template
*
* @param array $setting
* @param string $format
* @param string $icon_class
* @param bool $echo
*
* @return void|string
*/
public static function __render_icon( $settings = null, $setting = null, $format = '%s', $icon_class = '', $echo = false ) {
$new_setting = 'selected_' . $setting;
$migrated = isset( $settings[ $new_setting ] );
$is_new = empty( $settings[ $setting ] ) && class_exists( 'Elementor\Icons_Manager' ) && Elementor\Icons_Manager::is_migration_allowed();
$icon_html = '';
if ( $is_new || $migrated ) {
$attr = array( 'aria-hidden' => 'true' );
if ( ! empty( $icon_class ) ) {
$attr['class'] = $icon_class;
}
if ( isset( $settings[ $new_setting ] ) ) {
ob_start();
Elementor\Icons_Manager::render_icon( $settings[ $new_setting ], $attr );
$icon_html = ob_get_clean();
}
} else if ( ! empty( $settings[ $setting ] ) ) {
if ( empty( $icon_class ) ) {
$icon_class = $settings[ $setting ];
} else {
$icon_class .= ' ' . $settings[ $setting ];
}
$icon_html = sprintf( '<i class="%s" aria-hidden="true"></i>', $icon_class );
}
if ( empty( $icon_html ) ) {
return;
}
if ( ! $echo ) {
return sprintf( $format, $icon_html );
}
printf( $format, $icon_html );
}
/**
* [get_milliseconds_by_tag description]
* @param string $tag [description]
* @return [type] [description]
*/
public static function get_milliseconds_by_tag( $tag = 'none' ) {
if ( 'none' === $tag ) {
return 'none';
}
switch ( $tag ) {
case 'minute':
$delay = MINUTE_IN_SECONDS * 1000;
break;
case '10minutes':
$delay = 10 * MINUTE_IN_SECONDS * 1000;
break;
case '30minutes':
$delay = 30 * MINUTE_IN_SECONDS * 1000;
break;
case 'hour':
$delay = HOUR_IN_SECONDS * 1000;
break;
case '3hours':
$delay = 3 * HOUR_IN_SECONDS * 1000;
break;
case '6hours':
$delay = 6 * HOUR_IN_SECONDS * 1000;
break;
case '12hours':
$delay = 12 * HOUR_IN_SECONDS * 1000;
break;
case 'day':
$delay = DAY_IN_SECONDS * 1000;
break;
case '3days':
$delay = 3 * DAY_IN_SECONDS * 1000;
break;
case 'week':
$delay = WEEK_IN_SECONDS * 1000;
break;
case 'month':
$delay = MONTH_IN_SECONDS * 1000;
break;
default:
$delay = 'none';
break;
}
return $delay;
}
}
}