refactor(Core): optimize admin panel and refactor
This commit is contained in:
@@ -5,18 +5,20 @@ if (!defined('ABSPATH')) {
|
||||
}
|
||||
|
||||
$current_page = sanitize_text_field($_GET['page'] ?? 'sodino-add-upsell');
|
||||
$form_trigger_type = function_exists('sodino_old_input') ? sodino_old_input('trigger_type', $upsell->trigger_type) : $upsell->trigger_type;
|
||||
$form_discount_type = function_exists('sodino_old_input') ? sodino_old_input('discount_type', $upsell->discount_type) : $upsell->discount_type;
|
||||
$trigger_product = null;
|
||||
$trigger_product_label = '';
|
||||
$target_product = null;
|
||||
$target_product_label = '';
|
||||
|
||||
if ($upsell->trigger_type === 'product' && $upsell->trigger_value) {
|
||||
$trigger_product = wc_get_product(intval($upsell->trigger_value));
|
||||
if ($form_trigger_type === 'product' && (function_exists('sodino_old_input') ? sodino_old_input('trigger_values.product', $upsell->trigger_value) : $upsell->trigger_value)) {
|
||||
$trigger_product = wc_get_product(intval(function_exists('sodino_old_input') ? sodino_old_input('trigger_values.product', $upsell->trigger_value) : $upsell->trigger_value));
|
||||
$trigger_product_label = $trigger_product ? $trigger_product->get_name() : '';
|
||||
}
|
||||
|
||||
if ($upsell->target_product_id) {
|
||||
$target_product = wc_get_product($upsell->target_product_id);
|
||||
if (function_exists('sodino_old_input') ? sodino_old_input('target_product_id', $upsell->target_product_id) : $upsell->target_product_id) {
|
||||
$target_product = wc_get_product(function_exists('sodino_old_input') ? sodino_old_input('target_product_id', $upsell->target_product_id) : $upsell->target_product_id);
|
||||
$target_product_label = $target_product ? $target_product->get_name() : '';
|
||||
}
|
||||
|
||||
@@ -40,6 +42,7 @@ $product_categories = get_terms([
|
||||
</div>
|
||||
|
||||
<div class="max-w-7xl mx-auto px-4 sm:px-6 lg:px-8 py-8">
|
||||
<?php if (function_exists('sodino_render_admin_notice')) { sodino_render_admin_notice(); } ?>
|
||||
<div class="flex gap-8">
|
||||
<aside class="w-64 flex-shrink-0">
|
||||
<div class="bg-white rounded-lg shadow-sm border border-gray-200 p-6">
|
||||
@@ -60,6 +63,12 @@ $product_categories = get_terms([
|
||||
<a href="<?php echo admin_url('admin.php?page=sodino-add-upsell'); ?>" class="block px-3 py-2 rounded-md text-sm font-medium <?php echo $current_page === 'sodino-add-upsell' ? 'bg-blue-50 text-blue-700 border-r-2 border-blue-700' : 'text-gray-600 hover:bg-gray-50 hover:text-gray-900'; ?>">
|
||||
<?php _e('افزودن آپسل', 'sodino'); ?>
|
||||
</a>
|
||||
<a href="<?php echo admin_url('admin.php?page=sodino-banners'); ?>" class="block px-3 py-2 rounded-md text-sm font-medium <?php echo $current_page === 'sodino-banners' ? 'bg-blue-50 text-blue-700 border-r-2 border-blue-700' : 'text-gray-600 hover:bg-gray-50 hover:text-gray-900'; ?>">
|
||||
<?php _e('بنرهای هوشمند', 'sodino'); ?>
|
||||
</a>
|
||||
<a href="<?php echo admin_url('admin.php?page=sodino-add-banner'); ?>" class="block px-3 py-2 rounded-md text-sm font-medium <?php echo $current_page === 'sodino-add-banner' ? 'bg-blue-50 text-blue-700 border-r-2 border-blue-700' : 'text-gray-600 hover:bg-gray-50 hover:text-gray-900'; ?>">
|
||||
<?php _e('افزودن بنر', 'sodino'); ?>
|
||||
</a>
|
||||
<a href="<?php echo admin_url('admin.php?page=sodino-competitor-price'); ?>" class="block px-3 py-2 rounded-md text-sm font-medium <?php echo $current_page === 'sodino-competitor-price' ? 'bg-blue-50 text-blue-700 border-r-2 border-blue-700' : 'text-gray-600 hover:bg-gray-50 hover:text-gray-900'; ?>">
|
||||
<?php _e('قیمت رقبا (بهزودی)', 'sodino'); ?>
|
||||
</a>
|
||||
@@ -90,30 +99,30 @@ $product_categories = get_terms([
|
||||
<div class="grid gap-6 md:grid-cols-2">
|
||||
<div class="md:col-span-2">
|
||||
<label for="title" class="block text-sm font-medium text-gray-700 mb-2"><?php _e('عنوان', 'sodino'); ?></label>
|
||||
<input type="text" name="title" id="title" value="<?php echo esc_attr($upsell->title); ?>" class="w-full rounded-lg border border-gray-300 bg-white px-4 py-3 text-gray-700 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-100" required>
|
||||
<input type="text" name="title" id="title" value="<?php echo esc_attr(function_exists('sodino_old_input') ? sodino_old_input('title', $upsell->title) : $upsell->title); ?>" class="w-full rounded-lg border border-gray-300 bg-white px-4 py-3 text-gray-700 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-100" required>
|
||||
</div>
|
||||
|
||||
<div class="md:col-span-2">
|
||||
<label class="block text-sm font-medium text-gray-700 mb-2"><?php _e('نوع شرط', 'sodino'); ?></label>
|
||||
<div class="space-y-3">
|
||||
<label class="flex items-center gap-3 rounded-lg border border-gray-200 bg-white px-4 py-3 cursor-pointer hover:border-blue-300">
|
||||
<input type="radio" name="trigger_type" value="product" class="trigger-type" <?php checked($upsell->trigger_type, 'product'); ?>>
|
||||
<input type="radio" name="trigger_type" value="product" class="trigger-type" <?php checked($form_trigger_type, 'product'); ?>>
|
||||
<span><?php _e('محصول خاص', 'sodino'); ?></span>
|
||||
</label>
|
||||
<label class="flex items-center gap-3 rounded-lg border border-gray-200 bg-white px-4 py-3 cursor-pointer hover:border-blue-300">
|
||||
<input type="radio" name="trigger_type" value="category" class="trigger-type" <?php checked($upsell->trigger_type, 'category'); ?>>
|
||||
<input type="radio" name="trigger_type" value="category" class="trigger-type" <?php checked($form_trigger_type, 'category'); ?>>
|
||||
<span><?php _e('دستهبندی', 'sodino'); ?></span>
|
||||
</label>
|
||||
<label class="flex items-center gap-3 rounded-lg border border-gray-200 bg-white px-4 py-3 cursor-pointer hover:border-blue-300">
|
||||
<input type="radio" name="trigger_type" value="cart_total" class="trigger-type" <?php checked($upsell->trigger_type, 'cart_total'); ?>>
|
||||
<input type="radio" name="trigger_type" value="cart_total" class="trigger-type" <?php checked($form_trigger_type, 'cart_total'); ?>>
|
||||
<span><?php _e('مبلغ سبد خرید', 'sodino'); ?></span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="trigger_value" id="trigger_value" value="<?php echo esc_attr($upsell->trigger_value); ?>">
|
||||
<input type="hidden" name="trigger_values[product]" id="trigger_value" value="<?php echo esc_attr(function_exists('sodino_old_input') ? sodino_old_input('trigger_values.product', $form_trigger_type === 'product' ? $upsell->trigger_value : '') : ($form_trigger_type === 'product' ? $upsell->trigger_value : '')); ?>">
|
||||
|
||||
<div id="trigger-product-wrapper" class="md:col-span-2 <?php echo $upsell->trigger_type === 'product' ? '' : 'hidden'; ?>">
|
||||
<div id="trigger-product-wrapper" class="md:col-span-2 <?php echo $form_trigger_type === 'product' ? '' : 'hidden'; ?>">
|
||||
<label for="trigger_product_search" class="block text-sm font-medium text-gray-700 mb-2"><?php _e('محصول فعالساز', 'sodino'); ?></label>
|
||||
<div class="relative">
|
||||
<input type="text" id="trigger_product_search" class="w-full rounded-lg border border-gray-300 bg-white px-4 py-3 text-gray-700 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-100" placeholder="<?php _e('جستجوی محصول...', 'sodino'); ?>" value="<?php echo esc_attr($trigger_product_label); ?>">
|
||||
@@ -122,25 +131,25 @@ $product_categories = get_terms([
|
||||
<p class="mt-2 text-sm text-gray-500"><?php _e('محصولی که باعث نمایش پیشنهاد آپسل میشود را انتخاب کنید.', 'sodino'); ?></p>
|
||||
</div>
|
||||
|
||||
<div id="trigger-category-wrapper" class="md:col-span-2 <?php echo $upsell->trigger_type === 'category' ? '' : 'hidden'; ?>">
|
||||
<div id="trigger-category-wrapper" class="md:col-span-2 <?php echo $form_trigger_type === 'category' ? '' : 'hidden'; ?>">
|
||||
<label for="trigger_value_category" class="block text-sm font-medium text-gray-700 mb-2"><?php _e('دستهبندی', 'sodino'); ?></label>
|
||||
<select name="trigger_value" id="trigger_value_category" class="w-full rounded-lg border border-gray-300 bg-white px-4 py-3 text-gray-700 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-100">
|
||||
<select name="trigger_values[category]" id="trigger_value_category" class="w-full rounded-lg border border-gray-300 bg-white px-4 py-3 text-gray-700 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-100">
|
||||
<option value=""><?php _e('دستهبندی را انتخاب کنید', 'sodino'); ?></option>
|
||||
<?php foreach ($product_categories as $category) : ?>
|
||||
<option value="<?php echo esc_attr($category->term_id); ?>" <?php selected($upsell->trigger_type, 'category'); selected($upsell->trigger_value, $category->term_id); ?>><?php echo esc_html($category->name); ?></option>
|
||||
<option value="<?php echo esc_attr($category->term_id); ?>" <?php selected((string) (function_exists('sodino_old_input') ? sodino_old_input('trigger_values.category', $form_trigger_type === 'category' ? $upsell->trigger_value : '') : ($form_trigger_type === 'category' ? $upsell->trigger_value : '')), (string) $category->term_id); ?>><?php echo esc_html($category->name); ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div id="trigger-amount-wrapper" class="md:col-span-2 <?php echo $upsell->trigger_type === 'cart_total' ? '' : 'hidden'; ?>">
|
||||
<div id="trigger-amount-wrapper" class="md:col-span-2 <?php echo $form_trigger_type === 'cart_total' ? '' : 'hidden'; ?>">
|
||||
<label for="trigger_value_amount" class="block text-sm font-medium text-gray-700 mb-2"><?php _e('مبلغ سبد خرید', 'sodino'); ?></label>
|
||||
<input type="number" name="trigger_value" id="trigger_value_amount" value="<?php echo esc_attr($upsell->trigger_type === 'cart_total' ? $upsell->trigger_value : ''); ?>" min="0" step="0.01" class="w-full rounded-lg border border-gray-300 bg-white px-4 py-3 text-gray-700 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-100">
|
||||
<input type="number" name="trigger_values[cart_total]" id="trigger_value_amount" value="<?php echo esc_attr(function_exists('sodino_old_input') ? sodino_old_input('trigger_values.cart_total', $form_trigger_type === 'cart_total' ? $upsell->trigger_value : '') : ($form_trigger_type === 'cart_total' ? $upsell->trigger_value : '')); ?>" min="0" step="0.01" class="w-full rounded-lg border border-gray-300 bg-white px-4 py-3 text-gray-700 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-100">
|
||||
</div>
|
||||
|
||||
<div class="md:col-span-2">
|
||||
<label for="target_product_search" class="block text-sm font-medium text-gray-700 mb-2"><?php _e('محصول پیشنهادی', 'sodino'); ?></label>
|
||||
<div class="relative">
|
||||
<input type="hidden" name="target_product_id" id="target_product_id" value="<?php echo esc_attr($upsell->target_product_id); ?>">
|
||||
<input type="hidden" name="target_product_id" id="target_product_id" value="<?php echo esc_attr(function_exists('sodino_old_input') ? sodino_old_input('target_product_id', $upsell->target_product_id) : $upsell->target_product_id); ?>">
|
||||
<input type="text" id="target_product_search" class="w-full rounded-lg border border-gray-300 bg-white px-4 py-3 text-gray-700 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-100" placeholder="<?php _e('جستجوی محصول پیشنهادی...', 'sodino'); ?>" value="<?php echo esc_attr($target_product_label); ?>">
|
||||
<div id="target_product_results" class="absolute z-10 mt-1 w-full rounded-xl border border-gray-200 bg-white shadow-lg hidden"></div>
|
||||
</div>
|
||||
@@ -150,20 +159,20 @@ $product_categories = get_terms([
|
||||
<div>
|
||||
<label for="discount_type" class="block text-sm font-medium text-gray-700 mb-2"><?php _e('نوع تخفیف', 'sodino'); ?></label>
|
||||
<select name="discount_type" id="discount_type" class="w-full rounded-lg border border-gray-300 bg-white px-4 py-3 text-gray-700 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-100">
|
||||
<option value="percentage" <?php selected($upsell->discount_type, 'percentage'); ?>><?php _e('درصدی', 'sodino'); ?></option>
|
||||
<option value="fixed" <?php selected($upsell->discount_type, 'fixed'); ?>><?php _e('مبلغ ثابت', 'sodino'); ?></option>
|
||||
<option value="none" <?php selected($upsell->discount_type, 'none'); ?>><?php _e('بدون تخفیف', 'sodino'); ?></option>
|
||||
<option value="percentage" <?php selected($form_discount_type, 'percentage'); ?>><?php _e('درصدی', 'sodino'); ?></option>
|
||||
<option value="fixed" <?php selected($form_discount_type, 'fixed'); ?>><?php _e('مبلغ ثابت', 'sodino'); ?></option>
|
||||
<option value="none" <?php selected($form_discount_type, 'none'); ?>><?php _e('بدون تخفیف', 'sodino'); ?></option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label for="discount_value" class="block text-sm font-medium text-gray-700 mb-2"><?php _e('مقدار تخفیف', 'sodino'); ?></label>
|
||||
<input type="number" name="discount_value" id="discount_value" value="<?php echo esc_attr($upsell->discount_value); ?>" min="0" step="0.01" class="w-full rounded-lg border border-gray-300 bg-white px-4 py-3 text-gray-700 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-100">
|
||||
<input type="number" name="discount_value" id="discount_value" value="<?php echo esc_attr(function_exists('sodino_old_input') ? sodino_old_input('discount_value', $upsell->discount_value) : $upsell->discount_value); ?>" min="0" step="0.01" class="w-full rounded-lg border border-gray-300 bg-white px-4 py-3 text-gray-700 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-100">
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<label for="priority" class="block text-sm font-medium text-gray-700 mb-2"><?php _e('اولویت', 'sodino'); ?></label>
|
||||
<input type="number" name="priority" id="priority" value="<?php echo esc_attr($upsell->priority); ?>" min="1" class="w-full rounded-lg border border-gray-300 bg-white px-4 py-3 text-gray-700 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-100">
|
||||
<input type="number" name="priority" id="priority" value="<?php echo esc_attr(function_exists('sodino_old_input') ? sodino_old_input('priority', $upsell->priority) : $upsell->priority); ?>" min="1" class="w-full rounded-lg border border-gray-300 bg-white px-4 py-3 text-gray-700 shadow-sm focus:border-blue-500 focus:outline-none focus:ring-2 focus:ring-blue-100">
|
||||
</div>
|
||||
|
||||
<div class="md:col-span-2">
|
||||
|
||||
Reference in New Issue
Block a user