Changeset 3313046
- Timestamp:
- 06/17/2025 08:31:46 AM (6 months ago)
- Location:
- simplybook
- Files:
-
- 54 added
- 2 deleted
- 50 edited
- 1 copied
-
tags/3.1.0 (copied) (copied from simplybook/trunk)
-
tags/3.1.0/app/Plugin.php (modified) (2 diffs)
-
tags/3.1.0/app/controllers/DashboardController.php (modified) (1 diff)
-
tags/3.1.0/app/controllers/WidgetTrackingController.php (added)
-
tags/3.1.0/app/features/Notifications/NotificationListener.php (modified) (2 diffs)
-
tags/3.1.0/app/features/Onboarding/OnboardingController.php (modified) (5 diffs)
-
tags/3.1.0/app/features/Onboarding/OnboardingService.php (modified) (3 diffs)
-
tags/3.1.0/app/features/TaskManagement/TaskManagementListener.php (modified) (2 diffs)
-
tags/3.1.0/app/http/ApiClient.php (modified) (9 diffs)
-
tags/3.1.0/app/services/WidgetTrackingService.php (added)
-
tags/3.1.0/app/support/builders/WidgetScriptBuilder.php (modified) (4 diffs)
-
tags/3.1.0/app/support/helpers/Event.php (modified) (1 diff)
-
tags/3.1.0/app/traits/LegacyHelper.php (modified) (2 diffs)
-
tags/3.1.0/app/traits/LegacyLoad.php (modified) (2 diffs)
-
tags/3.1.0/assets/block/build (added)
-
tags/3.1.0/assets/block/build/block.json (added)
-
tags/3.1.0/assets/block/build/index.asset.php (added)
-
tags/3.1.0/assets/block/build/index.css (added)
-
tags/3.1.0/assets/block/build/index.js (added)
-
tags/3.1.0/assets/block/build/index.js.map (added)
-
tags/3.1.0/assets/block/src (deleted)
-
tags/3.1.0/assets/languages/simplybook.pot (modified) (50 diffs)
-
tags/3.1.0/composer.json (modified) (1 diff)
-
tags/3.1.0/config/environment.php (modified) (2 diffs)
-
tags/3.1.0/config/features.php (modified) (3 diffs)
-
tags/3.1.0/config/fields/design.php (modified) (3 diffs)
-
tags/3.1.0/config/fields/general.php (modified) (1 diff)
-
tags/3.1.0/config/related.php (modified) (3 diffs)
-
tags/3.1.0/react/build (added)
-
tags/3.1.0/react/build/107.js (added)
-
tags/3.1.0/react/build/157.js (added)
-
tags/3.1.0/react/build/18.js (added)
-
tags/3.1.0/react/build/182.js (added)
-
tags/3.1.0/react/build/184.js (added)
-
tags/3.1.0/react/build/201.js (added)
-
tags/3.1.0/react/build/236.js (added)
-
tags/3.1.0/react/build/46.js (added)
-
tags/3.1.0/react/build/469.js (added)
-
tags/3.1.0/react/build/579.js (added)
-
tags/3.1.0/react/build/785.js (added)
-
tags/3.1.0/react/build/792.js (added)
-
tags/3.1.0/react/build/843.js (added)
-
tags/3.1.0/react/build/939.js (added)
-
tags/3.1.0/react/build/99.js (added)
-
tags/3.1.0/react/build/index.asset.php (added)
-
tags/3.1.0/react/build/index.js (added)
-
tags/3.1.0/react/build/tailwind.generated.css (added)
-
tags/3.1.0/react/src (deleted)
-
tags/3.1.0/readme.txt (modified) (5 diffs)
-
tags/3.1.0/simplybook.php (modified) (1 diff)
-
tags/3.1.0/vendor/composer/autoload_classmap.php (modified) (2 diffs)
-
tags/3.1.0/vendor/composer/autoload_static.php (modified) (2 diffs)
-
tags/3.1.0/vendor/composer/installed.php (modified) (2 diffs)
-
tags/3.1.0/vendor/composer/jetpack_autoload_classmap.php (modified) (1 diff)
-
tags/3.1.0/vendor/composer/jetpack_autoload_filemap.php (modified) (1 diff)
-
trunk/app/Plugin.php (modified) (2 diffs)
-
trunk/app/controllers/DashboardController.php (modified) (1 diff)
-
trunk/app/controllers/WidgetTrackingController.php (added)
-
trunk/app/features/Notifications/NotificationListener.php (modified) (2 diffs)
-
trunk/app/features/Onboarding/OnboardingController.php (modified) (5 diffs)
-
trunk/app/features/Onboarding/OnboardingService.php (modified) (3 diffs)
-
trunk/app/features/TaskManagement/TaskManagementListener.php (modified) (2 diffs)
-
trunk/app/http/ApiClient.php (modified) (9 diffs)
-
trunk/app/services/WidgetTrackingService.php (added)
-
trunk/app/support/builders/WidgetScriptBuilder.php (modified) (4 diffs)
-
trunk/app/support/helpers/Event.php (modified) (1 diff)
-
trunk/app/traits/LegacyHelper.php (modified) (2 diffs)
-
trunk/app/traits/LegacyLoad.php (modified) (2 diffs)
-
trunk/assets/block/build (added)
-
trunk/assets/block/build/block.json (added)
-
trunk/assets/block/build/index.asset.php (added)
-
trunk/assets/block/build/index.css (added)
-
trunk/assets/block/build/index.js (added)
-
trunk/assets/block/build/index.js.map (added)
-
trunk/assets/languages/simplybook.pot (modified) (50 diffs)
-
trunk/composer.json (modified) (1 diff)
-
trunk/config/environment.php (modified) (2 diffs)
-
trunk/config/features.php (modified) (3 diffs)
-
trunk/config/fields/design.php (modified) (3 diffs)
-
trunk/config/fields/general.php (modified) (1 diff)
-
trunk/config/related.php (modified) (3 diffs)
-
trunk/react/build (added)
-
trunk/react/build/107.js (added)
-
trunk/react/build/157.js (added)
-
trunk/react/build/18.js (added)
-
trunk/react/build/182.js (added)
-
trunk/react/build/184.js (added)
-
trunk/react/build/201.js (added)
-
trunk/react/build/236.js (added)
-
trunk/react/build/46.js (added)
-
trunk/react/build/469.js (added)
-
trunk/react/build/579.js (added)
-
trunk/react/build/785.js (added)
-
trunk/react/build/792.js (added)
-
trunk/react/build/843.js (added)
-
trunk/react/build/939.js (added)
-
trunk/react/build/99.js (added)
-
trunk/react/build/index.asset.php (added)
-
trunk/react/build/index.js (added)
-
trunk/react/build/tailwind.generated.css (added)
-
trunk/readme.txt (modified) (5 diffs)
-
trunk/simplybook.php (modified) (1 diff)
-
trunk/vendor/composer/autoload_classmap.php (modified) (2 diffs)
-
trunk/vendor/composer/autoload_static.php (modified) (2 diffs)
-
trunk/vendor/composer/installed.php (modified) (2 diffs)
-
trunk/vendor/composer/jetpack_autoload_classmap.php (modified) (1 diff)
-
trunk/vendor/composer/jetpack_autoload_filemap.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
simplybook/tags/3.1.0/app/Plugin.php
r3297362 r3313046 127 127 * @deprecated 3.0.0 Use App::env('plugin.version') instead 128 128 */ 129 define('SIMPLYBOOK_VERSION', '3. 0.0');129 define('SIMPLYBOOK_VERSION', '3.1.0'); 130 130 131 131 /** … … 193 193 new Controllers\ServicesController(), 194 194 new Controllers\ReviewController(), 195 new Controllers\WidgetTrackingController( 196 new Services\WidgetTrackingService() 197 ), 195 198 ]); 196 199 } -
simplybook/tags/3.1.0/app/controllers/DashboardController.php
r3297362 r3313046 106 106 wp_enqueue_style( 107 107 'simplybook-tailwind', 108 App::env('plugin.react_url') . '/ src/tailwind.generated.css',108 App::env('plugin.react_url') . '/build/tailwind.generated.css', 109 109 [], 110 110 ($chunkTranslation['version'] ?? '') -
simplybook/tags/3.1.0/app/features/Notifications/NotificationListener.php
r3297362 r3313046 19 19 add_action('simplybook_event_' . Event::AUTH_SUCCEEDED, [$this, 'handleSucceededAuthentication']); 20 20 add_action('simplybook_event_' . Event::CALENDAR_PUBLISHED, [$this, 'handleCalendarPublished']); 21 add_action('simplybook_event_' . Event::CALENDAR_UNPUBLISHED, [$this, 'handleCalendarUnPublished']); 21 22 add_action('simplybook_event_' . Event::PUBLISH_WIDGET_TASK_DISMISSED, [$this, 'dismissPublishWidgetNotice']); 22 23 } … … 53 54 54 55 /** 56 * Handle the calendar published event to update task status. 57 */ 58 public function handleCalendarUnPublished(): void 59 { 60 $this->service->activate( 61 Notices\PublishWidgetNotice::IDENTIFIER 62 ); 63 } 64 65 /** 55 66 * Dismiss the publish-widget-notice. 56 67 */ -
simplybook/tags/3.1.0/app/features/Onboarding/OnboardingController.php
r3297362 r3313046 11 11 use SimplyBook\Interfaces\FeatureInterface; 12 12 use SimplyBook\Exceptions\RestDataException; 13 use SimplyBook\Services\WidgetTrackingService; 13 14 14 15 class OnboardingController implements FeatureInterface 15 16 { 16 17 private OnboardingService $service; 17 18 public function __construct(OnboardingService $service) 18 private WidgetTrackingService $widgetService; 19 20 public function __construct(OnboardingService $service, WidgetTrackingService $widgetTrackingService) 19 21 { 20 22 $this->service = $service; 23 $this->widgetService = $widgetTrackingService; 21 24 } 22 25 … … 238 241 // These flags are deleted after its one time use in the Task and Notice 239 242 if ($pageCreatedSuccessfully) { 240 $this-> service->setPublishWidgetCompleted();243 $this->widgetService->setPublishWidgetCompleted(); 241 244 } 242 245 … … 336 339 $this->finishLoggingInUser($response, $companyDomain, $companyLogin); 337 340 338 return new \WP_REST_Response([ 339 'message' => 'Successfully authenticated user', 340 ], 200); 341 return $this->service->sendHttpResponse([], true, esc_html__('Successfully authenticated user', 'simplybook')); // Default code 200 because React side still used request() here 341 342 } 342 343 … … 400 401 ); 401 402 } catch (\Exception $e) { 402 return new \WP_REST_Response([ 403 'message' => $e->getMessage(), 404 ], 400); 405 } 406 407 return new \WP_REST_Response([ 408 'message' => 'Successfully requested SMS code', 409 ], 200); 403 return $this->service->sendHttpResponse([], false, $e->getMessage()); // Default code 200 because React side still used request() here 404 } 405 406 return $this->service->sendHttpResponse([], true, esc_html__('Successfully requested SMS code', 'simplybook')); // Default code 200 because React side still used request() here 410 407 } 411 408 … … 449 446 * or the Gutenberg block. 450 447 */ 451 public function validatePublishedWidget(): void 452 { 453 $cache = wp_cache_get('simplybook_widget_published', 'simplybook'); 454 if ($cache === true) { 455 $this->service->setPublishWidgetCompleted(); 456 return; 457 } 458 459 global $wpdb; 460 461 // Search for "simplybook widget" with a maximum of 1 character in 462 // between. This will match both the shortcode ([simplybook_widget]) 463 // and the Gutenberg block (<!-- wp:simplybook/widget -->). 464 $pattern = 'simplybook.{0,1}widget'; 465 466 // This direct SQL query is intentional, safe, and properly prepared. 467 // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQLPlaceholders.UnquotedComplexPlaceholder 468 $query = $wpdb->prepare(" 469 SELECT 1 470 FROM {$wpdb->posts} 471 WHERE post_content REGEXP %s 472 LIMIT 1 473 ", $pattern); 474 475 $havePosts = (bool) $wpdb->get_var($query); 476 if (!$havePosts) { 477 return; 478 } 479 480 $this->service->setPublishWidgetCompleted(); 481 wp_cache_set('simplybook_widget_published', true, 'simplybook'); 482 } 448 public function validatePublishedWidget(): void { 449 $cache = wp_cache_get( 'simplybook_widget_published', 'simplybook' ); 450 if ( $cache === true ) { 451 $this->widgetService->setPublishWidgetCompleted(); 452 453 return; 454 } 455 456 // Check if any widgets are currently published 457 if ( $this->widgetService->hasTrackedPosts() ) { 458 $this->widgetService->setPublishWidgetCompleted(); 459 wp_cache_set( 'simplybook_widget_published', true, 'simplybook' ); 460 } 461 } 483 462 } -
simplybook/tags/3.1.0/app/features/Onboarding/OnboardingService.php
r3297362 r3313046 1 1 <?php namespace SimplyBook\Features\Onboarding; 2 2 3 use SimplyBook\App; 3 4 use SimplyBook\Http\ApiClient; 4 5 use SimplyBook\Helpers\Storage; … … 30 31 $this->setCompletedStep(5); 31 32 $this->clearTemporaryData(); 33 34 App::provide('client')->clearFailedAuthenticationFlag(); 32 35 33 36 $completedPreviously = get_option('simplybook_onboarding_completed', false); … … 174 177 } 175 178 176 /**177 * Use this method to set the "publish widget" notice and task as completed.178 * These flags are deleted after its one time use in the Task and Notice.179 */180 public function setPublishWidgetCompleted(bool $completed = true): void181 {182 update_option('simplybook_calendar_published_notification_completed', $completed);183 update_option('simplybook_calendar_published_task_completed', $completed);184 }185 179 } -
simplybook/tags/3.1.0/app/features/TaskManagement/TaskManagementListener.php
r3297362 r3313046 25 25 add_action('simplybook_event_' . Event::AUTH_FAILED, [$this, 'handleFailedAuthentication']); 26 26 add_action('simplybook_event_' . Event::CALENDAR_PUBLISHED, [$this, 'handleCalendarPublished']); 27 add_action('simplybook_event_' . Event::CALENDAR_UNPUBLISHED, [$this, 'handleCalendarUnPublished']); 27 28 add_action('simplybook_save_design_settings', [$this, 'handleDesignSettingsSaved']); 28 29 } … … 254 255 255 256 /** 257 * Handle the calendar published event to update task status. 258 */ 259 public function handleCalendarUnPublished(): void 260 { 261 $this->service->flagTaskUrgent( 262 Tasks\PublishWidgetTask::IDENTIFIER 263 ); 264 } 265 266 /** 256 267 * Handle the after save options event to update task status. 257 268 */ -
simplybook/tags/3.1.0/app/http/ApiClient.php
r3297362 r3313046 7 7 8 8 use Carbon\Carbon; 9 use SimplyBook\App; 9 10 use SimplyBook\Helpers\Event; 10 11 use SimplyBook\Helpers\Storage; … … 117 118 118 119 /** 120 * Clear the authentication failed flag. This is used when the user has 121 * successfully authenticated again. Currently used after successfully 122 * logging in with the sign in modal. 123 */ 124 public function clearFailedAuthenticationFlag(): void 125 { 126 $this->authenticationFailedFlag = false; 127 delete_option($this->authenticationFailedFlagKey); 128 } 129 130 /** 119 131 * Set the during onboarding flag 120 132 */ … … 232 244 $headers = array( 233 245 'Content-Type' => 'application/json', 246 'User-Agent' => $this->getRequestUserAgent(), 234 247 ); 235 248 … … 244 257 $this->refresh_token('admin'); 245 258 break; 246 case 'user':247 $this->get_user_token();248 break;249 259 } 250 260 $token = $this->get_token($token_type); … … 268 278 $type = $type . '_refresh'; 269 279 } 270 $token = get_option("simplybook_token_" . esc_sql($type), '');280 $token = get_option("simplybook_token_" . $type, ''); 271 281 272 282 return $this->decrypt_string($token); … … 432 442 private function automaticAuthenticationFallback(string $type) 433 443 { 434 if ($this->authenticationFailedFlag) { 444 // Company login can be empty for fresh accounts 445 if ($this->authenticationFailedFlag || empty($this->get_company_login(false))) { 435 446 $this->releaseRefreshLock($type); 436 return; // Dont even try again.447 return; // Dont even try (again). 437 448 } 438 449 … … 518 529 * @return string 519 530 */ 520 public function get_company_login(): string { 531 public function get_company_login(bool $create = true): string 532 { 521 533 $login = get_option('simplybook_company_login', ''); 522 534 if ( !empty($login) ) { 523 535 return $login; 536 } 537 538 if ($create === false) { 539 return ''; // Abort 524 540 } 525 541 … … 675 691 'journey_type' => 'skip_welcome_tour', 676 692 'callback_url' => get_rest_url(get_current_blog_id(),"simplybook/v1/company_registration/$callback_url"), 693 'ref' => $this->getReferrer(), 677 694 ] 678 695 ), … … 1608 1625 } 1609 1626 1627 /** 1628 * 1629 * \EXTENDIFY_PARTNER_ID will contain the required value if WordPress is 1630 * configured using Extendify. Otherwise, use default 'wp'. 1631 */ 1632 private function getReferrer(): string 1633 { 1634 return (defined('\EXTENDIFY_PARTNER_ID') ? \EXTENDIFY_PARTNER_ID : 'wp'); 1635 } 1636 1637 /** 1638 * Get the user agent for the API requests. 1639 * 1640 * @example format SimplyBookPlugin/3.2.1 (WordPress/6.5.3; ref: 1641 * EXTENDIFY_PARTNER_ID; +https://example.com) 1642 */ 1643 private function getRequestUserAgent(): string 1644 { 1645 return "SimplyBookPlugin/" . App::env('plugin.version') . " (WordPress/" . get_bloginfo('version') . "; ref: " . $this->getReferrer() . "; +" . site_url() . ")"; 1646 } 1647 1610 1648 } -
simplybook/tags/3.1.0/app/support/builders/WidgetScriptBuilder.php
r3297362 r3313046 51 51 } 52 52 53 if ($this-> isAuthenticated === false) {53 if ($this->showDemoWidget()) { 54 54 return $this->getDemoWidgetAlert() . $script; 55 55 } … … 194 194 $content = ''; 195 195 196 if ($this-> isAuthenticated === false) {196 if ($this->showDemoWidget()) { 197 197 $content = $this->getDemoWidgetAlert(); 198 198 } … … 221 221 } 222 222 223 if ( empty($widgetSettings['server'])) {223 if ($this->showDemoWidget($widgetSettings)) { 224 224 $widgetSettings['server'] = $this->getDemoWidgetServerUrl(); 225 225 } … … 258 258 } 259 259 260 /** 261 * The demo widget should be shown if the server URL is not set in the 262 * widget settings. This is used to display a demo widget when the 263 * plugin is not configured yet. 264 * 265 * @internal The widget works even when the plugin lost connection to the 266 * SimplyBook account of the user so that is not a condition to show the 267 * demo widget. 268 */ 269 public function showDemoWidget(?array $widgetSettings = null): bool 270 { 271 $widgetSettings = $widgetSettings ?? $this->widgetSettings; 272 return empty($widgetSettings['server']); 273 } 274 260 275 } -
simplybook/tags/3.1.0/app/support/helpers/Event.php
r3297362 r3313046 24 24 const AUTH_SUCCEEDED = 'auth_succeeded'; 25 25 const CALENDAR_PUBLISHED = 'calendar_published'; 26 const CALENDAR_UNPUBLISHED = 'calendar_unpublished'; 26 27 const PUBLISH_WIDGET_TASK_DISMISSED = 'publish_widget_task_dismissed'; 27 28 -
simplybook/tags/3.1.0/app/traits/LegacyHelper.php
r3297362 r3313046 101 101 102 102 /** 103 * Encrypt data 104 * @param $string 105 * @return string 103 * Encrypts a token using AES-256-CBC encryption with a version marker. 104 * 105 * This function encrypts a token string using AES-256-CBC with a random 106 * initialization vector (IV). New tokens use the "v2:" format which separates 107 * the IV and encrypted data with a period for better clarity. 108 * 109 * @param string $string The token to encrypt (should be a 64-character hex string). 110 * @return string The encrypted token with format "v2:base64(iv).base64(encrypted)". 111 * 112 * @since 3.1 Uses v2 format with OPENSSL_RAW_DATA 113 * @example 114 * $token = "a1b2c3d4e5f6..."; // 64-character hex string 115 * $encrypted = encrypt_string($token); // Returns "v2:abc123.xyz789" 106 116 */ 107 117 public function encrypt_string($string): string … … 112 122 $iv = openssl_random_pseudo_bytes($ivLength); 113 123 114 $encrypted = openssl_encrypt($string, 'AES-256-CBC', $key, 0, $iv); 124 // Use OPENSSL_RAW_DATA for new v2 tokens 125 $encrypted = openssl_encrypt($string, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv); 115 126 116 return base64_encode($iv . $encrypted); 127 // Format: v2:base64(iv).base64(encrypted) 128 return 'v2:' . base64_encode($iv) . '.' . base64_encode($encrypted); 117 129 } 118 130 -
simplybook/tags/3.1.0/app/traits/LegacyLoad.php
r3297362 r3313046 3 3 4 4 use SimplyBook\App; 5 use SimplyBook\Traits\LegacyHelper; 5 6 6 7 if ( ! defined( 'ABSPATH' ) ) { … … 99 100 } 100 101 101 /** 102 * Decrypt a string 103 * @param $encrypted_string 104 * @return string 105 */ 106 public function decrypt_string($encrypted_string): string 107 { 108 $key = '7*w$9pumLw5koJc#JT6'; 109 $data = base64_decode($encrypted_string); 110 $ivLength = openssl_cipher_iv_length('AES-256-CBC'); 111 $iv = substr($data, 0, $ivLength); 112 $encrypted = substr($data, $ivLength); 113 114 return openssl_decrypt($encrypted, 'AES-256-CBC', $key, 0, $iv); 115 } 102 103 /** 104 * Decrypts an encrypted token string with backward compatibility support. 105 * 106 * This function acts as a dispatcher that automatically detects the token format 107 * and delegates to the appropriate decryption method: 108 * - V2 format: "v2:base64(iv).base64(encrypted)" 109 * - Legacy format: base64(iv + encrypted) 110 * 111 * @param string $encrypted_string The encrypted token to decrypt. 112 * @return string The decrypted token if valid, or an empty string if invalid. 113 * 114 * @since 3.1 Added support for v2 format with OPENSSL_RAW_DATA 115 * @example 116 * $decrypted = decrypt_string("v2: abc123.xyz789"); // Returns the original token 117 * $decrypted = decrypt_string("legacy_encrypted_data"); // Also works with old tokens 118 */ 119 public function decrypt_string($encrypted_string): string 120 { 121 122 if (empty($encrypted_string)) { 123 return ''; 124 } 125 126 $key = '7*w$9pumLw5koJc#JT6'; 127 128 // Check if it's a v2 token (new format) 129 if (strpos($encrypted_string, 'v2:') === 0) { 130 return $this->decrypt_string_v2($encrypted_string, $key); 131 } 132 133 return $this->decrypt_legacy_string($encrypted_string, $key); 134 } 135 136 /** 137 * Decrypts a v2 format encrypted token. 138 * 139 * V2 tokens use the format "v2:base64(iv).base64(encrypted)" and employ 140 * an OPENSSL_RAW_DATA flag for decryption. This format separates the IV and 141 * ciphertext with base64 encoding for each component. 142 * 143 * @param string $encrypted_string The v2 format encrypted token (prefixed with "v2:"). 144 * @return string The decrypted token if valid, or an empty string if decryption fails. 145 * 146 * @since 3.1 147 */ 148 private function decrypt_string_v2(string $encrypted_string, string $key): string { 149 $parts = explode('.', substr($encrypted_string, 3), 2); 150 if (count($parts) !== 2) { 151 $this->log("v2 token: invalid format — missing iv or ciphertext part."); 152 return ''; 153 } 154 155 $iv = base64_decode($parts[0], true); 156 $encrypted = base64_decode($parts[1], true); 157 158 if ($iv === false || $encrypted === false) { 159 $this->log("v2 token: base64 decode failed (iv: " . ($iv === false ? 'invalid' : 'ok') . ", encrypted: " . ($encrypted === false ? 'invalid' : 'ok') . ")"); 160 return ''; 161 } 162 163 $decrypted = openssl_decrypt($encrypted, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv); 164 165 if ($decrypted === false) { 166 $this->log("v2 token: openssl decryption failed."); 167 return ''; 168 } 169 170 if (!preg_match('/^[a-f0-9]{64}$/i', $decrypted)) { 171 $this->log("v2 token: decrypted result did not match expected 64-character hex format."); 172 return ''; 173 } 174 175 return $decrypted; 176 } 177 178 /** 179 * Decrypts a legacy format encrypted token. 180 * 181 * Legacy tokens use the format base64(iv + encrypted) where the IV and 182 * ciphertext are concatenated before base64 encoding. This method includes 183 * fallback logic for double base64 encoding scenarios and uses flag=0 184 * for OpenSSL decryption. 185 * 186 * @param string $encrypted_string The legacy format encrypted token. 187 * @return string The decrypted token if valid, or an empty string if decryption fails. 188 * 189 * @since 3.1 190 */ 191 private function decrypt_legacy_string(string $encrypted_string, string $key): string { 192 // Legacy tokens 193 $data = base64_decode($encrypted_string, true); 194 $ivLength = openssl_cipher_iv_length('AES-256-CBC'); 195 196 if ($data === false || strlen($data) < $ivLength) { 197 $this->log("legacy token: decoded data too short, trying double base64 decoding..."); 198 199 $data = base64_decode($data, true); 200 201 if ($data === false || strlen($data) < $ivLength) { 202 $this->log("legacy token: double base64 decoding failed or still too short (length: " . strlen($data) . ")."); 203 return ''; 204 } 205 } 206 207 $iv = substr($data, 0, $ivLength); 208 $encrypted = substr($data, $ivLength); 209 210 $decrypted = openssl_decrypt($encrypted, 'AES-256-CBC', $key, 0, $iv); 211 212 if ($decrypted === false) { 213 $this->log("legacy token: openssl decryption failed."); 214 return ''; 215 } 216 217 if (!preg_match('/^[a-f0-9]{64}$/i', $decrypted)) { 218 $this->log("legacy token: decrypted result did not match expected 64-character hex format."); 219 return ''; 220 } 221 222 return $decrypted; 223 } 224 116 225 117 226 /** -
simplybook/tags/3.1.0/assets/languages/simplybook.pot
r3297362 r3313046 3 3 msgid "" 4 4 msgstr "" 5 "Project-Id-Version: SimplyBook.me - Booking and reservations calendar 3. 0.0\n"5 "Project-Id-Version: SimplyBook.me - Booking and reservations calendar 3.1.0\n" 6 6 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/simplybook\n" 7 7 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" … … 10 10 "Content-Type: text/plain; charset=UTF-8\n" 11 11 "Content-Transfer-Encoding: 8bit\n" 12 "POT-Creation-Date: 2025-0 5-20T10:58:40+00:00\n"12 "POT-Creation-Date: 2025-06-17T08:11:45+00:00\n" 13 13 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 14 14 "X-Generator: WP-CLI 2.11.0\n" … … 22 22 #. Plugin URI of the plugin 23 23 #: simplybook.php 24 msgid "https://help.simplybook.me/index.php /WordPress_plugn"24 msgid "https://help.simplybook.me/index.php?title=WordPress_integration" 25 25 msgstr "" 26 26 … … 42 42 #: app/controllers/AdminController.php:30 43 43 #: react/build/107.js:1 44 #: react/build/7 47.js:144 #: react/build/785.js:1 45 45 #: react/src/components/Settings/SettingsMenu.jsx:16 46 46 #: react/src/components/Settings/SettingsMenu.jsx:29 … … 131 131 msgstr "" 132 132 133 #: app/features/Onboarding/OnboardingController.php:1 27134 #: app/features/Onboarding/OnboardingController.php:2 69135 #: app/features/Onboarding/OnboardingController.php:31 4133 #: app/features/Onboarding/OnboardingController.php:130 134 #: app/features/Onboarding/OnboardingController.php:272 135 #: app/features/Onboarding/OnboardingController.php:317 136 136 msgid "Please fill in all fields." 137 137 msgstr "" 138 138 139 #: app/features/Onboarding/OnboardingController.php:15 1139 #: app/features/Onboarding/OnboardingController.php:154 140 140 msgid "Please verify you're not a robot." 141 141 msgstr "" 142 142 143 #: app/features/Onboarding/OnboardingController.php:15 5143 #: app/features/Onboarding/OnboardingController.php:158 144 144 msgid "Please enter the confirmation code." 145 145 msgstr "" 146 146 147 #: app/features/Onboarding/OnboardingController.php:19 4147 #: app/features/Onboarding/OnboardingController.php:197 148 148 msgid "Something went wrong while saving the widget style settings. Please try again." 149 149 msgstr "" 150 150 151 #: app/features/Onboarding/OnboardingController.php: 199151 #: app/features/Onboarding/OnboardingController.php:202 152 152 msgid "Successfully saved widget style settings" 153 153 msgstr "" 154 154 155 #: app/features/Onboarding/OnboardingController.php:22 5155 #: app/features/Onboarding/OnboardingController.php:228 156 156 msgid "Calendar page title should be available if you choose to generate this page." 157 157 msgstr "" 158 158 159 #: app/features/Onboarding/OnboardingController.php:29 1160 #: app/features/Onboarding/OnboardingController.php:33 3159 #: app/features/Onboarding/OnboardingController.php:294 160 #: app/features/Onboarding/OnboardingController.php:336 161 161 msgid "Unknown error occurred, please verify your credentials." 162 162 msgstr "" 163 163 164 #: app/features/Onboarding/OnboardingController.php: 298164 #: app/features/Onboarding/OnboardingController.php:301 165 165 msgid "Login successful." 166 166 msgstr "" 167 167 168 #: app/features/Onboarding/OnboardingController.php:419 168 #: app/features/Onboarding/OnboardingController.php:341 169 msgid "Successfully authenticated user" 170 msgstr "" 171 172 #: app/features/Onboarding/OnboardingController.php:406 173 msgid "Successfully requested SMS code" 174 msgstr "" 175 176 #: app/features/Onboarding/OnboardingController.php:416 169 177 msgid "Successfully finished onboarding!" 170 178 msgstr "" 171 179 172 #: app/features/Onboarding/OnboardingController.php:42 3180 #: app/features/Onboarding/OnboardingController.php:420 173 181 msgid "An error occurred while finishing the onboarding process" 174 182 msgstr "" 175 183 184 #: app/features/Onboarding/OnboardingController.php:434 185 msgid "Successfully removed all previous data." 186 msgstr "" 187 176 188 #: app/features/Onboarding/OnboardingController.php:437 177 msgid "Successfully removed all previous data."178 msgstr ""179 180 #: app/features/Onboarding/OnboardingController.php:440181 189 msgid "An error occurred while trying to remove previous data." 182 190 msgstr "" 183 191 184 #: app/features/Onboarding/OnboardingService.php: 69192 #: app/features/Onboarding/OnboardingService.php:72 185 193 msgid "Please enter a valid email address and accept the terms and conditions" 186 194 msgstr "" … … 265 273 #: react/build/157.js:1 266 274 #: react/build/182.js:1 267 #: react/build/7 47.js:1275 #: react/build/785.js:1 268 276 #: react/build/792.js:1 269 277 #: react/build/939.js:1 … … 292 300 msgstr "" 293 301 294 #: app/http/ApiClient.php:6 19295 #: app/http/ApiClient.php:8 27302 #: app/http/ApiClient.php:635 303 #: app/http/ApiClient.php:844 296 304 msgid "You are not authorized to do this." 297 305 msgstr "" 298 306 299 #: app/http/ApiClient.php:6 25307 #: app/http/ApiClient.php:641 300 308 msgid "Too many attempts to register company, please try again in a minute." 301 309 msgstr "" 302 310 303 #: app/http/ApiClient.php:6 39311 #: app/http/ApiClient.php:655 304 312 msgid "Please fill in all company data." 305 313 msgstr "" 306 314 307 #: app/http/ApiClient.php: 683315 #: app/http/ApiClient.php:700 308 316 msgid "Something went wrong while registering your company. Please try again." 309 317 msgstr "" 310 318 311 #: app/http/ApiClient.php: 695319 #: app/http/ApiClient.php:712 312 320 msgid "Company successfully registered." 313 321 msgstr "" 314 322 315 #: app/http/ApiClient.php:7 28323 #: app/http/ApiClient.php:745 316 324 msgid "The company name is not allowed. Please change the company name." 317 325 msgstr "" 318 326 319 #: app/http/ApiClient.php:7 36327 #: app/http/ApiClient.php:753 320 328 msgid "Unknown error encountered while registering your company. Please try again." 321 329 msgstr "" 322 330 323 #: app/http/ApiClient.php:8 35331 #: app/http/ApiClient.php:852 324 332 msgid "Something went wrong, are you sure you started the company registration?" 325 333 msgstr "" 326 334 327 #: app/http/ApiClient.php:8 54335 #: app/http/ApiClient.php:871 328 336 msgid "Something went wrong while confirming your email. Please try again." 329 337 msgstr "" 330 338 331 #: app/http/ApiClient.php:8 62339 #: app/http/ApiClient.php:879 332 340 msgid "Email successfully confirmed." 333 341 msgstr "" 334 342 335 #: app/http/ApiClient.php:8 66343 #: app/http/ApiClient.php:883 336 344 msgid "Unknown error encountered while confirming your email. Please try again." 337 345 msgstr "" 338 346 339 #: app/http/ApiClient.php:8 68347 #: app/http/ApiClient.php:885 340 348 msgid "This confirmation code is not valid." 341 349 msgstr "" 342 350 343 #: app/http/ApiClient.php:13 67351 #: app/http/ApiClient.php:1384 344 352 msgid "Failed logging in, please verify your credentials." 345 353 msgstr "" 346 354 347 #: app/http/ApiClient.php:13 70355 #: app/http/ApiClient.php:1387 348 356 msgid "Unknown error" 349 357 msgstr "" 350 358 351 #: app/http/ApiClient.php:13 76359 #: app/http/ApiClient.php:1393 352 360 msgid "Login failed! Please try again later." 353 361 msgstr "" 354 362 355 #: app/http/ApiClient.php:13 79363 #: app/http/ApiClient.php:1396 356 364 msgid "Invalid response from SimplyBook.me" 357 365 msgstr "" 358 366 359 #: app/http/ApiClient.php:14 27367 #: app/http/ApiClient.php:1444 360 368 msgid "Failed two factor authentication, please verify your credentials." 361 369 msgstr "" 362 370 363 #: app/http/ApiClient.php:14 30371 #: app/http/ApiClient.php:1447 364 372 msgid "Unknown 2FA error" 365 373 msgstr "" 366 374 367 #: app/http/ApiClient.php:14 37375 #: app/http/ApiClient.php:1454 368 376 msgid "Two factor authentication failed! Please try again later." 369 377 msgstr "" 370 378 371 #: app/http/ApiClient.php:14 40379 #: app/http/ApiClient.php:1457 372 380 msgid "Invalid 2FA response from SimplyBook.me" 373 381 msgstr "" 374 382 375 #: app/http/ApiClient.php:15 08383 #: app/http/ApiClient.php:1525 376 384 #: react/build/843.js:1 377 385 #: react/src/components/Modals/SignInModal.jsx:15 … … 379 387 msgstr "" 380 388 381 #: app/http/ApiClient.php:15 09389 #: app/http/ApiClient.php:1526 382 390 msgid "SMS" 383 391 msgstr "" 384 392 385 #: app/http/ApiClient.php:15 15393 #: app/http/ApiClient.php:1532 386 394 msgid "Unknown 2FA provider" 387 395 msgstr "" … … 1429 1437 1430 1438 #: config/fields/design.php:12 1431 #: config/fields/design.php:1 521439 #: config/fields/design.php:161 1432 1440 msgid "Flexible" 1433 1441 msgstr "" 1434 1442 1435 1443 #: config/fields/design.php:13 1436 #: config/fields/design.php:15 01444 #: config/fields/design.php:159 1437 1445 msgid "Modern" 1438 1446 msgstr "" 1439 1447 1440 1448 #: config/fields/design.php:14 1441 #: config/fields/design.php:1 481449 #: config/fields/design.php:157 1442 1450 msgid "Flexible weekly" 1443 1451 msgstr "" 1444 1452 1445 1453 #: config/fields/design.php:15 1446 #: config/fields/design.php:1 531454 #: config/fields/design.php:162 1447 1455 msgid "Slots weekly" 1448 1456 msgstr "" 1449 1457 1450 1458 #: config/fields/design.php:16 1451 #: config/fields/design.php:1 561459 #: config/fields/design.php:165 1452 1460 msgid "Modern Provider" 1453 1461 msgstr "" 1454 1462 1455 1463 #: config/fields/design.php:17 1456 #: config/fields/design.php:1 491464 #: config/fields/design.php:158 1457 1465 msgid "Flexible Provider" 1458 1466 msgstr "" 1459 1467 1460 1468 #: config/fields/design.php:18 1461 #: config/fields/design.php:1 541469 #: config/fields/design.php:163 1462 1470 msgid "Weekly classes" 1463 1471 msgstr "" … … 1484 1492 1485 1493 #. translators: %s - IS or IS NOT 1486 #: config/fields/design.php:4 51494 #: config/fields/design.php:46 1487 1495 msgid "When selected, writing starts from the right of the page and continues to the left, proceeding from top to bottom for new lines. Your website %s set to RTL." 1488 1496 msgstr "" 1489 1497 1490 #: config/fields/design.php:5 61498 #: config/fields/design.php:59 1491 1499 msgid "Allow switch to ADA" 1492 1500 msgstr "" 1493 1501 1494 #: config/fields/design.php: 571502 #: config/fields/design.php:61 1495 1503 msgid "This adds a button to enable accessibility mode, which increases contrast for visitors with a visual disability." 1496 1504 msgstr "" 1497 1505 1498 #: config/fields/design.php:66 1506 #: config/fields/design.php:73 1507 msgid "Useful for in-store tablets, so each customer can make a new appointment without data from earlier ones." 1508 msgstr "" 1509 1510 #: config/fields/design.php:76 1499 1511 msgid "Clear the session of each widget initialization" 1500 1512 msgstr "" 1501 1513 1502 #: config/fields/design.php:67 1503 msgid "Useful for in-store tablets, so each customer can make a new appointment without data from earlier ones." 1504 msgstr "" 1505 1506 #: config/fields/design.php:144 1514 #: config/fields/design.php:153 1507 1515 msgid "Theme" 1508 1516 msgstr "" 1509 1517 1510 #: config/fields/design.php:1 511518 #: config/fields/design.php:160 1511 1519 msgid "Default" 1512 1520 msgstr "" 1513 1521 1514 #: config/fields/design.php:1 551522 #: config/fields/design.php:164 1515 1523 msgid "Daily classes" 1516 1524 msgstr "" 1517 1525 1518 #: config/fields/design.php:1 571526 #: config/fields/design.php:166 1519 1527 msgid "As slots" 1520 1528 msgstr "" 1521 1529 1522 #: config/fields/design.php:1 581530 #: config/fields/design.php:167 1523 1531 msgid "As table" 1524 1532 msgstr "" 1525 1533 1526 #: config/fields/design.php:1 591534 #: config/fields/design.php:168 1527 1535 msgid "Block" 1528 1536 msgstr "" 1529 1537 1530 #: config/fields/design.php:16 01538 #: config/fields/design.php:169 1531 1539 msgid "List" 1532 1540 msgstr "" 1533 1541 1534 #: config/fields/design.php:1 611542 #: config/fields/design.php:170 1535 1543 msgid "Single page" 1536 1544 msgstr "" 1537 1545 1538 #: config/fields/design.php:1 621546 #: config/fields/design.php:171 1539 1547 msgid "Display calendar" 1540 1548 msgstr "" 1541 1549 1542 #: config/fields/design.php:1 631550 #: config/fields/design.php:172 1543 1551 msgid "Base theme color" 1544 1552 msgstr "" 1545 1553 1546 #: config/fields/design.php:1 641554 #: config/fields/design.php:173 1547 1555 msgid "Show only available time" 1548 1556 msgstr "" 1549 1557 1550 #: config/fields/design.php:1 651558 #: config/fields/design.php:174 1551 1559 msgid "Hide unavailable days on calendar" 1552 1560 msgstr "" 1553 1561 1554 #: config/fields/design.php:1 661562 #: config/fields/design.php:175 1555 1563 msgid "Display calendar layout sidebar" 1556 1564 msgstr "" 1557 1565 1558 #: config/fields/design.php:1 671566 #: config/fields/design.php:176 1559 1567 msgid "Image scale mode" 1560 1568 msgstr "" … … 1562 1570 #: config/fields/providers.php:13 1563 1571 #: config/menus.php:24 1564 #: react/build/7 47.js:11572 #: react/build/785.js:1 1565 1573 msgid "Service Providers" 1566 1574 msgstr "" … … 1609 1617 1610 1618 #: config/menus.php:69 1611 #: react/build/7 47.js:11619 #: react/build/785.js:1 1612 1620 msgid "Bookings" 1613 1621 msgstr "" … … 1775 1783 #: react/build/157.js:1 1776 1784 #: react/build/182.js:1 1777 #: react/build/7 47.js:11785 #: react/build/785.js:1 1778 1786 #: react/build/792.js:1 1779 1787 #: react/build/843.js:1 … … 1787 1795 #: react/build/157.js:1 1788 1796 #: react/build/182.js:1 1789 #: react/build/7 47.js:11797 #: react/build/785.js:1 1790 1798 #: react/build/792.js:1 1791 1799 #: react/build/843.js:1 … … 1799 1807 #: react/build/157.js:1 1800 1808 #: react/build/182.js:1 1801 #: react/build/7 47.js:11809 #: react/build/785.js:1 1802 1810 #: react/build/792.js:1 1803 1811 #: react/build/843.js:1 … … 1866 1874 #: react/build/157.js:1 1867 1875 #: react/build/182.js:1 1868 #: react/build/7 47.js:11876 #: react/build/785.js:1 1869 1877 #: react/build/792.js:1 1870 1878 #: react/build/939.js:1 … … 1922 1930 #: react/build/792.js:1 1923 1931 #: react/build/939.js:1 1924 #: react/src/components/Fields/AuthenticationField.jsx:6 81925 #: react/src/components/Fields/AuthenticationField.jsx:7 11932 #: react/src/components/Fields/AuthenticationField.jsx:67 1933 #: react/src/components/Fields/AuthenticationField.jsx:70 1926 1934 msgid "Log out" 1927 1935 msgstr "" … … 1977 1985 #: react/build/843.js:1 1978 1986 #: react/build/939.js:1 1979 #: react/src/components/Modals/Partials/FormLogin.jsx:177 1987 #: react/src/components/Modals/Partials/FormLogin.jsx:196 1988 #: react/src/components/Modals/Partials/FormTwoFa.jsx:152 1980 1989 #: react/src/components/Onboarding/OnboardingStep.jsx:206 1981 1990 msgid "Something went wrong" … … 1996 2005 #: react/build/157.js:1 1997 2006 #: react/build/182.js:1 1998 #: react/build/7 47.js:12007 #: react/build/785.js:1 1999 2008 #: react/build/792.js:1 2000 2009 #: react/build/843.js:1 … … 2009 2018 #: react/build/157.js:1 2010 2019 #: react/build/182.js:1 2011 #: react/build/7 47.js:12020 #: react/build/785.js:1 2012 2021 #: react/build/792.js:1 2013 2022 #: react/build/843.js:1 … … 2022 2031 #: react/build/157.js:1 2023 2032 #: react/build/182.js:1 2024 #: react/build/7 47.js:12033 #: react/build/785.js:1 2025 2034 #: react/build/792.js:1 2026 2035 #: react/build/843.js:1 … … 2035 2044 #: react/build/157.js:1 2036 2045 #: react/build/182.js:1 2037 #: react/build/7 47.js:12046 #: react/build/785.js:1 2038 2047 #: react/build/792.js:1 2039 2048 #: react/build/843.js:1 … … 2048 2057 #: react/build/157.js:1 2049 2058 #: react/build/182.js:1 2050 #: react/build/7 47.js:12059 #: react/build/785.js:1 2051 2060 #: react/build/792.js:1 2052 2061 #: react/build/843.js:1 … … 2061 2070 #: react/build/157.js:1 2062 2071 #: react/build/182.js:1 2063 #: react/build/7 47.js:12072 #: react/build/785.js:1 2064 2073 #: react/build/792.js:1 2065 2074 #: react/build/843.js:1 … … 2074 2083 #: react/build/157.js:1 2075 2084 #: react/build/182.js:1 2076 #: react/build/7 47.js:12085 #: react/build/785.js:1 2077 2086 #: react/build/792.js:1 2078 2087 #: react/build/843.js:1 … … 2087 2096 #: react/build/157.js:1 2088 2097 #: react/build/182.js:1 2089 #: react/build/7 47.js:12098 #: react/build/785.js:1 2090 2099 #: react/build/792.js:1 2091 2100 #: react/build/843.js:1 … … 2100 2109 #: react/build/157.js:1 2101 2110 #: react/build/182.js:1 2102 #: react/build/7 47.js:12111 #: react/build/785.js:1 2103 2112 #: react/build/792.js:1 2104 2113 #: react/build/843.js:1 … … 2113 2122 #: react/build/157.js:1 2114 2123 #: react/build/182.js:1 2115 #: react/build/7 47.js:12124 #: react/build/785.js:1 2116 2125 #: react/build/792.js:1 2117 2126 #: react/build/843.js:1 … … 2126 2135 #: react/build/157.js:1 2127 2136 #: react/build/182.js:1 2128 #: react/build/7 47.js:12137 #: react/build/785.js:1 2129 2138 #: react/build/792.js:1 2130 2139 #: react/build/843.js:1 … … 2139 2148 #: react/build/157.js:1 2140 2149 #: react/build/182.js:1 2141 #: react/build/7 47.js:12150 #: react/build/785.js:1 2142 2151 #: react/build/792.js:1 2143 2152 #: react/build/843.js:1 … … 2152 2161 #: react/build/157.js:1 2153 2162 #: react/build/182.js:1 2154 #: react/build/7 47.js:12163 #: react/build/785.js:1 2155 2164 #: react/build/792.js:1 2156 2165 #: react/build/843.js:1 … … 2165 2174 #: react/build/157.js:1 2166 2175 #: react/build/182.js:1 2167 #: react/build/7 47.js:12176 #: react/build/785.js:1 2168 2177 #: react/build/792.js:1 2169 2178 #: react/build/843.js:1 … … 2178 2187 #: react/build/157.js:1 2179 2188 #: react/build/182.js:1 2180 #: react/build/7 47.js:12189 #: react/build/785.js:1 2181 2190 #: react/build/792.js:1 2182 2191 #: react/build/843.js:1 … … 2191 2200 #: react/build/157.js:1 2192 2201 #: react/build/182.js:1 2193 #: react/build/7 47.js:12202 #: react/build/785.js:1 2194 2203 #: react/build/792.js:1 2195 2204 #: react/build/843.js:1 … … 2204 2213 #: react/build/157.js:1 2205 2214 #: react/build/182.js:1 2206 #: react/build/7 47.js:12215 #: react/build/785.js:1 2207 2216 #: react/build/792.js:1 2208 2217 #: react/build/843.js:1 … … 2217 2226 #: react/build/157.js:1 2218 2227 #: react/build/182.js:1 2219 #: react/build/7 47.js:12228 #: react/build/785.js:1 2220 2229 #: react/build/792.js:1 2221 2230 #: react/build/843.js:1 … … 2230 2239 #: react/build/157.js:1 2231 2240 #: react/build/182.js:1 2232 #: react/build/7 47.js:12241 #: react/build/785.js:1 2233 2242 #: react/build/792.js:1 2234 2243 #: react/build/843.js:1 … … 2243 2252 #: react/build/157.js:1 2244 2253 #: react/build/182.js:1 2245 #: react/build/7 47.js:12254 #: react/build/785.js:1 2246 2255 #: react/build/792.js:1 2247 2256 #: react/build/843.js:1 … … 2256 2265 #: react/build/157.js:1 2257 2266 #: react/build/182.js:1 2258 #: react/build/7 47.js:12267 #: react/build/785.js:1 2259 2268 #: react/build/792.js:1 2260 2269 #: react/build/843.js:1 … … 2269 2278 #: react/build/157.js:1 2270 2279 #: react/build/182.js:1 2271 #: react/build/7 47.js:12280 #: react/build/785.js:1 2272 2281 #: react/build/792.js:1 2273 2282 #: react/build/843.js:1 … … 2282 2291 #: react/build/157.js:1 2283 2292 #: react/build/182.js:1 2284 #: react/build/7 47.js:12293 #: react/build/785.js:1 2285 2294 #: react/build/792.js:1 2286 2295 #: react/build/843.js:1 … … 2295 2304 #: react/build/157.js:1 2296 2305 #: react/build/182.js:1 2297 #: react/build/7 47.js:12306 #: react/build/785.js:1 2298 2307 #: react/build/792.js:1 2299 2308 #: react/build/843.js:1 … … 2308 2317 #: react/build/157.js:1 2309 2318 #: react/build/182.js:1 2310 #: react/build/7 47.js:12319 #: react/build/785.js:1 2311 2320 #: react/build/792.js:1 2312 2321 #: react/build/843.js:1 … … 2321 2330 #: react/build/157.js:1 2322 2331 #: react/build/182.js:1 2323 #: react/build/7 47.js:12332 #: react/build/785.js:1 2324 2333 #: react/build/792.js:1 2325 2334 #: react/build/843.js:1 … … 2334 2343 #: react/build/157.js:1 2335 2344 #: react/build/182.js:1 2336 #: react/build/7 47.js:12345 #: react/build/785.js:1 2337 2346 #: react/build/792.js:1 2338 2347 #: react/build/843.js:1 … … 2378 2387 #: react/build/107.js:1 2379 2388 #: react/build/843.js:1 2380 #: react/src/components/Modals/Partials/FormLogin.jsx: 1942381 #: react/src/components/Modals/Partials/FormTwoFa.jsx:1 402389 #: react/src/components/Modals/Partials/FormLogin.jsx:213 2390 #: react/src/components/Modals/Partials/FormTwoFa.jsx:171 2382 2391 msgid "Close" 2383 2392 msgstr "" … … 2423 2432 2424 2433 #: react/build/107.js:1 2425 #: react/build/7 47.js:12434 #: react/build/785.js:1 2426 2435 msgid "Live Help" 2427 2436 msgstr "" 2428 2437 2429 2438 #: react/build/107.js:1 2430 #: react/build/7 47.js:12439 #: react/build/785.js:1 2431 2440 msgid "days left" 2432 2441 msgstr "" 2433 2442 2434 2443 #: react/build/107.js:1 2435 #: react/build/7 47.js:12444 #: react/build/785.js:1 2436 2445 msgid "Dashboard" 2437 2446 msgstr "" 2438 2447 2439 2448 #: react/build/107.js:1 2440 #: react/build/7 47.js:12449 #: react/build/785.js:1 2441 2450 msgid "Clients" 2442 2451 msgstr "" 2443 2452 2444 2453 #: react/build/107.js:1 2445 #: react/build/7 47.js:12454 #: react/build/785.js:1 2446 2455 msgid "Calendar" 2447 2456 msgstr "" 2448 2457 2449 2458 #: react/build/107.js:1 2450 #: react/build/7 47.js:12459 #: react/build/785.js:1 2451 2460 msgid "Help Center" 2452 2461 msgstr "" 2453 2462 2454 2463 #: react/build/107.js:1 2455 #: react/build/7 47.js:12464 #: react/build/785.js:1 2456 2465 msgid "is expired." 2457 2466 msgstr "" … … 2521 2530 msgstr "" 2522 2531 2523 #: react/build/7 47.js:12532 #: react/build/785.js:1 2524 2533 msgid "is expired" 2525 2534 msgstr "" 2526 2535 2527 #: react/build/7 47.js:12536 #: react/build/785.js:1 2528 2537 msgid "No tasks available." 2529 2538 msgstr "" 2530 2539 2531 #: react/build/7 47.js:12540 #: react/build/785.js:1 2532 2541 msgid "Loading tasks..." 2533 2542 msgstr "" 2534 2543 2535 #: react/build/7 47.js:12544 #: react/build/785.js:1 2536 2545 msgid "Progress" 2537 2546 msgstr "" 2538 2547 2539 #: react/build/7 47.js:12548 #: react/build/785.js:1 2540 2549 msgid "All tasks" 2541 2550 msgstr "" 2542 2551 2543 #: react/build/7 47.js:12552 #: react/build/785.js:1 2544 2553 msgid "Remaining tasks" 2545 2554 msgstr "" 2546 2555 2547 #: react/build/7 47.js:12556 #: react/build/785.js:1 2548 2557 msgid "You're all set! Great job!" 2549 2558 msgstr "" 2550 2559 2551 #: react/build/7 47.js:12560 #: react/build/785.js:1 2552 2561 msgid "You're on your way. You still have %s task open." 2553 2562 msgid_plural "You're on your way. You still have %s tasks open." … … 2555 2564 msgstr[1] "" 2556 2565 2557 #: react/build/7 47.js:12566 #: react/build/785.js:1 2558 2567 msgid "Not yet calculated..." 2559 2568 msgstr "" 2560 2569 2561 #: react/build/7 47.js:12570 #: react/build/785.js:1 2562 2571 msgid "Today" 2563 2572 msgstr "" 2564 2573 2565 #: react/build/7 47.js:12574 #: react/build/785.js:1 2566 2575 msgid "This week" 2567 2576 msgstr "" 2568 2577 2569 #: react/build/7 47.js:12578 #: react/build/785.js:1 2570 2579 msgid "Service Provider" 2571 2580 msgstr "" 2572 2581 2573 #: react/build/7 47.js:12582 #: react/build/785.js:1 2574 2583 msgid "Service" 2575 2584 msgstr "" 2576 2585 2577 #: react/build/7 47.js:12586 #: react/build/785.js:1 2578 2587 msgid "Most popular" 2579 2588 msgstr "" 2580 2589 2581 #: react/build/7 47.js:12590 #: react/build/785.js:1 2582 2591 msgid "Last 30 days" 2583 2592 msgstr "" 2584 2593 2585 #: react/build/7 47.js:12594 #: react/build/785.js:1 2586 2595 msgid "View Bookings" 2587 2596 msgstr "" 2588 2597 2589 #: react/build/7 47.js:12598 #: react/build/785.js:1 2590 2599 msgid "SMS Credits" 2591 2600 msgstr "" 2592 2601 2593 #: react/build/7 47.js:12602 #: react/build/785.js:1 2594 2603 msgid "SMS Gateway" 2595 2604 msgstr "" 2596 2605 2597 #: react/build/7 47.js:12606 #: react/build/785.js:1 2598 2607 msgid "Membership" 2599 2608 msgstr "" 2600 2609 2601 #: react/build/7 47.js:12610 #: react/build/785.js:1 2602 2611 msgid "Paid Events" 2603 2612 msgstr "" 2604 2613 2605 #: react/build/7 47.js:12614 #: react/build/785.js:1 2606 2615 msgid "Management" 2607 2616 msgstr "" 2608 2617 2609 #: react/build/7 47.js:12618 #: react/build/785.js:1 2610 2619 msgid "Tips & Tricks" 2611 2620 msgstr "" 2612 2621 2613 #: react/build/7 47.js:12622 #: react/build/785.js:1 2614 2623 msgid "View All" 2615 2624 msgstr "" 2616 2625 2617 #: react/build/7 47.js:12626 #: react/build/785.js:1 2618 2627 msgid "Installed" 2619 2628 msgstr "" 2620 2629 2621 #: react/build/7 47.js:12630 #: react/build/785.js:1 2622 2631 msgid "Install" 2623 2632 msgstr "" 2624 2633 2625 #: react/build/7 47.js:12634 #: react/build/785.js:1 2626 2635 msgid "Activate" 2627 2636 msgstr "" 2628 2637 2629 #: react/build/7 47.js:12638 #: react/build/785.js:1 2630 2639 msgid "Activating..." 2631 2640 msgstr "" 2632 2641 2633 #: react/build/7 47.js:12642 #: react/build/785.js:1 2634 2643 msgid "Downloading..." 2635 2644 msgstr "" 2636 2645 2637 #: react/build/7 47.js:12646 #: react/build/785.js:1 2638 2647 msgid "Other Plugins" 2639 2648 msgstr "" 2640 2649 2641 #: react/build/7 47.js:12650 #: react/build/785.js:1 2642 2651 msgid "Loading..." 2643 2652 msgstr "" … … 2681 2690 2682 2691 #: react/build/843.js:1 2683 #: react/src/components/Modals/Partials/FormTwoFa.jsx:78 2692 #: react/src/components/Modals/Partials/FormLogin.jsx:101 2693 #: react/src/components/Modals/Partials/FormTwoFa.jsx:53 2694 #: react/src/components/Modals/Partials/FormTwoFa.jsx:74 2695 msgid "An unknown error occurred, please try again." 2696 msgstr "" 2697 2698 #: react/build/843.js:1 2699 #: react/src/components/Modals/Partials/FormTwoFa.jsx:61 2700 #: react/src/components/Modals/Partials/FormTwoFa.jsx:82 2701 msgid "An unknown error occurred. Please try again." 2702 msgstr "" 2703 2704 #: react/build/843.js:1 2705 #: react/src/components/Modals/Partials/FormTwoFa.jsx:99 2684 2706 msgid "Select 2FA provider" 2685 2707 msgstr "" 2686 2708 2687 2709 #: react/build/843.js:1 2688 #: react/src/components/Modals/Partials/FormTwoFa.jsx:1 022710 #: react/src/components/Modals/Partials/FormTwoFa.jsx:123 2689 2711 msgid "Enter 2FA authentication code" 2690 2712 msgstr "" 2691 2713 2692 2714 #: react/build/843.js:1 2693 #: react/src/components/Modals/Partials/FormTwoFa.jsx:1 052715 #: react/src/components/Modals/Partials/FormTwoFa.jsx:126 2694 2716 msgid "Enter code" 2695 2717 msgstr "" 2696 2718 2697 2719 #: react/build/843.js:1 2698 #: react/src/components/Modals/Partials/FormTwoFa.jsx:1 222720 #: react/src/components/Modals/Partials/FormTwoFa.jsx:147 2699 2721 msgid "SMS Requested" 2700 2722 msgstr "" 2701 2723 2702 2724 #: react/build/843.js:1 2703 #: react/src/components/Modals/Partials/FormTwoFa.jsx:1 222725 #: react/src/components/Modals/Partials/FormTwoFa.jsx:147 2704 2726 msgid "Request SMS" 2705 2727 msgstr "" 2706 2728 2707 2729 #: react/build/843.js:1 2708 #: react/src/components/Modals/Partials/FormLogin.jsx: 1872709 #: react/src/components/Modals/Partials/FormTwoFa.jsx:1 322730 #: react/src/components/Modals/Partials/FormLogin.jsx:206 2731 #: react/src/components/Modals/Partials/FormTwoFa.jsx:163 2710 2732 msgid "Submit" 2711 2733 msgstr "" 2712 2734 2713 2735 #: react/build/843.js:1 2714 #: react/src/components/Modals/Partials/FormLogin.jsx:11 62736 #: react/src/components/Modals/Partials/FormLogin.jsx:117 2715 2737 msgid "Company domain" 2716 2738 msgstr "" 2717 2739 2718 2740 #: react/build/843.js:1 2719 #: react/src/components/Modals/Partials/FormLogin.jsx:13 62720 #: react/src/components/Modals/Partials/FormLogin.jsx:1 392741 #: react/src/components/Modals/Partials/FormLogin.jsx:137 2742 #: react/src/components/Modals/Partials/FormLogin.jsx:140 2721 2743 msgid "Company login" 2722 2744 msgstr "" 2723 2745 2724 2746 #: react/build/843.js:1 2725 #: react/src/components/Modals/Partials/FormLogin.jsx:15 22726 #: react/src/components/Modals/Partials/FormLogin.jsx:1 552747 #: react/src/components/Modals/Partials/FormLogin.jsx:159 2748 #: react/src/components/Modals/Partials/FormLogin.jsx:162 2727 2749 msgid "User login or email" 2728 2750 msgstr "" 2729 2751 2730 2752 #: react/build/843.js:1 2731 #: react/src/components/Modals/Partials/FormLogin.jsx:1 682732 #: react/src/components/Modals/Partials/FormLogin.jsx:1 712753 #: react/src/components/Modals/Partials/FormLogin.jsx:181 2754 #: react/src/components/Modals/Partials/FormLogin.jsx:184 2733 2755 msgid "Password" 2734 2756 msgstr "" -
simplybook/tags/3.1.0/composer.json
r3297362 r3313046 1 1 { 2 2 "name": "really-simple-plugins/simplybookme", 3 "version": "3. 0.0",3 "version": "3.1.0", 4 4 "description": "Online booking system plugin for service businesses that lets your customers schedule appointments and pay for your services on your Wordpress site.", 5 5 "type": "wordpress-plugin", -
simplybook/tags/3.1.0/config/environment.php
r3297362 r3313046 7 7 'plugin' => [ 8 8 'name' => 'SimplyBook.me', 9 'version' => '3. 0.0',9 'version' => '3.1.0', 10 10 'pro' => true, 11 11 'path' => dirname(__DIR__), 12 'base_path' => dirname(__DIR__). '/'. plugin_basename(dirname(__DIR__)) . '.php',13 'assets_path' => dirname(__DIR__). '/assets/',14 'lang_path' => dirname(__DIR__). '/assets/languages/',15 'view_path' => dirname(__DIR__). '/app/views/',16 'feature_path' => dirname(__DIR__). '/app/features/',17 'react_path' => dirname(__DIR__). '/react',12 'base_path' => dirname(__DIR__). DIRECTORY_SEPARATOR . plugin_basename(dirname(__DIR__)) . '.php', 13 'assets_path' => dirname(__DIR__). DIRECTORY_SEPARATOR .'assets' . DIRECTORY_SEPARATOR, 14 'lang_path' => dirname(__DIR__). DIRECTORY_SEPARATOR . 'assets'. DIRECTORY_SEPARATOR . 'languages' . DIRECTORY_SEPARATOR, 15 'view_path' => dirname(__DIR__). DIRECTORY_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR, 16 'feature_path' => dirname(__DIR__). DIRECTORY_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'features' . DIRECTORY_SEPARATOR, 17 'react_path' => dirname(__DIR__). DIRECTORY_SEPARATOR . 'react', 18 18 'dir' => plugin_basename(dirname(__DIR__)), 19 'base_file' => plugin_basename(dirname(__DIR__)) . '/'. plugin_basename(dirname(__DIR__)) . '.php',20 'lang' => plugin_basename(dirname(__DIR__)) . '/assets/languages',19 'base_file' => plugin_basename(dirname(__DIR__)) . DIRECTORY_SEPARATOR . plugin_basename(dirname(__DIR__)) . '.php', 20 'lang' => plugin_basename(dirname(__DIR__)) . DIRECTORY_SEPARATOR . 'assets' . DIRECTORY_SEPARATOR . 'languages', 21 21 'url' => plugin_dir_url(__DIR__), 22 22 'assets_url' => plugin_dir_url(__DIR__).'assets/', … … 112 112 ['key' => 'login:booking.lcn.uk', 'value' => 'login:booking.lcn.uk', 'label' => 'booking.lcn.uk'], 113 113 ['key' => 'login:booking.register365.ie', 'value' => 'login:booking.register365.ie', 'label' => 'booking.register365.ie'], 114 ['key' => 'login:booking.register365.ie', 'value' => 'login:booking.register365.ie', 'label' => 'booking.register365.ie'],115 114 ] 116 115 ], -
simplybook/tags/3.1.0/config/features.php
r3297362 r3313046 13 13 'dependencies' => [ 14 14 'Service', 15 '\SimplyBook\Services\WidgetTrackingService', 15 16 ], 16 17 ], … … 20 21 'pro' => false, 21 22 'priorityFiles' => [ 22 'Tasks /AbstractTask',23 'Tasks' . DIRECTORY_SEPARATOR . 'AbstractTask', 23 24 ], 24 25 ], … … 28 29 'pro' => false, 29 30 'priorityFiles' => [ 30 'Notices /AbstractNotice',31 'Notices' . DIRECTORY_SEPARATOR . 'AbstractNotice', 31 32 ], 32 33 ], -
simplybook/tags/3.1.0/config/fields/design.php
r3297362 r3313046 41 41 'type' => 'checkbox', 42 42 'label' => __('RTL', 'simplybook'), 43 'help' => sprintf( 44 /* translators: %s - IS or IS NOT */ 45 __('When selected, writing starts from the right of the page and continues to the left, proceeding from top to bottom for new lines. Your website %s set to RTL.', 'simplybook'), 46 (is_rtl() ? 'IS' : 'IS NOT'), 47 ), 43 'tooltip' => [ 44 'message' => sprintf( 45 /* translators: %s - IS or IS NOT */ 46 __('When selected, writing starts from the right of the page and continues to the left, proceeding from top to bottom for new lines. Your website %s set to RTL.', 'simplybook'), 47 (is_rtl() ? 'IS' : 'IS NOT'), 48 ), 49 'type' => 'info', 50 ], 48 51 'disabled' => false, 49 52 'default' => is_rtl(), … … 55 58 'type' => 'checkbox', 56 59 'label' => __('Allow switch to ADA', 'simplybook'), 57 'help' => __('This adds a button to enable accessibility mode, which increases contrast for visitors with a visual disability.', 'simplybook'), 60 'tooltip' => [ 61 'message' => __('This adds a button to enable accessibility mode, which increases contrast for visitors with a visual disability.', 'simplybook'), 62 'type' => 'info', 63 ], 58 64 'disabled' => false, 59 65 'default' => false, … … 64 70 'group_id' => 'main', 65 71 'type' => 'checkbox', 72 'tooltip' => [ 73 'message' => __('Useful for in-store tablets, so each customer can make a new appointment without data from earlier ones.', 'simplybook'), 74 'type' => 'info', 75 ], 66 76 'label' => __('Clear the session of each widget initialization', 'simplybook'), 67 'help' => __('Useful for in-store tablets, so each customer can make a new appointment without data from earlier ones.', 'simplybook'),68 77 'disabled' => false, 69 78 'default' => true, -
simplybook/tags/3.1.0/config/fields/general.php
r3297362 r3313046 1 2 1 <?php 3 2 defined( 'ABSPATH' ) or die(); -
simplybook/tags/3.1.0/config/related.php
r3297362 r3313046 9 9 'slug' => 'really-simple-ssl', 10 10 'options_prefix' => 'rsssl', 11 'activation_slug' => 'really-simple-ssl /rlrsssl-really-simple-ssl.php',11 'activation_slug' => 'really-simple-ssl' . DIRECTORY_SEPARATOR . 'rlrsssl-really-simple-ssl.php', 12 12 'constant_free' => 'rsssl_version', 13 13 'constant_premium' => 'rsssl_pro', … … 20 20 'slug' => 'complianz-gdpr', 21 21 'options_prefix' => 'cmplz', 22 'activation_slug' => 'complianz-gdpr /complianz-gpdr.php',22 'activation_slug' => 'complianz-gdpr' . DIRECTORY_SEPARATOR . 'complianz-gpdr.php', 23 23 'constant_free' => 'cmplz_version', 24 24 'constant_premium' => 'cmplz_premium', … … 32 32 'slug' => 'complianz-terms-conditions', 33 33 'options_prefix' => 'cmplz_tc', 34 'activation_slug' => 'complianz-terms-conditions /complianz-terms-conditions.php',34 'activation_slug' => 'complianz-terms-conditions' . DIRECTORY_SEPARATOR . 'complianz-terms-conditions.php', 35 35 'constant_free' => 'cmplz_tc_version', 36 36 'create' => admin_url('admin.php?page=terms-conditions'), -
simplybook/tags/3.1.0/readme.txt
r3297401 r3313046 1 1 === SimplyBook.me - Booking and reservations calendar === 2 Contributors: simplybook, reallysimpleplugins, wimbraam, jeroenvdk 2 Contributors: simplybook, reallysimpleplugins, wimbraam, jeroenvdk, markwolters, rvvelthuijsen 3 3 Donate link: https://simplybook.me/ 4 4 Tags: Booking, Calendar, Scheduling, Reservations, Appointments … … 6 6 Tested up to: 6.8 7 7 Requires PHP: 7.4 8 Stable tag: 3. 0.08 Stable tag: 3.1.0 9 9 License: GPLv2 or later 10 10 License URI: http://www.gnu.org/licenses/gpl-2.0.html … … 41 41 42 42 SimplyBook.me is an advanced online booking system that creates a professional booking widget on your WordPress site where your clients can book your services at any time. You will then have access to an admin interface where you can manage your bookings and settings. On top of that you will get an admin app where you can manage all your bookings and accept payments on the go.Thousands of clients all over the world have selected our booking system to make their business easy and comfortable to use (see our testimonials). SimplyBook.me provides users with a broad range of features so that you can tailor the system to your needs, irrespective of what industry you are in. 43 For a more detailed understanding of the SimplyBook.me service, you can explore at the following link: 44 * <a href="https://simplybook.me/?ref=wordpress" rel="friend" title="SimplyBook" target="_blank">https://simplybook.me/?ref=wordpress</a> 43 For a more detailed understanding of the SimplyBook.me service, you can explore at the following link: <a href="https://simplybook.me/?ref=wordpress" rel="friend" title="SimplyBook" target="_blank">https://simplybook.me/</a> 45 44 46 45 This plugin is developed by SimplyBook.me, is ISO27001 compliant and utilizes its API to transmit and store all information, including settings and details of bookings, as well as other personal client data, directly on SimplyBook.me. Before using the plugin, we recommend that you familiarize yourself with the privacy policy and terms of use of SimplyBook.me at the following links: … … 61 60 Additionally, an online booking system offers powerful analytics that provide deep insights into customer behaviors and preferences. This data is essential for making informed adjustments to service offerings and planning effective marketing strategies. Last but not least it´s the best way to boost your sales by offering service add-ons and products for sale in the booking process, by sending tailored marketing email campaigns, offering coupons on less busy days, by prompting tips during check out and so much more, the options are endless! 62 61 63 64 62 == Installation == 65 63 66 = <a href="https://help.simplybook.me/index.php/WordPress_integration" rel="friend" title="SimplyBook Wiki" target="_blank">Detailed instructions with photos here </a> =64 = <a href="https://help.simplybook.me/index.php/WordPress_integration" rel="friend" title="SimplyBook Wiki" target="_blank">Detailed instructions with photos here</a> = 67 65 68 66 … … 91 89 92 90 == Changelog == 91 = 3.1.0 = 92 * Added: markwolters and rvvelthuijsen are added as contributors. 93 * Added: Setting help texts are now shown in tooltips. 94 * Changed: Prompts to publish the widget now responds to user actions in posts. 95 * Changed: Removed unnecessary files to make the plugin package smaller. 96 * Removed: Duplicate domain option from sign-in dropdown. 97 * Fixed: Non-email usernames now accepted at login. 98 * Fixed: Console error in onboarding-start resolved. 99 * Fixed: Miscellaneous 2FA login console errors resolved. 100 * Fixed: Gutenberg block now registers correctly with API V2, resolving a console notice. 101 * Fixed: Error message now correctly shown when an invalid 2FA code is entered. 102 * Fixed: Demo widget notice now only appears when the loaded widget is actually a demo. 103 * Fixed: Unexpectedly losing connection with SimplyBook.me is now resolved. 93 104 94 105 = 3.0.0 = 95 * Major refactor of the plugin. 106 * Major refactor of the plugin by Really Simple Plugins. 107 * Added: reallysimpleplugins, wimbraam and jeroenvdk are added as contributors. 96 108 97 109 = 2.3 = -
simplybook/tags/3.1.0/simplybook.php
r3297362 r3313046 8 8 * @wordpress-plugin 9 9 * Plugin Name: SimplyBook.me - Booking and reservations calendar 10 * Plugin URI: https://help.simplybook.me/index.php /WordPress_plugn10 * Plugin URI: https://help.simplybook.me/index.php?title=WordPress_integration 11 11 * Description: Simply add a booking calendar to your site to schedule bookings, reservations, appointments and to collect payments. 12 * Version: 3. 0.012 * Version: 3.1.0 13 13 * Requires at least: 6.0 14 14 * Requires PHP: 7.4 -
simplybook/tags/3.1.0/vendor/composer/autoload_classmap.php
r3297362 r3313046 113 113 'SimplyBook\\Controllers\\SettingsController' => $baseDir . '/app/controllers/SettingsController.php', 114 114 'SimplyBook\\Controllers\\WidgetController' => $baseDir . '/app/controllers/WidgetController.php', 115 'SimplyBook\\Controllers\\WidgetTrackingController' => $baseDir . '/app/controllers/WidgetTrackingController.php', 115 116 'SimplyBook\\Exceptions\\ApiException' => $baseDir . '/app/exceptions/ApiException.php', 116 117 'SimplyBook\\Exceptions\\BuilderException' => $baseDir . '/app/exceptions/BuilderException.php', … … 160 161 'SimplyBook\\Services\\StatisticsService' => $baseDir . '/app/services/StatisticsService.php', 161 162 'SimplyBook\\Services\\SubscriptionDataService' => $baseDir . '/app/services/SubscriptionDataService.php', 163 'SimplyBook\\Services\\WidgetTrackingService' => $baseDir . '/app/services/WidgetTrackingService.php', 162 164 'SimplyBook\\Traits\\HasAllowlistControl' => $baseDir . '/app/traits/HasAllowlistControl.php', 163 165 'SimplyBook\\Traits\\HasNonces' => $baseDir . '/app/traits/HasNonces.php', -
simplybook/tags/3.1.0/vendor/composer/autoload_static.php
r3297362 r3313046 253 253 'SimplyBook\\Controllers\\SettingsController' => __DIR__ . '/../..' . '/app/controllers/SettingsController.php', 254 254 'SimplyBook\\Controllers\\WidgetController' => __DIR__ . '/../..' . '/app/controllers/WidgetController.php', 255 'SimplyBook\\Controllers\\WidgetTrackingController' => __DIR__ . '/../..' . '/app/controllers/WidgetTrackingController.php', 255 256 'SimplyBook\\Exceptions\\ApiException' => __DIR__ . '/../..' . '/app/exceptions/ApiException.php', 256 257 'SimplyBook\\Exceptions\\BuilderException' => __DIR__ . '/../..' . '/app/exceptions/BuilderException.php', … … 300 301 'SimplyBook\\Services\\StatisticsService' => __DIR__ . '/../..' . '/app/services/StatisticsService.php', 301 302 'SimplyBook\\Services\\SubscriptionDataService' => __DIR__ . '/../..' . '/app/services/SubscriptionDataService.php', 303 'SimplyBook\\Services\\WidgetTrackingService' => __DIR__ . '/../..' . '/app/services/WidgetTrackingService.php', 302 304 'SimplyBook\\Traits\\HasAllowlistControl' => __DIR__ . '/../..' . '/app/traits/HasAllowlistControl.php', 303 305 'SimplyBook\\Traits\\HasNonces' => __DIR__ . '/../..' . '/app/traits/HasNonces.php', -
simplybook/tags/3.1.0/vendor/composer/installed.php
r3297362 r3313046 2 2 'root' => array( 3 3 'name' => 'really-simple-plugins/simplybookme', 4 'pretty_version' => '3. 0.0',5 'version' => '3. 0.0.0',4 'pretty_version' => '3.1.0', 5 'version' => '3.1.0.0', 6 6 'reference' => null, 7 7 'type' => 'wordpress-plugin', … … 63 63 ), 64 64 'really-simple-plugins/simplybookme' => array( 65 'pretty_version' => '3. 0.0',66 'version' => '3. 0.0.0',65 'pretty_version' => '3.1.0', 66 'version' => '3.1.0.0', 67 67 'reference' => null, 68 68 'type' => 'wordpress-plugin', -
simplybook/tags/3.1.0/vendor/composer/jetpack_autoload_classmap.php
r3297362 r3313046 424 424 ), 425 425 'SimplyBook\\Builders\\CompanyBuilder' => array( 426 'version' => '3. 0.0.0',426 'version' => '3.1.0.0', 427 427 'path' => $baseDir . '/app/support/builders/CompanyBuilder.php' 428 428 ), 429 429 'SimplyBook\\Builders\\PageBuilder' => array( 430 'version' => '3. 0.0.0',430 'version' => '3.1.0.0', 431 431 'path' => $baseDir . '/app/support/builders/PageBuilder.php' 432 432 ), 433 433 'SimplyBook\\Builders\\WidgetScriptBuilder' => array( 434 'version' => '3. 0.0.0',434 'version' => '3.1.0.0', 435 435 'path' => $baseDir . '/app/support/builders/WidgetScriptBuilder.php' 436 436 ), 437 437 'SimplyBook\\Controllers\\AdminController' => array( 438 'version' => '3. 0.0.0',438 'version' => '3.1.0.0', 439 439 'path' => $baseDir . '/app/controllers/AdminController.php' 440 440 ), 441 441 'SimplyBook\\Controllers\\BlockController' => array( 442 'version' => '3. 0.0.0',442 'version' => '3.1.0.0', 443 443 'path' => $baseDir . '/app/controllers/BlockController.php' 444 444 ), 445 445 'SimplyBook\\Controllers\\CapabilityController' => array( 446 'version' => '3. 0.0.0',446 'version' => '3.1.0.0', 447 447 'path' => $baseDir . '/app/controllers/CapabilityController.php' 448 448 ), 449 449 'SimplyBook\\Controllers\\DashboardController' => array( 450 'version' => '3. 0.0.0',450 'version' => '3.1.0.0', 451 451 'path' => $baseDir . '/app/controllers/DashboardController.php' 452 452 ), 453 453 'SimplyBook\\Controllers\\DesignSettingsController' => array( 454 'version' => '3. 0.0.0',454 'version' => '3.1.0.0', 455 455 'path' => $baseDir . '/app/controllers/DesignSettingsController.php' 456 456 ), 457 457 'SimplyBook\\Controllers\\ReviewController' => array( 458 'version' => '3. 0.0.0',458 'version' => '3.1.0.0', 459 459 'path' => $baseDir . '/app/controllers/ReviewController.php' 460 460 ), 461 461 'SimplyBook\\Controllers\\ScheduleController' => array( 462 'version' => '3. 0.0.0',462 'version' => '3.1.0.0', 463 463 'path' => $baseDir . '/app/controllers/ScheduleController.php' 464 464 ), 465 465 'SimplyBook\\Controllers\\ServicesController' => array( 466 'version' => '3. 0.0.0',466 'version' => '3.1.0.0', 467 467 'path' => $baseDir . '/app/controllers/ServicesController.php' 468 468 ), 469 469 'SimplyBook\\Controllers\\SettingsController' => array( 470 'version' => '3. 0.0.0',470 'version' => '3.1.0.0', 471 471 'path' => $baseDir . '/app/controllers/SettingsController.php' 472 472 ), 473 473 'SimplyBook\\Controllers\\WidgetController' => array( 474 'version' => '3. 0.0.0',474 'version' => '3.1.0.0', 475 475 'path' => $baseDir . '/app/controllers/WidgetController.php' 476 476 ), 477 'SimplyBook\\Controllers\\WidgetTrackingController' => array( 478 'version' => '3.1.0.0', 479 'path' => $baseDir . '/app/controllers/WidgetTrackingController.php' 480 ), 477 481 'SimplyBook\\Exceptions\\ApiException' => array( 478 'version' => '3. 0.0.0',482 'version' => '3.1.0.0', 479 483 'path' => $baseDir . '/app/exceptions/ApiException.php' 480 484 ), 481 485 'SimplyBook\\Exceptions\\BuilderException' => array( 482 'version' => '3. 0.0.0',486 'version' => '3.1.0.0', 483 487 'path' => $baseDir . '/app/exceptions/BuilderException.php' 484 488 ), 485 489 'SimplyBook\\Exceptions\\RestDataException' => array( 486 'version' => '3. 0.0.0',490 'version' => '3.1.0.0', 487 491 'path' => $baseDir . '/app/exceptions/RestDataException.php' 488 492 ), 489 493 'SimplyBook\\Exceptions\\SettingsException' => array( 490 'version' => '3. 0.0.0',494 'version' => '3.1.0.0', 491 495 'path' => $baseDir . '/app/exceptions/SettingsException.php' 492 496 ), 493 497 'SimplyBook\\Helpers\\Event' => array( 494 'version' => '3. 0.0.0',498 'version' => '3.1.0.0', 495 499 'path' => $baseDir . '/app/support/helpers/Event.php' 496 500 ), 497 501 'SimplyBook\\Helpers\\FeatureHelper' => array( 498 'version' => '3. 0.0.0',502 'version' => '3.1.0.0', 499 503 'path' => $baseDir . '/app/support/helpers/FeatureHelper.php' 500 504 ), 501 505 'SimplyBook\\Helpers\\Request' => array( 502 'version' => '3. 0.0.0',506 'version' => '3.1.0.0', 503 507 'path' => $baseDir . '/app/support/helpers/Request.php' 504 508 ), 505 509 'SimplyBook\\Helpers\\Storage' => array( 506 'version' => '3. 0.0.0',510 'version' => '3.1.0.0', 507 511 'path' => $baseDir . '/app/support/helpers/Storage.php' 508 512 ), 509 513 'SimplyBook\\Helpers\\Uninstall' => array( 510 'version' => '3. 0.0.0',514 'version' => '3.1.0.0', 511 515 'path' => $baseDir . '/app/support/helpers/Uninstall.php' 512 516 ), 513 517 'SimplyBook\\Http\\ApiClient' => array( 514 'version' => '3. 0.0.0',518 'version' => '3.1.0.0', 515 519 'path' => $baseDir . '/app/http/ApiClient.php' 516 520 ), 517 521 'SimplyBook\\Http\\DTO\\ApiResponseDTO' => array( 518 'version' => '3. 0.0.0',522 'version' => '3.1.0.0', 519 523 'path' => $baseDir . '/app/http/dto/ApiResponseDTO.php' 520 524 ), 521 525 'SimplyBook\\Http\\Endpoints\\BlockEndpoints' => array( 522 'version' => '3. 0.0.0',526 'version' => '3.1.0.0', 523 527 'path' => $baseDir . '/app/http/endpoints/BlockEndpoints.php' 524 528 ), 525 529 'SimplyBook\\Http\\Endpoints\\CompanyRegistrationEndpoint' => array( 526 'version' => '3. 0.0.0',530 'version' => '3.1.0.0', 527 531 'path' => $baseDir . '/app/http/endpoints/CompanyRegistrationEndpoint.php' 528 532 ), 529 533 'SimplyBook\\Http\\Endpoints\\DomainEndpoint' => array( 530 'version' => '3. 0.0.0',534 'version' => '3.1.0.0', 531 535 'path' => $baseDir . '/app/http/endpoints/DomainEndpoint.php' 532 536 ), 533 537 'SimplyBook\\Http\\Endpoints\\LogOutEndpoint' => array( 534 'version' => '3. 0.0.0',538 'version' => '3.1.0.0', 535 539 'path' => $baseDir . '/app/http/endpoints/LogOutEndpoint.php' 536 540 ), 537 541 'SimplyBook\\Http\\Endpoints\\LoginUrlEndpoint' => array( 538 'version' => '3. 0.0.0',542 'version' => '3.1.0.0', 539 543 'path' => $baseDir . '/app/http/endpoints/LoginUrlEndpoint.php' 540 544 ), 541 545 'SimplyBook\\Http\\Endpoints\\ProvidersEndpoint' => array( 542 'version' => '3. 0.0.0',546 'version' => '3.1.0.0', 543 547 'path' => $baseDir . '/app/http/endpoints/ProvidersEndpoint.php' 544 548 ), 545 549 'SimplyBook\\Http\\Endpoints\\PublicThemeListEndpoint' => array( 546 'version' => '3. 0.0.0',550 'version' => '3.1.0.0', 547 551 'path' => $baseDir . '/app/http/endpoints/PublicThemeListEndpoint.php' 548 552 ), 549 553 'SimplyBook\\Http\\Endpoints\\RelatedPluginEndpoints' => array( 550 'version' => '3. 0.0.0',554 'version' => '3.1.0.0', 551 555 'path' => $baseDir . '/app/http/endpoints/RelatedPluginEndpoints.php' 552 556 ), 553 557 'SimplyBook\\Http\\Endpoints\\RemotePluginsEndpoint' => array( 554 'version' => '3. 0.0.0',558 'version' => '3.1.0.0', 555 559 'path' => $baseDir . '/app/http/endpoints/RemotePluginsEndpoint.php' 556 560 ), 557 561 'SimplyBook\\Http\\Endpoints\\ServicesEndpoint' => array( 558 'version' => '3. 0.0.0',562 'version' => '3.1.0.0', 559 563 'path' => $baseDir . '/app/http/endpoints/ServicesEndpoint.php' 560 564 ), 561 565 'SimplyBook\\Http\\Endpoints\\SettingEndpoints' => array( 562 'version' => '3. 0.0.0',566 'version' => '3.1.0.0', 563 567 'path' => $baseDir . '/app/http/endpoints/SettingEndpoints.php' 564 568 ), 565 569 'SimplyBook\\Http\\Endpoints\\StatisticsEndpoint' => array( 566 'version' => '3. 0.0.0',570 'version' => '3.1.0.0', 567 571 'path' => $baseDir . '/app/http/endpoints/StatisticsEndpoint.php' 568 572 ), 569 573 'SimplyBook\\Http\\Endpoints\\SubscriptionEndpoints' => array( 570 'version' => '3. 0.0.0',574 'version' => '3.1.0.0', 571 575 'path' => $baseDir . '/app/http/endpoints/SubscriptionEndpoints.php' 572 576 ), 573 577 'SimplyBook\\Http\\Endpoints\\TipsTricksEndpoint' => array( 574 'version' => '3. 0.0.0',578 'version' => '3.1.0.0', 575 579 'path' => $baseDir . '/app/http/endpoints/TipsTricksEndpoint.php' 576 580 ), 577 581 'SimplyBook\\Http\\Endpoints\\WaitForRegistrationEndpoint' => array( 578 'version' => '3. 0.0.0',582 'version' => '3.1.0.0', 579 583 'path' => $baseDir . '/app/http/endpoints/WaitForRegistrationEndpoint.php' 580 584 ), 581 585 'SimplyBook\\Http\\Endpoints\\WidgetEndpoint' => array( 582 'version' => '3. 0.0.0',586 'version' => '3.1.0.0', 583 587 'path' => $baseDir . '/app/http/endpoints/WidgetEndpoint.php' 584 588 ), 585 589 'SimplyBook\\Http\\JsonRpcClient' => array( 586 'version' => '3. 0.0.0',590 'version' => '3.1.0.0', 587 591 'path' => $baseDir . '/app/http/JsonRpcClient.php' 588 592 ), 589 593 'SimplyBook\\Interfaces\\ControllerInterface' => array( 590 'version' => '3. 0.0.0',594 'version' => '3.1.0.0', 591 595 'path' => $baseDir . '/app/interfaces/ControllerInterface.php' 592 596 ), 593 597 'SimplyBook\\Interfaces\\FeatureInterface' => array( 594 'version' => '3. 0.0.0',598 'version' => '3.1.0.0', 595 599 'path' => $baseDir . '/app/interfaces/FeatureInterface.php' 596 600 ), 597 601 'SimplyBook\\Interfaces\\MultiEndpointInterface' => array( 598 'version' => '3. 0.0.0',602 'version' => '3.1.0.0', 599 603 'path' => $baseDir . '/app/interfaces/MultiEndpointInterface.php' 600 604 ), 601 605 'SimplyBook\\Interfaces\\NoticeInterface' => array( 602 'version' => '3. 0.0.0',606 'version' => '3.1.0.0', 603 607 'path' => $baseDir . '/app/interfaces/NoticeInterface.php' 604 608 ), 605 609 'SimplyBook\\Interfaces\\ProviderInterface' => array( 606 'version' => '3. 0.0.0',610 'version' => '3.1.0.0', 607 611 'path' => $baseDir . '/app/interfaces/ProviderInterface.php' 608 612 ), 609 613 'SimplyBook\\Interfaces\\SingleEndpointInterface' => array( 610 'version' => '3. 0.0.0',614 'version' => '3.1.0.0', 611 615 'path' => $baseDir . '/app/interfaces/SingleEndpointInterface.php' 612 616 ), 613 617 'SimplyBook\\Interfaces\\TaskInterface' => array( 614 'version' => '3. 0.0.0',618 'version' => '3.1.0.0', 615 619 'path' => $baseDir . '/app/interfaces/TaskInterface.php' 616 620 ), 617 621 'SimplyBook\\Managers\\ControllerManager' => array( 618 'version' => '3. 0.0.0',622 'version' => '3.1.0.0', 619 623 'path' => $baseDir . '/app/managers/ControllerManager.php' 620 624 ), 621 625 'SimplyBook\\Managers\\EndpointManager' => array( 622 'version' => '3. 0.0.0',626 'version' => '3.1.0.0', 623 627 'path' => $baseDir . '/app/managers/EndpointManager.php' 624 628 ), 625 629 'SimplyBook\\Managers\\FeatureManager' => array( 626 'version' => '3. 0.0.0',630 'version' => '3.1.0.0', 627 631 'path' => $baseDir . '/app/managers/FeatureManager.php' 628 632 ), 629 633 'SimplyBook\\Managers\\ProviderManager' => array( 630 'version' => '3. 0.0.0',634 'version' => '3.1.0.0', 631 635 'path' => $baseDir . '/app/managers/ProviderManager.php' 632 636 ), 633 637 'SimplyBook\\Providers\\AppServiceProvider' => array( 634 'version' => '3. 0.0.0',638 'version' => '3.1.0.0', 635 639 'path' => $baseDir . '/app/providers/AppServiceProvider.php' 636 640 ), 637 641 'SimplyBook\\Providers\\Provider' => array( 638 'version' => '3. 0.0.0',642 'version' => '3.1.0.0', 639 643 'path' => $baseDir . '/app/providers/Provider.php' 640 644 ), 641 645 'SimplyBook\\Services\\CapabilityService' => array( 642 'version' => '3. 0.0.0',646 'version' => '3.1.0.0', 643 647 'path' => $baseDir . '/app/services/CapabilityService.php' 644 648 ), 645 649 'SimplyBook\\Services\\DesignSettingsService' => array( 646 'version' => '3. 0.0.0',650 'version' => '3.1.0.0', 647 651 'path' => $baseDir . '/app/services/DesignSettingsService.php' 648 652 ), 649 653 'SimplyBook\\Services\\LoginUrlService' => array( 650 'version' => '3. 0.0.0',654 'version' => '3.1.0.0', 651 655 'path' => $baseDir . '/app/services/LoginUrlService.php' 652 656 ), 653 657 'SimplyBook\\Services\\RelatedPluginService' => array( 654 'version' => '3. 0.0.0',658 'version' => '3.1.0.0', 655 659 'path' => $baseDir . '/app/services/RelatedPluginService.php' 656 660 ), 657 661 'SimplyBook\\Services\\StatisticsService' => array( 658 'version' => '3. 0.0.0',662 'version' => '3.1.0.0', 659 663 'path' => $baseDir . '/app/services/StatisticsService.php' 660 664 ), 661 665 'SimplyBook\\Services\\SubscriptionDataService' => array( 662 'version' => '3. 0.0.0',666 'version' => '3.1.0.0', 663 667 'path' => $baseDir . '/app/services/SubscriptionDataService.php' 664 668 ), 669 'SimplyBook\\Services\\WidgetTrackingService' => array( 670 'version' => '3.1.0.0', 671 'path' => $baseDir . '/app/services/WidgetTrackingService.php' 672 ), 665 673 'SimplyBook\\Traits\\HasAllowlistControl' => array( 666 'version' => '3. 0.0.0',674 'version' => '3.1.0.0', 667 675 'path' => $baseDir . '/app/traits/HasAllowlistControl.php' 668 676 ), 669 677 'SimplyBook\\Traits\\HasNonces' => array( 670 'version' => '3. 0.0.0',678 'version' => '3.1.0.0', 671 679 'path' => $baseDir . '/app/traits/HasNonces.php' 672 680 ), 673 681 'SimplyBook\\Traits\\HasRestAccess' => array( 674 'version' => '3. 0.0.0',682 'version' => '3.1.0.0', 675 683 'path' => $baseDir . '/app/traits/HasRestAccess.php' 676 684 ), 677 685 'SimplyBook\\Traits\\HasUserAccess' => array( 678 'version' => '3. 0.0.0',686 'version' => '3.1.0.0', 679 687 'path' => $baseDir . '/app/traits/HasUserAccess.php' 680 688 ), 681 689 'SimplyBook\\Traits\\HasViews' => array( 682 'version' => '3. 0.0.0',690 'version' => '3.1.0.0', 683 691 'path' => $baseDir . '/app/traits/HasViews.php' 684 692 ), 685 693 'SimplyBook\\Traits\\LegacyHelper' => array( 686 'version' => '3. 0.0.0',694 'version' => '3.1.0.0', 687 695 'path' => $baseDir . '/app/traits/LegacyHelper.php' 688 696 ), 689 697 'SimplyBook\\Traits\\LegacyLoad' => array( 690 'version' => '3. 0.0.0',698 'version' => '3.1.0.0', 691 699 'path' => $baseDir . '/app/traits/LegacyLoad.php' 692 700 ), 693 701 'SimplyBook\\Traits\\LegacySave' => array( 694 'version' => '3. 0.0.0',702 'version' => '3.1.0.0', 695 703 'path' => $baseDir . '/app/traits/LegacySave.php' 696 704 ), 697 705 'SimplyBook\\Utility\\StringUtility' => array( 698 'version' => '3. 0.0.0',706 'version' => '3.1.0.0', 699 707 'path' => $baseDir . '/app/support/utility/StringUtility.php' 700 708 ), -
simplybook/tags/3.1.0/vendor/composer/jetpack_autoload_filemap.php
r3297362 r3313046 28 28 ), 29 29 '5bc9c041796e4348fc427e9381e014b6' => array( 30 'version' => '3. 0.0.0',30 'version' => '3.1.0.0', 31 31 'path' => $baseDir . '/app/App.php' 32 32 ), 33 33 '2fd0677d8d23e6e7b0156d2f7d3368d4' => array( 34 'version' => '3. 0.0.0',34 'version' => '3.1.0.0', 35 35 'path' => $baseDir . '/app/Plugin.php' 36 36 ), 37 37 'dac67ee3b45b7fdd52cfb86981c8c3d0' => array( 38 'version' => '3. 0.0.0',38 'version' => '3.1.0.0', 39 39 'path' => $baseDir . '/helpers.php' 40 40 ), -
simplybook/trunk/app/Plugin.php
r3297362 r3313046 127 127 * @deprecated 3.0.0 Use App::env('plugin.version') instead 128 128 */ 129 define('SIMPLYBOOK_VERSION', '3. 0.0');129 define('SIMPLYBOOK_VERSION', '3.1.0'); 130 130 131 131 /** … … 193 193 new Controllers\ServicesController(), 194 194 new Controllers\ReviewController(), 195 new Controllers\WidgetTrackingController( 196 new Services\WidgetTrackingService() 197 ), 195 198 ]); 196 199 } -
simplybook/trunk/app/controllers/DashboardController.php
r3297362 r3313046 106 106 wp_enqueue_style( 107 107 'simplybook-tailwind', 108 App::env('plugin.react_url') . '/ src/tailwind.generated.css',108 App::env('plugin.react_url') . '/build/tailwind.generated.css', 109 109 [], 110 110 ($chunkTranslation['version'] ?? '') -
simplybook/trunk/app/features/Notifications/NotificationListener.php
r3297362 r3313046 19 19 add_action('simplybook_event_' . Event::AUTH_SUCCEEDED, [$this, 'handleSucceededAuthentication']); 20 20 add_action('simplybook_event_' . Event::CALENDAR_PUBLISHED, [$this, 'handleCalendarPublished']); 21 add_action('simplybook_event_' . Event::CALENDAR_UNPUBLISHED, [$this, 'handleCalendarUnPublished']); 21 22 add_action('simplybook_event_' . Event::PUBLISH_WIDGET_TASK_DISMISSED, [$this, 'dismissPublishWidgetNotice']); 22 23 } … … 53 54 54 55 /** 56 * Handle the calendar published event to update task status. 57 */ 58 public function handleCalendarUnPublished(): void 59 { 60 $this->service->activate( 61 Notices\PublishWidgetNotice::IDENTIFIER 62 ); 63 } 64 65 /** 55 66 * Dismiss the publish-widget-notice. 56 67 */ -
simplybook/trunk/app/features/Onboarding/OnboardingController.php
r3297362 r3313046 11 11 use SimplyBook\Interfaces\FeatureInterface; 12 12 use SimplyBook\Exceptions\RestDataException; 13 use SimplyBook\Services\WidgetTrackingService; 13 14 14 15 class OnboardingController implements FeatureInterface 15 16 { 16 17 private OnboardingService $service; 17 18 public function __construct(OnboardingService $service) 18 private WidgetTrackingService $widgetService; 19 20 public function __construct(OnboardingService $service, WidgetTrackingService $widgetTrackingService) 19 21 { 20 22 $this->service = $service; 23 $this->widgetService = $widgetTrackingService; 21 24 } 22 25 … … 238 241 // These flags are deleted after its one time use in the Task and Notice 239 242 if ($pageCreatedSuccessfully) { 240 $this-> service->setPublishWidgetCompleted();243 $this->widgetService->setPublishWidgetCompleted(); 241 244 } 242 245 … … 336 339 $this->finishLoggingInUser($response, $companyDomain, $companyLogin); 337 340 338 return new \WP_REST_Response([ 339 'message' => 'Successfully authenticated user', 340 ], 200); 341 return $this->service->sendHttpResponse([], true, esc_html__('Successfully authenticated user', 'simplybook')); // Default code 200 because React side still used request() here 341 342 } 342 343 … … 400 401 ); 401 402 } catch (\Exception $e) { 402 return new \WP_REST_Response([ 403 'message' => $e->getMessage(), 404 ], 400); 405 } 406 407 return new \WP_REST_Response([ 408 'message' => 'Successfully requested SMS code', 409 ], 200); 403 return $this->service->sendHttpResponse([], false, $e->getMessage()); // Default code 200 because React side still used request() here 404 } 405 406 return $this->service->sendHttpResponse([], true, esc_html__('Successfully requested SMS code', 'simplybook')); // Default code 200 because React side still used request() here 410 407 } 411 408 … … 449 446 * or the Gutenberg block. 450 447 */ 451 public function validatePublishedWidget(): void 452 { 453 $cache = wp_cache_get('simplybook_widget_published', 'simplybook'); 454 if ($cache === true) { 455 $this->service->setPublishWidgetCompleted(); 456 return; 457 } 458 459 global $wpdb; 460 461 // Search for "simplybook widget" with a maximum of 1 character in 462 // between. This will match both the shortcode ([simplybook_widget]) 463 // and the Gutenberg block (<!-- wp:simplybook/widget -->). 464 $pattern = 'simplybook.{0,1}widget'; 465 466 // This direct SQL query is intentional, safe, and properly prepared. 467 // phpcs:ignore WordPress.DB.DirectDatabaseQuery.DirectQuery, WordPress.DB.PreparedSQLPlaceholders.UnquotedComplexPlaceholder 468 $query = $wpdb->prepare(" 469 SELECT 1 470 FROM {$wpdb->posts} 471 WHERE post_content REGEXP %s 472 LIMIT 1 473 ", $pattern); 474 475 $havePosts = (bool) $wpdb->get_var($query); 476 if (!$havePosts) { 477 return; 478 } 479 480 $this->service->setPublishWidgetCompleted(); 481 wp_cache_set('simplybook_widget_published', true, 'simplybook'); 482 } 448 public function validatePublishedWidget(): void { 449 $cache = wp_cache_get( 'simplybook_widget_published', 'simplybook' ); 450 if ( $cache === true ) { 451 $this->widgetService->setPublishWidgetCompleted(); 452 453 return; 454 } 455 456 // Check if any widgets are currently published 457 if ( $this->widgetService->hasTrackedPosts() ) { 458 $this->widgetService->setPublishWidgetCompleted(); 459 wp_cache_set( 'simplybook_widget_published', true, 'simplybook' ); 460 } 461 } 483 462 } -
simplybook/trunk/app/features/Onboarding/OnboardingService.php
r3297362 r3313046 1 1 <?php namespace SimplyBook\Features\Onboarding; 2 2 3 use SimplyBook\App; 3 4 use SimplyBook\Http\ApiClient; 4 5 use SimplyBook\Helpers\Storage; … … 30 31 $this->setCompletedStep(5); 31 32 $this->clearTemporaryData(); 33 34 App::provide('client')->clearFailedAuthenticationFlag(); 32 35 33 36 $completedPreviously = get_option('simplybook_onboarding_completed', false); … … 174 177 } 175 178 176 /**177 * Use this method to set the "publish widget" notice and task as completed.178 * These flags are deleted after its one time use in the Task and Notice.179 */180 public function setPublishWidgetCompleted(bool $completed = true): void181 {182 update_option('simplybook_calendar_published_notification_completed', $completed);183 update_option('simplybook_calendar_published_task_completed', $completed);184 }185 179 } -
simplybook/trunk/app/features/TaskManagement/TaskManagementListener.php
r3297362 r3313046 25 25 add_action('simplybook_event_' . Event::AUTH_FAILED, [$this, 'handleFailedAuthentication']); 26 26 add_action('simplybook_event_' . Event::CALENDAR_PUBLISHED, [$this, 'handleCalendarPublished']); 27 add_action('simplybook_event_' . Event::CALENDAR_UNPUBLISHED, [$this, 'handleCalendarUnPublished']); 27 28 add_action('simplybook_save_design_settings', [$this, 'handleDesignSettingsSaved']); 28 29 } … … 254 255 255 256 /** 257 * Handle the calendar published event to update task status. 258 */ 259 public function handleCalendarUnPublished(): void 260 { 261 $this->service->flagTaskUrgent( 262 Tasks\PublishWidgetTask::IDENTIFIER 263 ); 264 } 265 266 /** 256 267 * Handle the after save options event to update task status. 257 268 */ -
simplybook/trunk/app/http/ApiClient.php
r3297362 r3313046 7 7 8 8 use Carbon\Carbon; 9 use SimplyBook\App; 9 10 use SimplyBook\Helpers\Event; 10 11 use SimplyBook\Helpers\Storage; … … 117 118 118 119 /** 120 * Clear the authentication failed flag. This is used when the user has 121 * successfully authenticated again. Currently used after successfully 122 * logging in with the sign in modal. 123 */ 124 public function clearFailedAuthenticationFlag(): void 125 { 126 $this->authenticationFailedFlag = false; 127 delete_option($this->authenticationFailedFlagKey); 128 } 129 130 /** 119 131 * Set the during onboarding flag 120 132 */ … … 232 244 $headers = array( 233 245 'Content-Type' => 'application/json', 246 'User-Agent' => $this->getRequestUserAgent(), 234 247 ); 235 248 … … 244 257 $this->refresh_token('admin'); 245 258 break; 246 case 'user':247 $this->get_user_token();248 break;249 259 } 250 260 $token = $this->get_token($token_type); … … 268 278 $type = $type . '_refresh'; 269 279 } 270 $token = get_option("simplybook_token_" . esc_sql($type), '');280 $token = get_option("simplybook_token_" . $type, ''); 271 281 272 282 return $this->decrypt_string($token); … … 432 442 private function automaticAuthenticationFallback(string $type) 433 443 { 434 if ($this->authenticationFailedFlag) { 444 // Company login can be empty for fresh accounts 445 if ($this->authenticationFailedFlag || empty($this->get_company_login(false))) { 435 446 $this->releaseRefreshLock($type); 436 return; // Dont even try again.447 return; // Dont even try (again). 437 448 } 438 449 … … 518 529 * @return string 519 530 */ 520 public function get_company_login(): string { 531 public function get_company_login(bool $create = true): string 532 { 521 533 $login = get_option('simplybook_company_login', ''); 522 534 if ( !empty($login) ) { 523 535 return $login; 536 } 537 538 if ($create === false) { 539 return ''; // Abort 524 540 } 525 541 … … 675 691 'journey_type' => 'skip_welcome_tour', 676 692 'callback_url' => get_rest_url(get_current_blog_id(),"simplybook/v1/company_registration/$callback_url"), 693 'ref' => $this->getReferrer(), 677 694 ] 678 695 ), … … 1608 1625 } 1609 1626 1627 /** 1628 * 1629 * \EXTENDIFY_PARTNER_ID will contain the required value if WordPress is 1630 * configured using Extendify. Otherwise, use default 'wp'. 1631 */ 1632 private function getReferrer(): string 1633 { 1634 return (defined('\EXTENDIFY_PARTNER_ID') ? \EXTENDIFY_PARTNER_ID : 'wp'); 1635 } 1636 1637 /** 1638 * Get the user agent for the API requests. 1639 * 1640 * @example format SimplyBookPlugin/3.2.1 (WordPress/6.5.3; ref: 1641 * EXTENDIFY_PARTNER_ID; +https://example.com) 1642 */ 1643 private function getRequestUserAgent(): string 1644 { 1645 return "SimplyBookPlugin/" . App::env('plugin.version') . " (WordPress/" . get_bloginfo('version') . "; ref: " . $this->getReferrer() . "; +" . site_url() . ")"; 1646 } 1647 1610 1648 } -
simplybook/trunk/app/support/builders/WidgetScriptBuilder.php
r3297362 r3313046 51 51 } 52 52 53 if ($this-> isAuthenticated === false) {53 if ($this->showDemoWidget()) { 54 54 return $this->getDemoWidgetAlert() . $script; 55 55 } … … 194 194 $content = ''; 195 195 196 if ($this-> isAuthenticated === false) {196 if ($this->showDemoWidget()) { 197 197 $content = $this->getDemoWidgetAlert(); 198 198 } … … 221 221 } 222 222 223 if ( empty($widgetSettings['server'])) {223 if ($this->showDemoWidget($widgetSettings)) { 224 224 $widgetSettings['server'] = $this->getDemoWidgetServerUrl(); 225 225 } … … 258 258 } 259 259 260 /** 261 * The demo widget should be shown if the server URL is not set in the 262 * widget settings. This is used to display a demo widget when the 263 * plugin is not configured yet. 264 * 265 * @internal The widget works even when the plugin lost connection to the 266 * SimplyBook account of the user so that is not a condition to show the 267 * demo widget. 268 */ 269 public function showDemoWidget(?array $widgetSettings = null): bool 270 { 271 $widgetSettings = $widgetSettings ?? $this->widgetSettings; 272 return empty($widgetSettings['server']); 273 } 274 260 275 } -
simplybook/trunk/app/support/helpers/Event.php
r3297362 r3313046 24 24 const AUTH_SUCCEEDED = 'auth_succeeded'; 25 25 const CALENDAR_PUBLISHED = 'calendar_published'; 26 const CALENDAR_UNPUBLISHED = 'calendar_unpublished'; 26 27 const PUBLISH_WIDGET_TASK_DISMISSED = 'publish_widget_task_dismissed'; 27 28 -
simplybook/trunk/app/traits/LegacyHelper.php
r3297362 r3313046 101 101 102 102 /** 103 * Encrypt data 104 * @param $string 105 * @return string 103 * Encrypts a token using AES-256-CBC encryption with a version marker. 104 * 105 * This function encrypts a token string using AES-256-CBC with a random 106 * initialization vector (IV). New tokens use the "v2:" format which separates 107 * the IV and encrypted data with a period for better clarity. 108 * 109 * @param string $string The token to encrypt (should be a 64-character hex string). 110 * @return string The encrypted token with format "v2:base64(iv).base64(encrypted)". 111 * 112 * @since 3.1 Uses v2 format with OPENSSL_RAW_DATA 113 * @example 114 * $token = "a1b2c3d4e5f6..."; // 64-character hex string 115 * $encrypted = encrypt_string($token); // Returns "v2:abc123.xyz789" 106 116 */ 107 117 public function encrypt_string($string): string … … 112 122 $iv = openssl_random_pseudo_bytes($ivLength); 113 123 114 $encrypted = openssl_encrypt($string, 'AES-256-CBC', $key, 0, $iv); 124 // Use OPENSSL_RAW_DATA for new v2 tokens 125 $encrypted = openssl_encrypt($string, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv); 115 126 116 return base64_encode($iv . $encrypted); 127 // Format: v2:base64(iv).base64(encrypted) 128 return 'v2:' . base64_encode($iv) . '.' . base64_encode($encrypted); 117 129 } 118 130 -
simplybook/trunk/app/traits/LegacyLoad.php
r3297362 r3313046 3 3 4 4 use SimplyBook\App; 5 use SimplyBook\Traits\LegacyHelper; 5 6 6 7 if ( ! defined( 'ABSPATH' ) ) { … … 99 100 } 100 101 101 /** 102 * Decrypt a string 103 * @param $encrypted_string 104 * @return string 105 */ 106 public function decrypt_string($encrypted_string): string 107 { 108 $key = '7*w$9pumLw5koJc#JT6'; 109 $data = base64_decode($encrypted_string); 110 $ivLength = openssl_cipher_iv_length('AES-256-CBC'); 111 $iv = substr($data, 0, $ivLength); 112 $encrypted = substr($data, $ivLength); 113 114 return openssl_decrypt($encrypted, 'AES-256-CBC', $key, 0, $iv); 115 } 102 103 /** 104 * Decrypts an encrypted token string with backward compatibility support. 105 * 106 * This function acts as a dispatcher that automatically detects the token format 107 * and delegates to the appropriate decryption method: 108 * - V2 format: "v2:base64(iv).base64(encrypted)" 109 * - Legacy format: base64(iv + encrypted) 110 * 111 * @param string $encrypted_string The encrypted token to decrypt. 112 * @return string The decrypted token if valid, or an empty string if invalid. 113 * 114 * @since 3.1 Added support for v2 format with OPENSSL_RAW_DATA 115 * @example 116 * $decrypted = decrypt_string("v2: abc123.xyz789"); // Returns the original token 117 * $decrypted = decrypt_string("legacy_encrypted_data"); // Also works with old tokens 118 */ 119 public function decrypt_string($encrypted_string): string 120 { 121 122 if (empty($encrypted_string)) { 123 return ''; 124 } 125 126 $key = '7*w$9pumLw5koJc#JT6'; 127 128 // Check if it's a v2 token (new format) 129 if (strpos($encrypted_string, 'v2:') === 0) { 130 return $this->decrypt_string_v2($encrypted_string, $key); 131 } 132 133 return $this->decrypt_legacy_string($encrypted_string, $key); 134 } 135 136 /** 137 * Decrypts a v2 format encrypted token. 138 * 139 * V2 tokens use the format "v2:base64(iv).base64(encrypted)" and employ 140 * an OPENSSL_RAW_DATA flag for decryption. This format separates the IV and 141 * ciphertext with base64 encoding for each component. 142 * 143 * @param string $encrypted_string The v2 format encrypted token (prefixed with "v2:"). 144 * @return string The decrypted token if valid, or an empty string if decryption fails. 145 * 146 * @since 3.1 147 */ 148 private function decrypt_string_v2(string $encrypted_string, string $key): string { 149 $parts = explode('.', substr($encrypted_string, 3), 2); 150 if (count($parts) !== 2) { 151 $this->log("v2 token: invalid format — missing iv or ciphertext part."); 152 return ''; 153 } 154 155 $iv = base64_decode($parts[0], true); 156 $encrypted = base64_decode($parts[1], true); 157 158 if ($iv === false || $encrypted === false) { 159 $this->log("v2 token: base64 decode failed (iv: " . ($iv === false ? 'invalid' : 'ok') . ", encrypted: " . ($encrypted === false ? 'invalid' : 'ok') . ")"); 160 return ''; 161 } 162 163 $decrypted = openssl_decrypt($encrypted, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv); 164 165 if ($decrypted === false) { 166 $this->log("v2 token: openssl decryption failed."); 167 return ''; 168 } 169 170 if (!preg_match('/^[a-f0-9]{64}$/i', $decrypted)) { 171 $this->log("v2 token: decrypted result did not match expected 64-character hex format."); 172 return ''; 173 } 174 175 return $decrypted; 176 } 177 178 /** 179 * Decrypts a legacy format encrypted token. 180 * 181 * Legacy tokens use the format base64(iv + encrypted) where the IV and 182 * ciphertext are concatenated before base64 encoding. This method includes 183 * fallback logic for double base64 encoding scenarios and uses flag=0 184 * for OpenSSL decryption. 185 * 186 * @param string $encrypted_string The legacy format encrypted token. 187 * @return string The decrypted token if valid, or an empty string if decryption fails. 188 * 189 * @since 3.1 190 */ 191 private function decrypt_legacy_string(string $encrypted_string, string $key): string { 192 // Legacy tokens 193 $data = base64_decode($encrypted_string, true); 194 $ivLength = openssl_cipher_iv_length('AES-256-CBC'); 195 196 if ($data === false || strlen($data) < $ivLength) { 197 $this->log("legacy token: decoded data too short, trying double base64 decoding..."); 198 199 $data = base64_decode($data, true); 200 201 if ($data === false || strlen($data) < $ivLength) { 202 $this->log("legacy token: double base64 decoding failed or still too short (length: " . strlen($data) . ")."); 203 return ''; 204 } 205 } 206 207 $iv = substr($data, 0, $ivLength); 208 $encrypted = substr($data, $ivLength); 209 210 $decrypted = openssl_decrypt($encrypted, 'AES-256-CBC', $key, 0, $iv); 211 212 if ($decrypted === false) { 213 $this->log("legacy token: openssl decryption failed."); 214 return ''; 215 } 216 217 if (!preg_match('/^[a-f0-9]{64}$/i', $decrypted)) { 218 $this->log("legacy token: decrypted result did not match expected 64-character hex format."); 219 return ''; 220 } 221 222 return $decrypted; 223 } 224 116 225 117 226 /** -
simplybook/trunk/assets/languages/simplybook.pot
r3297362 r3313046 3 3 msgid "" 4 4 msgstr "" 5 "Project-Id-Version: SimplyBook.me - Booking and reservations calendar 3. 0.0\n"5 "Project-Id-Version: SimplyBook.me - Booking and reservations calendar 3.1.0\n" 6 6 "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/simplybook\n" 7 7 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" … … 10 10 "Content-Type: text/plain; charset=UTF-8\n" 11 11 "Content-Transfer-Encoding: 8bit\n" 12 "POT-Creation-Date: 2025-0 5-20T10:58:40+00:00\n"12 "POT-Creation-Date: 2025-06-17T08:11:45+00:00\n" 13 13 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 14 14 "X-Generator: WP-CLI 2.11.0\n" … … 22 22 #. Plugin URI of the plugin 23 23 #: simplybook.php 24 msgid "https://help.simplybook.me/index.php /WordPress_plugn"24 msgid "https://help.simplybook.me/index.php?title=WordPress_integration" 25 25 msgstr "" 26 26 … … 42 42 #: app/controllers/AdminController.php:30 43 43 #: react/build/107.js:1 44 #: react/build/7 47.js:144 #: react/build/785.js:1 45 45 #: react/src/components/Settings/SettingsMenu.jsx:16 46 46 #: react/src/components/Settings/SettingsMenu.jsx:29 … … 131 131 msgstr "" 132 132 133 #: app/features/Onboarding/OnboardingController.php:1 27134 #: app/features/Onboarding/OnboardingController.php:2 69135 #: app/features/Onboarding/OnboardingController.php:31 4133 #: app/features/Onboarding/OnboardingController.php:130 134 #: app/features/Onboarding/OnboardingController.php:272 135 #: app/features/Onboarding/OnboardingController.php:317 136 136 msgid "Please fill in all fields." 137 137 msgstr "" 138 138 139 #: app/features/Onboarding/OnboardingController.php:15 1139 #: app/features/Onboarding/OnboardingController.php:154 140 140 msgid "Please verify you're not a robot." 141 141 msgstr "" 142 142 143 #: app/features/Onboarding/OnboardingController.php:15 5143 #: app/features/Onboarding/OnboardingController.php:158 144 144 msgid "Please enter the confirmation code." 145 145 msgstr "" 146 146 147 #: app/features/Onboarding/OnboardingController.php:19 4147 #: app/features/Onboarding/OnboardingController.php:197 148 148 msgid "Something went wrong while saving the widget style settings. Please try again." 149 149 msgstr "" 150 150 151 #: app/features/Onboarding/OnboardingController.php: 199151 #: app/features/Onboarding/OnboardingController.php:202 152 152 msgid "Successfully saved widget style settings" 153 153 msgstr "" 154 154 155 #: app/features/Onboarding/OnboardingController.php:22 5155 #: app/features/Onboarding/OnboardingController.php:228 156 156 msgid "Calendar page title should be available if you choose to generate this page." 157 157 msgstr "" 158 158 159 #: app/features/Onboarding/OnboardingController.php:29 1160 #: app/features/Onboarding/OnboardingController.php:33 3159 #: app/features/Onboarding/OnboardingController.php:294 160 #: app/features/Onboarding/OnboardingController.php:336 161 161 msgid "Unknown error occurred, please verify your credentials." 162 162 msgstr "" 163 163 164 #: app/features/Onboarding/OnboardingController.php: 298164 #: app/features/Onboarding/OnboardingController.php:301 165 165 msgid "Login successful." 166 166 msgstr "" 167 167 168 #: app/features/Onboarding/OnboardingController.php:419 168 #: app/features/Onboarding/OnboardingController.php:341 169 msgid "Successfully authenticated user" 170 msgstr "" 171 172 #: app/features/Onboarding/OnboardingController.php:406 173 msgid "Successfully requested SMS code" 174 msgstr "" 175 176 #: app/features/Onboarding/OnboardingController.php:416 169 177 msgid "Successfully finished onboarding!" 170 178 msgstr "" 171 179 172 #: app/features/Onboarding/OnboardingController.php:42 3180 #: app/features/Onboarding/OnboardingController.php:420 173 181 msgid "An error occurred while finishing the onboarding process" 174 182 msgstr "" 175 183 184 #: app/features/Onboarding/OnboardingController.php:434 185 msgid "Successfully removed all previous data." 186 msgstr "" 187 176 188 #: app/features/Onboarding/OnboardingController.php:437 177 msgid "Successfully removed all previous data."178 msgstr ""179 180 #: app/features/Onboarding/OnboardingController.php:440181 189 msgid "An error occurred while trying to remove previous data." 182 190 msgstr "" 183 191 184 #: app/features/Onboarding/OnboardingService.php: 69192 #: app/features/Onboarding/OnboardingService.php:72 185 193 msgid "Please enter a valid email address and accept the terms and conditions" 186 194 msgstr "" … … 265 273 #: react/build/157.js:1 266 274 #: react/build/182.js:1 267 #: react/build/7 47.js:1275 #: react/build/785.js:1 268 276 #: react/build/792.js:1 269 277 #: react/build/939.js:1 … … 292 300 msgstr "" 293 301 294 #: app/http/ApiClient.php:6 19295 #: app/http/ApiClient.php:8 27302 #: app/http/ApiClient.php:635 303 #: app/http/ApiClient.php:844 296 304 msgid "You are not authorized to do this." 297 305 msgstr "" 298 306 299 #: app/http/ApiClient.php:6 25307 #: app/http/ApiClient.php:641 300 308 msgid "Too many attempts to register company, please try again in a minute." 301 309 msgstr "" 302 310 303 #: app/http/ApiClient.php:6 39311 #: app/http/ApiClient.php:655 304 312 msgid "Please fill in all company data." 305 313 msgstr "" 306 314 307 #: app/http/ApiClient.php: 683315 #: app/http/ApiClient.php:700 308 316 msgid "Something went wrong while registering your company. Please try again." 309 317 msgstr "" 310 318 311 #: app/http/ApiClient.php: 695319 #: app/http/ApiClient.php:712 312 320 msgid "Company successfully registered." 313 321 msgstr "" 314 322 315 #: app/http/ApiClient.php:7 28323 #: app/http/ApiClient.php:745 316 324 msgid "The company name is not allowed. Please change the company name." 317 325 msgstr "" 318 326 319 #: app/http/ApiClient.php:7 36327 #: app/http/ApiClient.php:753 320 328 msgid "Unknown error encountered while registering your company. Please try again." 321 329 msgstr "" 322 330 323 #: app/http/ApiClient.php:8 35331 #: app/http/ApiClient.php:852 324 332 msgid "Something went wrong, are you sure you started the company registration?" 325 333 msgstr "" 326 334 327 #: app/http/ApiClient.php:8 54335 #: app/http/ApiClient.php:871 328 336 msgid "Something went wrong while confirming your email. Please try again." 329 337 msgstr "" 330 338 331 #: app/http/ApiClient.php:8 62339 #: app/http/ApiClient.php:879 332 340 msgid "Email successfully confirmed." 333 341 msgstr "" 334 342 335 #: app/http/ApiClient.php:8 66343 #: app/http/ApiClient.php:883 336 344 msgid "Unknown error encountered while confirming your email. Please try again." 337 345 msgstr "" 338 346 339 #: app/http/ApiClient.php:8 68347 #: app/http/ApiClient.php:885 340 348 msgid "This confirmation code is not valid." 341 349 msgstr "" 342 350 343 #: app/http/ApiClient.php:13 67351 #: app/http/ApiClient.php:1384 344 352 msgid "Failed logging in, please verify your credentials." 345 353 msgstr "" 346 354 347 #: app/http/ApiClient.php:13 70355 #: app/http/ApiClient.php:1387 348 356 msgid "Unknown error" 349 357 msgstr "" 350 358 351 #: app/http/ApiClient.php:13 76359 #: app/http/ApiClient.php:1393 352 360 msgid "Login failed! Please try again later." 353 361 msgstr "" 354 362 355 #: app/http/ApiClient.php:13 79363 #: app/http/ApiClient.php:1396 356 364 msgid "Invalid response from SimplyBook.me" 357 365 msgstr "" 358 366 359 #: app/http/ApiClient.php:14 27367 #: app/http/ApiClient.php:1444 360 368 msgid "Failed two factor authentication, please verify your credentials." 361 369 msgstr "" 362 370 363 #: app/http/ApiClient.php:14 30371 #: app/http/ApiClient.php:1447 364 372 msgid "Unknown 2FA error" 365 373 msgstr "" 366 374 367 #: app/http/ApiClient.php:14 37375 #: app/http/ApiClient.php:1454 368 376 msgid "Two factor authentication failed! Please try again later." 369 377 msgstr "" 370 378 371 #: app/http/ApiClient.php:14 40379 #: app/http/ApiClient.php:1457 372 380 msgid "Invalid 2FA response from SimplyBook.me" 373 381 msgstr "" 374 382 375 #: app/http/ApiClient.php:15 08383 #: app/http/ApiClient.php:1525 376 384 #: react/build/843.js:1 377 385 #: react/src/components/Modals/SignInModal.jsx:15 … … 379 387 msgstr "" 380 388 381 #: app/http/ApiClient.php:15 09389 #: app/http/ApiClient.php:1526 382 390 msgid "SMS" 383 391 msgstr "" 384 392 385 #: app/http/ApiClient.php:15 15393 #: app/http/ApiClient.php:1532 386 394 msgid "Unknown 2FA provider" 387 395 msgstr "" … … 1429 1437 1430 1438 #: config/fields/design.php:12 1431 #: config/fields/design.php:1 521439 #: config/fields/design.php:161 1432 1440 msgid "Flexible" 1433 1441 msgstr "" 1434 1442 1435 1443 #: config/fields/design.php:13 1436 #: config/fields/design.php:15 01444 #: config/fields/design.php:159 1437 1445 msgid "Modern" 1438 1446 msgstr "" 1439 1447 1440 1448 #: config/fields/design.php:14 1441 #: config/fields/design.php:1 481449 #: config/fields/design.php:157 1442 1450 msgid "Flexible weekly" 1443 1451 msgstr "" 1444 1452 1445 1453 #: config/fields/design.php:15 1446 #: config/fields/design.php:1 531454 #: config/fields/design.php:162 1447 1455 msgid "Slots weekly" 1448 1456 msgstr "" 1449 1457 1450 1458 #: config/fields/design.php:16 1451 #: config/fields/design.php:1 561459 #: config/fields/design.php:165 1452 1460 msgid "Modern Provider" 1453 1461 msgstr "" 1454 1462 1455 1463 #: config/fields/design.php:17 1456 #: config/fields/design.php:1 491464 #: config/fields/design.php:158 1457 1465 msgid "Flexible Provider" 1458 1466 msgstr "" 1459 1467 1460 1468 #: config/fields/design.php:18 1461 #: config/fields/design.php:1 541469 #: config/fields/design.php:163 1462 1470 msgid "Weekly classes" 1463 1471 msgstr "" … … 1484 1492 1485 1493 #. translators: %s - IS or IS NOT 1486 #: config/fields/design.php:4 51494 #: config/fields/design.php:46 1487 1495 msgid "When selected, writing starts from the right of the page and continues to the left, proceeding from top to bottom for new lines. Your website %s set to RTL." 1488 1496 msgstr "" 1489 1497 1490 #: config/fields/design.php:5 61498 #: config/fields/design.php:59 1491 1499 msgid "Allow switch to ADA" 1492 1500 msgstr "" 1493 1501 1494 #: config/fields/design.php: 571502 #: config/fields/design.php:61 1495 1503 msgid "This adds a button to enable accessibility mode, which increases contrast for visitors with a visual disability." 1496 1504 msgstr "" 1497 1505 1498 #: config/fields/design.php:66 1506 #: config/fields/design.php:73 1507 msgid "Useful for in-store tablets, so each customer can make a new appointment without data from earlier ones." 1508 msgstr "" 1509 1510 #: config/fields/design.php:76 1499 1511 msgid "Clear the session of each widget initialization" 1500 1512 msgstr "" 1501 1513 1502 #: config/fields/design.php:67 1503 msgid "Useful for in-store tablets, so each customer can make a new appointment without data from earlier ones." 1504 msgstr "" 1505 1506 #: config/fields/design.php:144 1514 #: config/fields/design.php:153 1507 1515 msgid "Theme" 1508 1516 msgstr "" 1509 1517 1510 #: config/fields/design.php:1 511518 #: config/fields/design.php:160 1511 1519 msgid "Default" 1512 1520 msgstr "" 1513 1521 1514 #: config/fields/design.php:1 551522 #: config/fields/design.php:164 1515 1523 msgid "Daily classes" 1516 1524 msgstr "" 1517 1525 1518 #: config/fields/design.php:1 571526 #: config/fields/design.php:166 1519 1527 msgid "As slots" 1520 1528 msgstr "" 1521 1529 1522 #: config/fields/design.php:1 581530 #: config/fields/design.php:167 1523 1531 msgid "As table" 1524 1532 msgstr "" 1525 1533 1526 #: config/fields/design.php:1 591534 #: config/fields/design.php:168 1527 1535 msgid "Block" 1528 1536 msgstr "" 1529 1537 1530 #: config/fields/design.php:16 01538 #: config/fields/design.php:169 1531 1539 msgid "List" 1532 1540 msgstr "" 1533 1541 1534 #: config/fields/design.php:1 611542 #: config/fields/design.php:170 1535 1543 msgid "Single page" 1536 1544 msgstr "" 1537 1545 1538 #: config/fields/design.php:1 621546 #: config/fields/design.php:171 1539 1547 msgid "Display calendar" 1540 1548 msgstr "" 1541 1549 1542 #: config/fields/design.php:1 631550 #: config/fields/design.php:172 1543 1551 msgid "Base theme color" 1544 1552 msgstr "" 1545 1553 1546 #: config/fields/design.php:1 641554 #: config/fields/design.php:173 1547 1555 msgid "Show only available time" 1548 1556 msgstr "" 1549 1557 1550 #: config/fields/design.php:1 651558 #: config/fields/design.php:174 1551 1559 msgid "Hide unavailable days on calendar" 1552 1560 msgstr "" 1553 1561 1554 #: config/fields/design.php:1 661562 #: config/fields/design.php:175 1555 1563 msgid "Display calendar layout sidebar" 1556 1564 msgstr "" 1557 1565 1558 #: config/fields/design.php:1 671566 #: config/fields/design.php:176 1559 1567 msgid "Image scale mode" 1560 1568 msgstr "" … … 1562 1570 #: config/fields/providers.php:13 1563 1571 #: config/menus.php:24 1564 #: react/build/7 47.js:11572 #: react/build/785.js:1 1565 1573 msgid "Service Providers" 1566 1574 msgstr "" … … 1609 1617 1610 1618 #: config/menus.php:69 1611 #: react/build/7 47.js:11619 #: react/build/785.js:1 1612 1620 msgid "Bookings" 1613 1621 msgstr "" … … 1775 1783 #: react/build/157.js:1 1776 1784 #: react/build/182.js:1 1777 #: react/build/7 47.js:11785 #: react/build/785.js:1 1778 1786 #: react/build/792.js:1 1779 1787 #: react/build/843.js:1 … … 1787 1795 #: react/build/157.js:1 1788 1796 #: react/build/182.js:1 1789 #: react/build/7 47.js:11797 #: react/build/785.js:1 1790 1798 #: react/build/792.js:1 1791 1799 #: react/build/843.js:1 … … 1799 1807 #: react/build/157.js:1 1800 1808 #: react/build/182.js:1 1801 #: react/build/7 47.js:11809 #: react/build/785.js:1 1802 1810 #: react/build/792.js:1 1803 1811 #: react/build/843.js:1 … … 1866 1874 #: react/build/157.js:1 1867 1875 #: react/build/182.js:1 1868 #: react/build/7 47.js:11876 #: react/build/785.js:1 1869 1877 #: react/build/792.js:1 1870 1878 #: react/build/939.js:1 … … 1922 1930 #: react/build/792.js:1 1923 1931 #: react/build/939.js:1 1924 #: react/src/components/Fields/AuthenticationField.jsx:6 81925 #: react/src/components/Fields/AuthenticationField.jsx:7 11932 #: react/src/components/Fields/AuthenticationField.jsx:67 1933 #: react/src/components/Fields/AuthenticationField.jsx:70 1926 1934 msgid "Log out" 1927 1935 msgstr "" … … 1977 1985 #: react/build/843.js:1 1978 1986 #: react/build/939.js:1 1979 #: react/src/components/Modals/Partials/FormLogin.jsx:177 1987 #: react/src/components/Modals/Partials/FormLogin.jsx:196 1988 #: react/src/components/Modals/Partials/FormTwoFa.jsx:152 1980 1989 #: react/src/components/Onboarding/OnboardingStep.jsx:206 1981 1990 msgid "Something went wrong" … … 1996 2005 #: react/build/157.js:1 1997 2006 #: react/build/182.js:1 1998 #: react/build/7 47.js:12007 #: react/build/785.js:1 1999 2008 #: react/build/792.js:1 2000 2009 #: react/build/843.js:1 … … 2009 2018 #: react/build/157.js:1 2010 2019 #: react/build/182.js:1 2011 #: react/build/7 47.js:12020 #: react/build/785.js:1 2012 2021 #: react/build/792.js:1 2013 2022 #: react/build/843.js:1 … … 2022 2031 #: react/build/157.js:1 2023 2032 #: react/build/182.js:1 2024 #: react/build/7 47.js:12033 #: react/build/785.js:1 2025 2034 #: react/build/792.js:1 2026 2035 #: react/build/843.js:1 … … 2035 2044 #: react/build/157.js:1 2036 2045 #: react/build/182.js:1 2037 #: react/build/7 47.js:12046 #: react/build/785.js:1 2038 2047 #: react/build/792.js:1 2039 2048 #: react/build/843.js:1 … … 2048 2057 #: react/build/157.js:1 2049 2058 #: react/build/182.js:1 2050 #: react/build/7 47.js:12059 #: react/build/785.js:1 2051 2060 #: react/build/792.js:1 2052 2061 #: react/build/843.js:1 … … 2061 2070 #: react/build/157.js:1 2062 2071 #: react/build/182.js:1 2063 #: react/build/7 47.js:12072 #: react/build/785.js:1 2064 2073 #: react/build/792.js:1 2065 2074 #: react/build/843.js:1 … … 2074 2083 #: react/build/157.js:1 2075 2084 #: react/build/182.js:1 2076 #: react/build/7 47.js:12085 #: react/build/785.js:1 2077 2086 #: react/build/792.js:1 2078 2087 #: react/build/843.js:1 … … 2087 2096 #: react/build/157.js:1 2088 2097 #: react/build/182.js:1 2089 #: react/build/7 47.js:12098 #: react/build/785.js:1 2090 2099 #: react/build/792.js:1 2091 2100 #: react/build/843.js:1 … … 2100 2109 #: react/build/157.js:1 2101 2110 #: react/build/182.js:1 2102 #: react/build/7 47.js:12111 #: react/build/785.js:1 2103 2112 #: react/build/792.js:1 2104 2113 #: react/build/843.js:1 … … 2113 2122 #: react/build/157.js:1 2114 2123 #: react/build/182.js:1 2115 #: react/build/7 47.js:12124 #: react/build/785.js:1 2116 2125 #: react/build/792.js:1 2117 2126 #: react/build/843.js:1 … … 2126 2135 #: react/build/157.js:1 2127 2136 #: react/build/182.js:1 2128 #: react/build/7 47.js:12137 #: react/build/785.js:1 2129 2138 #: react/build/792.js:1 2130 2139 #: react/build/843.js:1 … … 2139 2148 #: react/build/157.js:1 2140 2149 #: react/build/182.js:1 2141 #: react/build/7 47.js:12150 #: react/build/785.js:1 2142 2151 #: react/build/792.js:1 2143 2152 #: react/build/843.js:1 … … 2152 2161 #: react/build/157.js:1 2153 2162 #: react/build/182.js:1 2154 #: react/build/7 47.js:12163 #: react/build/785.js:1 2155 2164 #: react/build/792.js:1 2156 2165 #: react/build/843.js:1 … … 2165 2174 #: react/build/157.js:1 2166 2175 #: react/build/182.js:1 2167 #: react/build/7 47.js:12176 #: react/build/785.js:1 2168 2177 #: react/build/792.js:1 2169 2178 #: react/build/843.js:1 … … 2178 2187 #: react/build/157.js:1 2179 2188 #: react/build/182.js:1 2180 #: react/build/7 47.js:12189 #: react/build/785.js:1 2181 2190 #: react/build/792.js:1 2182 2191 #: react/build/843.js:1 … … 2191 2200 #: react/build/157.js:1 2192 2201 #: react/build/182.js:1 2193 #: react/build/7 47.js:12202 #: react/build/785.js:1 2194 2203 #: react/build/792.js:1 2195 2204 #: react/build/843.js:1 … … 2204 2213 #: react/build/157.js:1 2205 2214 #: react/build/182.js:1 2206 #: react/build/7 47.js:12215 #: react/build/785.js:1 2207 2216 #: react/build/792.js:1 2208 2217 #: react/build/843.js:1 … … 2217 2226 #: react/build/157.js:1 2218 2227 #: react/build/182.js:1 2219 #: react/build/7 47.js:12228 #: react/build/785.js:1 2220 2229 #: react/build/792.js:1 2221 2230 #: react/build/843.js:1 … … 2230 2239 #: react/build/157.js:1 2231 2240 #: react/build/182.js:1 2232 #: react/build/7 47.js:12241 #: react/build/785.js:1 2233 2242 #: react/build/792.js:1 2234 2243 #: react/build/843.js:1 … … 2243 2252 #: react/build/157.js:1 2244 2253 #: react/build/182.js:1 2245 #: react/build/7 47.js:12254 #: react/build/785.js:1 2246 2255 #: react/build/792.js:1 2247 2256 #: react/build/843.js:1 … … 2256 2265 #: react/build/157.js:1 2257 2266 #: react/build/182.js:1 2258 #: react/build/7 47.js:12267 #: react/build/785.js:1 2259 2268 #: react/build/792.js:1 2260 2269 #: react/build/843.js:1 … … 2269 2278 #: react/build/157.js:1 2270 2279 #: react/build/182.js:1 2271 #: react/build/7 47.js:12280 #: react/build/785.js:1 2272 2281 #: react/build/792.js:1 2273 2282 #: react/build/843.js:1 … … 2282 2291 #: react/build/157.js:1 2283 2292 #: react/build/182.js:1 2284 #: react/build/7 47.js:12293 #: react/build/785.js:1 2285 2294 #: react/build/792.js:1 2286 2295 #: react/build/843.js:1 … … 2295 2304 #: react/build/157.js:1 2296 2305 #: react/build/182.js:1 2297 #: react/build/7 47.js:12306 #: react/build/785.js:1 2298 2307 #: react/build/792.js:1 2299 2308 #: react/build/843.js:1 … … 2308 2317 #: react/build/157.js:1 2309 2318 #: react/build/182.js:1 2310 #: react/build/7 47.js:12319 #: react/build/785.js:1 2311 2320 #: react/build/792.js:1 2312 2321 #: react/build/843.js:1 … … 2321 2330 #: react/build/157.js:1 2322 2331 #: react/build/182.js:1 2323 #: react/build/7 47.js:12332 #: react/build/785.js:1 2324 2333 #: react/build/792.js:1 2325 2334 #: react/build/843.js:1 … … 2334 2343 #: react/build/157.js:1 2335 2344 #: react/build/182.js:1 2336 #: react/build/7 47.js:12345 #: react/build/785.js:1 2337 2346 #: react/build/792.js:1 2338 2347 #: react/build/843.js:1 … … 2378 2387 #: react/build/107.js:1 2379 2388 #: react/build/843.js:1 2380 #: react/src/components/Modals/Partials/FormLogin.jsx: 1942381 #: react/src/components/Modals/Partials/FormTwoFa.jsx:1 402389 #: react/src/components/Modals/Partials/FormLogin.jsx:213 2390 #: react/src/components/Modals/Partials/FormTwoFa.jsx:171 2382 2391 msgid "Close" 2383 2392 msgstr "" … … 2423 2432 2424 2433 #: react/build/107.js:1 2425 #: react/build/7 47.js:12434 #: react/build/785.js:1 2426 2435 msgid "Live Help" 2427 2436 msgstr "" 2428 2437 2429 2438 #: react/build/107.js:1 2430 #: react/build/7 47.js:12439 #: react/build/785.js:1 2431 2440 msgid "days left" 2432 2441 msgstr "" 2433 2442 2434 2443 #: react/build/107.js:1 2435 #: react/build/7 47.js:12444 #: react/build/785.js:1 2436 2445 msgid "Dashboard" 2437 2446 msgstr "" 2438 2447 2439 2448 #: react/build/107.js:1 2440 #: react/build/7 47.js:12449 #: react/build/785.js:1 2441 2450 msgid "Clients" 2442 2451 msgstr "" 2443 2452 2444 2453 #: react/build/107.js:1 2445 #: react/build/7 47.js:12454 #: react/build/785.js:1 2446 2455 msgid "Calendar" 2447 2456 msgstr "" 2448 2457 2449 2458 #: react/build/107.js:1 2450 #: react/build/7 47.js:12459 #: react/build/785.js:1 2451 2460 msgid "Help Center" 2452 2461 msgstr "" 2453 2462 2454 2463 #: react/build/107.js:1 2455 #: react/build/7 47.js:12464 #: react/build/785.js:1 2456 2465 msgid "is expired." 2457 2466 msgstr "" … … 2521 2530 msgstr "" 2522 2531 2523 #: react/build/7 47.js:12532 #: react/build/785.js:1 2524 2533 msgid "is expired" 2525 2534 msgstr "" 2526 2535 2527 #: react/build/7 47.js:12536 #: react/build/785.js:1 2528 2537 msgid "No tasks available." 2529 2538 msgstr "" 2530 2539 2531 #: react/build/7 47.js:12540 #: react/build/785.js:1 2532 2541 msgid "Loading tasks..." 2533 2542 msgstr "" 2534 2543 2535 #: react/build/7 47.js:12544 #: react/build/785.js:1 2536 2545 msgid "Progress" 2537 2546 msgstr "" 2538 2547 2539 #: react/build/7 47.js:12548 #: react/build/785.js:1 2540 2549 msgid "All tasks" 2541 2550 msgstr "" 2542 2551 2543 #: react/build/7 47.js:12552 #: react/build/785.js:1 2544 2553 msgid "Remaining tasks" 2545 2554 msgstr "" 2546 2555 2547 #: react/build/7 47.js:12556 #: react/build/785.js:1 2548 2557 msgid "You're all set! Great job!" 2549 2558 msgstr "" 2550 2559 2551 #: react/build/7 47.js:12560 #: react/build/785.js:1 2552 2561 msgid "You're on your way. You still have %s task open." 2553 2562 msgid_plural "You're on your way. You still have %s tasks open." … … 2555 2564 msgstr[1] "" 2556 2565 2557 #: react/build/7 47.js:12566 #: react/build/785.js:1 2558 2567 msgid "Not yet calculated..." 2559 2568 msgstr "" 2560 2569 2561 #: react/build/7 47.js:12570 #: react/build/785.js:1 2562 2571 msgid "Today" 2563 2572 msgstr "" 2564 2573 2565 #: react/build/7 47.js:12574 #: react/build/785.js:1 2566 2575 msgid "This week" 2567 2576 msgstr "" 2568 2577 2569 #: react/build/7 47.js:12578 #: react/build/785.js:1 2570 2579 msgid "Service Provider" 2571 2580 msgstr "" 2572 2581 2573 #: react/build/7 47.js:12582 #: react/build/785.js:1 2574 2583 msgid "Service" 2575 2584 msgstr "" 2576 2585 2577 #: react/build/7 47.js:12586 #: react/build/785.js:1 2578 2587 msgid "Most popular" 2579 2588 msgstr "" 2580 2589 2581 #: react/build/7 47.js:12590 #: react/build/785.js:1 2582 2591 msgid "Last 30 days" 2583 2592 msgstr "" 2584 2593 2585 #: react/build/7 47.js:12594 #: react/build/785.js:1 2586 2595 msgid "View Bookings" 2587 2596 msgstr "" 2588 2597 2589 #: react/build/7 47.js:12598 #: react/build/785.js:1 2590 2599 msgid "SMS Credits" 2591 2600 msgstr "" 2592 2601 2593 #: react/build/7 47.js:12602 #: react/build/785.js:1 2594 2603 msgid "SMS Gateway" 2595 2604 msgstr "" 2596 2605 2597 #: react/build/7 47.js:12606 #: react/build/785.js:1 2598 2607 msgid "Membership" 2599 2608 msgstr "" 2600 2609 2601 #: react/build/7 47.js:12610 #: react/build/785.js:1 2602 2611 msgid "Paid Events" 2603 2612 msgstr "" 2604 2613 2605 #: react/build/7 47.js:12614 #: react/build/785.js:1 2606 2615 msgid "Management" 2607 2616 msgstr "" 2608 2617 2609 #: react/build/7 47.js:12618 #: react/build/785.js:1 2610 2619 msgid "Tips & Tricks" 2611 2620 msgstr "" 2612 2621 2613 #: react/build/7 47.js:12622 #: react/build/785.js:1 2614 2623 msgid "View All" 2615 2624 msgstr "" 2616 2625 2617 #: react/build/7 47.js:12626 #: react/build/785.js:1 2618 2627 msgid "Installed" 2619 2628 msgstr "" 2620 2629 2621 #: react/build/7 47.js:12630 #: react/build/785.js:1 2622 2631 msgid "Install" 2623 2632 msgstr "" 2624 2633 2625 #: react/build/7 47.js:12634 #: react/build/785.js:1 2626 2635 msgid "Activate" 2627 2636 msgstr "" 2628 2637 2629 #: react/build/7 47.js:12638 #: react/build/785.js:1 2630 2639 msgid "Activating..." 2631 2640 msgstr "" 2632 2641 2633 #: react/build/7 47.js:12642 #: react/build/785.js:1 2634 2643 msgid "Downloading..." 2635 2644 msgstr "" 2636 2645 2637 #: react/build/7 47.js:12646 #: react/build/785.js:1 2638 2647 msgid "Other Plugins" 2639 2648 msgstr "" 2640 2649 2641 #: react/build/7 47.js:12650 #: react/build/785.js:1 2642 2651 msgid "Loading..." 2643 2652 msgstr "" … … 2681 2690 2682 2691 #: react/build/843.js:1 2683 #: react/src/components/Modals/Partials/FormTwoFa.jsx:78 2692 #: react/src/components/Modals/Partials/FormLogin.jsx:101 2693 #: react/src/components/Modals/Partials/FormTwoFa.jsx:53 2694 #: react/src/components/Modals/Partials/FormTwoFa.jsx:74 2695 msgid "An unknown error occurred, please try again." 2696 msgstr "" 2697 2698 #: react/build/843.js:1 2699 #: react/src/components/Modals/Partials/FormTwoFa.jsx:61 2700 #: react/src/components/Modals/Partials/FormTwoFa.jsx:82 2701 msgid "An unknown error occurred. Please try again." 2702 msgstr "" 2703 2704 #: react/build/843.js:1 2705 #: react/src/components/Modals/Partials/FormTwoFa.jsx:99 2684 2706 msgid "Select 2FA provider" 2685 2707 msgstr "" 2686 2708 2687 2709 #: react/build/843.js:1 2688 #: react/src/components/Modals/Partials/FormTwoFa.jsx:1 022710 #: react/src/components/Modals/Partials/FormTwoFa.jsx:123 2689 2711 msgid "Enter 2FA authentication code" 2690 2712 msgstr "" 2691 2713 2692 2714 #: react/build/843.js:1 2693 #: react/src/components/Modals/Partials/FormTwoFa.jsx:1 052715 #: react/src/components/Modals/Partials/FormTwoFa.jsx:126 2694 2716 msgid "Enter code" 2695 2717 msgstr "" 2696 2718 2697 2719 #: react/build/843.js:1 2698 #: react/src/components/Modals/Partials/FormTwoFa.jsx:1 222720 #: react/src/components/Modals/Partials/FormTwoFa.jsx:147 2699 2721 msgid "SMS Requested" 2700 2722 msgstr "" 2701 2723 2702 2724 #: react/build/843.js:1 2703 #: react/src/components/Modals/Partials/FormTwoFa.jsx:1 222725 #: react/src/components/Modals/Partials/FormTwoFa.jsx:147 2704 2726 msgid "Request SMS" 2705 2727 msgstr "" 2706 2728 2707 2729 #: react/build/843.js:1 2708 #: react/src/components/Modals/Partials/FormLogin.jsx: 1872709 #: react/src/components/Modals/Partials/FormTwoFa.jsx:1 322730 #: react/src/components/Modals/Partials/FormLogin.jsx:206 2731 #: react/src/components/Modals/Partials/FormTwoFa.jsx:163 2710 2732 msgid "Submit" 2711 2733 msgstr "" 2712 2734 2713 2735 #: react/build/843.js:1 2714 #: react/src/components/Modals/Partials/FormLogin.jsx:11 62736 #: react/src/components/Modals/Partials/FormLogin.jsx:117 2715 2737 msgid "Company domain" 2716 2738 msgstr "" 2717 2739 2718 2740 #: react/build/843.js:1 2719 #: react/src/components/Modals/Partials/FormLogin.jsx:13 62720 #: react/src/components/Modals/Partials/FormLogin.jsx:1 392741 #: react/src/components/Modals/Partials/FormLogin.jsx:137 2742 #: react/src/components/Modals/Partials/FormLogin.jsx:140 2721 2743 msgid "Company login" 2722 2744 msgstr "" 2723 2745 2724 2746 #: react/build/843.js:1 2725 #: react/src/components/Modals/Partials/FormLogin.jsx:15 22726 #: react/src/components/Modals/Partials/FormLogin.jsx:1 552747 #: react/src/components/Modals/Partials/FormLogin.jsx:159 2748 #: react/src/components/Modals/Partials/FormLogin.jsx:162 2727 2749 msgid "User login or email" 2728 2750 msgstr "" 2729 2751 2730 2752 #: react/build/843.js:1 2731 #: react/src/components/Modals/Partials/FormLogin.jsx:1 682732 #: react/src/components/Modals/Partials/FormLogin.jsx:1 712753 #: react/src/components/Modals/Partials/FormLogin.jsx:181 2754 #: react/src/components/Modals/Partials/FormLogin.jsx:184 2733 2755 msgid "Password" 2734 2756 msgstr "" -
simplybook/trunk/composer.json
r3297362 r3313046 1 1 { 2 2 "name": "really-simple-plugins/simplybookme", 3 "version": "3. 0.0",3 "version": "3.1.0", 4 4 "description": "Online booking system plugin for service businesses that lets your customers schedule appointments and pay for your services on your Wordpress site.", 5 5 "type": "wordpress-plugin", -
simplybook/trunk/config/environment.php
r3297362 r3313046 7 7 'plugin' => [ 8 8 'name' => 'SimplyBook.me', 9 'version' => '3. 0.0',9 'version' => '3.1.0', 10 10 'pro' => true, 11 11 'path' => dirname(__DIR__), 12 'base_path' => dirname(__DIR__). '/'. plugin_basename(dirname(__DIR__)) . '.php',13 'assets_path' => dirname(__DIR__). '/assets/',14 'lang_path' => dirname(__DIR__). '/assets/languages/',15 'view_path' => dirname(__DIR__). '/app/views/',16 'feature_path' => dirname(__DIR__). '/app/features/',17 'react_path' => dirname(__DIR__). '/react',12 'base_path' => dirname(__DIR__). DIRECTORY_SEPARATOR . plugin_basename(dirname(__DIR__)) . '.php', 13 'assets_path' => dirname(__DIR__). DIRECTORY_SEPARATOR .'assets' . DIRECTORY_SEPARATOR, 14 'lang_path' => dirname(__DIR__). DIRECTORY_SEPARATOR . 'assets'. DIRECTORY_SEPARATOR . 'languages' . DIRECTORY_SEPARATOR, 15 'view_path' => dirname(__DIR__). DIRECTORY_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'views' . DIRECTORY_SEPARATOR, 16 'feature_path' => dirname(__DIR__). DIRECTORY_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'features' . DIRECTORY_SEPARATOR, 17 'react_path' => dirname(__DIR__). DIRECTORY_SEPARATOR . 'react', 18 18 'dir' => plugin_basename(dirname(__DIR__)), 19 'base_file' => plugin_basename(dirname(__DIR__)) . '/'. plugin_basename(dirname(__DIR__)) . '.php',20 'lang' => plugin_basename(dirname(__DIR__)) . '/assets/languages',19 'base_file' => plugin_basename(dirname(__DIR__)) . DIRECTORY_SEPARATOR . plugin_basename(dirname(__DIR__)) . '.php', 20 'lang' => plugin_basename(dirname(__DIR__)) . DIRECTORY_SEPARATOR . 'assets' . DIRECTORY_SEPARATOR . 'languages', 21 21 'url' => plugin_dir_url(__DIR__), 22 22 'assets_url' => plugin_dir_url(__DIR__).'assets/', … … 112 112 ['key' => 'login:booking.lcn.uk', 'value' => 'login:booking.lcn.uk', 'label' => 'booking.lcn.uk'], 113 113 ['key' => 'login:booking.register365.ie', 'value' => 'login:booking.register365.ie', 'label' => 'booking.register365.ie'], 114 ['key' => 'login:booking.register365.ie', 'value' => 'login:booking.register365.ie', 'label' => 'booking.register365.ie'],115 114 ] 116 115 ], -
simplybook/trunk/config/features.php
r3297362 r3313046 13 13 'dependencies' => [ 14 14 'Service', 15 '\SimplyBook\Services\WidgetTrackingService', 15 16 ], 16 17 ], … … 20 21 'pro' => false, 21 22 'priorityFiles' => [ 22 'Tasks /AbstractTask',23 'Tasks' . DIRECTORY_SEPARATOR . 'AbstractTask', 23 24 ], 24 25 ], … … 28 29 'pro' => false, 29 30 'priorityFiles' => [ 30 'Notices /AbstractNotice',31 'Notices' . DIRECTORY_SEPARATOR . 'AbstractNotice', 31 32 ], 32 33 ], -
simplybook/trunk/config/fields/design.php
r3297362 r3313046 41 41 'type' => 'checkbox', 42 42 'label' => __('RTL', 'simplybook'), 43 'help' => sprintf( 44 /* translators: %s - IS or IS NOT */ 45 __('When selected, writing starts from the right of the page and continues to the left, proceeding from top to bottom for new lines. Your website %s set to RTL.', 'simplybook'), 46 (is_rtl() ? 'IS' : 'IS NOT'), 47 ), 43 'tooltip' => [ 44 'message' => sprintf( 45 /* translators: %s - IS or IS NOT */ 46 __('When selected, writing starts from the right of the page and continues to the left, proceeding from top to bottom for new lines. Your website %s set to RTL.', 'simplybook'), 47 (is_rtl() ? 'IS' : 'IS NOT'), 48 ), 49 'type' => 'info', 50 ], 48 51 'disabled' => false, 49 52 'default' => is_rtl(), … … 55 58 'type' => 'checkbox', 56 59 'label' => __('Allow switch to ADA', 'simplybook'), 57 'help' => __('This adds a button to enable accessibility mode, which increases contrast for visitors with a visual disability.', 'simplybook'), 60 'tooltip' => [ 61 'message' => __('This adds a button to enable accessibility mode, which increases contrast for visitors with a visual disability.', 'simplybook'), 62 'type' => 'info', 63 ], 58 64 'disabled' => false, 59 65 'default' => false, … … 64 70 'group_id' => 'main', 65 71 'type' => 'checkbox', 72 'tooltip' => [ 73 'message' => __('Useful for in-store tablets, so each customer can make a new appointment without data from earlier ones.', 'simplybook'), 74 'type' => 'info', 75 ], 66 76 'label' => __('Clear the session of each widget initialization', 'simplybook'), 67 'help' => __('Useful for in-store tablets, so each customer can make a new appointment without data from earlier ones.', 'simplybook'),68 77 'disabled' => false, 69 78 'default' => true, -
simplybook/trunk/config/fields/general.php
r3297362 r3313046 1 2 1 <?php 3 2 defined( 'ABSPATH' ) or die(); -
simplybook/trunk/config/related.php
r3297362 r3313046 9 9 'slug' => 'really-simple-ssl', 10 10 'options_prefix' => 'rsssl', 11 'activation_slug' => 'really-simple-ssl /rlrsssl-really-simple-ssl.php',11 'activation_slug' => 'really-simple-ssl' . DIRECTORY_SEPARATOR . 'rlrsssl-really-simple-ssl.php', 12 12 'constant_free' => 'rsssl_version', 13 13 'constant_premium' => 'rsssl_pro', … … 20 20 'slug' => 'complianz-gdpr', 21 21 'options_prefix' => 'cmplz', 22 'activation_slug' => 'complianz-gdpr /complianz-gpdr.php',22 'activation_slug' => 'complianz-gdpr' . DIRECTORY_SEPARATOR . 'complianz-gpdr.php', 23 23 'constant_free' => 'cmplz_version', 24 24 'constant_premium' => 'cmplz_premium', … … 32 32 'slug' => 'complianz-terms-conditions', 33 33 'options_prefix' => 'cmplz_tc', 34 'activation_slug' => 'complianz-terms-conditions /complianz-terms-conditions.php',34 'activation_slug' => 'complianz-terms-conditions' . DIRECTORY_SEPARATOR . 'complianz-terms-conditions.php', 35 35 'constant_free' => 'cmplz_tc_version', 36 36 'create' => admin_url('admin.php?page=terms-conditions'), -
simplybook/trunk/readme.txt
r3297401 r3313046 1 1 === SimplyBook.me - Booking and reservations calendar === 2 Contributors: simplybook, reallysimpleplugins, wimbraam, jeroenvdk 2 Contributors: simplybook, reallysimpleplugins, wimbraam, jeroenvdk, markwolters, rvvelthuijsen 3 3 Donate link: https://simplybook.me/ 4 4 Tags: Booking, Calendar, Scheduling, Reservations, Appointments … … 6 6 Tested up to: 6.8 7 7 Requires PHP: 7.4 8 Stable tag: 3. 0.08 Stable tag: 3.1.0 9 9 License: GPLv2 or later 10 10 License URI: http://www.gnu.org/licenses/gpl-2.0.html … … 41 41 42 42 SimplyBook.me is an advanced online booking system that creates a professional booking widget on your WordPress site where your clients can book your services at any time. You will then have access to an admin interface where you can manage your bookings and settings. On top of that you will get an admin app where you can manage all your bookings and accept payments on the go.Thousands of clients all over the world have selected our booking system to make their business easy and comfortable to use (see our testimonials). SimplyBook.me provides users with a broad range of features so that you can tailor the system to your needs, irrespective of what industry you are in. 43 For a more detailed understanding of the SimplyBook.me service, you can explore at the following link: 44 * <a href="https://simplybook.me/?ref=wordpress" rel="friend" title="SimplyBook" target="_blank">https://simplybook.me/?ref=wordpress</a> 43 For a more detailed understanding of the SimplyBook.me service, you can explore at the following link: <a href="https://simplybook.me/?ref=wordpress" rel="friend" title="SimplyBook" target="_blank">https://simplybook.me/</a> 45 44 46 45 This plugin is developed by SimplyBook.me, is ISO27001 compliant and utilizes its API to transmit and store all information, including settings and details of bookings, as well as other personal client data, directly on SimplyBook.me. Before using the plugin, we recommend that you familiarize yourself with the privacy policy and terms of use of SimplyBook.me at the following links: … … 61 60 Additionally, an online booking system offers powerful analytics that provide deep insights into customer behaviors and preferences. This data is essential for making informed adjustments to service offerings and planning effective marketing strategies. Last but not least it´s the best way to boost your sales by offering service add-ons and products for sale in the booking process, by sending tailored marketing email campaigns, offering coupons on less busy days, by prompting tips during check out and so much more, the options are endless! 62 61 63 64 62 == Installation == 65 63 66 = <a href="https://help.simplybook.me/index.php/WordPress_integration" rel="friend" title="SimplyBook Wiki" target="_blank">Detailed instructions with photos here </a> =64 = <a href="https://help.simplybook.me/index.php/WordPress_integration" rel="friend" title="SimplyBook Wiki" target="_blank">Detailed instructions with photos here</a> = 67 65 68 66 … … 91 89 92 90 == Changelog == 91 = 3.1.0 = 92 * Added: markwolters and rvvelthuijsen are added as contributors. 93 * Added: Setting help texts are now shown in tooltips. 94 * Changed: Prompts to publish the widget now responds to user actions in posts. 95 * Changed: Removed unnecessary files to make the plugin package smaller. 96 * Removed: Duplicate domain option from sign-in dropdown. 97 * Fixed: Non-email usernames now accepted at login. 98 * Fixed: Console error in onboarding-start resolved. 99 * Fixed: Miscellaneous 2FA login console errors resolved. 100 * Fixed: Gutenberg block now registers correctly with API V2, resolving a console notice. 101 * Fixed: Error message now correctly shown when an invalid 2FA code is entered. 102 * Fixed: Demo widget notice now only appears when the loaded widget is actually a demo. 103 * Fixed: Unexpectedly losing connection with SimplyBook.me is now resolved. 93 104 94 105 = 3.0.0 = 95 * Major refactor of the plugin. 106 * Major refactor of the plugin by Really Simple Plugins. 107 * Added: reallysimpleplugins, wimbraam and jeroenvdk are added as contributors. 96 108 97 109 = 2.3 = -
simplybook/trunk/simplybook.php
r3297362 r3313046 8 8 * @wordpress-plugin 9 9 * Plugin Name: SimplyBook.me - Booking and reservations calendar 10 * Plugin URI: https://help.simplybook.me/index.php /WordPress_plugn10 * Plugin URI: https://help.simplybook.me/index.php?title=WordPress_integration 11 11 * Description: Simply add a booking calendar to your site to schedule bookings, reservations, appointments and to collect payments. 12 * Version: 3. 0.012 * Version: 3.1.0 13 13 * Requires at least: 6.0 14 14 * Requires PHP: 7.4 -
simplybook/trunk/vendor/composer/autoload_classmap.php
r3297362 r3313046 113 113 'SimplyBook\\Controllers\\SettingsController' => $baseDir . '/app/controllers/SettingsController.php', 114 114 'SimplyBook\\Controllers\\WidgetController' => $baseDir . '/app/controllers/WidgetController.php', 115 'SimplyBook\\Controllers\\WidgetTrackingController' => $baseDir . '/app/controllers/WidgetTrackingController.php', 115 116 'SimplyBook\\Exceptions\\ApiException' => $baseDir . '/app/exceptions/ApiException.php', 116 117 'SimplyBook\\Exceptions\\BuilderException' => $baseDir . '/app/exceptions/BuilderException.php', … … 160 161 'SimplyBook\\Services\\StatisticsService' => $baseDir . '/app/services/StatisticsService.php', 161 162 'SimplyBook\\Services\\SubscriptionDataService' => $baseDir . '/app/services/SubscriptionDataService.php', 163 'SimplyBook\\Services\\WidgetTrackingService' => $baseDir . '/app/services/WidgetTrackingService.php', 162 164 'SimplyBook\\Traits\\HasAllowlistControl' => $baseDir . '/app/traits/HasAllowlistControl.php', 163 165 'SimplyBook\\Traits\\HasNonces' => $baseDir . '/app/traits/HasNonces.php', -
simplybook/trunk/vendor/composer/autoload_static.php
r3297362 r3313046 253 253 'SimplyBook\\Controllers\\SettingsController' => __DIR__ . '/../..' . '/app/controllers/SettingsController.php', 254 254 'SimplyBook\\Controllers\\WidgetController' => __DIR__ . '/../..' . '/app/controllers/WidgetController.php', 255 'SimplyBook\\Controllers\\WidgetTrackingController' => __DIR__ . '/../..' . '/app/controllers/WidgetTrackingController.php', 255 256 'SimplyBook\\Exceptions\\ApiException' => __DIR__ . '/../..' . '/app/exceptions/ApiException.php', 256 257 'SimplyBook\\Exceptions\\BuilderException' => __DIR__ . '/../..' . '/app/exceptions/BuilderException.php', … … 300 301 'SimplyBook\\Services\\StatisticsService' => __DIR__ . '/../..' . '/app/services/StatisticsService.php', 301 302 'SimplyBook\\Services\\SubscriptionDataService' => __DIR__ . '/../..' . '/app/services/SubscriptionDataService.php', 303 'SimplyBook\\Services\\WidgetTrackingService' => __DIR__ . '/../..' . '/app/services/WidgetTrackingService.php', 302 304 'SimplyBook\\Traits\\HasAllowlistControl' => __DIR__ . '/../..' . '/app/traits/HasAllowlistControl.php', 303 305 'SimplyBook\\Traits\\HasNonces' => __DIR__ . '/../..' . '/app/traits/HasNonces.php', -
simplybook/trunk/vendor/composer/installed.php
r3297362 r3313046 2 2 'root' => array( 3 3 'name' => 'really-simple-plugins/simplybookme', 4 'pretty_version' => '3. 0.0',5 'version' => '3. 0.0.0',4 'pretty_version' => '3.1.0', 5 'version' => '3.1.0.0', 6 6 'reference' => null, 7 7 'type' => 'wordpress-plugin', … … 63 63 ), 64 64 'really-simple-plugins/simplybookme' => array( 65 'pretty_version' => '3. 0.0',66 'version' => '3. 0.0.0',65 'pretty_version' => '3.1.0', 66 'version' => '3.1.0.0', 67 67 'reference' => null, 68 68 'type' => 'wordpress-plugin', -
simplybook/trunk/vendor/composer/jetpack_autoload_classmap.php
r3297362 r3313046 424 424 ), 425 425 'SimplyBook\\Builders\\CompanyBuilder' => array( 426 'version' => '3. 0.0.0',426 'version' => '3.1.0.0', 427 427 'path' => $baseDir . '/app/support/builders/CompanyBuilder.php' 428 428 ), 429 429 'SimplyBook\\Builders\\PageBuilder' => array( 430 'version' => '3. 0.0.0',430 'version' => '3.1.0.0', 431 431 'path' => $baseDir . '/app/support/builders/PageBuilder.php' 432 432 ), 433 433 'SimplyBook\\Builders\\WidgetScriptBuilder' => array( 434 'version' => '3. 0.0.0',434 'version' => '3.1.0.0', 435 435 'path' => $baseDir . '/app/support/builders/WidgetScriptBuilder.php' 436 436 ), 437 437 'SimplyBook\\Controllers\\AdminController' => array( 438 'version' => '3. 0.0.0',438 'version' => '3.1.0.0', 439 439 'path' => $baseDir . '/app/controllers/AdminController.php' 440 440 ), 441 441 'SimplyBook\\Controllers\\BlockController' => array( 442 'version' => '3. 0.0.0',442 'version' => '3.1.0.0', 443 443 'path' => $baseDir . '/app/controllers/BlockController.php' 444 444 ), 445 445 'SimplyBook\\Controllers\\CapabilityController' => array( 446 'version' => '3. 0.0.0',446 'version' => '3.1.0.0', 447 447 'path' => $baseDir . '/app/controllers/CapabilityController.php' 448 448 ), 449 449 'SimplyBook\\Controllers\\DashboardController' => array( 450 'version' => '3. 0.0.0',450 'version' => '3.1.0.0', 451 451 'path' => $baseDir . '/app/controllers/DashboardController.php' 452 452 ), 453 453 'SimplyBook\\Controllers\\DesignSettingsController' => array( 454 'version' => '3. 0.0.0',454 'version' => '3.1.0.0', 455 455 'path' => $baseDir . '/app/controllers/DesignSettingsController.php' 456 456 ), 457 457 'SimplyBook\\Controllers\\ReviewController' => array( 458 'version' => '3. 0.0.0',458 'version' => '3.1.0.0', 459 459 'path' => $baseDir . '/app/controllers/ReviewController.php' 460 460 ), 461 461 'SimplyBook\\Controllers\\ScheduleController' => array( 462 'version' => '3. 0.0.0',462 'version' => '3.1.0.0', 463 463 'path' => $baseDir . '/app/controllers/ScheduleController.php' 464 464 ), 465 465 'SimplyBook\\Controllers\\ServicesController' => array( 466 'version' => '3. 0.0.0',466 'version' => '3.1.0.0', 467 467 'path' => $baseDir . '/app/controllers/ServicesController.php' 468 468 ), 469 469 'SimplyBook\\Controllers\\SettingsController' => array( 470 'version' => '3. 0.0.0',470 'version' => '3.1.0.0', 471 471 'path' => $baseDir . '/app/controllers/SettingsController.php' 472 472 ), 473 473 'SimplyBook\\Controllers\\WidgetController' => array( 474 'version' => '3. 0.0.0',474 'version' => '3.1.0.0', 475 475 'path' => $baseDir . '/app/controllers/WidgetController.php' 476 476 ), 477 'SimplyBook\\Controllers\\WidgetTrackingController' => array( 478 'version' => '3.1.0.0', 479 'path' => $baseDir . '/app/controllers/WidgetTrackingController.php' 480 ), 477 481 'SimplyBook\\Exceptions\\ApiException' => array( 478 'version' => '3. 0.0.0',482 'version' => '3.1.0.0', 479 483 'path' => $baseDir . '/app/exceptions/ApiException.php' 480 484 ), 481 485 'SimplyBook\\Exceptions\\BuilderException' => array( 482 'version' => '3. 0.0.0',486 'version' => '3.1.0.0', 483 487 'path' => $baseDir . '/app/exceptions/BuilderException.php' 484 488 ), 485 489 'SimplyBook\\Exceptions\\RestDataException' => array( 486 'version' => '3. 0.0.0',490 'version' => '3.1.0.0', 487 491 'path' => $baseDir . '/app/exceptions/RestDataException.php' 488 492 ), 489 493 'SimplyBook\\Exceptions\\SettingsException' => array( 490 'version' => '3. 0.0.0',494 'version' => '3.1.0.0', 491 495 'path' => $baseDir . '/app/exceptions/SettingsException.php' 492 496 ), 493 497 'SimplyBook\\Helpers\\Event' => array( 494 'version' => '3. 0.0.0',498 'version' => '3.1.0.0', 495 499 'path' => $baseDir . '/app/support/helpers/Event.php' 496 500 ), 497 501 'SimplyBook\\Helpers\\FeatureHelper' => array( 498 'version' => '3. 0.0.0',502 'version' => '3.1.0.0', 499 503 'path' => $baseDir . '/app/support/helpers/FeatureHelper.php' 500 504 ), 501 505 'SimplyBook\\Helpers\\Request' => array( 502 'version' => '3. 0.0.0',506 'version' => '3.1.0.0', 503 507 'path' => $baseDir . '/app/support/helpers/Request.php' 504 508 ), 505 509 'SimplyBook\\Helpers\\Storage' => array( 506 'version' => '3. 0.0.0',510 'version' => '3.1.0.0', 507 511 'path' => $baseDir . '/app/support/helpers/Storage.php' 508 512 ), 509 513 'SimplyBook\\Helpers\\Uninstall' => array( 510 'version' => '3. 0.0.0',514 'version' => '3.1.0.0', 511 515 'path' => $baseDir . '/app/support/helpers/Uninstall.php' 512 516 ), 513 517 'SimplyBook\\Http\\ApiClient' => array( 514 'version' => '3. 0.0.0',518 'version' => '3.1.0.0', 515 519 'path' => $baseDir . '/app/http/ApiClient.php' 516 520 ), 517 521 'SimplyBook\\Http\\DTO\\ApiResponseDTO' => array( 518 'version' => '3. 0.0.0',522 'version' => '3.1.0.0', 519 523 'path' => $baseDir . '/app/http/dto/ApiResponseDTO.php' 520 524 ), 521 525 'SimplyBook\\Http\\Endpoints\\BlockEndpoints' => array( 522 'version' => '3. 0.0.0',526 'version' => '3.1.0.0', 523 527 'path' => $baseDir . '/app/http/endpoints/BlockEndpoints.php' 524 528 ), 525 529 'SimplyBook\\Http\\Endpoints\\CompanyRegistrationEndpoint' => array( 526 'version' => '3. 0.0.0',530 'version' => '3.1.0.0', 527 531 'path' => $baseDir . '/app/http/endpoints/CompanyRegistrationEndpoint.php' 528 532 ), 529 533 'SimplyBook\\Http\\Endpoints\\DomainEndpoint' => array( 530 'version' => '3. 0.0.0',534 'version' => '3.1.0.0', 531 535 'path' => $baseDir . '/app/http/endpoints/DomainEndpoint.php' 532 536 ), 533 537 'SimplyBook\\Http\\Endpoints\\LogOutEndpoint' => array( 534 'version' => '3. 0.0.0',538 'version' => '3.1.0.0', 535 539 'path' => $baseDir . '/app/http/endpoints/LogOutEndpoint.php' 536 540 ), 537 541 'SimplyBook\\Http\\Endpoints\\LoginUrlEndpoint' => array( 538 'version' => '3. 0.0.0',542 'version' => '3.1.0.0', 539 543 'path' => $baseDir . '/app/http/endpoints/LoginUrlEndpoint.php' 540 544 ), 541 545 'SimplyBook\\Http\\Endpoints\\ProvidersEndpoint' => array( 542 'version' => '3. 0.0.0',546 'version' => '3.1.0.0', 543 547 'path' => $baseDir . '/app/http/endpoints/ProvidersEndpoint.php' 544 548 ), 545 549 'SimplyBook\\Http\\Endpoints\\PublicThemeListEndpoint' => array( 546 'version' => '3. 0.0.0',550 'version' => '3.1.0.0', 547 551 'path' => $baseDir . '/app/http/endpoints/PublicThemeListEndpoint.php' 548 552 ), 549 553 'SimplyBook\\Http\\Endpoints\\RelatedPluginEndpoints' => array( 550 'version' => '3. 0.0.0',554 'version' => '3.1.0.0', 551 555 'path' => $baseDir . '/app/http/endpoints/RelatedPluginEndpoints.php' 552 556 ), 553 557 'SimplyBook\\Http\\Endpoints\\RemotePluginsEndpoint' => array( 554 'version' => '3. 0.0.0',558 'version' => '3.1.0.0', 555 559 'path' => $baseDir . '/app/http/endpoints/RemotePluginsEndpoint.php' 556 560 ), 557 561 'SimplyBook\\Http\\Endpoints\\ServicesEndpoint' => array( 558 'version' => '3. 0.0.0',562 'version' => '3.1.0.0', 559 563 'path' => $baseDir . '/app/http/endpoints/ServicesEndpoint.php' 560 564 ), 561 565 'SimplyBook\\Http\\Endpoints\\SettingEndpoints' => array( 562 'version' => '3. 0.0.0',566 'version' => '3.1.0.0', 563 567 'path' => $baseDir . '/app/http/endpoints/SettingEndpoints.php' 564 568 ), 565 569 'SimplyBook\\Http\\Endpoints\\StatisticsEndpoint' => array( 566 'version' => '3. 0.0.0',570 'version' => '3.1.0.0', 567 571 'path' => $baseDir . '/app/http/endpoints/StatisticsEndpoint.php' 568 572 ), 569 573 'SimplyBook\\Http\\Endpoints\\SubscriptionEndpoints' => array( 570 'version' => '3. 0.0.0',574 'version' => '3.1.0.0', 571 575 'path' => $baseDir . '/app/http/endpoints/SubscriptionEndpoints.php' 572 576 ), 573 577 'SimplyBook\\Http\\Endpoints\\TipsTricksEndpoint' => array( 574 'version' => '3. 0.0.0',578 'version' => '3.1.0.0', 575 579 'path' => $baseDir . '/app/http/endpoints/TipsTricksEndpoint.php' 576 580 ), 577 581 'SimplyBook\\Http\\Endpoints\\WaitForRegistrationEndpoint' => array( 578 'version' => '3. 0.0.0',582 'version' => '3.1.0.0', 579 583 'path' => $baseDir . '/app/http/endpoints/WaitForRegistrationEndpoint.php' 580 584 ), 581 585 'SimplyBook\\Http\\Endpoints\\WidgetEndpoint' => array( 582 'version' => '3. 0.0.0',586 'version' => '3.1.0.0', 583 587 'path' => $baseDir . '/app/http/endpoints/WidgetEndpoint.php' 584 588 ), 585 589 'SimplyBook\\Http\\JsonRpcClient' => array( 586 'version' => '3. 0.0.0',590 'version' => '3.1.0.0', 587 591 'path' => $baseDir . '/app/http/JsonRpcClient.php' 588 592 ), 589 593 'SimplyBook\\Interfaces\\ControllerInterface' => array( 590 'version' => '3. 0.0.0',594 'version' => '3.1.0.0', 591 595 'path' => $baseDir . '/app/interfaces/ControllerInterface.php' 592 596 ), 593 597 'SimplyBook\\Interfaces\\FeatureInterface' => array( 594 'version' => '3. 0.0.0',598 'version' => '3.1.0.0', 595 599 'path' => $baseDir . '/app/interfaces/FeatureInterface.php' 596 600 ), 597 601 'SimplyBook\\Interfaces\\MultiEndpointInterface' => array( 598 'version' => '3. 0.0.0',602 'version' => '3.1.0.0', 599 603 'path' => $baseDir . '/app/interfaces/MultiEndpointInterface.php' 600 604 ), 601 605 'SimplyBook\\Interfaces\\NoticeInterface' => array( 602 'version' => '3. 0.0.0',606 'version' => '3.1.0.0', 603 607 'path' => $baseDir . '/app/interfaces/NoticeInterface.php' 604 608 ), 605 609 'SimplyBook\\Interfaces\\ProviderInterface' => array( 606 'version' => '3. 0.0.0',610 'version' => '3.1.0.0', 607 611 'path' => $baseDir . '/app/interfaces/ProviderInterface.php' 608 612 ), 609 613 'SimplyBook\\Interfaces\\SingleEndpointInterface' => array( 610 'version' => '3. 0.0.0',614 'version' => '3.1.0.0', 611 615 'path' => $baseDir . '/app/interfaces/SingleEndpointInterface.php' 612 616 ), 613 617 'SimplyBook\\Interfaces\\TaskInterface' => array( 614 'version' => '3. 0.0.0',618 'version' => '3.1.0.0', 615 619 'path' => $baseDir . '/app/interfaces/TaskInterface.php' 616 620 ), 617 621 'SimplyBook\\Managers\\ControllerManager' => array( 618 'version' => '3. 0.0.0',622 'version' => '3.1.0.0', 619 623 'path' => $baseDir . '/app/managers/ControllerManager.php' 620 624 ), 621 625 'SimplyBook\\Managers\\EndpointManager' => array( 622 'version' => '3. 0.0.0',626 'version' => '3.1.0.0', 623 627 'path' => $baseDir . '/app/managers/EndpointManager.php' 624 628 ), 625 629 'SimplyBook\\Managers\\FeatureManager' => array( 626 'version' => '3. 0.0.0',630 'version' => '3.1.0.0', 627 631 'path' => $baseDir . '/app/managers/FeatureManager.php' 628 632 ), 629 633 'SimplyBook\\Managers\\ProviderManager' => array( 630 'version' => '3. 0.0.0',634 'version' => '3.1.0.0', 631 635 'path' => $baseDir . '/app/managers/ProviderManager.php' 632 636 ), 633 637 'SimplyBook\\Providers\\AppServiceProvider' => array( 634 'version' => '3. 0.0.0',638 'version' => '3.1.0.0', 635 639 'path' => $baseDir . '/app/providers/AppServiceProvider.php' 636 640 ), 637 641 'SimplyBook\\Providers\\Provider' => array( 638 'version' => '3. 0.0.0',642 'version' => '3.1.0.0', 639 643 'path' => $baseDir . '/app/providers/Provider.php' 640 644 ), 641 645 'SimplyBook\\Services\\CapabilityService' => array( 642 'version' => '3. 0.0.0',646 'version' => '3.1.0.0', 643 647 'path' => $baseDir . '/app/services/CapabilityService.php' 644 648 ), 645 649 'SimplyBook\\Services\\DesignSettingsService' => array( 646 'version' => '3. 0.0.0',650 'version' => '3.1.0.0', 647 651 'path' => $baseDir . '/app/services/DesignSettingsService.php' 648 652 ), 649 653 'SimplyBook\\Services\\LoginUrlService' => array( 650 'version' => '3. 0.0.0',654 'version' => '3.1.0.0', 651 655 'path' => $baseDir . '/app/services/LoginUrlService.php' 652 656 ), 653 657 'SimplyBook\\Services\\RelatedPluginService' => array( 654 'version' => '3. 0.0.0',658 'version' => '3.1.0.0', 655 659 'path' => $baseDir . '/app/services/RelatedPluginService.php' 656 660 ), 657 661 'SimplyBook\\Services\\StatisticsService' => array( 658 'version' => '3. 0.0.0',662 'version' => '3.1.0.0', 659 663 'path' => $baseDir . '/app/services/StatisticsService.php' 660 664 ), 661 665 'SimplyBook\\Services\\SubscriptionDataService' => array( 662 'version' => '3. 0.0.0',666 'version' => '3.1.0.0', 663 667 'path' => $baseDir . '/app/services/SubscriptionDataService.php' 664 668 ), 669 'SimplyBook\\Services\\WidgetTrackingService' => array( 670 'version' => '3.1.0.0', 671 'path' => $baseDir . '/app/services/WidgetTrackingService.php' 672 ), 665 673 'SimplyBook\\Traits\\HasAllowlistControl' => array( 666 'version' => '3. 0.0.0',674 'version' => '3.1.0.0', 667 675 'path' => $baseDir . '/app/traits/HasAllowlistControl.php' 668 676 ), 669 677 'SimplyBook\\Traits\\HasNonces' => array( 670 'version' => '3. 0.0.0',678 'version' => '3.1.0.0', 671 679 'path' => $baseDir . '/app/traits/HasNonces.php' 672 680 ), 673 681 'SimplyBook\\Traits\\HasRestAccess' => array( 674 'version' => '3. 0.0.0',682 'version' => '3.1.0.0', 675 683 'path' => $baseDir . '/app/traits/HasRestAccess.php' 676 684 ), 677 685 'SimplyBook\\Traits\\HasUserAccess' => array( 678 'version' => '3. 0.0.0',686 'version' => '3.1.0.0', 679 687 'path' => $baseDir . '/app/traits/HasUserAccess.php' 680 688 ), 681 689 'SimplyBook\\Traits\\HasViews' => array( 682 'version' => '3. 0.0.0',690 'version' => '3.1.0.0', 683 691 'path' => $baseDir . '/app/traits/HasViews.php' 684 692 ), 685 693 'SimplyBook\\Traits\\LegacyHelper' => array( 686 'version' => '3. 0.0.0',694 'version' => '3.1.0.0', 687 695 'path' => $baseDir . '/app/traits/LegacyHelper.php' 688 696 ), 689 697 'SimplyBook\\Traits\\LegacyLoad' => array( 690 'version' => '3. 0.0.0',698 'version' => '3.1.0.0', 691 699 'path' => $baseDir . '/app/traits/LegacyLoad.php' 692 700 ), 693 701 'SimplyBook\\Traits\\LegacySave' => array( 694 'version' => '3. 0.0.0',702 'version' => '3.1.0.0', 695 703 'path' => $baseDir . '/app/traits/LegacySave.php' 696 704 ), 697 705 'SimplyBook\\Utility\\StringUtility' => array( 698 'version' => '3. 0.0.0',706 'version' => '3.1.0.0', 699 707 'path' => $baseDir . '/app/support/utility/StringUtility.php' 700 708 ), -
simplybook/trunk/vendor/composer/jetpack_autoload_filemap.php
r3297362 r3313046 28 28 ), 29 29 '5bc9c041796e4348fc427e9381e014b6' => array( 30 'version' => '3. 0.0.0',30 'version' => '3.1.0.0', 31 31 'path' => $baseDir . '/app/App.php' 32 32 ), 33 33 '2fd0677d8d23e6e7b0156d2f7d3368d4' => array( 34 'version' => '3. 0.0.0',34 'version' => '3.1.0.0', 35 35 'path' => $baseDir . '/app/Plugin.php' 36 36 ), 37 37 'dac67ee3b45b7fdd52cfb86981c8c3d0' => array( 38 'version' => '3. 0.0.0',38 'version' => '3.1.0.0', 39 39 'path' => $baseDir . '/helpers.php' 40 40 ),
Note: See TracChangeset
for help on using the changeset viewer.