Files
sodino/admin/admin.php
soheil khaledabadi 32c065e4b6 feat: Add banner management functionality
- Implemented a new Banner model to represent banner data.
- Created a BannerRepository for database interactions related to banners.
- Developed a BannerService to handle business logic for banners.
- Added admin views for listing and adding banners.
- Integrated banner hooks for frontend rendering and click tracking.
- Created frontend styles and scripts for banner display and interaction.
- Updated database migrations to include a new banners table.
- Enhanced AdminController to manage banner actions and pages.
2026-05-05 01:03:05 +03:30

63 lines
2.6 KiB
PHP

<?php
// Prevent direct access
if (!defined('ABSPATH')) {
exit;
}
use Sodino\Controllers\AdminController;
use Sodino\Repositories\BannerRepository;
use Sodino\Repositories\RuleRepository;
use Sodino\Repositories\UpsellRepository;
// Initialize admin
$ruleRepository = new RuleRepository();
$upsellRepository = new UpsellRepository();
$bannerRepository = new BannerRepository();
$adminController = new AdminController($ruleRepository, $upsellRepository, $bannerRepository);
// Add menu
add_action('admin_menu', [$adminController, 'addMenu']);
// Admin AJAX handlers
add_action('wp_ajax_sodino_search_products', [$adminController, 'searchProductsAjax']);
// Enqueue admin assets
add_action('admin_enqueue_scripts', function($hook) use ($adminController) {
if (strpos($hook, 'sodino') === false) {
return;
}
// Enqueue Tailwind via CDN script
wp_enqueue_script('sodino-tailwind', 'https://cdn.tailwindcss.com', [], null);
wp_enqueue_style('sodino-admin', plugin_dir_url(__FILE__) . 'css/admin.css', [], SODINO_VERSION);
if (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'], null, true);
}
if (strpos($hook, 'sodino_page_sodino-add-upsell') !== false) {
wp_enqueue_script('sodino-upsell-admin', plugin_dir_url(__FILE__) . 'js/upsell-admin.js', [], SODINO_VERSION, true);
wp_localize_script('sodino-upsell-admin', 'sodinoUpsellAdmin', [
'nonce' => wp_create_nonce('sodino_search_products'),
]);
}
if (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 delete for any Sodino admin page
if (isset($_GET['page']) && strpos($_GET['page'], 'sodino') === 0 && isset($_GET['action']) && $_GET['action'] === 'delete') {
add_action('admin_init', [$adminController, 'handleDelete']);
}
if (isset($_GET['page']) && strpos($_GET['page'], 'sodino') === 0 && isset($_GET['action']) && in_array($_GET['action'], ['delete_banner', 'toggle_banner_status'], true)) {
add_action('admin_init', [$adminController, 'handleBannerActions']);
}
// Handle upsell actions
if (isset($_GET['page']) && strpos($_GET['page'], 'sodino') === 0 && isset($_GET['action']) && in_array($_GET['action'], ['delete_upsell', 'toggle_upsell_status'], true)) {
add_action('admin_init', [$adminController, 'handleUpsellActions']);
}