class-settings-manager.php 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. /**
  3. * Settings Manager Class - Handles plugin settings
  4. *
  5. * @package StudiouWCCustomReports
  6. */
  7. if (!defined('ABSPATH')) {
  8. exit;
  9. }
  10. class StudiouWC_Settings_Manager {
  11. private const OPTION_NAME = 'studiou_wc_custom_reports_settings';
  12. public function activate() {
  13. $default_settings = array(
  14. 'default_interval' => 'last_month',
  15. 'default_property' => 'format', // Set format as default since it exists
  16. 'default_statuses' => array('wc-completed', 'wc-processing', 'wc-on-hold', 'wc-to-print')
  17. );
  18. add_option(self::OPTION_NAME, $default_settings);
  19. }
  20. public function get_settings() {
  21. $settings = get_option(self::OPTION_NAME, array());
  22. // Ensure we have default values
  23. $defaults = array(
  24. 'default_interval' => 'last_month',
  25. 'default_property' => 'format',
  26. 'default_statuses' => array('wc-completed', 'wc-processing', 'wc-on-hold', 'wc-to-print')
  27. );
  28. return array_merge($defaults, $settings);
  29. }
  30. public function update_settings($settings) {
  31. return update_option(self::OPTION_NAME, $settings);
  32. }
  33. public function get_default_date_from() {
  34. $settings = $this->get_settings();
  35. $interval = $settings['default_interval'] ?? 'last_month';
  36. switch ($interval) {
  37. case 'last_day':
  38. return date('Y-m-d', strtotime('-1 day'));
  39. case 'last_week':
  40. return date('Y-m-d', strtotime('-1 week'));
  41. case 'last_month':
  42. default:
  43. return date('Y-m-d', strtotime('-1 month'));
  44. }
  45. }
  46. public function save_settings() {
  47. // Verify nonce for security
  48. if (!isset($_POST['studiou_settings_nonce']) || !wp_verify_nonce($_POST['studiou_settings_nonce'], 'studiou_save_settings')) {
  49. wp_send_json_error(__('Security check failed.', StudiouWC_Main::get_text_domain()));
  50. }
  51. if (!current_user_can('manage_woocommerce')) {
  52. wp_send_json_error(__('You do not have sufficient permissions.', StudiouWC_Main::get_text_domain()));
  53. }
  54. $settings = array(
  55. 'default_interval' => isset($_POST['default_interval']) ? sanitize_text_field($_POST['default_interval']) : 'last_month',
  56. 'default_property' => isset($_POST['default_property']) ? sanitize_text_field($_POST['default_property']) : '',
  57. 'default_statuses' => isset($_POST['default_statuses']) ? array_map('sanitize_text_field', $_POST['default_statuses']) : array()
  58. );
  59. // Validate interval
  60. $valid_intervals = array('last_day', 'last_week', 'last_month');
  61. if (!in_array($settings['default_interval'], $valid_intervals)) {
  62. $settings['default_interval'] = 'last_month';
  63. }
  64. if ($this->update_settings($settings)) {
  65. wp_send_json_success(__('Settings saved successfully!', StudiouWC_Main::get_text_domain()));
  66. } else {
  67. wp_send_json_error(__('Error saving settings.', StudiouWC_Main::get_text_domain()));
  68. }
  69. }
  70. }