HEX
Server: LiteSpeed
System: Linux hippo 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: tsacademy (1021)
PHP: 8.1.29
Disabled: exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname
Upload Files
File: /home/tsacademy/domains/tsacademy.ir/public_html/wp-content/themes/studiare/functions.php
<?php

/**
 * Studiare functions and definitions
 */

# Constants
define('STUDIARE_THEMEDIR', 		get_theme_file_path() . '/');
define('STUDIARE_THEMEURL', 		get_theme_file_uri() . '/');
define('STUDIARE_THEMEASSETS',	    STUDIARE_THEMEURL . 'assets/');
define('STUDIARE_TD', 			    'studiare');
define('STUDIARE_TS', 			    microtime(true));
 



/* suncode integrations */
include_once 'sc_main_functions.php';

# Initial Actions
add_action( 'after_setup_theme',    'studiare_after_setup_theme' );



add_action('init', 				    'studiare_init');

add_action('wp_enqueue_scripts',    'studiare_wp_enqueue_scripts');

/* add admin script by suncode */
add_action( 'admin_enqueue_scripts', 'sc_studi_admin_scripts' );
function sc_studi_admin_scripts(){
	wp_enqueue_script( 'studi_admin', STUDIARE_THEMEASSETS . '/js/admin.js', array() );
}

if (!isset($content_width)) {
	$content_width = 1120;
}
// wp_enqueue_style( 'sc-min-hint.css',  STUDIARE_THEMEURL . 'assets/css/sc-min-hint.css' );
// wp_enqueue_style( 'toastr.css',  STUDIARE_THEMEURL . 'assets/css/toastr.css' );

# Core Files
require get_parent_theme_file_path( '/inc/codebean_functions.php' );
require get_parent_theme_file_path( '/inc/codebean_actions.php' );
require get_parent_theme_file_path( '/inc/codebean_filters.php' );
require get_parent_theme_file_path( '/inc/codebean_vc.php' );
require get_parent_theme_file_path( '/inc/codebean_woocommerce.php' );
require get_parent_theme_file_path( '/inc/backend_styles.php' );
#extra core
require get_parent_theme_file_path( '/inc/lib/sc-player/sc-player.php' );
require get_parent_theme_file_path( '/inc/lib/sc-security/suncodesecurityclass.php' );
# Widgets
require get_parent_theme_file_path( '/inc/widgets/contacts.php' );
require get_parent_theme_file_path( '/inc/widgets/namad_carousel.php' );

if ( !isset( $redux_demo ) && file_exists( dirname( __FILE__ ) . '/inc/codebean_options.php' ) ) {
	require_once( dirname( __FILE__ ) . '/inc/codebean_options.php' );
}
# Libraries
require get_parent_theme_file_path('/inc/tgm/tgm-plugin-registration.php');

//add_action('wp_footer','studi_add_rtl');
function studi_add_rtl(){
    if(is_child_theme() =="true"){
//wp_enqueue_style( 'rtl', get_template_directory_uri(). '/rtl.css' ); 
}
}

//define global vars
global $direction_by_lang;
if(is_rtl()){
    $direction_by_lang ="left";
}else{
    $direction_by_lang ="right";
}

include_once 'custom_functions.php';
include_once 'inc/studi_panel/studi_panel_helper.php';

/* redirect login page */
add_action('wp_logout','studi_redirect_after_logout');
function studi_redirect_after_logout(){
    
	$url = get_site_url().'/my-account';
	if(class_exists('Redux')){
	    $urlOption = codebean_option('sc_custom_logout_url');
	    if(!empty($urlOption)){
	        $url =$urlOption;
	    }
	    
	}
         wp_redirect( $url );
         exit();
}
function enqueue_wc_cart_fragments() { wp_enqueue_script( 'wc-cart-fragments' ); }
add_action( 'wp_enqueue_scripts', 'enqueue_wc_cart_fragments' );
//for translate theme name and description
if (defined('WP_CLI') || (isset($_GET['lang']) && $_GET['lang'] === 'update_po')) {
    __('Studiare', 'studiare');
    __('Studiare Child Theme', 'studiare');
    __('With Studiare, you can sell, market and create your online courses in one place. It is perfect for universities, teachers, and tutors, but can also be used by individuals and businesses.', 'studiare');
    __('The Studiare child theme is designed for your custom coding and styling needs. If you don\'t require it, activate the main theme and remove the child theme.', 'studiare');
}


// کد php اشتراک بر اساس نقش کاربر (subscriber)
function ts_subscription_status_box() {

    if ( ! is_user_logged_in() ) {
        return '';
    }

    $user = wp_get_current_user();

    // بررسی نقش کاربر
    $has_active_sub = in_array( 'subscriber', (array) $user->roles, true );

    if ( $has_active_sub ) {

        return '
            <div class="ts-alert active">
                اشتراک شما فعال است ✅
            </div>

            <div class="stat-card">
                <span class="stat-title">وضعیت اشتراک</span>
                <strong class="stat-value active">فعال</strong>
            </div>
        ';

    }

    return '
        <div class="ts-alert inactive">
            شما اشتراک فعالی ندارید ❌
            <a href="/subscriptions/" class="buy-sub-btn">خرید اشتراک</a>
        </div>

        <div class="stat-card">
            <span class="stat-title">وضعیت اشتراک</span>
            <strong class="stat-value inactive">غیرفعال</strong>
        </div>
    ';
}

add_shortcode( 'ts_subscription_status', 'ts_subscription_status_box' );

//شورتکد صفحه اشتراک ها
add_shortcode('ts_subscriptions_page', function(){

    if ( ! is_user_logged_in() ) {
        return '<p>برای مشاهده اشتراک‌ها وارد حساب کاربری شوید.</p>';
    }

    $user = wp_get_current_user();

    $has_active = in_array('subscriber', $user->roles);

    ob_start(); ?>

    <div class="ts-subscriptions-page">

        <?php if ( $has_active ): ?>
            <div class="ts-sub-alert active">
                ✅ اشتراک شما فعال است
            </div>
        <?php else: ?>
            <div class="ts-sub-alert inactive">
                ❌ شما اشتراک فعالی ندارید
            </div>
        <?php endif; ?>

        <!-- بخش نمایش پلن‌های اشتراک -->
        <div class="ts-sub-grid">
            <?php
            $products = [3865, 3867]; // ID محصولات اشتراک

            foreach ( $products as $pid ) :
                $product = wc_get_product( $pid );
                if ( ! $product ) continue;
                $link = wc_get_checkout_url() . '?add-to-cart=' . $pid;
            ?>
                <div class="ts-sub-card">
                    <h3><?php echo esc_html( $product->get_name() ); ?></h3>
                    <div class="price"><?php echo $product->get_price_html(); ?></div>
                    <a href="<?php echo esc_url( $link ); ?>" class="buy-btn">
                        خرید اشتراک
                    </a>
                </div>
            <?php endforeach; ?>
        </div>
    </div>

    <?php
    return ob_get_clean();
});


//شورتکد و تنظیمات پنل پرسش و پاسخ
// CPT: سوالات کاربران
function ts_register_questions_cpt() {
    $labels = array(
        'name'               => 'سوالات کاربران',
        'singular_name'      => 'سوال کاربر',
        'menu_name'          => 'سوالات کاربران',
        'name_admin_bar'     => 'سوال کاربر',
        'add_new'            => 'افزودن سوال',
        'add_new_item'       => 'افزودن سوال جدید',
        'new_item'           => 'سوال جدید',
        'edit_item'          => 'ویرایش سوال',
        'view_item'          => 'مشاهده سوال',
        'all_items'          => 'همه سوالات',
        'search_items'       => 'جستجوی سوالات',
        'not_found'          => 'سوالی یافت نشد',
        'not_found_in_trash' => 'در زباله‌دان سوالی نیست',
    );

    $args = array(
        'labels'             => $labels,
        'public'             => false, // فرانت مستقیم نه، خودمان نمایش می‌دهیم
        'show_ui'            => true,
        'show_in_menu'       => true,
        'menu_icon'          => 'dashicons-editor-help',
        'supports'           => array( 'title', 'editor' ),
        'capability_type'    => 'post',
    );

    register_post_type( 'ts_question', $args );
}
add_action( 'init', 'ts_register_questions_cpt' );

// متاباکس پاسخ پشتیبان و وضعیت
function ts_add_question_meta_box() {
    add_meta_box(
        'ts_question_meta_box',
        'جزئیات سوال',
        'ts_question_meta_box_callback',
        'ts_question',
        'normal',
        'high'
    );
}
add_action( 'add_meta_boxes', 'ts_add_question_meta_box' );

function ts_question_meta_box_callback( $post ) {
    wp_nonce_field( 'ts_save_question_meta', 'ts_question_meta_nonce' );

    $answer      = get_post_meta( $post->ID, '_ts_question_answer', true );
    $status      = get_post_meta( $post->ID, '_ts_question_status', true );
    if ( empty( $status ) ) {
        $status = 'pending';
    }

    ?>
    <p>
        <label for="ts_question_status"><strong>وضعیت سوال:</strong></label><br>
        <select name="ts_question_status" id="ts_question_status">
            <option value="pending" <?php selected( $status, 'pending' ); ?>>در انتظار پاسخ</option>
            <option value="answered" <?php selected( $status, 'answered' ); ?>>پاسخ داده شده</option>
            <option value="closed" <?php selected( $status, 'closed' ); ?>>بسته شده</option>
        </select>
    </p>

    <p>
        <label for="ts_question_answer"><strong>پاسخ پشتیبانی:</strong></label><br>
        <textarea name="ts_question_answer" id="ts_question_answer" rows="6" style="width:100%;"><?php echo esc_textarea( $answer ); ?></textarea>
    </p>
    <?php
}

// ذخیره متادیتا
function ts_save_question_meta( $post_id ) {
    if ( ! isset( $_POST['ts_question_meta_nonce'] ) ||
         ! wp_verify_nonce( $_POST['ts_question_meta_nonce'], 'ts_save_question_meta' ) ) {
        return;
    }

    if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return;
    }

    if ( isset( $_POST['ts_question_status'] ) ) {
        update_post_meta( $post_id, '_ts_question_status', sanitize_text_field( $_POST['ts_question_status'] ) );
    }

    if ( isset( $_POST['ts_question_answer'] ) ) {
        update_post_meta( $post_id, '_ts_question_answer', wp_kses_post( $_POST['ts_question_answer'] ) );
    }
}
add_action( 'save_post_ts_question', 'ts_save_question_meta' );

// شورت‌کد فرم ثبت سوال [ts_submit_question]
function ts_submit_question_form_shortcode() {
    if ( ! is_user_logged_in() ) {
     return '
     <div class="ts-login-notice">
         <div class="ts-login-icon">🔒</div>
         <div class="ts-login-text">
             <h3>دسترسی ویژه اعضا</h3>
             <p>برای ثبت سوال و دریافت پاسخ تخصصی، لطفاً وارد حساب کاربری خود شوید.</p>
             <a href="'. wp_login_url( get_permalink() ) .'" class="ts-login-btn">
                 ورود به حساب کاربری
             </a>
         </div>
     </div>';
    }


    ob_start();

    if ( isset( $_POST['ts_question_nonce'] ) &&
         wp_verify_nonce( $_POST['ts_question_nonce'], 'ts_submit_question' ) ) {

        $current_user = wp_get_current_user();
        $title   = sanitize_text_field( $_POST['ts_question_title'] ?? '' );
        $content = wp_kses_post( $_POST['ts_question_content'] ?? '' );

        if ( ! empty( $title ) && ! empty( $content ) ) {

            $new_question = array(
                'post_title'   => $title,
                'post_content' => $content,
                'post_type'    => 'ts_question',
                'post_status'  => 'publish',
                'post_author'  => $current_user->ID,
            );

            $post_id = wp_insert_post( $new_question );

            if ( $post_id ) {
                update_post_meta( $post_id, '_ts_question_status', 'pending' );
                echo '<div class="ts-question-success">سوال شما با موفقیت ثبت شد و در پادکست ها پاسخ داده می‌شود.</div>';
            } else {
                echo '<div class="ts-question-error">در ثبت سوال خطایی رخ داد. لطفاً دوباره تلاش کنید.</div>';
            }

        } else {
            echo '<div class="ts-question-error">عنوان و متن سوال را کامل وارد کنید.</div>';
        }
    }
    ?>

    <form method="post" class="ts-question-form" id="tsQuestionForm">
        <?php wp_nonce_field( 'ts_submit_question', 'ts_question_nonce' ); ?>

        <div class="ts-form-group">
            <label for="ts_question_title">عنوان سوال</label>
            <input type="text" name="ts_question_title" id="ts_question_title" required>
        </div>

        <div class="ts-form-group">
            <label for="ts_question_content">متن سوال</label>
            <textarea name="ts_question_content" id="ts_question_content" rows="5" required></textarea>
        </div>

        <button type="submit" class="ts-btn ts-btn-primary" id="tsSubmitBtn">
            <span class="btn-text">ثبت سوال</span>
            <span class="btn-loader" style="display:none;"></span>
        </button>
    </form>

    <script>
    document.addEventListener('DOMContentLoaded', function(){
        const form = document.getElementById('tsQuestionForm');
        const btn = document.getElementById('tsSubmitBtn');
        const text = btn.querySelector('.btn-text');
        const loader = btn.querySelector('.btn-loader');

        form.addEventListener('submit', ()=>{
            btn.disabled = true;
            text.textContent = 'در حال ارسال...';
            loader.style.display = 'inline-block';
        });
    });
    </script>

    <?php
    return ob_get_clean();
}
add_shortcode( 'ts_submit_question', 'ts_submit_question_form_shortcode' );


// شورت‌کد نمایش سوال‌های کاربر [ts_my_questions]
function ts_my_questions_shortcode() {
    if ( ! is_user_logged_in() ) {
        return '<p>.</p>';
    }

    $current_user = wp_get_current_user();

    $args = array(
        'post_type'      => 'ts_question',
        'post_status'    => 'publish',
        'author'         => $current_user->ID,
        'posts_per_page' => 20,
        'orderby'        => 'date',
        'order'          => 'DESC',
    );

    $query = new WP_Query( $args );

    ob_start();

    if ( $query->have_posts() ) : ?>
        <div class="ts-my-questions-list">
            <?php while ( $query->have_posts() ) : $query->the_post(); 
                $status = get_post_meta( get_the_ID(), '_ts_question_status', true );
                $answer = get_post_meta( get_the_ID(), '_ts_question_answer', true );
            ?>
                <div class="ts-question-card ts-status-<?php echo esc_attr( $status ); ?>">
                    <div class="ts-question-header">
                        <h3 class="ts-question-title"><?php the_title(); ?></h3>
                        <span class="ts-question-status">
                            <?php
                            if ( $status === 'answered' ) {
                                echo 'پاسخ داده شده';
                            } elseif ( $status === 'closed' ) {
                                echo 'بسته شده';
                            } else {
                                echo 'در انتظار پاسخ';
                            }
                            ?>
                        </span>
                    </div>
                    <div class="ts-question-body">
                        <p class="ts-question-content"><?php echo nl2br( esc_html( get_the_content() ) ); ?></p>
                    </div>

                    <?php if ( ! empty( $answer ) ) : ?>
                        <div class="ts-question-answer">
                            <div class="ts-answer-label">پاسخ پشتیبانی:</div>
                            <div class="ts-answer-text"><?php echo wpautop( esc_html( $answer ) ); ?></div>
                        </div>
                    <?php endif; ?>
                </div>
            <?php endwhile; ?>
        </div>
    <?php
    else :
        echo '<p>تا الان سوالی ثبت نکرده‌اید.</p>';
    endif;

    wp_reset_postdata();

    return ob_get_clean();
}
add_shortcode( 'ts_my_questions', 'ts_my_questions_shortcode' );

//اطلاعت خوش امدگویی پنل کاربری
add_shortcode('display_user_name', function() {
    $user = wp_get_current_user();
    return $user->exists() ? esc_html($user->display_name) : 'کاربر عزیز';
});


function ts_user_profile_form() {

    if (!is_user_logged_in()) {
        return "<div class='ts-profile-msg'>لطفاً وارد حساب کاربری شوید.</div>";
    }

    $user = wp_get_current_user();
    $user_id = $user->ID;

    // گرفتن فیلدها از دیتابیس
    $first_name  = get_user_meta($user_id, 'first_name', true);
    $last_name   = get_user_meta($user_id, 'last_name', true);
    $mobile      = get_user_meta($user_id, 'billing_phone', true);
    $birth_date  = get_user_meta($user_id, 'birth_date', true);
    $email       = $user->user_email;

    ob_start();
    ?>

    <form id="tsUserProfileForm" class="ts-profile-form">

        <h3 class="ts-profile-title">اطلاعات کاربری ( لطفا اطلاعات خود را بروز نگه دارید) </h3>

        <div class="ts-profile-grid">

            <div class="ts-field">
                <label>نام</label>
                <input type="text" name="first_name" value="<?php echo esc_attr($first_name); ?>">
            </div>

            <div class="ts-field">
                <label>نام خانوادگی</label>
                <input type="text" name="last_name" value="<?php echo esc_attr($last_name); ?>">
            </div>

            <div class="ts-field">
                <label>شماره موبایل</label>
                <input type="text" name="mobile" value="<?php echo esc_attr($mobile); ?>">
            </div>

            <div class="ts-field">
             <label>ایمیل</label>

              <?php if ( empty( $email ) ): ?>
               <!-- اگر ایمیل ثبت نشده، کاربر باید آن را وارد کند -->
               <input type="email" name="email" value="" placeholder="ایمیل خود را وارد کنید" required>
              <?php else: ?>
               <!-- اگر ایمیل دارد، اجازه تغییر ندارد -->
               <input type="email" value="<?php echo esc_attr($email); ?>" disabled>
              <?php endif; ?>
            </div>


            <div class="ts-field">
                <label>تاریخ تولد</label>
                <input type="date" name="birth_date" value="<?php echo esc_attr($birth_date); ?>">
            </div>

        </div>

        <button type="submit" class="ts-profile-btn">
            بروزرسانی اطلاعات
        </button>

        <div class="ts-profile-response"></div>

        <input type="hidden" name="action" value="ts_update_user_profile">
        <input type="hidden" name="nonce" value="<?php echo wp_create_nonce('ts_user_profile_nonce'); ?>">

    </form>

    <?php
    return ob_get_clean();
}

add_shortcode('ts_user_profile', 'ts_user_profile_form');

//شورتکد کد دکمه خروج
add_shortcode('ts_user_logout', function(){

    if(!is_user_logged_in()){
        return '';
    }

    // آدرس دقیق برای هدایت بعد از خروج
    $logout_url = wp_logout_url( 'https://tsacademy.ir/' );

    return '<div class="ts-logout-box">
                <a class="ts-logout-btn" href="'.$logout_url.'">خروج از حساب کاربری</a>
            </div>';
});



// 📌 هندلر Ajax بروزرسانی پروفایل
add_action('wp_ajax_ts_update_user_profile', 'ts_update_user_profile_handler');

function ts_update_user_profile_handler() {

    // بررسی ورود کاربر
    if ( ! is_user_logged_in() ) {
        wp_send_json_error('ابتدا وارد حساب کاربری خود شوید.');
    }

    // بررسی nonce
    if ( ! isset($_POST['nonce']) || ! wp_verify_nonce($_POST['nonce'], 'ts_user_profile_nonce') ) {
        wp_send_json_error('اعتبارسنجی ناموفق بود. لطفاً صفحه را رفرش کنید.');
    }

    $user_id = get_current_user_id();
    $user    = get_userdata($user_id);

    if ( ! $user ) {
        wp_send_json_error('کاربر یافت نشد.');
    }

    // دریافت مقادیر ارسال‌شده
    $first_name  = sanitize_text_field($_POST['first_name'] ?? '');
    $last_name   = sanitize_text_field($_POST['last_name'] ?? '');
    $mobile      = sanitize_text_field($_POST['mobile'] ?? '');
    $birth_date  = sanitize_text_field($_POST['birth_date'] ?? '');

    // بررسی ایمیل اگر هنوز کاربر ایمیل ندارد
    if ( empty($user->user_email) ) {
        $email = sanitize_email($_POST['email'] ?? '');

        if ( empty($email) ) {
            wp_send_json_error('لطفاً ایمیل خود را وارد کنید.');
        }

        if ( ! is_email($email) ) {
            wp_send_json_error('فرمت ایمیل نادرست است.');
        }

        if ( email_exists($email) && email_exists($email) != $user_id ) {
            wp_send_json_error('این ایمیل قبلاً ثبت شده است.');
        }

        $update_email = wp_update_user([
            'ID'         => $user_id,
            'user_email' => $email
        ]);

        if ( is_wp_error($update_email) ) {
            wp_send_json_error('خطا در ذخیره ایمیل: ' . $update_email->get_error_message());
        }
    }

    // ذخیره سایر اطلاعات
    update_user_meta($user_id, 'first_name', $first_name);
    update_user_meta($user_id, 'last_name', $last_name);
    update_user_meta($user_id, 'billing_phone', $mobile);
    update_user_meta($user_id, 'birth_date', $birth_date);

    wp_send_json_success('اطلاعات شما با موفقیت بروزرسانی شد.');
}



/* Disable external API calls when internet is restricted */

add_filter('pre_http_request', function($pre, $args, $url){

    $blocked = [
        'wordpress.org',
        'wordpress.com',
        'elementor.com',
        'translate.wordpress.com',
        'ultimatemembershippro.com'
    ];

    foreach ($blocked as $domain) {
        if (strpos($url, $domain) !== false) {
            return new WP_Error('external_blocked', 'External request blocked');
        }
    }

    return $pre;

}, 10, 3);


/* disable update checks */

remove_action('admin_init', '_maybe_update_core');
remove_action('admin_init', '_maybe_update_plugins');
remove_action('admin_init', '_maybe_update_themes');

add_filter('automatic_updater_disabled', '__return_true');
add_filter('auto_update_translation', '__return_false');


/* reduce http timeout */

add_filter('http_request_timeout', function(){
    return 1;
});





function signal_card_shortcode() {
    if (!is_singular('signal')) return '';

    $post_id = get_the_ID();

    // ACF fields
    $symbol        = get_field('symbol', $post_id);
    $content_type  = get_field('content_type', $post_id);
    $analysis_date = get_field('analysis_date', $post_id);
    $metrics       = get_field('metrics', $post_id);

    // Post content
    $body_html = apply_filters('the_content', get_post_field('post_content', $post_id));

    // Featured image
    $image_url = get_the_post_thumbnail_url($post_id, 'large');

    ob_start();
    ?>

    <div class="signal-glass-card">

        <?php if($image_url): ?>
            <img class="signal-card-image" src="<?php echo esc_url($image_url); ?>" alt="">
        <?php endif; ?>

        <div class="signal-card-header">
            <div class="signal-symbol"><?php echo esc_html($symbol); ?></div>

            <?php if($content_type): ?>
                <div class="signal-type"><?php echo esc_html($content_type); ?></div>
            <?php endif; ?>
        </div>

        <div class="signal-body">
            <?php echo $body_html; ?>
        </div>

        <?php if($metrics): ?>
            <div class="signal-metrics">
                <?php echo wp_kses_post($metrics); ?>
            </div>
        <?php endif; ?>

        <?php if($analysis_date): ?>
            <div class="signal-date"><?php echo esc_html($analysis_date); ?></div>
        <?php endif; ?>

    </div>

    <?php
    return ob_get_clean();
}
add_shortcode('signal_card', 'signal_card_shortcode');



/* ----------------  CSS استایل شیشه‌ای  ---------------- */

function signal_card_styles() {
    ?>
    <style>
        .signal-glass-card {
            background: rgba(20,30,45,0.55);
            backdrop-filter: blur(12px);
            padding: 35px;
            border-radius: 22px;
            border: 1px solid rgba(255,255,255,0.09);
            box-shadow: 0 15px 45px rgba(0,0,0,0.40);
            color: #e5e7eb;
            line-height: 1.9;
            margin-top: 25px;
        }

        .signal-card-image {
            width: 100%;
            border-radius: 18px;
            margin-bottom: 25px;
        }

        .signal-card-header {
            display: flex;
            justify-content: space-between;
            align-items: center;
            margin-bottom: 18px;
        }

        .signal-symbol {
            font-size: 26px;
            font-weight: 700;
            color: #5ca7ff;
        }

        .signal-type {
            background: #2563eb;
            color: white;
            padding: 6px 12px;
            border-radius: 10px;
            font-size: 13px;
        }

        .signal-body {
            margin-bottom: 22px;
        }

        .signal-metrics {
            background: rgba(0,0,0,0.35);
            padding: 20px;
            border-radius: 14px;
            margin-bottom: 15px;
        }

        .signal-date {
            font-size: 13px;
            opacity: 0.7;
            text-align: left;
        }
    </style>
    <?php
}
add_action('wp_head', 'signal_card_styles');

//کد فرم پادکست
add_action('wp_head', function () {
    ?>
    <script>
        window.wpUserLoggedIn = <?php echo is_user_logged_in() ? 'true' : 'false'; ?>;
    </script>
    <?php
});


//کد فرم هدیه
// پردازش دیتابیس (AJAX)
// ایجاد جدول در دیتابیس هنگام فعال‌سازی (اختیاری - خودکار ساخته می‌شود)
// ایجاد جدول اختصاصی در دیتابیس وردپرس
function ts_create_app_leads_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'app_leads';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE IF NOT EXISTS $table_name (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        date_created datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
        full_name tinytext NOT NULL,
        phone varchar(20) NOT NULL,
        email varchar(100) NOT NULL,
        PRIMARY KEY  (id)
    ) $charset_collate;";

    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $sql );
}
add_action('init', 'ts_create_app_leads_table');

// عملیات دریافت و ذخیره داده‌ها بدون رفرش (AJAX)
add_action('wp_ajax_ts_save_app_lead', 'ts_save_app_lead_callback');
add_action('wp_ajax_nopriv_ts_save_app_lead', 'ts_save_app_lead_callback');

function ts_save_app_lead_callback() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'app_leads';

    $name = sanitize_text_field($_POST['u_name']);
    $phone = sanitize_text_field($_POST['u_phone']);
    $email = sanitize_email($_POST['u_email']);

    if(empty($name) || empty($phone)) {
        wp_send_json_error('اطلاعات ناقص است');
    }

    $result = $wpdb->insert(
        $table_name,
        array(
            'full_name' => $name,
            'phone' => $phone,
            'email' => $email,
        )
    );

    if ($result) {
        wp_send_json_success();
    } else {
        wp_send_json_error();
    }
}


//کد غیر فعال کردن کیف پول برای اشتراک ها
add_filter( 'woocommerce_available_payment_gateways', 'disable_wallet_for_specific_products', 20 );

function disable_wallet_for_specific_products( $available_gateways ) {
    if ( is_admin() ) {
        return $available_gateways;
    }

    if ( ! function_exists( 'WC' ) || ! WC()->cart ) {
        return $available_gateways;
    }

    $restricted_products = [3554, 3865, 3867];
    $found = false;

    foreach ( WC()->cart->get_cart() as $cart_item ) {
        $product_id   = isset( $cart_item['product_id'] ) ? (int) $cart_item['product_id'] : 0;
        $variation_id = isset( $cart_item['variation_id'] ) ? (int) $cart_item['variation_id'] : 0;
        $parent_id    = 0;

        if ( ! empty( $cart_item['data'] ) && is_object( $cart_item['data'] ) ) {
            $parent_id = (int) $cart_item['data']->get_parent_id();
        }

        if (
            in_array( $product_id, $restricted_products, true ) ||
            in_array( $variation_id, $restricted_products, true ) ||
            in_array( $parent_id, $restricted_products, true )
        ) {
            $found = true;
            break;
        }
    }

    if ( $found && isset( $available_gateways['wallexio_wallet'] ) ) {
        unset( $available_gateways['wallexio_wallet'] );
    }

    return $available_gateways;
}

add_action( 'wp_head', 'hide_wallexio_wallet_partial_row_for_specific_products', 99 );

function hide_wallexio_wallet_partial_row_for_specific_products() {
    if ( ! function_exists( 'WC' ) || ! is_checkout() || ! WC()->cart ) {
        return;
    }

    $restricted_products = [3554, 3865, 3867];
    $found = false;

    foreach ( WC()->cart->get_cart() as $cart_item ) {
        $product_id   = isset( $cart_item['product_id'] ) ? (int) $cart_item['product_id'] : 0;
        $variation_id = isset( $cart_item['variation_id'] ) ? (int) $cart_item['variation_id'] : 0;
        $parent_id    = 0;

        if ( ! empty( $cart_item['data'] ) && is_object( $cart_item['data'] ) ) {
            $parent_id = (int) $cart_item['data']->get_parent_id();
        }

        if (
            in_array( $product_id, $restricted_products, true ) ||
            in_array( $variation_id, $restricted_products, true ) ||
            in_array( $parent_id, $restricted_products, true )
        ) {
            $found = true;
            break;
        }
    }

    if ( $found ) {
        echo '<style>
            .wallexio-pay-partial {
                display: none !important;
            }
            .payment_method_wallexio_wallet {
                display: none !important;
            }
        </style>';
    }
}




//حالت موفق سفارش 
add_action('woocommerce_thankyou', 'auto_complete_paid_orders');

function auto_complete_paid_orders($order_id) {
    if (!$order_id) return;

    $order = wc_get_order($order_id);

    if (!$order) return;

    // فقط اگر پرداخت موفق بوده
    if ($order->is_paid()) {
        $order->update_status('completed');
    }
}

//حذف فیلد های اظافه ووکامرس پرداخت 
add_filter( 'woocommerce_checkout_fields', 'custom_clean_checkout_fields' );
function custom_clean_checkout_fields( $fields ) {

    unset( $fields['billing']['billing_company'] );
    unset( $fields['billing']['billing_country'] );
    unset( $fields['billing']['billing_state'] );
    unset( $fields['billing']['billing_city'] );
    unset( $fields['billing']['billing_address_1'] );
    unset( $fields['billing']['billing_address_2'] );
    unset( $fields['billing']['billing_postcode'] );

    unset( $fields['shipping'] );
    unset( $fields['order']['order_comments'] );

    $fields['billing']['billing_first_name']['priority'] = 10;
    $fields['billing']['billing_last_name']['priority']  = 20;
    $fields['billing']['billing_phone']['priority']      = 30;
    $fields['billing']['billing_email']['priority']      = 40;

    $fields['billing']['billing_first_name']['label'] = 'نام';
    $fields['billing']['billing_last_name']['label']  = 'نام خانوادگی';
    $fields['billing']['billing_phone']['label']      = 'شماره موبایل';
    $fields['billing']['billing_email']['label']      = 'ایمیل';

    return $fields;
}

add_filter( 'woocommerce_default_address_fields', 'custom_remove_address_requirements' );
function custom_remove_address_requirements( $address_fields ) {
    unset( $address_fields['company'] );
    unset( $address_fields['country'] );
    unset( $address_fields['address_1'] );
    unset( $address_fields['address_2'] );
    unset( $address_fields['city'] );
    unset( $address_fields['state'] );
    unset( $address_fields['postcode'] );

    return $address_fields;
}
// حذف کامل بخش توضیحات تکمیلی (Additional Fields)
add_filter( 'woocommerce_enable_order_notes_field', '__return_false' );
remove_action( 'woocommerce_checkout_after_customer_details', 'woocommerce_checkout_additional_fields', 10 );

// شورت‌کد نمایش مبلغ کیف پول والکسینو (بدون لینک)

add_shortcode('wallexio_user_wallet', function () {
    if (!is_user_logged_in()) {
        return '۰ تومان';
    }

    global $wpdb;
    $user_id = get_current_user_id();

    // محاسبه موجودی با جمع ستون مبلغ در جدول عملیات‌ها
    // فرض بر این است که ستون مبلغ 'amount' و ستون کاربر 'user_id' باشد
    $balance = $wpdb->get_var($wpdb->prepare(
        "SELECT SUM(amount) FROM {$wpdb->prefix}wallexio_op WHERE user_id = %d",
        $user_id
    ));

    $balance = $balance ? $balance : 0;

    return
     '<div class="wallet-widget-box">
                <span class="wallet-label">موجودی کیف پول:</span>
                <span class="wallet-amount">' . number_format($balance, 0, '.', ',') . '</span>
            </div>';
});


// ایجاد جدول دیتابیس برای لیدهای تلگرامی
function ts_create_telegram_leads_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'telegram_leads';
    $charset_collate = $wpdb->get_charset_collate();

    $sql = "CREATE TABLE IF NOT EXISTS $table_name (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        date_created datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
        full_name tinytext NOT NULL,
        telegram_phone varchar(20) NOT NULL,
        email varchar(100) NOT NULL,
        PRIMARY KEY  (id)
    ) $charset_collate;";

    require_once( ABSPATH . 'wp-admin/includes/upgrade.php' );
    dbDelta( $sql );
}
add_action('init', 'ts_create_telegram_leads_table');

// عملیات AJAX برای فرم تلگرام
add_action('wp_ajax_ts_save_telegram_lead', 'ts_save_telegram_lead_callback');
add_action('wp_ajax_nopriv_ts_save_telegram_lead', 'ts_save_telegram_lead_callback');

function ts_save_telegram_lead_callback() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'telegram_leads';

    $name = sanitize_text_field($_POST['tg_name']);
    $phone = sanitize_text_field($_POST['tg_phone']);
    $email = sanitize_email($_POST['tg_email']);

    if(empty($name) || empty($phone)) {
        wp_send_json_error('فیلدهای ضروری را پر کنید');
    }

    $result = $wpdb->insert(
        $table_name,
        array(
            'full_name' => $name,
            'telegram_phone' => $phone,
            'email' => $email,
        )
    );

    if ($result) {
        wp_send_json_success();
    } else {
        wp_send_json_error();
    }
}


//کد دوره های من
function ts_show_user_courses() {
    if ( ! is_user_logged_in() ) {
        return '<p class="ts-empty-courses">برای مشاهده دوره‌های خود وارد حساب کاربری شوید.</p>';
    }

    $user_id = get_current_user_id();

    /*
     * ID محصولاتی که نباید در دوره‌های من نمایش داده شوند
     * اینجا ID اشتراک‌ها را قرار بده
     */
    $excluded_product_ids = array(3554, 3865, 3867);

    // گرفتن سفارش‌های کاربر
    $customer_orders = wc_get_orders( array(
        'customer_id' => $user_id,
        'status'      => array('wc-completed', 'wc-processing'),
        'limit'       => -1,
    ) );

    if ( empty($customer_orders) ) {
        return '<p class="ts-empty-courses">شما هنوز دوره‌ای خریداری نکرده‌اید.</p>';
    }

    $product_ids = array();

    foreach ( $customer_orders as $order ) {
        foreach ( $order->get_items() as $item ) {

            $product_id = $item->get_product_id();

            // حذف اشتراک‌ها از لیست
            if ( in_array( $product_id, $excluded_product_ids ) ) {
                continue;
            }

            $product_ids[] = $product_id;
        }
    }

    $product_ids = array_unique($product_ids);

    if ( empty($product_ids) ) {
        return '<p class="ts-empty-courses">شما هنوز دوره‌ای خریداری نکرده‌اید.</p>';
    }

    ob_start();

    echo '<div class="ts-my-courses-grid">';

    foreach ( $product_ids as $product_id ) {

        $product = wc_get_product($product_id);

        if ( ! $product ) {
            continue;
        }

        echo '<div class="ts-course-card">';

        if ( has_post_thumbnail($product_id) ) {
            echo get_the_post_thumbnail($product_id, 'medium');
        }

        echo '<h3>' . esc_html( get_the_title($product_id) ) . '</h3>';

        echo '<a href="' . esc_url( get_permalink($product_id) ) . '" class="ts-course-btn">مشاهده دوره</a>';

        echo '</div>';
    }

    echo '</div>';

    return ob_get_clean();
}
add_shortcode('ts_my_courses', 'ts_show_user_courses');