1453 lines
40 KiB
PHP
1453 lines
40 KiB
PHP
<?php
|
|
|
|
namespace Essential_Addons_Elementor\Classes;
|
|
|
|
if (!defined('ABSPATH')) {
|
|
exit;
|
|
} // Exit if accessed directly
|
|
|
|
use \Elementor\Controls_Manager;
|
|
use Elementor\Icons_Manager;
|
|
use \Elementor\Utils;
|
|
use Elementor\Plugin;
|
|
|
|
class Helper
|
|
{
|
|
|
|
|
|
const EAEL_ALLOWED_HTML_TAGS = [
|
|
'article',
|
|
'aside',
|
|
'div',
|
|
'footer',
|
|
'h1',
|
|
'h2',
|
|
'h3',
|
|
'h4',
|
|
'h5',
|
|
'h6',
|
|
'header',
|
|
'main',
|
|
'nav',
|
|
'p',
|
|
'section',
|
|
'span',
|
|
];
|
|
|
|
/**
|
|
* It stores all faqs data for all ea elements
|
|
* @since 5.1.9
|
|
*/
|
|
public static $eael_advanced_accordion_faq = [];
|
|
|
|
/**
|
|
* Returns all the faqs in one instance
|
|
*
|
|
* @since 5.1.9
|
|
* @return array
|
|
*/
|
|
public static function get_eael_advanced_accordion_faq(){
|
|
$json = [];
|
|
if( count( self::$eael_advanced_accordion_faq ) ) {
|
|
$json = [
|
|
'@context' => 'https://schema.org',
|
|
'@type' => 'FAQPage',
|
|
'mainEntity' => self::$eael_advanced_accordion_faq,
|
|
];
|
|
}
|
|
|
|
return $json;
|
|
}
|
|
|
|
/**
|
|
* Adds faq to the faq list
|
|
* @since 5.1.9
|
|
* @param array $faq single faq data - question and answer
|
|
*/
|
|
public static function set_eael_advanced_accordion_faq( $faq ){
|
|
return self::$eael_advanced_accordion_faq[] = $faq;
|
|
}
|
|
|
|
/**
|
|
* Include a file with variables
|
|
*
|
|
* @param $file_path
|
|
* @param $variables
|
|
*
|
|
* @return string
|
|
* @since 4.2.2
|
|
*/
|
|
public static function include_with_variable( $file_path, $variables = [])
|
|
{
|
|
if (file_exists($file_path)) {
|
|
extract($variables);
|
|
|
|
ob_start();
|
|
|
|
include $file_path;
|
|
|
|
return ob_get_clean();
|
|
}
|
|
|
|
return '';
|
|
}
|
|
|
|
/**
|
|
* check EAEL extension can load this page or post
|
|
*
|
|
* @param $id page or post id
|
|
*
|
|
* @return bool
|
|
* @since 4.0.4
|
|
*/
|
|
public static function prevent_extension_loading($post_id)
|
|
{
|
|
$template_name = get_post_meta($post_id, '_elementor_template_type', true);
|
|
$template_list = [
|
|
'header',
|
|
'footer',
|
|
'single',
|
|
'post',
|
|
'page',
|
|
// 'archive',
|
|
'search-results',
|
|
'error-404',
|
|
// 'product',
|
|
// 'product-archive',
|
|
'section',
|
|
];
|
|
|
|
return in_array($template_name, $template_list);
|
|
}
|
|
|
|
public static function str_to_css_id( $str ) {
|
|
$str = strtolower( $str );
|
|
|
|
//Make alphanumeric (removes all other characters)
|
|
$str = preg_replace( "/[^a-z0-9_\s-]/", "", $str );
|
|
|
|
//Clean up multiple dashes or whitespaces
|
|
$str = preg_replace( "/[\s-]+/", " ", $str );
|
|
|
|
//Convert whitespaces and underscore to dash
|
|
$str = preg_replace( "/[\s_]/", "-", $str );
|
|
|
|
return $str;
|
|
}
|
|
|
|
public static function fix_old_query($settings)
|
|
{
|
|
$update_query = false;
|
|
|
|
foreach ($settings as $key => $value) {
|
|
if (strpos($key, 'eaeposts_') !== false) {
|
|
$settings[str_replace('eaeposts_', '', $key)] = $value;
|
|
$update_query = true;
|
|
}
|
|
}
|
|
|
|
if ($update_query) {
|
|
global $wpdb;
|
|
|
|
$post_id = get_the_ID();
|
|
$data = get_post_meta($post_id, '_elementor_data', true);
|
|
$data = str_replace('eaeposts_', '', $data);
|
|
$wpdb->update(
|
|
$wpdb->postmeta,
|
|
[
|
|
'meta_value' => $data,
|
|
],
|
|
[
|
|
'post_id' => $post_id,
|
|
'meta_key' => '_elementor_data',
|
|
]
|
|
);
|
|
}
|
|
|
|
return $settings;
|
|
}
|
|
|
|
public static function get_query_args($settings = [], $post_type = 'post')
|
|
{
|
|
$settings = wp_parse_args( $settings, [
|
|
'post_type' => $post_type,
|
|
'posts_ids' => [],
|
|
'orderby' => 'date',
|
|
'order' => 'desc',
|
|
'posts_per_page' => 3,
|
|
'offset' => 0,
|
|
'post__not_in' => [],
|
|
] );
|
|
|
|
$args = [
|
|
'orderby' => $settings['orderby'],
|
|
'order' => $settings['order'],
|
|
'ignore_sticky_posts' => 1,
|
|
'post_status' => 'publish',
|
|
'posts_per_page' => $settings['posts_per_page'],
|
|
'offset' => $settings['offset'],
|
|
];
|
|
|
|
if ( 'by_id' === $settings['post_type'] ) {
|
|
$args['post_type'] = 'any';
|
|
$args['post__in'] = empty( $settings['posts_ids'] ) ? [ 0 ] : $settings['posts_ids'];
|
|
} else {
|
|
$args['post_type'] = $settings['post_type'];
|
|
$args['tax_query'] = [];
|
|
|
|
$taxonomies = get_object_taxonomies( $settings['post_type'], 'objects' );
|
|
|
|
foreach ( $taxonomies as $object ) {
|
|
$setting_key = $object->name . '_ids';
|
|
|
|
if ( ! empty( $settings[ $setting_key ] ) ) {
|
|
$args['tax_query'][] = [
|
|
'taxonomy' => $object->name,
|
|
'field' => 'term_id',
|
|
'terms' => $settings[ $setting_key ],
|
|
];
|
|
}
|
|
}
|
|
|
|
if ( ! empty( $args['tax_query'] ) ) {
|
|
$args['tax_query']['relation'] = 'AND';
|
|
}
|
|
}
|
|
|
|
if ( $args['orderby'] === 'most_viewed' ) {
|
|
$args['orderby'] = 'meta_value_num';
|
|
$args['meta_key'] = '_eael_post_view_count';
|
|
}
|
|
|
|
if ( ! empty( $settings['authors'] ) ) {
|
|
$args['author__in'] = $settings['authors'];
|
|
}
|
|
|
|
if ( ! empty( $settings['post__not_in'] ) ) {
|
|
$args['post__not_in'] = $settings['post__not_in'];
|
|
}
|
|
|
|
return $args;
|
|
}
|
|
|
|
/**
|
|
* Go Premium
|
|
*
|
|
*/
|
|
public static function go_premium($wb)
|
|
{
|
|
$wb->start_controls_section(
|
|
'eael_section_pro',
|
|
[
|
|
'label' => __('Go Premium for More Features', 'essential-addons-for-elementor-lite'),
|
|
]
|
|
);
|
|
|
|
$wb->add_control(
|
|
'eael_control_get_pro',
|
|
[
|
|
'label' => __('Unlock more possibilities', 'essential-addons-for-elementor-lite'),
|
|
'type' => Controls_Manager::CHOOSE,
|
|
'options' => [
|
|
'1' => [
|
|
'title' => '',
|
|
'icon' => 'fa fa-unlock-alt',
|
|
],
|
|
],
|
|
'default' => '1',
|
|
'description' => '<span class="pro-feature"> Get the <a href="https://wpdeveloper.com/upgrade/ea-pro" target="_blank">Pro version</a> for more stunning elements and customization options.</span>',
|
|
]
|
|
);
|
|
|
|
$wb->end_controls_section();
|
|
}
|
|
|
|
/**
|
|
* Get All POst Types
|
|
* @return array
|
|
*/
|
|
public static function get_post_types()
|
|
{
|
|
$post_types = get_post_types(['public' => true, 'show_in_nav_menus' => true], 'objects');
|
|
$post_types = wp_list_pluck($post_types, 'label', 'name');
|
|
|
|
return array_diff_key($post_types, ['elementor_library', 'attachment']);
|
|
}
|
|
|
|
/**
|
|
* Get all types of post.
|
|
*
|
|
* @param string $post_type
|
|
*
|
|
* @return array
|
|
*/
|
|
public static function get_post_list($post_type = 'any')
|
|
{
|
|
return self::get_query_post_list($post_type);
|
|
}
|
|
|
|
/**
|
|
* POst Orderby Options
|
|
*
|
|
* @return array
|
|
*/
|
|
public static function get_post_orderby_options()
|
|
{
|
|
$orderby = array(
|
|
'ID' => __( 'Post ID', 'essential-addons-for-elementor-lite' ),
|
|
'author' => __( 'Post Author', 'essential-addons-for-elementor-lite' ),
|
|
'title' => __( 'Title', 'essential-addons-for-elementor-lite' ),
|
|
'date' => __( 'Date', 'essential-addons-for-elementor-lite' ),
|
|
'modified' => __( 'Last Modified Date', 'essential-addons-for-elementor-lite' ),
|
|
'parent' => __( 'Parent Id', 'essential-addons-for-elementor-lite' ),
|
|
'rand' => __( 'Random', 'essential-addons-for-elementor-lite' ),
|
|
'comment_count' => __( 'Comment Count', 'essential-addons-for-elementor-lite' ),
|
|
'most_viewed' => __( 'Most Viewed', 'essential-addons-for-elementor-lite' ),
|
|
'menu_order' => __( 'Menu Order', 'essential-addons-for-elementor-lite' )
|
|
);
|
|
|
|
return $orderby;
|
|
}
|
|
|
|
/**
|
|
* Get Post Categories
|
|
*
|
|
* @return array
|
|
*/
|
|
public static function get_terms_list($taxonomy = 'category', $key = 'term_id')
|
|
{
|
|
$options = [];
|
|
$terms = get_terms([
|
|
'taxonomy' => $taxonomy,
|
|
'hide_empty' => true,
|
|
]);
|
|
|
|
if (!empty($terms) && !is_wp_error($terms)) {
|
|
foreach ($terms as $term) {
|
|
$options[$term->{$key}] = $term->name;
|
|
}
|
|
}
|
|
|
|
return $options;
|
|
}
|
|
|
|
/**
|
|
* Get all elementor page templates
|
|
*
|
|
* @param null $type
|
|
*
|
|
* @return array
|
|
*/
|
|
public static function get_elementor_templates($type = null)
|
|
{
|
|
$options = [];
|
|
|
|
if ($type) {
|
|
$args = [
|
|
'post_type' => 'elementor_library',
|
|
'posts_per_page' => -1,
|
|
];
|
|
$args['tax_query'] = [
|
|
[
|
|
'taxonomy' => 'elementor_library_type',
|
|
'field' => 'slug',
|
|
'terms' => $type,
|
|
],
|
|
];
|
|
|
|
$page_templates = get_posts($args);
|
|
|
|
if (!empty($page_templates) && !is_wp_error($page_templates)) {
|
|
foreach ($page_templates as $post) {
|
|
$options[$post->ID] = $post->post_title;
|
|
}
|
|
}
|
|
} else {
|
|
$options = self::get_query_post_list('elementor_library');
|
|
}
|
|
|
|
return $options;
|
|
}
|
|
|
|
/**
|
|
* Get all Authors
|
|
*
|
|
* @return array
|
|
*/
|
|
public static function get_authors_list() {
|
|
$args = [
|
|
'capability' => [ 'edit_posts' ],
|
|
'has_published_posts' => true,
|
|
'fields' => [
|
|
'ID',
|
|
'display_name',
|
|
],
|
|
];
|
|
|
|
// Capability queries were only introduced in WP 5.9.
|
|
if ( version_compare( $GLOBALS['wp_version'], '5.9-alpha', '<' ) ) {
|
|
$args['who'] = 'authors';
|
|
unset( $args['capability'] );
|
|
}
|
|
|
|
$users = get_users( $args );
|
|
|
|
if ( ! empty( $users ) ) {
|
|
return wp_list_pluck( $users, 'display_name', 'ID' );
|
|
}
|
|
|
|
return [];
|
|
}
|
|
|
|
/**
|
|
* Get all Tags
|
|
*
|
|
* @param array $args
|
|
*
|
|
* @return array
|
|
*/
|
|
public static function get_tags_list($args = array())
|
|
{
|
|
$options = [];
|
|
$tags = get_tags($args);
|
|
|
|
if (!is_wp_error($tags) && !empty($tags)) {
|
|
foreach ($tags as $tag) {
|
|
$options[$tag->term_id] = $tag->name;
|
|
}
|
|
}
|
|
|
|
return $options;
|
|
}
|
|
|
|
/**
|
|
* Get all taxonomies by post
|
|
*
|
|
* @param array $args
|
|
*
|
|
* @param string $output
|
|
* @param string $operator
|
|
*
|
|
* @return array
|
|
*/
|
|
public static function get_taxonomies_by_post($args = [], $output = 'names', $operator = 'and')
|
|
{
|
|
global $wp_taxonomies;
|
|
|
|
$field = ('names' === $output) ? 'name' : false;
|
|
|
|
// Handle 'object_type' separately.
|
|
if (isset($args['object_type'])) {
|
|
$object_type = (array) $args['object_type'];
|
|
unset($args['object_type']);
|
|
}
|
|
|
|
$taxonomies = wp_filter_object_list($wp_taxonomies, $args, $operator);
|
|
|
|
if (isset($object_type)) {
|
|
foreach ($taxonomies as $tax => $tax_data) {
|
|
if (!array_intersect($object_type, $tax_data->object_type)) {
|
|
unset($taxonomies[$tax]);
|
|
}
|
|
}
|
|
}
|
|
|
|
if ($field) {
|
|
$taxonomies = wp_list_pluck($taxonomies, $field);
|
|
}
|
|
|
|
return $taxonomies;
|
|
}
|
|
|
|
/**
|
|
* Get Contact Form 7 [ if exists ]
|
|
*/
|
|
public static function get_wpcf7_list()
|
|
{
|
|
$options = array();
|
|
|
|
if (function_exists('wpcf7')) {
|
|
$wpcf7_form_list = get_posts(array(
|
|
'post_type' => 'wpcf7_contact_form',
|
|
'showposts' => 999,
|
|
));
|
|
$options[0] = esc_html__('Select a Contact Form', 'essential-addons-for-elementor-lite');
|
|
if (!empty($wpcf7_form_list) && !is_wp_error($wpcf7_form_list)) {
|
|
foreach ($wpcf7_form_list as $post) {
|
|
$options[$post->ID] = $post->post_title;
|
|
}
|
|
} else {
|
|
$options[0] = esc_html__('Create a Form First', 'essential-addons-for-elementor-lite');
|
|
}
|
|
}
|
|
return $options;
|
|
}
|
|
|
|
/**
|
|
* Get Gravity Form [ if exists ]
|
|
*
|
|
* @return array
|
|
*/
|
|
public static function get_gravity_form_list()
|
|
{
|
|
$options = array();
|
|
|
|
if (class_exists('GFCommon')) {
|
|
$gravity_forms = \RGFormsModel::get_forms(null, 'title');
|
|
|
|
if (!empty($gravity_forms) && !is_wp_error($gravity_forms)) {
|
|
|
|
$options[0] = esc_html__('Select Gravity Form', 'essential-addons-for-elementor-lite');
|
|
foreach ($gravity_forms as $form) {
|
|
$options[$form->id] = $form->title;
|
|
}
|
|
|
|
} else {
|
|
$options[0] = esc_html__('Create a Form First', 'essential-addons-for-elementor-lite');
|
|
}
|
|
}
|
|
|
|
return $options;
|
|
}
|
|
|
|
/**
|
|
* Get WeForms Form List
|
|
*
|
|
* @return array
|
|
*/
|
|
public static function get_weform_list()
|
|
{
|
|
$wpuf_form_list = get_posts(array(
|
|
'post_type' => 'wpuf_contact_form',
|
|
'showposts' => 999,
|
|
));
|
|
|
|
$options = array();
|
|
|
|
if (!empty($wpuf_form_list) && !is_wp_error($wpuf_form_list)) {
|
|
$options[0] = esc_html__('Select weForm', 'essential-addons-for-elementor-lite');
|
|
foreach ($wpuf_form_list as $post) {
|
|
$options[$post->ID] = $post->post_title;
|
|
}
|
|
} else {
|
|
$options[0] = esc_html__('Create a Form First', 'essential-addons-for-elementor-lite');
|
|
}
|
|
|
|
return $options;
|
|
}
|
|
|
|
/**
|
|
* Get Ninja Form List
|
|
*
|
|
* @return array
|
|
*/
|
|
public static function get_ninja_form_list()
|
|
{
|
|
$options = array();
|
|
|
|
if (class_exists('Ninja_Forms')) {
|
|
$contact_forms = Ninja_Forms()->form()->get_forms();
|
|
|
|
if (!empty($contact_forms) && !is_wp_error($contact_forms)) {
|
|
|
|
$options[0] = esc_html__('Select Ninja Form', 'essential-addons-for-elementor-lite');
|
|
|
|
foreach ($contact_forms as $form) {
|
|
$options[$form->get_id()] = $form->get_setting('title');
|
|
}
|
|
}
|
|
} else {
|
|
$options[0] = esc_html__('Create a Form First', 'essential-addons-for-elementor-lite');
|
|
}
|
|
|
|
return $options;
|
|
}
|
|
|
|
/**
|
|
* Get Caldera Form List
|
|
*
|
|
* @return array
|
|
*/
|
|
public static function get_caldera_form_list()
|
|
{
|
|
$options = array();
|
|
|
|
if (class_exists('Caldera_Forms')) {
|
|
$contact_forms = \Caldera_Forms_Forms::get_forms(true, true);
|
|
|
|
if (!empty($contact_forms) && !is_wp_error($contact_forms)) {
|
|
$options[0] = esc_html__('Select Caldera Form', 'essential-addons-for-elementor-lite');
|
|
foreach ($contact_forms as $form) {
|
|
$options[$form['ID']] = $form['name'];
|
|
}
|
|
}
|
|
} else {
|
|
$options[0] = esc_html__('Create a Form First', 'essential-addons-for-elementor-lite');
|
|
}
|
|
|
|
return $options;
|
|
}
|
|
|
|
/**
|
|
* Get WPForms List
|
|
*
|
|
* @return array
|
|
*/
|
|
public static function get_wpforms_list()
|
|
{
|
|
$options = array();
|
|
|
|
if (class_exists('\WPForms\WPForms')) {
|
|
$args = array(
|
|
'post_type' => 'wpforms',
|
|
'posts_per_page' => -1,
|
|
);
|
|
|
|
$contact_forms = get_posts($args);
|
|
|
|
if (!empty($contact_forms) && !is_wp_error($contact_forms)) {
|
|
$options[0] = esc_html__('Select a WPForm', 'essential-addons-for-elementor-lite');
|
|
foreach ($contact_forms as $post) {
|
|
$options[$post->ID] = $post->post_title;
|
|
}
|
|
}
|
|
} else {
|
|
$options[0] = esc_html__('Create a Form First', 'essential-addons-for-elementor-lite');
|
|
}
|
|
|
|
return $options;
|
|
}
|
|
|
|
|
|
|
|
public static function get_ninja_tables_list()
|
|
{
|
|
$tables = get_posts([
|
|
'post_type' => 'ninja-table',
|
|
'post_status' => 'publish',
|
|
'posts_per_page' => '-1',
|
|
]);
|
|
|
|
if (!empty($tables)) {
|
|
return wp_list_pluck($tables, 'post_title', 'ID');
|
|
}
|
|
|
|
return [];
|
|
}
|
|
|
|
public static function get_terms_as_list($term_type = 'category', $length = 1)
|
|
{
|
|
$terms = get_the_terms( get_the_ID(), $term_type );
|
|
|
|
if ($term_type === 'category') {
|
|
$terms = get_the_category();
|
|
}
|
|
|
|
if ($term_type === 'tags') {
|
|
$terms = get_the_tags();
|
|
}
|
|
|
|
if (empty($terms)) {
|
|
return;
|
|
}
|
|
|
|
$count = 0;
|
|
|
|
$html = '<ul class="post-carousel-categories">';
|
|
foreach ($terms as $term) {
|
|
if ( $count === absint( $length ) ) {
|
|
break;
|
|
}
|
|
$link = ($term_type === 'category') ? get_category_link($term->term_id) : get_tag_link($term->term_id);
|
|
$html .= '<li>';
|
|
$html .= '<a href="' . esc_url($link) . '">';
|
|
$html .= $term->name;
|
|
$html .= '</a>';
|
|
$html .= '</li>';
|
|
$count++;
|
|
}
|
|
$html .= '</ul>';
|
|
|
|
return $html;
|
|
|
|
}
|
|
|
|
/**
|
|
* Returns product categories list
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function get_product_categories_list($terms_name) {
|
|
global $product;
|
|
|
|
if ( ! is_a( $product, 'WC_Product' ) ) {
|
|
return;
|
|
}
|
|
|
|
$separator = '';
|
|
$before = '<ul class="eael-product-cats"><li>';
|
|
$after = '</li></ul>';
|
|
|
|
return get_the_term_list( $product->get_id(), $terms_name, $before, $separator, $after );
|
|
}
|
|
|
|
/**
|
|
* This function is responsible for counting doc post under a category.
|
|
*
|
|
* @param int $term_count
|
|
* @param int $term_id
|
|
* @return int $term_count;
|
|
*/
|
|
public static function get_doc_post_count($term_count = 0, $term_id = 0)
|
|
{
|
|
$tax_terms = get_terms('doc_category', ['child_of' => $term_id]);
|
|
|
|
foreach ($tax_terms as $tax_term) {
|
|
$term_count += $tax_term->count;
|
|
}
|
|
|
|
return $term_count;
|
|
}
|
|
|
|
public static function get_dynamic_args(array $settings, array $args)
|
|
{
|
|
if ( $settings['post_type'] === 'source_dynamic' && ( is_archive() || is_search() ) ) {
|
|
$data = get_queried_object();
|
|
|
|
if (isset($data->post_type)) {
|
|
$args['post_type'] = $data->post_type;
|
|
$args['tax_query'] = [];
|
|
} else {
|
|
global $wp_query;
|
|
$args['post_type'] = $wp_query->query_vars['post_type'];
|
|
if(!empty($wp_query->query_vars['s'])){
|
|
$args['s'] = $wp_query->query_vars['s'];
|
|
$args['offset'] = 0;
|
|
}
|
|
}
|
|
|
|
if ( isset( $data->taxonomy ) ) {
|
|
$args[ 'tax_query' ][] = [
|
|
'taxonomy' => $data->taxonomy,
|
|
'field' => 'term_id',
|
|
'terms' => $data->term_id,
|
|
];
|
|
}
|
|
|
|
if ( isset($data->taxonomy) ) {
|
|
$args[ 'tax_query' ][] = [
|
|
'taxonomy' => $data->taxonomy,
|
|
'field' => 'term_id',
|
|
'terms' => $data->term_id,
|
|
];
|
|
}
|
|
|
|
if (get_query_var('author') > 0) {
|
|
$args['author__in'] = get_query_var('author');
|
|
}
|
|
|
|
if (get_query_var('s')!='') {
|
|
$args['s'] = get_query_var('s');
|
|
}
|
|
|
|
if (get_query_var('year') || get_query_var('monthnum') || get_query_var('day')) {
|
|
$args['date_query'] = [
|
|
'year' => get_query_var('year'),
|
|
'month' => get_query_var('monthnum'),
|
|
'day' => get_query_var('day'),
|
|
];
|
|
}
|
|
|
|
if (!empty($args['tax_query'])) {
|
|
$args['tax_query']['relation'] = 'AND';
|
|
}
|
|
|
|
$args[ 'meta_query' ] = [ 'relation' => 'AND' ];
|
|
$show_stock_out_products = isset( $settings['eael_product_out_of_stock_show'] ) ? $settings['eael_product_out_of_stock_show'] : 'yes';
|
|
|
|
if ( get_option( 'woocommerce_hide_out_of_stock_items' ) == 'yes' || 'yes' !== $show_stock_out_products ) {
|
|
$args[ 'meta_query' ][] = [
|
|
'key' => '_stock_status',
|
|
'value' => 'instock'
|
|
];
|
|
}
|
|
}
|
|
|
|
return $args;
|
|
}
|
|
|
|
public static function get_multiple_kb_terms($prettify = false, $term_id = true)
|
|
{
|
|
$args = [
|
|
'taxonomy' => 'knowledge_base',
|
|
'hide_empty' => true,
|
|
'parent' => 0,
|
|
];
|
|
|
|
$terms = get_terms($args);
|
|
|
|
if (is_wp_error($terms)) {
|
|
return [];
|
|
}
|
|
|
|
if ($prettify) {
|
|
$pretty_taxonomies = [];
|
|
|
|
foreach ($terms as $term) {
|
|
$pretty_taxonomies[$term_id ? $term->term_id : $term->slug] = $term->name;
|
|
}
|
|
|
|
return $pretty_taxonomies;
|
|
}
|
|
|
|
return $terms;
|
|
}
|
|
|
|
public static function get_betterdocs_multiple_kb_status()
|
|
{
|
|
if (\BetterDocs_DB::get_settings('multiple_kb') == 1) {
|
|
return 'true';
|
|
}
|
|
|
|
return '';
|
|
}
|
|
|
|
public static function get_query_post_list($post_type = 'any', $limit = -1, $search = '')
|
|
{
|
|
global $wpdb;
|
|
$where = '';
|
|
$data = [];
|
|
|
|
if (-1 == $limit) {
|
|
$limit = '';
|
|
} elseif (0 == $limit) {
|
|
$limit = "limit 0,1";
|
|
} else {
|
|
$limit = $wpdb->prepare(" limit 0,%d", esc_sql($limit));
|
|
}
|
|
|
|
if ('any' === $post_type) {
|
|
$in_search_post_types = get_post_types(['exclude_from_search' => false]);
|
|
if (empty($in_search_post_types)) {
|
|
$where .= ' AND 1=0 ';
|
|
} else {
|
|
$where .= " AND {$wpdb->posts}.post_type IN ('" . join("', '",
|
|
array_map('esc_sql', $in_search_post_types)) . "')";
|
|
}
|
|
} elseif (!empty($post_type)) {
|
|
$where .= $wpdb->prepare(" AND {$wpdb->posts}.post_type = %s", esc_sql($post_type));
|
|
}
|
|
|
|
if (!empty($search)) {
|
|
$where .= $wpdb->prepare(" AND {$wpdb->posts}.post_title LIKE %s", '%' . esc_sql($search) . '%');
|
|
}
|
|
|
|
$query = "select post_title,ID from $wpdb->posts where post_status = 'publish' $where $limit";
|
|
$results = $wpdb->get_results($query);
|
|
if (!empty($results)) {
|
|
foreach ($results as $row) {
|
|
$data[$row->ID] = $row->post_title;
|
|
}
|
|
}
|
|
return $data;
|
|
}
|
|
|
|
public static function eael_get_widget_settings( $page_id, $widget_id ) {
|
|
$document = Plugin::$instance->documents->get( $page_id );
|
|
$settings = [];
|
|
if ( $document ) {
|
|
$elements = Plugin::instance()->documents->get( $page_id )->get_elements_data();
|
|
$widget_data = self::find_element_recursive( $elements, $widget_id );
|
|
if (!empty($widget_data) && is_array($widget_data)) {
|
|
$widget = Plugin::instance()->elements_manager->create_element_instance( $widget_data );
|
|
}
|
|
if ( !empty($widget) ) {
|
|
$settings = $widget->get_settings_for_display();
|
|
}
|
|
}
|
|
return $settings;
|
|
}
|
|
|
|
/**
|
|
* Get Widget data.
|
|
*
|
|
* @param array $elements Element array.
|
|
* @param string $form_id Element ID.
|
|
*
|
|
* @return bool|array
|
|
*/
|
|
public static function find_element_recursive( $elements, $form_id ) {
|
|
|
|
foreach ( $elements as $element ) {
|
|
if ( $form_id === $element['id'] ) {
|
|
return $element;
|
|
}
|
|
|
|
if ( ! empty( $element['elements'] ) ) {
|
|
$element = self::find_element_recursive( $element['elements'], $form_id );
|
|
|
|
if ( $element ) {
|
|
return $element;
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
/**
|
|
* eael_pagination
|
|
* Generate post pagination
|
|
*
|
|
* @param $args array wp_query param
|
|
* @param $settings array Elementor widget setting data
|
|
*
|
|
* @access public
|
|
* @return string|void
|
|
* @since 3.3.0
|
|
*/
|
|
public static function eael_pagination ($args, $settings) {
|
|
|
|
$pagination_Count = intval( $args['total_post'] );
|
|
$paginationLimit = intval( $settings['eael_product_grid_products_count'] ) ?: 4;
|
|
$pagination_Paginationlist = ceil( $pagination_Count / $paginationLimit );
|
|
$widget_id = sanitize_key( $settings['eael_widget_id'] );
|
|
$page_id = intval( $settings['eael_page_id'] );
|
|
$next_label = $settings['pagination_next_label'];
|
|
$adjacents = "2";
|
|
$setPagination = "";
|
|
$template_info = [
|
|
'dir' => 'free',
|
|
'file_name' => $settings['eael_dynamic_template_Layout'],
|
|
'name' => $settings['eael_widget_name']
|
|
];
|
|
|
|
if( $pagination_Paginationlist > 0 ){
|
|
|
|
$setPagination .="<nav id='{$widget_id}-eael-pagination' class='eael-woo-pagination' data-plimit='$paginationLimit' data-totalpage ='{$args['total_post']}' data-widgetid='{$widget_id}' data-pageid='$page_id' data-args='".http_build_query( $args )."' data-template='".json_encode( $template_info, 1 )."'>";
|
|
$setPagination .="<ul class='page-numbers'>";
|
|
|
|
if ( $pagination_Paginationlist < 7 + ($adjacents * 2) ){
|
|
for ( $pagination = 1; $pagination <= $pagination_Paginationlist; $pagination ++ ) {
|
|
$active = ( $pagination == 0 || $pagination == 1 ) ? 'current' : '';
|
|
$setPagination .= sprintf("<li><a href='javascript:void(0);' id='post' class='page-numbers %s' data-pnumber='%2\$d'>%2\$d</a></li>" ,$active ,$pagination);
|
|
}
|
|
|
|
} else if ( $pagination_Paginationlist >= 5 + ($adjacents * 2) ){
|
|
for ( $pagination = 1; $pagination <= 4 + ( $adjacents * 2 ); $pagination ++ ) {
|
|
$active = ( $pagination == 0 || $pagination == 1 ) ? 'current' : '';
|
|
$setPagination .= sprintf("<li><a href='javascript:void(0);' id='post' class='page-numbers %s' data-pnumber='%2\$d'>%2\$d</a></li>" ,$active ,$pagination);
|
|
}
|
|
|
|
$setPagination .="<li class='pagitext dots'>...</li>";
|
|
$setPagination .= sprintf("<li><a href='javascript:void(0);' id='post' class='page-numbers %s' data-pnumber='%2\$d'>%2\$d</a></li>" ,$active ,$pagination);
|
|
}
|
|
|
|
if ($pagination_Paginationlist > 1) {
|
|
$setPagination .= "<li class='pagitext'><a href='javascript:void(0);' class='page-numbers' data-pnumber='2'>".esc_html( $next_label )."</a></li>";
|
|
}
|
|
|
|
$setPagination .="</ul>";
|
|
$setPagination .="</nav>";
|
|
|
|
return $setPagination;
|
|
}
|
|
}
|
|
|
|
public static function eael_product_quick_view ($product, $settings, $widget_id) {
|
|
|
|
$sale_badge_align = isset( $settings['eael_product_sale_badge_alignment'] ) ? $settings['eael_product_sale_badge_alignment'] : '';
|
|
$sale_badge_preset = isset( $settings['eael_product_sale_badge_preset'] ) ? $settings['eael_product_sale_badge_preset'] : '';
|
|
$sale_text = ! empty( $settings['eael_product_carousel_sale_text'] ) ? $settings['eael_product_carousel_sale_text'] : (! empty( $settings['eael_product_sale_text'] ) ? $settings['eael_product_sale_text'] :( !empty( $settings['eael_product_gallery_sale_text'] ) ? $settings['eael_product_gallery_sale_text'] : 'Sale!' ));
|
|
$stockout_text = ! empty( $settings['eael_product_carousel_stockout_text'] ) ? $settings['eael_product_carousel_stockout_text'] : (! empty( $settings['eael_product_stockout_text'] ) ? $settings['eael_product_stockout_text'] : ( !empty($settings['eael_product_gallery_stockout_text']) ? $settings['eael_product_gallery_stockout_text'] : 'Stock Out' ));
|
|
$tag = ! empty( $settings['eael_product_quick_view_title_tag'] ) ? self::eael_validate_html_tag( $settings['eael_product_quick_view_title_tag'] ) : 'h1';
|
|
|
|
remove_action( 'eael_woo_single_product_summary', 'woocommerce_template_single_title', 5 );
|
|
add_action( 'eael_woo_single_product_summary', function () use ( $tag ) {
|
|
printf('<%1$s class="eael-product-quick-view-title product_title entry-title">%2$s</%1$s>',$tag,Helper::eael_wp_kses( get_the_title() ));
|
|
}, 5 );
|
|
|
|
?>
|
|
|
|
<div id="eaproduct<?php echo esc_attr( $widget_id . $product->get_id() ); ?>" class="eael-product-popup
|
|
eael-product-zoom-in woocommerce">
|
|
<div class="eael-product-modal-bg"></div>
|
|
<div class="eael-product-popup-details">
|
|
<div id="product-<?php esc_attr( get_the_ID() ); ?>" <?php post_class( 'product' ); ?>>
|
|
<div class="eael-product-image-wrap">
|
|
<?php
|
|
echo ( ! $product->is_in_stock() ? '<span class="eael-onsale outofstock '.esc_attr( $sale_badge_preset ).' '.esc_attr( $sale_badge_align ).'">'. Helper::eael_wp_kses( $stockout_text ) .'</span>' : ($product->is_on_sale() ? '<span class="eael-onsale '.esc_attr( $sale_badge_preset ).' '.esc_attr( $sale_badge_align ).'">' . Helper::eael_wp_kses( $sale_text ) . '</span>' : '') );
|
|
do_action( 'eael_woo_single_product_image' );
|
|
?>
|
|
</div>
|
|
<div class="eael-product-details-wrap">
|
|
<?php do_action( 'eael_woo_single_product_summary' ); ?>
|
|
</div>
|
|
</div>
|
|
<button class="eael-product-popup-close"><i class="fas fa-times"></i></button>
|
|
</div>
|
|
|
|
</div>
|
|
<?php
|
|
}
|
|
|
|
public static function eael_avoid_redirect_to_single_page() {
|
|
return '';
|
|
}
|
|
|
|
public static function eael_woo_product_grid_actions() {
|
|
|
|
add_filter( 'woocommerce_add_to_cart_form_action', self::eael_avoid_redirect_to_single_page(), 10 );
|
|
add_action( 'eael_woo_before_product_loop', 'woocommerce_output_all_notices', 30 );
|
|
|
|
}
|
|
|
|
public static function get_local_plugin_data( $basename = '' ) {
|
|
if ( empty( $basename ) ) {
|
|
return false;
|
|
}
|
|
|
|
if ( !function_exists( 'get_plugins' ) ) {
|
|
include_once ABSPATH . 'wp-admin/includes/plugin.php';
|
|
}
|
|
|
|
$plugins = get_plugins();
|
|
|
|
if ( !isset( $plugins[ $basename ] ) ) {
|
|
return false;
|
|
}
|
|
|
|
return $plugins[ $basename ];
|
|
}
|
|
|
|
/**
|
|
* eael_validate_html_tag
|
|
* @param $tag
|
|
* @return mixed|string
|
|
*/
|
|
public static function eael_validate_html_tag( $tag ){
|
|
return in_array( strtolower( $tag ), self::EAEL_ALLOWED_HTML_TAGS ) ? $tag : 'div';
|
|
}
|
|
|
|
/**
|
|
*
|
|
* Strip tag based on allowed html tag
|
|
* eael_wp_kses
|
|
* @param $text
|
|
* @return string
|
|
*/
|
|
public static function eael_wp_kses( $text ) {
|
|
if ( empty( $text ) ) {
|
|
return '';
|
|
}
|
|
return wp_kses( $text, self::eael_allowed_tags(), array_merge( wp_allowed_protocols(), [ 'data' ] ) );
|
|
}
|
|
|
|
/**
|
|
* List of allowed html tag for wp_kses
|
|
*
|
|
* eael_allowed_tags
|
|
* @return array
|
|
*/
|
|
public static function eael_allowed_tags() {
|
|
return [
|
|
'a' => [
|
|
'href' => [],
|
|
'title' => [],
|
|
'class' => [],
|
|
'rel' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
'target' => [],
|
|
],
|
|
'q' => [
|
|
'cite' => [],
|
|
'class' => [],
|
|
'id' => [],
|
|
],
|
|
'img' => [
|
|
'src' => [],
|
|
'alt' => [],
|
|
'height' => [],
|
|
'width' => [],
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => []
|
|
],
|
|
'span' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => []
|
|
],
|
|
'dfn' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => []
|
|
],
|
|
'time' => [
|
|
'datetime' => [],
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
],
|
|
'cite' => [
|
|
'title' => [],
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
],
|
|
'hr' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
],
|
|
'b' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
],
|
|
'p' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => []
|
|
],
|
|
'i' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => []
|
|
],
|
|
'u' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => []
|
|
],
|
|
's' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
],
|
|
'br' => [],
|
|
'em' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => []
|
|
],
|
|
'code' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
],
|
|
'mark' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
],
|
|
'small' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => []
|
|
],
|
|
'abbr' => [
|
|
'title' => [],
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
],
|
|
'strong' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => []
|
|
],
|
|
'del' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => []
|
|
],
|
|
'ins' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => []
|
|
],
|
|
'sub' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
],
|
|
'sup' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
],
|
|
'div' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => []
|
|
],
|
|
'strike' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
],
|
|
'acronym' => [],
|
|
'h1' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
],
|
|
'h2' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
],
|
|
'h3' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
],
|
|
'h4' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
],
|
|
'h5' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
],
|
|
'h6' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
],
|
|
'button' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
],
|
|
'center' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
],
|
|
'ul' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
],
|
|
'ol' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
],
|
|
'li' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
],
|
|
'table' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
'dir' => [],
|
|
'align' => [],
|
|
],
|
|
'thead' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
'align' => [],
|
|
],
|
|
'tbody' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
'align' => [],
|
|
],
|
|
'tfoot' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
'align' => [],
|
|
],
|
|
'th' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
'align' => [],
|
|
'colspan' => [],
|
|
'rowspan' => [],
|
|
],
|
|
'tr' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
'align' => [],
|
|
],
|
|
'td' => [
|
|
'class' => [],
|
|
'id' => [],
|
|
'style' => [],
|
|
'align' => [],
|
|
'colspan' => [],
|
|
'rowspan' => [],
|
|
],
|
|
];
|
|
}
|
|
|
|
public static function eael_fetch_color_or_global_color($settings, $control_name=''){
|
|
if( !isset($settings[$control_name])) {
|
|
return '';
|
|
}
|
|
|
|
$color = $settings[$control_name];
|
|
|
|
if(!empty($settings['__globals__']) && !empty($settings['__globals__'][$control_name])){
|
|
$color = $settings['__globals__'][$control_name];
|
|
$color_arr = explode('?id=', $color); //E.x. 'globals/colors/?id=primary'
|
|
|
|
$color_name = count($color_arr) > 1 ? $color_arr[1] : '';
|
|
if( !empty($color_name) ) {
|
|
$color = "var( --e-global-color-$color_name )";
|
|
}
|
|
}
|
|
|
|
return $color;
|
|
}
|
|
|
|
/**
|
|
* Get Render Icon
|
|
*
|
|
* Used to get render Icon for \Elementor\Controls_Manager::ICONS
|
|
* @param array $icon Icon Type, Icon value
|
|
* @param array $attributes Icon HTML Attributes
|
|
* @param string $tag Icon HTML tag, defaults to <i>
|
|
*
|
|
* @return mixed|string
|
|
*/
|
|
public static function get_render_icon( $icon, $attributes = [], $tag = 'i' ) {
|
|
if ( empty( $icon['library'] ) ) {
|
|
return false;
|
|
}
|
|
|
|
$output = '';
|
|
|
|
/**
|
|
* When the library value is svg it means that it's a SVG media attachment uploaded by the user.
|
|
* Otherwise, it's the name of the font family that the icon belongs to.
|
|
*/
|
|
if ( 'svg' === $icon['library'] ) {
|
|
$output = method_exists( 'Elementor\Icons_Manager', 'render_uploaded_svg_icon' ) ? Icons_Manager::render_uploaded_svg_icon( $icon['value'] ) : '';
|
|
} else {
|
|
$output = method_exists( 'Elementor\Icons_Manager', 'render_font_icon' ) ? Icons_Manager::render_font_icon( $icon, $attributes, $tag ) : '';
|
|
}
|
|
|
|
return $output;
|
|
}
|
|
|
|
/**
|
|
* Get SVG html by Icon
|
|
*
|
|
* Used to get svg attributes from Icon class for SVG Drawing widget
|
|
* @param string $icon Icon
|
|
*
|
|
* @return string
|
|
*/
|
|
public static function get_svg_by_icon( $icon ) {
|
|
if ( empty( $icon ) || empty( $icon['value'] ) || empty( $icon['library'] ) ) return '';
|
|
|
|
$svg_html = "";
|
|
|
|
$icon_name = str_replace( [ 'fas fa-', 'fab fa-', 'far fa-' ], '', $icon['value'] );
|
|
$library = str_replace( 'fa-', '', $icon['library'] );
|
|
$svg_object = file_get_contents( EAEL_PLUGIN_PATH . "assets/front-end/js/lib-view/icons/{$library}.json" );
|
|
$svg_object = json_decode( $svg_object, true );
|
|
$i_class = str_replace(' ', '-', $icon['value']);
|
|
|
|
if ( empty( $svg_object['icons'][$icon_name] ) ) return $svg_html;
|
|
|
|
$icon = $svg_object['icons'][$icon_name];
|
|
$view_box = "0 0 {$icon[0]} {$icon[1]}";
|
|
$svg_html .= "<svg class='svg-inline--". $i_class ." eael-svg-icon' aria-hidden='true' data-icon='store' role='img' xmlns='http://www.w3.org/2000/svg' viewBox='{$view_box}' >";
|
|
$svg_html .= "<path d='{$icon[4]}'></path>";
|
|
$svg_html .= "</svg>";
|
|
|
|
return $svg_html;
|
|
}
|
|
|
|
/**
|
|
* Get product image src and Product gallery's first image src
|
|
*
|
|
* @since 5.1.9
|
|
* @return array
|
|
*/
|
|
public static function eael_get_woo_product_gallery_image_srcs( $product, $image_size ){
|
|
$image_id = $product->get_image_id();
|
|
$image_gallery_ids = $product->get_gallery_image_ids();
|
|
|
|
$src = function_exists('wc_placeholder_img_src') ? wc_placeholder_img_src() : '';
|
|
|
|
if ( $image_id ) {
|
|
$src = wp_get_attachment_image_src( $image_id, $image_size );
|
|
$src = is_array($src) ? $src[0] : $src;
|
|
}
|
|
|
|
$src_hover = count( $image_gallery_ids ) ? wp_get_attachment_image_src( $image_gallery_ids[0], $image_size ) : '';
|
|
$src_hover = is_array($src_hover) ? $src_hover[0] : $src_hover;
|
|
|
|
return [
|
|
'src' => $src,
|
|
'src_hover' => $src_hover,
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Sanitize a 'relation' operator.
|
|
*
|
|
* @param string $relation Raw relation key from the query argument.
|
|
*
|
|
* @return string Sanitized relation ('AND' or 'OR').
|
|
* @since 5.3.2
|
|
*
|
|
*/
|
|
public static function eael_sanitize_relation( $relation ) {
|
|
if ( 'OR' === strtoupper( $relation ) ) {
|
|
return 'OR';
|
|
} else {
|
|
return 'AND';
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Get current device by screen size
|
|
*
|
|
*
|
|
* @return string device name.
|
|
* @since 5.9.1
|
|
*
|
|
*/
|
|
public static function eael_get_current_device_by_screen() {
|
|
if ( isset( $_COOKIE['eael_screen'] ) && ! empty( $breakpoints = Plugin::$instance->breakpoints->get_breakpoints_config() ) ) {
|
|
$breakpoints = array_filter( $breakpoints, function ( $breakpoint ) {
|
|
return $breakpoint['is_enabled'];
|
|
} );
|
|
|
|
if ( isset( $breakpoints['widescreen'] ) ) {
|
|
$widescreen = $breakpoints['widescreen'];
|
|
unset( $breakpoints['widescreen'] );
|
|
$breakpoints['desktop'] = $widescreen;
|
|
}
|
|
|
|
$current_screen = intval( $_COOKIE['eael_screen'] );
|
|
foreach ( $breakpoints as $device => $screen ) {
|
|
if ( $current_screen <= $screen['value'] ) {
|
|
return $device;
|
|
}
|
|
}
|
|
|
|
return "widescreen";
|
|
}
|
|
|
|
// If no match is found, you can return a default value or handle it as needed.
|
|
return "unknown";
|
|
}
|
|
}
|