PluginProbe
Fluent Booking – The Ultimate Appointments Scheduling, Events Booking, Events Calendar Solution / trunk
Fluent Booking – The Ultimate Appointments Scheduling, Events Booking, Events Calendar Solution vtrunk
2.4.0 2.3.0 2.2.5 2.2.0 2.1.2 2.1.1 trunk 1.10.0 1.10.01 1.10.02 1.5.0 1.5.01 1.5.02 1.5.1 1.5.10 1.5.20 1.5.21 1.5.22 1.5.23 1.5.24 1.5.25 1.6.0 1.7.0 1.7.1 1.7.2 All 33 releases
← All changes | app/Http/Controllers/SettingsController.php +30 -131 1.5.02trunk View file →
@@ -5,9 +5,11 @@
5 5 use FluentBooking\App\App;
6 6 use FluentBooking\App\Services\GlobalModules\GlobalModules;
7 7 use FluentBooking\App\Hooks\Handlers\AdminMenuHandler;
8 8 use FluentBooking\App\Services\Helper;
9 +use FluentBooking\App\Services\CurrenciesHelper;
9 10 use FluentBooking\App\Services\Libs\Countries;
11 +use FluentBooking\App\Services\OnboardingService;
10 12 use FluentBooking\Framework\Http\Request\Request;
11 13 use FluentBooking\Framework\Support\Arr;
12 14
13 15 class SettingsController extends Controller
@@ -80,9 +82,9 @@
80 82 'email_footer' => [
81 83 'wrapper_class' => 'fc_full_width fc_mb_0 fc_wp_editor',
82 84 'type' => 'wp-editor-field',
83 85 'label' => __('Email Footer for Booking related emails (Optional)', 'fluent-booking'),
84 - 'inline_help' => __('You may include your business name, address etc here, for example: <br />You have received this email because signed up for an event or made a booking on our website.', 'fluent-booking')
86 + 'inline_help' => __('You may include your business name, address, etc. here. For example: <br />You have received this email because you signed up for an event or made a booking on our website.', 'fluent-booking')
85 87 ]
86 88 ];
87 89
88 90 $settings['all_countries'] = Countries::get();
@@ -119,16 +121,22 @@
119 121 public function updatePaymentSettings(Request $request)
120 122 {
121 123 $paymentSettings = $request->get('payments', []);
122 124
123 - $currency = Arr::get($paymentSettings, 'currency');
125 + $currency = Arr::get($paymentSettings, 'currency', 'USD');
124 126 $isActive = Arr::get($paymentSettings, 'is_active', 'no');
127 + $numberFormat = Arr::get($paymentSettings, 'number_format', 'comma_separated');
128 + $currencyPosition = Arr::get($paymentSettings, 'currency_position', 'left');
125 129
126 130 update_option('fluent_booking_global_payment_settings', [
127 - 'currency' => sanitize_text_field($currency),
128 - 'is_active' => ($isActive == 'yes') ? 'yes' : 'no'
131 + 'currency' => sanitize_text_field($currency),
132 + 'is_active' => $isActive == 'yes' ? 'yes' : 'no',
133 + 'number_format' => $numberFormat == 'comma_separated' ? 'comma_separated' : 'dot_separated',
134 + 'currency_position' => sanitize_text_field($currencyPosition)
129 135 ], 'no');
130 136
137 + CurrenciesHelper::getGlobalCurrencySettings(true);
138 +
131 139 return [
132 140 'message' => __('Settings updated successfully', 'fluent-booking')
133 141 ];
134 142 }
@@ -156,9 +164,9 @@
156 164 if (!$settings) {
157 165 $settings = (object)[];
158 166 }
159 167
160 - $featuresPrefs = Helper::getPrefSettins(false);
168 + $featuresPrefs = Helper::getPrefSettings(false);
161 169
162 170 if (empty($featuresPrefs['frontend']['render_type'])) {
163 171 $featuresPrefs['frontend']['render_type'] = 'standalone';
164 172 }
@@ -195,14 +203,13 @@
195 203 }
196 204
197 205 public function getPages(Request $request)
198 206 {
199 -
200 207 $db = App::getInstance('db');
201 208
202 209 $allPages = $db->table('posts')->where('post_type', 'page')
203 210 ->where('post_status', 'publish')
204 - ->select(['ID', 'post_title'])
211 + ->select(['ID', 'post_title', 'post_name'])
205 212 ->orderBy('post_title', 'ASC')
206 213 ->get();
207 214
208 215 $pages = [];
@@ -208,9 +215,10 @@
208 215 $pages = [];
209 216 foreach ($allPages as $page) {
210 217 $pages[] = [
211 218 'id' => $page->ID,
212 - 'title' => $page->post_title ? $page->post_title : __('(no title)', 'fluent-boards')
219 + 'name' => $page->post_name,
220 + 'title' => $page->post_title ? $page->post_title : __('(no title)', 'fluent-booking')
213 221 ];
214 222 }
215 223
216 224 return [
@@ -227,9 +235,9 @@
227 235 }
228 236
229 237 $settings = $request->get('settings', []);
230 238
231 - $prefSettings = Helper::getPrefSettins(false);
239 + $prefSettings = Helper::getPrefSettings(false);
232 240
233 241 $settings = wp_parse_args($settings, $prefSettings);
234 242
235 243 $settings = Arr::only($settings, array_keys($prefSettings));
@@ -254,8 +262,14 @@
254 262 }
255 263
256 264 public function installPlugin(Request $request)
257 265 {
266 + if (!current_user_can('install_plugins')) {
267 + return $this->sendError([
268 + 'message' => __('You do not have permission to install plugins', 'fluent-booking')
269 + ]);
270 + }
271 +
258 272 $pluginId = $request->get('plugin_id');
259 273
260 274 $allowedPlugins = [
261 275 'fluent-smtp' => [
@@ -282,8 +296,13 @@
282 296 'name' => 'FluentBoards',
283 297 'repo-slug' => 'fluent-boards',
284 298 'file' => 'fluent-boards.php',
285 299 ],
300 + 'fluent-cart' => [
301 + 'name' => 'FluentCart',
302 + 'repo-slug' => 'fluent-cart',
303 + 'file' => 'fluent-cart.php',
304 + ]
286 305 ];
287 306
288 307 if (!isset($allowedPlugins[$pluginId])) {
289 308 return $this->sendError([
@@ -290,131 +309,11 @@
290 309 'message' => __('This action is not allowed', 'fluent-booking')
291 310 ]);
292 311 }
293 312
294 - $this->backgroundInstaller($allowedPlugins[$pluginId], $pluginId);
313 + OnboardingService::backgroundInstaller($allowedPlugins[$pluginId]);
295 314
296 315 return $this->sendSuccess([
297 - 'message' => __('Plugin is being installed in the background', 'fluent-booking')
316 + 'message' => __('Plugin has been installed Successfully', 'fluent-booking')
298 317 ]);
299 - }
300 -
301 - private function backgroundInstaller($plugin_to_install, $plugin_id)
302 - {
303 - if (!empty($plugin_to_install['repo-slug'])) {
304 - require_once ABSPATH . 'wp-admin/includes/file.php';
305 - require_once ABSPATH . 'wp-admin/includes/plugin-install.php';
306 - require_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
307 - require_once ABSPATH . 'wp-admin/includes/plugin.php';
308 -
309 - WP_Filesystem();
310 -
311 - $skin = new \Automatic_Upgrader_Skin();
312 - $upgrader = new \WP_Upgrader($skin);
313 - $installed_plugins = array_reduce(array_keys(\get_plugins()), array($this, 'associate_plugin_file'), array());
314 - $plugin_slug = $plugin_to_install['repo-slug'];
315 - $plugin_file = isset($plugin_to_install['file']) ? $plugin_to_install['file'] : $plugin_slug . '.php';
316 - $installed = false;
317 - $activate = false;
318 -
319 - // See if the plugin is installed already.
320 - if (isset($installed_plugins[$plugin_file])) {
321 - $installed = true;
322 - $activate = !is_plugin_active($installed_plugins[$plugin_file]);
323 - }
324 -
325 - // Install this thing!
326 - if (!$installed) {
327 - // Suppress feedback.
328 - ob_start();
329 -
330 - try {
331 - $plugin_information = plugins_api(
332 - 'plugin_information',
333 - array(
334 - 'slug' => $plugin_slug,
335 - 'fields' => array(
336 - 'short_description' => false,
337 - 'sections' => false,
338 - 'requires' => false,
339 - 'rating' => false,
340 - 'ratings' => false,
341 - 'downloaded' => false,
342 - 'last_updated' => false,
343 - 'added' => false,
344 - 'tags' => false,
345 - 'homepage' => false,
346 - 'donate_link' => false,
347 - 'author_profile' => false,
348 - 'author' => false,
349 - ),
350 - )
351 - );
352 -
353 - if (is_wp_error($plugin_information)) {
354 - throw new \Exception($plugin_information->get_error_message());
355 - }
356 -
357 - $package = $plugin_information->download_link;
358 - $download = $upgrader->download_package($package);
359 -
360 - if (is_wp_error($download)) {
361 - throw new \Exception($download->get_error_message());
362 - }
363 -
364 - $working_dir = $upgrader->unpack_package($download, true);
365 -
366 - if (is_wp_error($working_dir)) {
367 - throw new \Exception($working_dir->get_error_message());
368 - }
369 -
370 - $result = $upgrader->install_package(
371 - array(
372 - 'source' => $working_dir,
373 - 'destination' => WP_PLUGIN_DIR,
374 - 'clear_destination' => false,
375 - 'abort_if_destination_exists' => false,
376 - 'clear_working' => true,
377 - 'hook_extra' => array(
378 - 'type' => 'plugin',
379 - 'action' => 'install',
380 - ),
381 - )
382 - );
383 -
384 - if (is_wp_error($result)) {
385 - throw new \Exception($result->get_error_message());
386 - }
387 -
388 - $activate = true;
389 -
390 - } catch (\Exception $e) {
391 - }
392 -
393 - // Discard feedback.
394 - ob_end_clean();
395 - }
396 -
397 - wp_clean_plugins_cache();
398 -
399 - // Activate this thing.
400 - if ($activate) {
401 - try {
402 - $result = activate_plugin($installed ? $installed_plugins[$plugin_file] : $plugin_slug . '/' . $plugin_file);
403 -
404 - if (is_wp_error($result)) {
405 - throw new \Exception($result->get_error_message());
406 - }
407 - } catch (\Exception $e) {
408 - }
409 - }
410 - }
411 - }
412 -
413 - private function associate_plugin_file($plugins, $key)
414 - {
415 - $path = explode('/', $key);
416 - $filename = end($path);
417 - $plugins[$filename] = $key;
418 - return $plugins;
419 318 }
420 319 }