PluginProbe
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler / 1.6.5
FluentCart A New Era of eCommerce – Faster, Lighter, and Simpler v1.6.5
1.6.5 1.6.4 1.6.3 1.6.2 1.6.1 1.6.0 1.5.4 1.5.5 1.5.3 1.5.2 1.5.1 1.5.0 1.4.2 1.4.1 1.4.0 1.3.28 1.3.27 1.3.26 1.3.25 1.3.23 1.3.22 1.3.21 1.3.20 1.3.19 trunk All 48 releases
← All changes | app/Http/Requests/FluentMetaRequest.php +64 -0 1.3.21 → 1.6.5 View file →
@@ -4,8 +4,9 @@
4 4
5 5 use FluentCart\Framework\Foundation\RequestGuard;
6 6 use FluentCart\Framework\Support\Arr;
7 7 use FluentCart\App\Services\Permission\PermissionManager;
8 +use FluentCart\App\Services\Theme\ColorPalette;
8 9
9 10 class FluentMetaRequest extends RequestGuard
10 11 {
11 12
@@ -19,8 +20,10 @@
19 20 $rulesMap = [
20 21 'store_setup' => [
21 22 'store_name' => 'required|sanitizeText|maxLength:200',
22 23 'store_country' => 'required|sanitizeText|maxLength:200',
24 + 'seller_vat_id' => 'nullable|sanitizeText|maxLength:50',
25 + 'seller_tax_id' => 'nullable|sanitizeText|maxLength:50',
23 26 ]
24 27 ];
25 28
26 29 $rules = Arr::get($rulesMap, $this->get('settings_name'), []);
@@ -59,8 +62,12 @@
59 62 'meta_key' => 'sanitize_text_field',
60 63 'type' => 'sanitize_text_field',
61 64 'default' => 'sanitize_text_field',
62 65 'store_name' => 'sanitize_text_field',
66 + 'company_name' => 'sanitize_text_field',
67 + 'legal_registration_id' => 'sanitize_text_field',
68 + 'seller_vat_id' => 'sanitize_text_field',
69 + 'seller_tax_id' => 'sanitize_text_field',
63 70 'store_logo' => function ($value) {
64 71 if (!is_array($value)) {
65 72 return '';
66 73 }
@@ -86,8 +93,11 @@
86 93 'show_cart_icon_in_body' => 'sanitize_text_field',
87 94 'additional_address_field' => 'sanitize_text_field',
88 95 'hide_coupon_field' => 'sanitize_text_field',
89 96 'user_account_creation_mode' => 'sanitize_text_field',
97 + 'auto_login_after_account_creation' => function ($value) {
98 + return $value === 'yes' ? 'yes' : 'no';
99 + },
90 100 'force_ssl' => 'sanitize_text_field',
91 101 'checkout_page_id' => 'intval',
92 102 'custom_payment_page_id' => 'intval',
93 103 'cart_page_id' => 'intval',
@@ -109,9 +119,26 @@
109 119 'template_settings_checkout_page_mode' => 'sanitize_text_field',
110 120 'show_relevant_product_in_single_page' => 'sanitize_text_field',
111 121 'show_relevant_product_in_modal' => 'sanitize_text_field',
112 122 'enable_early_payment_for_installment' => 'sanitize_text_field',
123 + 'subscription_management_mode' => function ($value) {
124 + $value = sanitize_text_field($value);
125 + $allowed = ['gateway_managed', 'store_managed'];
126 + return in_array($value, $allowed, true) ? $value : 'gateway_managed';
127 + },
128 + 'subscription_system_charge' => function ($value) {
129 + $value = sanitize_text_field($value);
130 + return in_array($value, ['yes', 'no'], true) ? $value : 'no';
131 + },
132 + 'subscription_manual_fallback' => function ($value) {
133 + $value = sanitize_text_field($value);
134 + return in_array($value, ['yes', 'no'], true) ? $value : 'no';
135 + },
113 136 'order_mode' => 'sanitize_text_field',
137 + 'subscription_mode_guard' => function ($value) {
138 + $value = sanitize_text_field($value);
139 + return in_array($value, ['yes', 'no'], true) ? $value : 'yes';
140 + },
114 141 'variation_view' => 'sanitize_text_field',
115 142 'variation_columns' => 'sanitize_text_field',
116 143 'modules_settings' => 'sanitize_text_field',
117 144 'product_slug' => 'sanitize_text_field',
@@ -116,8 +143,16 @@
116 143 'modules_settings' => 'sanitize_text_field',
117 144 'product_slug' => 'sanitize_text_field',
118 145 'min_receipt_number' => 'sanitize_text_field',
119 146 'inv_prefix' => 'sanitize_text_field',
147 + 'date_time_format_source' => function ($value) {
148 + $value = sanitize_text_field($value);
149 + return in_array($value, ['fluent_cart', 'wordpress'], true) ? $value : 'fluent_cart';
150 + },
151 + 'timezone_source' => function ($value) {
152 + $value = sanitize_text_field($value);
153 + return in_array($value, ['fluent_cart', 'wordpress'], true) ? $value : 'fluent_cart';
154 + },
120 155 'weight_unit' => function ($value) {
121 156 if (!PermissionManager::hasPermission(['store/sensitive'])) {
122 157 $stored = get_option('fluent_cart_store_settings', []);
123 158 return $stored['weight_unit'] ?? 'kg';
@@ -136,8 +171,37 @@
136 171 return in_array($value, $allowed, true) ? $value : 'cm';
137 172 },
138 173 'enable_image_zoom_in_single_product' => 'sanitize_text_field',
139 174 'enable_image_zoom_in_modal' => 'sanitize_text_field',
175 + 'appearance_source' => function ($value) {
176 + $value = sanitize_text_field($value);
177 +
178 + return in_array($value, ColorPalette::sources(), true)
179 + ? $value
180 + : ColorPalette::SOURCE_DEFAULT;
181 + },
182 + 'appearance_colors' => function ($value) {
183 + if (!is_array($value)) {
184 + return [];
185 + }
186 +
187 + // Driven off the registry rather than the submitted keys, so an
188 + // unknown property can never reach the storefront stylesheet.
189 + $colors = [];
190 +
191 + foreach (ColorPalette::globals() as $key => $definition) {
192 + $hex = sanitize_hex_color((string)Arr::get($value, $key, ''));
193 +
194 + // sanitize_hex_color() returns null for anything malformed
195 + // and '' for an empty picker; both mean "not set", which is
196 + // how a colour falls back to FluentCart's own default.
197 + if ($hex) {
198 + $colors[$key] = $hex;
199 + }
200 + }
201 +
202 + return $colors;
203 + },
140 204 'theme_setup' => function ($value) {
141 205 if (!is_array($value)) {
142 206 return [];
143 207 }