PluginProbe
ShopBuilder – WooCommerce Builder For Elementor / 2.1.6
ShopBuilder – WooCommerce Builder For Elementor v2.1.6
3.4.2 3.4.1 3.4.0 2.0.1 2.0.2 2.0.3 2.1.0 2.1.1 2.1.10 2.1.11 2.1.12 2.1.13 2.1.14 2.1.15 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.1.9 2.2.0 2.2.1 2.2.2 All 63 releases
shopbuilder / app / Controllers / Admin / Ajax / AdminSettings.php

AdminSettings.php in ShopBuilder – WooCommerce Builder For Elementor 2.1.6, at app/Controllers/Admin/Ajax/AdminSettings.php

183 lines 5.6 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 namespace RadiusTheme\SB\Controllers\Admin\Ajax;
4
5 use RadiusTheme\SB\Helpers\Fns;
6 use RadiusTheme\SB\Models\DataModel;
7 use RadiusTheme\SB\Models\Settings;
8 use RadiusTheme\SB\Traits\SingletonTrait;
9
10 // Do not allow directly accessing this file.
11 if ( ! defined( 'ABSPATH' ) ) {
12 exit( 'This script cannot be accessed directly.' );
13 }
14
15 /**
16 * Settings Page.
17 */
18 class AdminSettings {
19 /**
20 * Singleton Trait.
21 */
22 use SingletonTrait;
23
24 /**
25 * Construct function
26 */
27 private function __construct() {
28 // add_action( 'wp_ajax_rtsb_settings_fields', [ $this, 'get_settings_fields' ] );
29 // add_action( 'wp_ajax_rtsb_settings_data', [ $this, 'get_settings_data' ] );
30 add_action( 'wp_ajax_rtsb_save_settings_data', [ $this, 'save_settings_data' ] );
31 add_action( 'wp_ajax_rtsb_toggle_modules_activation', [ $this, 'toggle_modules' ] );
32
33 add_action( 'wp_ajax_rtsb_get_multiselect_data', [ $this, 'get_multiselect_data' ] );
34 }
35
36 /**
37 * Get settings fields
38 *
39 * @return void
40 */
41 public function get_multiselect_data() {
42 if ( ! Fns::verify_nonce() || ! current_user_can( 'manage_options' ) ) {
43 wp_send_json_error( esc_html__( 'Security error: Insufficient permissions.', 'shopbuilder' ) );
44 }
45
46 $func_with_param = sanitize_text_field( $_REQUEST['func_with_param'] ?? '' );
47 $s = sanitize_text_field( $_REQUEST['s'] ?? '' );
48 $decodedString = stripslashes( $func_with_param );
49 $functionArray = json_decode( $decodedString, true );
50 $className = $functionArray[0];
51 $methodName = $functionArray[1];
52 $argument = $functionArray[2] ?? [];
53 $result = [];
54 $params = [];
55 if ( class_exists( $className ) && method_exists( $className, $methodName ) ) {
56 $params[] = $s; // Modify this array with your parameters
57 $params[] = $argument;
58 $result = call_user_func_array( [ $className, $methodName ], $params );
59 }
60 wp_send_json_success( $result );
61 }
62
63 /**
64 * Get settings fields
65 *
66 * @return void
67 */
68 // public function get_settings_fields() {
69 // $data = Settings::instance()->get_fields();
70 // wp_send_json_success( $data );
71 // }
72
73 /**
74 * Get settings Data
75 *
76 * @return void
77 */
78 public function get_settings_data() {
79 $data = Settings::instance()->get_data();
80 wp_send_json_success( $data );
81 }
82
83 /**
84 * Save settings data
85 *
86 * @return void
87 */
88 public function save_settings_data() {
89 $section_id = isset( $_POST['section_id'] ) ? sanitize_text_field( wp_unslash( $_POST['section_id'] ) ) : '';
90 $block_id = isset( $_POST['block_id'] ) ? sanitize_text_field( wp_unslash( $_POST['block_id'] ) ) : '';
91 $rawOptions = isset( $_POST['options'] ) ? $_POST['options'] : []; // Fns::set_options Sanitized all array values Before saving.
92
93 if ( ! Fns::verify_nonce() || ! current_user_can( 'manage_options' ) ) {
94 wp_send_json_error( esc_html__( 'Security error: Insufficient permissions.', 'shopbuilder' ) );
95 }
96
97 $sections = Settings::instance()->get_sections();
98 $options = [];
99 if ( ! empty( $sections[ $section_id ]['list'][ $block_id ]['fields'] ) ) {
100 $fields = $sections[ $section_id ]['list'][ $block_id ]['fields'];
101 $db_options = Fns::get_options( $section_id, $block_id );
102 foreach ( $fields as $field_id => $field ) {
103 if ( ! array_key_exists( $field_id, $db_options ) ) {
104 $type = 'array' === gettype( $field['value'] ) ? [] : '';
105 $options[ $field_id ] = ! empty( $field['value'] ) ? $field['value'] : $type;
106 }
107 }
108 }
109
110 $rawOptions = wp_parse_args( $rawOptions, $options );
111
112 $status = Fns::set_options( $section_id, $block_id, $rawOptions );
113
114 if ( boolval( $status['status'] ) ) {
115 do_action( 'rtsb/after/saved/settings/success', $section_id, $block_id, $rawOptions );
116 wp_send_json_success( $status );
117 } else {
118 wp_send_json_error( $status );
119 }
120 }
121
122 /**
123 * Toggle modules
124 *
125 * @return void
126 */
127 public function toggle_modules() {
128
129 $section_id = isset( $_POST['section_id'] ) ? sanitize_text_field( wp_unslash( $_POST['section_id'] ) ) : '';
130 $module_ids = isset( $_POST['module_ids'] ) ? array_map( 'sanitize_text_field', $_POST['module_ids'] ) : [];
131 $type = isset( $_POST['type'] ) && $_POST['type'] === 'active' ? 'active' : false;
132
133 if ( ! Fns::verify_nonce() || ! current_user_can( 'manage_options' ) ) {
134 wp_send_json_error(
135 [
136 'message' => esc_html__( 'Security error: Insufficient permissions.', 'shopbuilder' ),
137 ]
138 );
139 }
140
141 if ( ! $section_id || empty( $module_ids ) ) {
142 wp_send_json_error(
143 [
144 'message' => esc_html__( 'Section , block or options may be empty', 'shopbuilder' ),
145 ]
146 );
147 }
148
149 $sections = Settings::instance()->get_sections();
150 if ( empty( $sections[ $section_id ] ) ) {
151 wp_send_json_error(
152 [
153 'message' => esc_html__( 'No section found with given data', 'shopbuilder' ),
154 ]
155 );
156 }
157 $options = DataModel::source()->get_option( $section_id, [] );
158 foreach ( $module_ids as $module_id ) {
159 if ( isset( $sections[ $section_id ]['list'][ $module_id ] ) ) {
160 if ( isset( $sections[ $section_id ]['list'][ $module_id ]['package'] ) && 'pro-disabled' === $sections[ $section_id ]['list'][ $module_id ]['package'] ) {
161 continue;
162 }
163 if ( $type === 'active' ) {
164 $options[ $module_id ]['active'] = 'on';
165 $sections[ $section_id ]['list'][ $module_id ]['active'] = 'on';
166 } else {
167 $options[ $module_id ]['active'] = '';
168 $sections[ $section_id ]['list'][ $module_id ]['active'] = '';
169 }
170 }
171 }
172
173 DataModel::source()->set_option( $section_id, $options );
174
175 wp_send_json_success(
176 [
177 'message' => esc_html__( 'Successfully Saved', 'shopbuilder' ),
178 'sections' => $sections,
179 ]
180 );
181 }
182 }
183