Files
sodino/admin/admin.php

200 lines
6.1 KiB
PHP

<?php
// Prevent direct access
if (!defined('ABSPATH')) {
exit;
}
use Sodino\Controllers\RuleController;
use Sodino\Controllers\DashboardController;
use Sodino\Controllers\SettingsController;
use Sodino\Controllers\AdminController;
use Sodino\Repositories\BannerRepository;
use Sodino\Repositories\RuleRepository;
use Sodino\Repositories\UpsellRepository;
use Sodino\Repositories\EventRepository;
// Initialize repositories
$ruleRepository = new RuleRepository();
$upsellRepository = new UpsellRepository();
$bannerRepository = new BannerRepository();
$eventRepository = new EventRepository();
// Initialize controllers
$ruleController = new RuleController($ruleRepository);
$dashboardController = new DashboardController($eventRepository, $ruleRepository);
$settingsController = new SettingsController();
$adminController = new AdminController($ruleRepository, $upsellRepository, $bannerRepository);
/**
* Add admin menu
*/
add_action('admin_menu', function() use ($adminController) {
add_menu_page(
__('سودینو', 'sodino'),
__('سودینو', 'sodino'),
'manage_options',
'sodino-dashboard',
[$adminController, 'dashboardPage'],
'dashicons-money-alt',
56
);
add_submenu_page(
'sodino-dashboard',
__('داشبورد', 'sodino'),
__('داشبورد', 'sodino'),
'manage_options',
'sodino-dashboard',
[$adminController, 'dashboardPage']
);
add_submenu_page(
'sodino-dashboard',
__('قوانین قیمت‌گذاری', 'sodino'),
__('قوانین قیمت‌گذاری', 'sodino'),
'manage_options',
'sodino-rules',
[$adminController, 'rulesPage']
);
add_submenu_page(
'sodino-dashboard',
__('افزودن قانون', 'sodino'),
__('افزودن قانون', 'sodino'),
'manage_options',
'sodino-add-rule',
[$adminController, 'addRulePage']
);
add_submenu_page(
'sodino-dashboard',
__('آپسل (پیشنهاد فروش)', 'sodino'),
__('آپسل (پیشنهاد فروش)', 'sodino'),
'manage_options',
'sodino-upsells',
[$adminController, 'upsellsPage']
);
add_submenu_page(
'sodino-dashboard',
__('افزودن آپسل', 'sodino'),
__('افزودن آپسل', 'sodino'),
'manage_options',
'sodino-add-upsell',
[$adminController, 'addUpsellPage']
);
add_submenu_page(
'sodino-dashboard',
__('بنرهای هوشمند', 'sodino'),
__('بنرهای هوشمند', 'sodino'),
'manage_options',
'sodino-banners',
[$adminController, 'bannersPage']
);
add_submenu_page(
'sodino-dashboard',
__('افزودن بنر', 'sodino'),
__('افزودن بنر', 'sodino'),
'manage_options',
'sodino-add-banner',
[$adminController, 'addBannerPage']
);
add_submenu_page(
'sodino-dashboard',
__('تنظیمات', 'sodino'),
__('تنظیمات', 'sodino'),
'manage_options',
'sodino-settings',
[$adminController, 'settingsPage']
);
});
/**
* Admin AJAX handlers
*/
add_action('wp_ajax_sodino_search_products', [$adminController, 'searchProductsAjax']);
/**
* Enqueue admin assets
*/
add_action('admin_enqueue_scripts', function($hook) {
if (strpos($hook, 'sodino') === false) {
return;
}
// Enqueue Tailwind via CDN
wp_enqueue_script('sodino-tailwind', 'https://cdn.tailwindcss.com', [], SODINO_VERSION);
// Admin CSS
wp_enqueue_style('sodino-admin', plugin_dir_url(__FILE__) . 'css/admin.css', [], SODINO_VERSION);
// Dashboard specific scripts
if (strpos($hook, 'sodino-dashboard') !== false || strpos($hook, 'sodino_page_sodino-dashboard') !== false) {
wp_enqueue_script('sodino-chart-js', 'https://cdn.jsdelivr.net/npm/chart.js', [], null, true);
wp_enqueue_script('sodino-dashboard-js', plugin_dir_url(__FILE__) . 'js/dashboard.js', ['sodino-chart-js'], SODINO_VERSION, true);
}
// Upsell specific scripts
if (strpos($hook, 'sodino-add-upsell') !== false || strpos($hook, 'sodino_page_sodino-add-upsell') !== false) {
wp_enqueue_script('sodino-upsell-admin', plugin_dir_url(__FILE__) . 'js/upsell-admin.js', ['jquery'], SODINO_VERSION, true);
wp_localize_script('sodino-upsell-admin', 'sodinoUpsellAdmin', [
'nonce' => wp_create_nonce('sodino_search_products'),
'ajaxUrl' => admin_url('admin-ajax.php')
]);
}
// Banner specific scripts
if (strpos($hook, 'sodino-add-banner') !== false || strpos($hook, 'sodino_page_sodino-add-banner') !== false) {
wp_enqueue_media();
wp_enqueue_script('sodino-banner-admin', plugin_dir_url(__FILE__) . 'js/banner-admin.js', ['jquery'], SODINO_VERSION, true);
}
});
/**
* Handle admin actions
*/
add_action('admin_init', function() use ($ruleController, $settingsController, $adminController) {
$page = $_GET['page'] ?? '';
$action = $_GET['action'] ?? '';
// Rule actions
if ($page === 'sodino-rules' && $action === 'delete') {
$ruleController->delete();
}
// Settings actions
if ($page === 'sodino-settings' && $action === 'clear_cache') {
$settingsController->clearCache();
}
// Banner actions
if (strpos($page, 'sodino') === 0 && in_array($action, ['delete_banner', 'toggle_banner_status'], true)) {
$adminController->handleBannerActions();
}
// Upsell actions
if (strpos($page, 'sodino') === 0 && in_array($action, ['delete_upsell', 'toggle_upsell_status'], true)) {
$adminController->handleUpsellActions();
}
});
/**
* Show admin notices
*/
add_action('admin_notices', function() {
$notice = get_transient('sodino_admin_notice');
if ($notice) {
$class = $notice['type'] === 'error' ? 'notice-error' : 'notice-success';
printf(
'<div class="notice %s is-dismissible"><p>%s</p></div>',
esc_attr($class),
esc_html($notice['message'])
);
delete_transient('sodino_admin_notice');
}
});