HEX
Server: nginx/1.26.1
System: Linux main-vm 5.15.0-153-generic #163-Ubuntu SMP Thu Aug 7 16:37:18 UTC 2025 x86_64
User: root (0)
PHP: 8.2.19
Disabled: NONE
Upload Files
File: /var/www/bellecouture/wp-content/plugins/yena-demo-data/index.php
<?php
/*
Plugin Name:    Yena Package Demo Data
Plugin URI:     http://la-studioweb.com/
Description:    This plugin use only for LA-Studio Theme
Author:         LA Studio
Author URI:     http://la-studioweb.com/
Version:        1.0.1
Text Domain:    lastudio-demodata
*/

// Do not allow directly accessing this file.
if ( ! defined( 'ABSPATH' ) ) {
    exit( 'Direct script access denied.' );
}

if(!function_exists('la_import_check_post_exists')){
    function la_import_check_post_exists( $title, $content = '', $date = '', $type = '' ){
        global $wpdb;

        $post_title = wp_unslash( sanitize_post_field( 'post_title', $title, 0, 'db' ) );
        $post_content = wp_unslash( sanitize_post_field( 'post_content', $content, 0, 'db' ) );
        $post_date = wp_unslash( sanitize_post_field( 'post_date', $date, 0, 'db' ) );
        $post_type = wp_unslash( sanitize_post_field( 'post_type', $type, 0, 'db' ) );

        $query = "SELECT ID FROM $wpdb->posts WHERE 1=1";
        $args = array();

        if ( !empty ( $date ) ) {
            $query .= ' AND post_date = %s';
            $args[] = $post_date;
        }

        if ( !empty ( $title ) ) {
            $query .= ' AND post_title = %s';
            $args[] = $post_title;
        }

        if ( !empty ( $content ) ) {
            $query .= ' AND post_content = %s';
            $args[] = $post_content;
        }

        if ( !empty ( $type ) ) {
            $query .= ' AND post_type = %s';
            $args[] = $post_type;
        }

        if ( !empty ( $args ) )
            return (int) $wpdb->get_var( $wpdb->prepare($query, $args) );

        return 0;
    }
}


class Yena_Data_Demo_Plugin_Class{

    public static $plugin_dir_path = null;

    public static $plugin_dir_url = null;

    public static $instance = null;

    private $preset_allows = array();

    public static $theme_name = 'yena';

    public static $demo_site = 'https://yena.la-studioweb.com/';

    protected $demo_data = array();

    public static function get_instance() {
        if ( null === static::$instance ) {
            static::$instance = new static();
        }
        return static::$instance;
    }

    protected function __construct( ) {

        self::$plugin_dir_path = plugin_dir_path(__FILE__);

        self::$plugin_dir_url = plugin_dir_url(__FILE__);

        include_once self::$plugin_dir_path . 'demodata.php';

        $this->_setup_demo_data();

        if( self::isLocal() ){
            $this->_load_other_hook();
        }

        $this->load_importer();

        add_filter(self::$theme_name . '/filter/demo_data', array( $this, 'get_data_for_import_demo') );

        add_action( 'wp', array( $this, 'init_override'), 99 );

        add_action( 'init', array( $this, 'register_menu_import_demo'), 99 );

        add_action( 'after_setup_theme', array( $this, 'setup_shortcode' ) );
    }

    private function load_importer(){
        require_once self::$plugin_dir_path . 'importer.php';
        if(class_exists('LaStudio_Importer')){
            new LaStudio_Importer(self::$theme_name, $this->get_data_for_import_demo(), self::$demo_site );
        }
    }

    public function init_override(){
        if(!is_admin()){
            $this->_override_settings();
        }
    }

    public function register_menu_import_demo(){
        if(class_exists('LaStudio')){
            require_once self::$plugin_dir_path . 'panel.php';

            if(self::isLocal()){
	            require_once self::$plugin_dir_path . 'export.php';
	            new LaStudio_Export_Demo();
            }
        }
    }

    public function get_data_for_import_demo(){
        $demo = (array) $this->filter_demo_item_by_category('demo');
        return $demo;
    }

    private function _setup_demo_data(){
        $this->preset_allows = array(

            // shop
            'shop-fullwidth',
            'shop-sidebar-left',
            'shop-sidebar-right',
            'shop-masonry',
            'shop-03-columns',
            'shop-02-columns',

            // shop details
            'product-demo-01',
            'product-demo-02',
            'product-demo-03',
            'product-demo-04',
            'product-demo-05',

            // home
            'home-01',
            'home-02',
            'home-03',
            'home-04',
            'home-05',
            'home-06',
            'home-07',
            'home-08',

            // Blog
            'blog-grid-basic',
            'blog-right-sidebar',
            'blog-no-sidebar',
            'blog-left-sidebar'
        );

        $func_name = 'la_'. self::$theme_name .'_get_demo_array';

        $this->demo_data = call_user_func( $func_name, self::$plugin_dir_url . 'previews/', self::$plugin_dir_path . 'data/');

    }

    private function _get_preset_from_file( $preset = ''){

        if(!empty($preset)){
            $file = self::$plugin_dir_path . 'presets/' . $preset . '.php';
            if(file_exists($file)){
                include_once $file;
                return call_user_func( 'la_'. self::$theme_name .'_preset_' . str_replace('-', '_', $preset) );
            }
            return false;
        }
        return false;
    }

    private function _load_data_from_preset( $preset ){
        $settings = $this->_get_preset_from_file( $preset );
        if(!empty($settings)){
            foreach ( $settings as $setting ) {
                if(isset($setting['filter_name'])){

                    if(!empty($setting['filter_func'])){
                        $filter_priority = isset($setting['filter_priority']) ? $setting['filter_priority'] : 10;
                        $filter_args = isset($setting['filter_args']) ? $setting['filter_args'] : 1;
                        add_filter($setting['filter_name'], $setting['filter_func'], $filter_priority, $filter_args );
                    }
                    else{
                        $new_filter_value = $setting['value'];
                        add_filter("{$setting['filter_name']}", function() use ( $new_filter_value ){
                            return $new_filter_value;
                        },20);
                    }

                }
                else{
                    $new_value = $setting['value'];
                    $keys = explode('|', $setting['key']);
                    foreach( $keys as $key ){
                        add_filter(self::$theme_name . "/filter/get_option", function( $old_val, $old_key ) use ( $new_value, $key ){
                            if( $old_key == $key ){
                                return $new_value;
                            }
                            return $old_val;
                        }, 11, 2);
                    }
                }
            }
        }
    }
    
    private function _override_settings(){
        if(!empty($_GET['la_preset']) && in_array( $_GET['la_preset'], $this->preset_allows )){
            $this->_load_data_from_preset($_GET['la_preset']);
        }
        if(self::isLocal() && is_page()){
            $lists_preset = $this->get_demo_with_preset();
            if(!empty($lists_preset)){
                $current_page_name = get_queried_object()->post_name;
                if( array_key_exists( $current_page_name, $lists_preset ) ) {
                    $this->_load_data_from_preset($lists_preset[$current_page_name]);
                }
            }
        }
    }

    private function get_demo_with_preset(){
        $lists = array();
        $demo_data = (array) $this->demo_data;
        if(!empty($demo_data)){
            foreach($demo_data as $key => $demo){
                if(!empty($demo['demo_preset'])){
                    $lists[$key] = $demo['demo_preset'];
                }
            }
        }
        return $lists;
    }

    public static function isLocal(){
        $is_local = false;
        if (isset($_SERVER['X_FORWARDED_HOST']) && !empty($_SERVER['X_FORWARDED_HOST'])) {
            $hostname = $_SERVER['X_FORWARDED_HOST'];
        } else {
            $hostname = $_SERVER['HTTP_HOST'];
        }
        if ( strpos($hostname, '.la-studioweb.com') !== false || strpos($hostname, '.la-studio.io') !== false ) {
            $is_local = true;
        }
        return $is_local;
    }

    public function filter_demo_item_by_category( $category ){
        $demo_data = (array) $this->demo_data;
        $return = array();
        if(!empty($demo_data) && !empty($category)){
            foreach( $demo_data as $key => $demo ){
                if(!empty($demo['category'])){
                    $demo_category = array_map('strtolower', $demo['category']);
                    if(in_array(strtolower($category), $demo_category)){
                        $return[$key] = $demo;
                    }
                }
            }
        }
        return $return;
    }

    private function _load_other_hook(){
        include_once self::$plugin_dir_path . 'other-hook.php';
    }

    public function setup_shortcode(){
        add_shortcode('lastudio_demo', [ $this, 'create_shortcode'] );
    }

    public function create_shortcode( $atts, $output ){
        $demo_lists = $this->get_data_for_import_demo();
        $filters = array();
        foreach ($demo_lists as $demo){
            if(!empty($demo['category'])){
                foreach ($demo['category'] as $k => $v){
                    if(strtolower($v) == 'demo'){
                        continue;
                    }
                    $filters[strtolower($v)] = $v;
                }
            }
        }
        ob_start();
        ?>
        <div class="elementor-lastudio-demo lastudio-elements">
            <div id="la_demo_2019" class="lastudio-demo">
                <div class="isotope__filter lastudio-demo__filter js-el" data-la_component="MasonryFilter" data-isotope_container="#la_demo_2019 .la-isotope-container">
                    <div class="isotope__filter-list lastudio-demo__filter-list">
                        <div class="isotope__filter-item lastudio-demo__filter-item active" data-filter="*"><span>Show All</span></div><?php
                        if(!empty($filters)){
                            foreach ($filters as $filter){
                                echo '<div class="isotope__filter-item lastudio-demo__filter-item" data-filter="la_demo_category-'.esc_attr(strtolower(str_replace(' ', '-', $filter))) .'"><span>'.esc_html($filter).'</span></div>';
                            }
                        }
                        ?>
                    </div>
                </div>
                <div class="lastudio-demo__list_wrapper">
                    <div class="lastudio-demo__list js-el la-isotope-container grid-items block-grid-3 laptop-block-grid-3 tablet-block-grid-3 mobile-block-grid-2 xmobile-block-grid-1" data-item_selector=".loop__item" data-la_component="DefaultMasonry">
                        <?php
                        foreach ($demo_lists as $demo){
                            ?><div class="loop__item grid-item lastudio-demo__item<?php
                                foreach ($demo['category'] as $dc){
                                    echo ' la_demo_category-' . esc_attr( strtolower( str_replace(' ', '-', $dc) ) );
                                }
                            ?>">
                                <div class="lastudio-demo__item__inner">
                                    <a href="<?php echo esc_url($demo['demo_url']) ?>" title="<?php echo esc_attr($demo['title']) ?>" target="_blank">
                                        <span class="demo__item-image la-lazyload-image" data-background-image="<?php echo esc_attr($demo['preview']) ?>"></span>
                                        <h2><span><?php echo esc_html($demo['title']) ?></span></h2>
                                    </a>
                                </div>

                            </div>
                            <?php
                        }
                        ?>
                    </div>
                </div>
            </div>
        </div>
<?php
        return ob_get_clean();
    }
}

add_action('plugins_loaded', function(){

    $theme = wp_get_theme();

    if(strtolower($theme->get_template()) != 'yena'){

        add_action( 'admin_notices', function(){
            printf( __( '%1$s"Yena Package Demo Data" requires %3$s"Yena"%4$s theme to be installed and activated. Please active %3$s"Yena"%4$s to continue.%2$s', 'lastudio-demodata' ), '<div class="error"><p>', '</p></div>' ,'<strong>', '</strong>' );
        });

        add_action( 'admin_init', function(){
            deactivate_plugins( plugin_basename( __FILE__ ) );
        });

        return;
    }

    Yena_Data_Demo_Plugin_Class::get_instance();
}, 999);