refactor(Core): refactor and optimize code

This commit is contained in:
2026-05-06 00:54:24 +03:30
parent 32c065e4b6
commit dec4e67b9e
20 changed files with 1787 additions and 361 deletions

View File

@@ -0,0 +1,87 @@
<?php
namespace Sodino\Controllers;
use Sodino\Core\Settings;
use Sodino\Core\Cache;
/**
* Settings Controller
*/
class SettingsController extends BaseController {
private $settings;
private $cache;
public function __construct() {
$this->settings = Settings::getInstance();
$this->cache = Cache::getInstance();
}
/**
* Settings page
*/
public function index() {
$this->checkCapability();
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
return $this->save();
}
$settings = $this->settings->all();
$this->render('settings', [
'settings' => $settings,
'current_page' => 'sodino-settings'
]);
}
/**
* Save settings
*/
private function save() {
$this->verifyNonce('sodino_settings_nonce', 'sodino_save_settings');
$settings = [
'plugin_enabled' => isset($_POST['plugin_enabled']) ? 1 : 0,
'pricing_enabled' => isset($_POST['pricing_enabled']) ? 1 : 0,
'upsell_enabled' => isset($_POST['upsell_enabled']) ? 1 : 0,
'banner_enabled' => isset($_POST['banner_enabled']) ? 1 : 0,
'allow_multiple_rules' => isset($_POST['allow_multiple_rules']) ? 1 : 0,
'strategy' => sanitize_text_field($_POST['strategy'] ?? 'priority'),
'max_discount_percent' => max(0, min(100, floatval($_POST['max_discount_percent'] ?? 100))),
'min_product_price' => max(0, floatval($_POST['min_product_price'] ?? 0)),
'ab_testing_enabled' => isset($_POST['ab_testing_enabled']) ? 1 : 0,
'cart_pricing_enabled' => isset($_POST['cart_pricing_enabled']) ? 1 : 0,
'scheduled_campaigns_enabled' => isset($_POST['scheduled_campaigns_enabled']) ? 1 : 0,
'cache_enabled' => isset($_POST['cache_enabled']) ? 1 : 0,
'cache_duration' => max(60, intval($_POST['cache_duration'] ?? 3600)),
'debug_mode' => isset($_POST['debug_mode']) ? 1 : 0,
];
$this->settings->update($settings);
// Clear cache when settings change
$this->cache->clearAll();
$this->redirect(
admin_url('admin.php?page=sodino-settings'),
__('تنظیمات با موفقیت ذخیره شد.', 'sodino')
);
}
/**
* Clear cache action
*/
public function clearCache() {
$this->checkCapability();
if (!isset($_GET['_wpnonce']) || !wp_verify_nonce($_GET['_wpnonce'], 'clear_cache')) {
wp_die(__('خطای امنیتی رخ داد.', 'sodino'));
}
$this->cache->clearAll();
$this->redirect(
admin_url('admin.php?page=sodino-settings'),
__('کش با موفقیت پاک شد.', 'sodino')
);
}
}