Changeset 2901887
- Timestamp:
- 04/20/2023 03:43:09 PM (3 years ago)
- Location:
- cartboss/trunk
- Files:
-
- 6 added
- 47 edited
-
README.txt (modified) (2 diffs)
-
admin/partials/cartboss-admin-display.php (modified) (1 diff)
-
cartboss.php (modified) (2 diffs)
-
changelog.txt (modified) (1 diff)
-
classes/ajax/class-cartboss-ajax-checkout-fields.php (added)
-
classes/ajax/class-cartboss-ajax-checkout.php (modified) (5 diffs)
-
classes/ajax/class-cartboss-ajax.php (modified) (1 diff)
-
classes/class-cartboss-database.php (modified) (1 diff)
-
classes/class-cartboss-utils.php (modified) (1 diff)
-
classes/cron/class-cartboss-cron-clean.php (modified) (1 diff)
-
classes/handlers/class-cartboss-handler-order-create.php (modified) (1 diff)
-
classes/handlers/class-cartboss-handler-order-restore.php (modified) (10 diffs)
-
classes/handlers/class-cartboss-handler-prefill-checkout-fields.php (modified) (1 diff)
-
classes/handlers/class-cartboss-handler-session-reset.php (modified) (1 diff)
-
classes/libs/class-cartboss-session-helper.php (added)
-
classes/managers/class-cartboss-meta-storage-manager.php (added)
-
classes/managers/class-cartboss-order-database-manager.php (added)
-
classes/managers/class-cartboss-session-manager.php (modified) (1 diff)
-
classes/managers/class-cartboss-token-database-manager.php (modified) (1 diff)
-
classes/models/class-cartboss-order-model.php (modified) (6 diffs)
-
composer.lock (modified) (11 diffs)
-
config/class-cartboss-constants.php (modified) (1 diff)
-
config/class-cartboss-options.php (modified) (2 diffs)
-
includes/class-cartboss-activator.php (modified) (1 diff)
-
includes/class-cartboss-deactivator.php (modified) (1 diff)
-
includes/class-cartboss.php (modified) (6 diffs)
-
public/class-cartboss-public.php (modified) (1 diff)
-
public/js/cartboss-checkout2.js (added)
-
public/js/cartboss-checkout2.min.js (added)
-
vendor/composer/installed.json (modified) (15 diffs)
-
vendor/composer/installed.php (modified) (3 diffs)
-
vendor/jaybizzle/crawler-detect/.github/workflows/test.yml (modified) (1 diff)
-
vendor/jaybizzle/crawler-detect/src/CrawlerDetect.php (modified) (1 diff)
-
vendor/symfony/property-access/LICENSE (modified) (1 diff)
-
vendor/symfony/property-info/Extractor/PhpDocExtractor.php (modified) (2 diffs)
-
vendor/symfony/property-info/Extractor/PhpStanExtractor.php (modified) (2 diffs)
-
vendor/symfony/property-info/LICENSE (modified) (1 diff)
-
vendor/symfony/property-info/Util/PhpDocTypeHelper.php (modified) (1 diff)
-
vendor/symfony/serializer/Encoder/CsvEncoder.php (modified) (1 diff)
-
vendor/symfony/serializer/LICENSE (modified) (1 diff)
-
vendor/symfony/serializer/Normalizer/AbstractNormalizer.php (modified) (1 diff)
-
vendor/symfony/serializer/Normalizer/BackedEnumNormalizer.php (modified) (1 diff)
-
vendor/symfony/serializer/Normalizer/CustomNormalizer.php (modified) (2 diffs)
-
vendor/symfony/serializer/Normalizer/DataUriNormalizer.php (modified) (1 diff)
-
vendor/symfony/serializer/Normalizer/DateIntervalNormalizer.php (modified) (2 diffs)
-
vendor/symfony/serializer/Normalizer/DateTimeNormalizer.php (modified) (2 diffs)
-
vendor/symfony/serializer/Normalizer/DateTimeZoneNormalizer.php (modified) (2 diffs)
-
vendor/symfony/serializer/Normalizer/DenormalizerInterface.php (modified) (2 diffs)
-
vendor/symfony/serializer/Normalizer/GetSetMethodNormalizer.php (modified) (1 diff)
-
vendor/symfony/serializer/Normalizer/NormalizerInterface.php (modified) (2 diffs)
-
vendor/symfony/serializer/Serializer.php (modified) (2 diffs)
-
vendor/symfony/string/AbstractUnicodeString.php (modified) (1 diff)
-
vendor/symfony/string/LICENSE (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
cartboss/trunk/README.txt
r2897230 r2901887 1 === SMS Abandoned Cart Recovery -CartBoss ===1 === SMS Abandoned Cart Recovery ✦ CartBoss === 2 2 Contributors: Cart DATA Ltd. 3 3 Donate link: https://www.cartboss.io … … 14 14 Boost your sales by recovering abandoned carts with pre-prepared & translated text messages! 15 15 16 17 16 == Description == 18 17 🔥**Start sending abandoned cart text messages (SMS), improve your customer lifetime value, and reduce dead stock in less than 5 minutes** 19 18 20 19 Boost your sales by recovering abandoned carts with pre-prepared & translated text messages. 21 ==================== 20 21 Recover lost sales, increase customer loyalty, and reduce inventory waste with the power of SMS! In just under 5 minutes, you can start using our SMS abandoned cart solution to achieve all these goals without having to worry about writing messages, translating them, or setting up discount codes. Our user-friendly system works right out of the box, automatically detecting the recipient's language and generating discounts on the spot. 22 22 23 23 ## When we say Plug & Play, we mean it! -
cartboss/trunk/admin/partials/cartboss-admin-display.php
r2718232 r2901887 46 46 <li>Latest version: <?php echo Cartboss_Options::get_latest_version() ?></li> 47 47 <li>API key valid: <?php echo Cartboss_Options::get_is_valid_api_key() ? "✅️" : "❌"; ?></li> 48 <li>Sending events: <?php echo Cartboss_Options::is_enabled() ? "✅️" : "❌"; ?></li>49 48 </ul> 50 49 </div> -
cartboss/trunk/cartboss.php
r2847751 r2901887 17 17 * Plugin URI: https://www.cartboss.io 18 18 * Description: Send abandoned cart notifications, offer discounts and special offers - all with text messages. 19 * Version: 3.6. 119 * Version: 3.6.5 20 20 * Author: Cart DATA Ltd. 21 21 * Author URI: https://www.cartboss.io … … 46 46 */ 47 47 48 define('CARTBOSS_VERSION', '3.6. 1');48 define('CARTBOSS_VERSION', '3.6.5'); 49 49 define('CARTBOSS_PLUGIN_NAME', plugin_basename(__FILE__)); 50 50 -
cartboss/trunk/changelog.txt
r2847751 r2901887 1 1 # Changelog 2 2 All notable changes to this project will be documented in this file. 3 4 ## [3.6.5] - 02-03-2023 5 - meta data fix 3 6 4 7 ## [3.6.1] - 04-01-2023 -
cartboss/trunk/classes/ajax/class-cartboss-ajax-checkout.php
r2847751 r2901887 2 2 3 3 4 use League\Uri\Uri; 4 5 use League\Uri\UriModifier; 5 6 … … 28 29 } 29 30 30 $action = Cartboss_Utils::get_array_value($_POST, 'action');31 if ($action != $this->action) {32 wp_send_json_error(array('message' => "Invalid action for this handler"));33 34 return;35 }36 37 if (empty(WC()->session)) {38 Cartboss_Api_manager::instance()->log_error("[Checkout AJAX Handler]: WC()->session not initialized");39 40 wp_send_json_error(array('message' => "Session inaccessible"));41 42 return;43 }44 45 31 if (empty(WC()->cart)) { 46 32 Cartboss_Api_manager::instance()->log_error("[Checkout AJAX Handler]: WC()->cart not initialized"); … … 51 37 } 52 38 53 if ( WC()->cart->is_empty()) {54 wp_send_json_ success(array('message' => "Cart empty"));39 if (!Cartboss_Utils::is_cart_full()) { 40 wp_send_json_error(array('message' => "Cart empty")); 55 41 56 42 return; … … 128 114 $cb_order->shipping_address = $cb_address; 129 115 116 $js_checkout_redirect_url = Cartboss_Utils::get_array_value($_POST, 'checkout_redirect_url', wp_get_referer()); 117 $js_checkout_host = Uri::createFromString($js_checkout_redirect_url)->getHost(); 118 130 119 // checkout url 131 120 $checkout_url = Cartboss_Hook_Handler_Order_Restore::get_order_restore_url(); 121 if (!str_contains($checkout_url, $js_checkout_host)) { 122 $checkout_url = Uri::createFromString($checkout_url); 123 $checkout_url = $checkout_url->withHost($js_checkout_host); 124 } 125 132 126 $checkout_url = UriModifier::appendQuery($checkout_url, Cartboss_Session_Manager::QUERY_VAR . '=' . $session_token); 133 127 $cb_order->checkout_url = $checkout_url->jsonSerialize(); 134 128 135 129 // metadata 136 $cb_order->metadata = array( 137 Cartboss_Constants::CB_METADATA_CHECKOUT_REDIRECT_URL => Cartboss_Utils::get_array_value($_POST, 'current_url', wp_get_referer()), 138 Cartboss_Constants::CB_METADATA_LOCAL_SESSION_ID => WC()->session->get_customer_id(), 130 $metadata = array( 131 Cartboss_Constants::CB_METADATA_CHECKOUT_REDIRECT_URL => $js_checkout_redirect_url, 139 132 Cartboss_Constants::CB_METADATA_ORDER_COMMENTS => sanitize_text_field(Cartboss_Utils::get_array_value($_POST, 'order_comments', '')), 140 133 Cartboss_Constants::CB_METADATA_ACCEPTS_MARKETING => Cartboss_Utils::is_true(Cartboss_Utils::get_array_value($_POST, 'cartboss_accepts_marketing', false)), 141 // Cartboss_Constants::CB_METADATA_SHIP_TO_DIFFERENT_ADDRESS => Cartboss_Utils::is_true(Cartboss_Utils::get_array_value($_POST, 'ship_to_different_address', false)),134 Cartboss_Constants::CB_METADATA_EXTRA_FIELDS => serialize(stripslashes(Cartboss_Utils::get_array_value($_POST, 'extra_fields'))), 142 135 ); 136 137 try { 138 if (isset(WC()->session)) { 139 $metadata[Cartboss_Constants::CB_METADATA_LOCAL_SESSION_ID] = WC()->session->get_customer_id(); 140 } 141 } catch (\Throwable $th) { 142 } 143 144 $cb_order->metadata = $metadata; 143 145 144 146 // cart … … 166 168 $cb_event->order = $cb_order; 167 169 170 // add to local db 171 Cartboss_Order_Database_Manager::instance()->insert($session_token, $cb_order->serialize()); 172 173 // check if can be inserted as event 168 174 $previous = Cartboss_Event_Database_Manager::instance()->get($session_token); 169 175 if (!$previous || $previous->priority != Cartboss_Event_Database_Manager::PRIORITY_HIGH) { 170 176 Cartboss_Event_Database_Manager::instance()->insert($session_token, $cb_event->serialize(), Cartboss_Config::instance()->get('sync_delay_atc', 0), Cartboss_Event_Database_Manager::PRIORITY_NORMAL); 171 }172 173 // Cartboss_Cart_Database_Manager::instance()->insert($session_token, serialize($cb_order));174 175 try {176 // store phone to WP session, sometimes paypal or other providers clear this field when order is purchased, and we need it to pass it to purchase event177 WC()->session->set(Cartboss_Constants::CB_METADATA_PHONE, $cb_contact->phone);178 WC()->session->save_data();179 WC()->session->set_customer_session_cookie(true);180 181 } catch (Throwable $e) {182 177 } 183 178 -
cartboss/trunk/classes/ajax/class-cartboss-ajax.php
r2595210 r2901887 2 2 3 3 4 if ( ! defined( 'ABSPATH' )) {5 exit;4 if (!defined('ABSPATH')) { 5 exit; 6 6 } // Exit if accessed directly 7 7 8 if ( ! class_exists( 'Cartboss_Ajax' )) :8 if (!class_exists('Cartboss_Ajax')) : 9 9 10 abstract class Cartboss_Ajax extends Cartboss_Singleton {11 var $action = '';12 var $public = false;10 abstract class Cartboss_Ajax extends Cartboss_Singleton { 11 var $action = ''; 12 var $public = false; 13 13 14 function __construct() {15 $this->initialize();16 $this->add_actions();17 }14 function __construct() { 15 $this->initialize(); 16 $this->add_actions(); 17 } 18 18 19 function initialize() {20 /* do nothing */21 }19 function initialize() { 20 /* do nothing */ 21 } 22 22 23 function add_actions() { 24 // add action for logged-in users 25 add_action( "wp_ajax_{$this->action}", array( $this, 'request' ) ); 23 function add_actions() { 24 add_action("wc_ajax_{$this->action}", array($this, 'request'), Cartboss_Constants::CB_PRIORITY_MAX); 26 25 27 // add action for non logged-in users 28 if ( $this->public ) { 29 add_action( "wp_ajax_nopriv_{$this->action}", array( $this, 'request' ) ); 30 } 31 } 26 // // add action for logged-in users 27 // add_action( "wp_ajax_{$this->action}", array( $this, 'request' ) ); 28 // 29 // // add action for non logged-in users 30 // if ( $this->public ) { 31 // add_action( "wp_ajax_nopriv_{$this->action}", array( $this, 'request' ) ); 32 // } 33 } 32 34 33 function request() {34 try {35 $this->handle_request( wp_unslash( $_REQUEST ));36 } catch ( Throwable $e) {37 Cartboss_Api_manager::instance()->log_error( "AJAX handler '{$this->action}' failed: {$e->getMessage()}");38 }39 }35 function request() { 36 try { 37 $this->handle_request(wp_unslash($_REQUEST)); 38 } catch (Throwable $e) { 39 Cartboss_Api_manager::instance()->log_error("AJAX handler '{$this->action}' failed: {$e->getMessage()}"); 40 } 41 } 40 42 41 function handle_request( $request ) { 42 return true; 43 } 44 } 43 function handle_request($request) { 44 return true; 45 } 46 47 function get_action() { 48 return $this->action; 49 } 50 } 45 51 46 52 endif; // class_exists check -
cartboss/trunk/classes/class-cartboss-database.php
r2745744 r2901887 25 25 protected function do_query($stmt) { 26 26 $res = $this->wpdb->query($stmt); 27 if ( !$res&& $this->wpdb->last_error) {27 if ($res === false && $this->wpdb->last_error) { 28 28 if (str_contains($this->wpdb->last_error, "Unknown column")) { 29 29 $this->drop_table(); -
cartboss/trunk/classes/class-cartboss-utils.php
r2847751 r2901887 81 81 } 82 82 83 public static function get_home_url() { 84 try { 85 return apply_filters('wpml_home_url', get_option('home')); 86 } catch (Exception $e) { 87 try { 88 return home_url(); 89 } catch (Exception $e) { 90 return "/"; 91 } 92 } 83 public static function get_i18n() { 84 global $sitepress, $q_config, $polylang; 85 86 if (!empty($sitepress) && is_object($sitepress) && method_exists($sitepress, 'get_active_languages')) { 87 // WPML. 88 return 'wpml'; 89 } 90 91 if (!empty($polylang) && function_exists('pll_languages_list')) { 92 $languages = pll_languages_list(); 93 94 if (empty($languages)) { 95 return false; 96 } 97 98 // Polylang, Polylang Pro. 99 return 'polylang'; 100 } 101 102 if (!empty($q_config) && is_array($q_config)) { 103 if (function_exists('qtranxf_convertURL')) { 104 // qTranslate-x. 105 return 'qtranslate-x'; 106 } 107 108 if (function_exists('qtrans_convertURL')) { 109 // qTranslate. 110 return 'qtranslate'; 111 } 112 } 113 114 return false; 115 } 116 117 public static function get_home_url($lang = '') { 118 $i18n_plugin = self::get_i18n(); 119 120 if (!$i18n_plugin) { 121 return home_url(); 122 } 123 124 switch ($i18n_plugin) { 125 // WPML. 126 case 'wpml': 127 return $GLOBALS['sitepress']->language_url($lang); 128 // qTranslate. 129 case 'qtranslate': 130 return qtrans_convertURL(home_url(), $lang, true); 131 // qTranslate-x. 132 case 'qtranslate-x': 133 return qtranxf_convertURL(home_url(), $lang, true); 134 // Polylang, Polylang Pro. 135 case 'polylang': 136 $pll = function_exists('PLL') ? PLL() : $GLOBALS['polylang']; 137 138 if (!empty($pll->options['force_lang']) && isset($pll->links)) { 139 return pll_home_url($lang); 140 } 141 } 142 143 return home_url(); 144 } 145 146 public static function is_cart_full() { 147 try { 148 if (!WC()->cart->is_empty()) { 149 return true; 150 } 151 if (WC()->cart->get_cart_contents_count() > 0) { 152 return true; 153 } 154 } catch (Throwable $e) { 155 } 156 return false; 93 157 } 94 158 -
cartboss/trunk/classes/cron/class-cartboss-cron-clean.php
r2847751 r2901887 18 18 Cartboss_Event_Database_Manager::instance()->purge(); 19 19 Cartboss_Token_Database_Manager::instance()->purge(); 20 Cartboss_Order_Database_Manager::instance()->purge(); 20 21 // Cartboss_Cart_Database_Manager::instance()->purge(); 21 22 -
cartboss/trunk/classes/handlers/class-cartboss-handler-order-create.php
r2847751 r2901887 36 36 try { 37 37 // PHONE NUMBER 38 if (!empty(WC()->session->get(Cartboss_Constants::CB_METADATA_PHONE, null))) { 39 $wc_order->update_meta_data(self::ORDER_META_PHONE, WC()->session->get(Cartboss_Constants::CB_METADATA_PHONE)); 40 41 // remove phone from session (important) 42 WC()->session->set(Cartboss_Constants::CB_METADATA_PHONE, null); 43 WC()->session->save_data(); 44 WC()->session->set_customer_session_cookie(true); 38 if (empty($wc_order->get_meta(self::ORDER_META_PHONE))) { 39 $cb_local_cart = Cartboss_Order_Database_Manager::instance()->get(Cartboss_Session_Manager::instance()->get_token()); 40 if (isset($cb_local_cart)) { 41 $cb_cart_payload = $cb_local_cart->payload; 42 if (!empty($cb_cart_payload)) { 43 $meta_phone = Cartboss_Utils::get_array_value(Cartboss_Utils::get_array_value(json_decode($cb_cart_payload, true), 'billing_address', array()), 'phone', null); 44 if (!empty($meta_phone)) { 45 $wc_order->update_meta_data(self::ORDER_META_PHONE, $meta_phone); 46 } 47 } 48 } 45 49 } 46 50 } catch (Throwable $e) { -
cartboss/trunk/classes/handlers/class-cartboss-handler-order-restore.php
r2847751 r2901887 30 30 31 31 public static function get_order_restore_url() { 32 return UriModifier::appendSegment(Uri::createFromString( get_home_url()), self::WP_URL_PATH_RESTORE_CART);32 return UriModifier::appendSegment(Uri::createFromString(Cartboss_Utils::get_home_url()), self::WP_URL_PATH_RESTORE_CART); 33 33 } 34 34 … … 40 40 // } 41 41 42 43 42 $session_token = Cartboss_Utils::get_array_value($_GET, Cartboss_Session_Manager::QUERY_VAR, null); 44 43 … … 57 56 Cartboss_Api_manager::instance()->log_error("[Order Restore Handler] Invalid session token received '{$session_token}'"); 58 57 59 wp_redirect(Cartboss_Utils::get_home_url(), 303); 60 exit(); 61 } 58 $this->redirect_home('cb-err-inv-sess'); 59 exit(); 60 } 61 62 62 // fetch order info from server 63 try { 64 $response = Cartboss_Api_Manager::instance()->get_order($session_token); 65 63 $order_data = null; 64 try { 65 $response_record = Cartboss_Order_Database_Manager::instance()->get($session_token); 66 $order_data = json_decode($response_record->payload); 66 67 } catch (Exception $e) { 67 Cartboss_Api_manager::instance()->log_error("[Order Restore Handler] Fetching order '{$session_token}' failed with error {$e->getMessage()}"); 68 69 wp_redirect(Cartboss_Utils::get_home_url(), 303); 68 Cartboss_Api_manager::instance()->log_error("[Order Restore Handler] Fetching order '{$session_token}' from DB failed with error {$e->getMessage()}"); 69 } 70 71 // fetch order info from remote 72 if (empty($order_data)) { 73 try { 74 $order_data = Cartboss_Api_Manager::instance()->get_order($session_token); 75 } catch (Exception $e) { 76 Cartboss_Api_manager::instance()->log_error("[Order Restore Handler] Fetching order '{$session_token}' from REMOTE failed with error {$e->getMessage()}"); 77 } 78 } 79 80 if (empty($order_data)) { 81 $this->redirect_home('cb-err-no-order'); 70 82 exit(); 71 83 } … … 96 108 ); 97 109 98 $cb_order = $serializer->deserialize(json_encode($ response), Cartboss_OrderExtended_Model::class, 'json');110 $cb_order = $serializer->deserialize(json_encode($order_data), Cartboss_OrderExtended_Model::class, 'json'); 99 111 100 112 } catch (Throwable $e) { 101 113 Cartboss_Api_manager::instance()->log_error("[Order Restore Handler] Deserialize failed: {$e->getMessage()}"); 102 103 wp_redirect(Cartboss_Utils::get_home_url(), 303); 114 $this->redirect_home('cb-err-des'); 104 115 exit(); 105 116 } … … 107 118 if (empty($cb_order)) { 108 119 Cartboss_Api_manager::instance()->log_error("[Order Restore Handler] Order not fetched and/or deserialized"); 109 110 wp_redirect(Cartboss_Utils::get_home_url(), 303); 120 $this->redirect_home('cb-err-no-order-des'); 111 121 exit(); 112 122 } 113 123 114 124 // if order is not abandoned, go away 115 if (!$cb_order->is_abandoned()) { 116 wp_redirect(Cartboss_Utils::get_home_url(), 303); 117 exit(); 118 } 125 // if (!$cb_order->is_abandoned()) { 126 // error_log(4); 127 // wp_redirect(Cartboss_Utils::get_home_url(), 303); 128 // exit(); 129 // } 119 130 120 131 // remove previous session bcoz of possible order duplicates … … 129 140 } catch (Exception $e) { 130 141 Cartboss_Api_manager::instance()->log_error("[Order Restore Handler] Removing old session failed: {$e->getMessage()}"); 142 } 143 144 // remove possible current user session, before creating a new one from scratch 145 try { 146 WC()->session->destroy_session(); 147 } catch (Exception $ex) { 131 148 } 132 149 … … 177 194 } 178 195 } 179 180 // if cart is still empty, go away181 if (WC()->cart->is_empty()) {182 Cartboss_Api_manager::instance()->log_error("[Order Restore Handler] Cart still empty after restoring for '{$session_token}'");183 184 wp_redirect(Cartboss_Utils::get_home_url(), 303);185 exit();186 }187 196 } else { 188 197 Cartboss_Api_manager::instance()->log_error("[Order Restore Handler] WC()->cart not initialized"); 189 198 } 190 199 191 // restore customer 192 if (!empty(WC()->customer)) { 200 if (WC()->customer) { 193 201 try { 194 202 Cartboss_Utils::set_wc_customer_field(WC()->customer, 'billing', 'email', $cb_order->billing_address->email); … … 223 231 } 224 232 225 if (!empty(WC()->session)) {226 try {227 WC()->session->set(Cartboss_Constants::CB_METADATA_ACCEPTS_MARKETING, Cartboss_Utils::get_array_value($cb_order->metadata, Cartboss_Constants::CB_METADATA_ACCEPTS_MARKETING, false));228 // WC()->session->set(Cartboss_Constants::CB_METADATA_SHIP_TO_DIFFERENT_ADDRESS, Cartboss_Utils::get_array_value($cb_order->metadata, Cartboss_Constants::CB_METADATA_SHIP_TO_DIFFERENT_ADDRESS, false));229 WC()->session->set(Cartboss_Constants::CB_METADATA_ORDER_COMMENTS, Cartboss_Utils::get_array_value($cb_order->metadata, Cartboss_Constants::CB_METADATA_ORDER_COMMENTS, ''));230 WC()->session->save_data();231 WC()->session->set_customer_session_cookie(true);232 } catch (Exception $ee) {233 Cartboss_Api_manager::instance()->log_error("[Order Restore Handler] Saving metadata to WC()->session failed: {$ee->getMessage()}");234 }235 } else {236 Cartboss_Api_manager::instance()->log_error("[Order Restore Handler] WC()->session not initialized");237 }238 239 233 // extract query params and remove CB ones 240 234 $current_uri = Uri::createFromServer($_SERVER); … … 251 245 // add query params; eg. utm_* to the checkout url 252 246 $redirect_uri = Uri::createFromString($checkout_url); 253 $redirect_uri = $redirect_uri->withFragment("cb_restore"); 247 // $redirect_uri = $redirect_uri->withFragment("cb_restore"); we dont want this 254 248 $redirect_uri = UriModifier::appendQuery($redirect_uri, $current_query); 255 249 … … 261 255 exit(); 262 256 } 257 258 function redirect_home($reason = null) { 259 $redirect_uri = Uri::createFromString(Cartboss_Utils::get_home_url()); 260 if (isset($reason)) 261 $redirect_uri = $redirect_uri->withFragment($reason); 262 263 wp_redirect($redirect_uri, 303); 264 exit(); 265 } 263 266 } 264 267 -
cartboss/trunk/classes/handlers/class-cartboss-handler-prefill-checkout-fields.php
r2806369 r2901887 24 24 } 25 25 26 if (!empty(WC()->session)) { 27 // // restore ship to diff address 28 // if (Cartboss_Utils::is_true(WC()->session->get(Cartboss_Constants::CB_METADATA_SHIP_TO_DIFFERENT_ADDRESS, false))) { 29 // add_filter('woocommerce_ship_to_different_address_checked', '__return_true'); 30 // } else { 31 // add_filter('woocommerce_ship_to_different_address_checked', '__return_false'); 32 // } 26 // restore order notes 27 $order_notes_value = Cartboss_Meta_Storage_Manager::instance()->get_value(Cartboss_Constants::CB_SESSION_ORDER_METADATA, ''); 28 if (array_key_exists('order', $fields) && array_key_exists('order_comments', $fields['order']) && !empty($order_notes_value)) { 29 $fields['order']['order_comments']['default'] = sanitize_text_field($order_notes_value); 30 } 33 31 34 // restore order notes 35 $order_notes_value = WC()->session->get(Cartboss_Constants::CB_SESSION_ORDER_METADATA, ''); 36 if (array_key_exists('order', $fields) && array_key_exists('order_comments', $fields['order']) && !empty($order_notes_value)) { 37 $fields['order']['order_comments']['default'] = sanitize_text_field($order_notes_value); 38 } 39 40 // accepts marketing 41 if (array_key_exists('billing', $fields) && key_exists(Cartboss_Constants::CB_FIELD_ACCEPTS_MARKETING, $fields['billing'])) { 42 $fields['billing'][Cartboss_Constants::CB_FIELD_ACCEPTS_MARKETING]['default'] = Cartboss_Utils::is_true(!empty(WC()->session) ? WC()->session->get(Cartboss_Constants::CB_METADATA_ACCEPTS_MARKETING, false) : false); 43 } 32 // accepts marketing 33 if (array_key_exists('billing', $fields) && key_exists(Cartboss_Constants::CB_FIELD_ACCEPTS_MARKETING, $fields['billing'])) { 34 $fields['billing'][Cartboss_Constants::CB_FIELD_ACCEPTS_MARKETING]['default'] = Cartboss_Utils::is_true(Cartboss_Meta_Storage_Manager::instance()->get_value(Cartboss_Constants::CB_METADATA_ACCEPTS_MARKETING, false)); 44 35 } 45 36 -
cartboss/trunk/classes/handlers/class-cartboss-handler-session-reset.php
r2847751 r2901887 23 23 24 24 public static function get_session_reset_url() { 25 return UriModifier::appendSegment(Uri::createFromString( get_home_url()), self::WP_URL_PATH_RESET_SESSION);25 return UriModifier::appendSegment(Uri::createFromString(Cartboss_Utils::get_home_url()), self::WP_URL_PATH_RESET_SESSION); 26 26 } 27 27 -
cartboss/trunk/classes/managers/class-cartboss-session-manager.php
r2847751 r2901887 65 65 Cartboss_Discount_Manager::instance()->reset(); 66 66 Cartboss_Attribution_Manager::instance()->reset(); 67 Cartboss_Meta_Storage_Manager::instance()->reset(); 67 68 } 68 69 -
cartboss/trunk/classes/managers/class-cartboss-token-database-manager.php
r2847751 r2901887 9 9 class Cartboss_Token_Database_Manager extends Cartboss_Database { 10 10 const TABLE_NAME = 'cb_consumed_session_tokens'; 11 const EXPIRES_IN_SECONDS = 60 * 60 * 24 * 31;11 const EXPIRES_IN_SECONDS = 60 * 60 * 24 * 90; 12 12 13 13 public function create_table() { -
cartboss/trunk/classes/models/class-cartboss-order-model.php
r2595210 r2901887 2 2 3 3 4 class Cartboss_Order_Model extends Cartboss_Base_Model 5 { 4 use Symfony\Component\Serializer\Encoder\JsonEncoder; 5 use Symfony\Component\Serializer\Normalizer\ObjectNormalizer; 6 use Symfony\Component\Serializer\Serializer; 7 8 class Cartboss_Order_Model extends Cartboss_Base_Model { 6 9 /** 7 10 * @var string|null 8 11 */ 9 12 public $id; 10 /**11 * @var string|null12 */13 public $number;13 /** 14 * @var string|null 15 */ 16 public $number; 14 17 /** 15 18 * @var float … … 45 48 public $shipping_address; 46 49 47 public function addCartItem(Cartboss_Order_Cart_Item_Model $cart_item) 48 { 50 /** 51 * @var Serializer 52 */ 53 private $serializer; 54 55 public function __construct() { 56 $this->serializer = new Serializer([new ObjectNormalizer()], [new JsonEncoder()]); 57 } 58 59 public function addCartItem(Cartboss_Order_Cart_Item_Model $cart_item) { 49 60 array_push($this->items, $cart_item); 61 } 62 63 public final function serialize(): string { 64 return $this->serializer->serialize($this, 'json', []); 50 65 } 51 66 } 52 67 53 class Cartboss_OrderExtended_Model extends Cartboss_Order_Model 54 { 68 class Cartboss_OrderExtended_Model extends Cartboss_Order_Model { 55 69 /** 56 70 * @var string|null … … 65 79 * @return bool 66 80 */ 67 public function is_abandoned(): bool 68 { 81 public function is_abandoned(): bool { 69 82 return $this->state == 'abandoned'; 70 83 } … … 73 86 * @return bool 74 87 */ 75 public function is_paid(): bool 76 { 88 public function is_paid(): bool { 77 89 return $this->state == 'paid'; 78 90 } … … 80 92 81 93 82 class Cartboss_Order_Cart_Item_Model extends Cartboss_Base_Model 83 { 94 class Cartboss_Order_Cart_Item_Model extends Cartboss_Base_Model { 84 95 /** 85 96 * @var string|null … … 108 119 } 109 120 110 class Cartboss_Order_Address_Model extends Cartboss_Base_Model 111 { 121 class Cartboss_Order_Address_Model extends Cartboss_Base_Model { 112 122 /** 113 123 * @var string|null -
cartboss/trunk/composer.lock
r2847751 r2901887 9 9 { 10 10 "name": "jaybizzle/crawler-detect", 11 "version": "v1.2.11 2",11 "version": "v1.2.113", 12 12 "source": { 13 13 "type": "git", 14 14 "url": "https://github.com/JayBizzle/Crawler-Detect.git", 15 "reference": " 2c555ce35a07a5c1c808cee7d5bb52c41a4c7b2f"16 }, 17 "dist": { 18 "type": "zip", 19 "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/ 2c555ce35a07a5c1c808cee7d5bb52c41a4c7b2f",20 "reference": " 2c555ce35a07a5c1c808cee7d5bb52c41a4c7b2f",15 "reference": "6710b75871da2b718550c2bc33388315a3b20151" 16 }, 17 "dist": { 18 "type": "zip", 19 "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/6710b75871da2b718550c2bc33388315a3b20151", 20 "reference": "6710b75871da2b718550c2bc33388315a3b20151", 21 21 "shasum": "" 22 22 }, … … 55 55 "support": { 56 56 "issues": "https://github.com/JayBizzle/Crawler-Detect/issues", 57 "source": "https://github.com/JayBizzle/Crawler-Detect/tree/v1.2.11 2"58 }, 59 "time": "202 2-10-05T21:52:44+00:00"57 "source": "https://github.com/JayBizzle/Crawler-Detect/tree/v1.2.113" 58 }, 59 "time": "2023-02-02T21:01:40+00:00" 60 60 }, 61 61 { … … 838 838 { 839 839 "name": "symfony/property-access", 840 "version": "v5.4. 15",840 "version": "v5.4.21", 841 841 "source": { 842 842 "type": "git", 843 843 "url": "https://github.com/symfony/property-access.git", 844 "reference": " 0f3e8f40a1d3da90f674b3dd772e4777ccde4273"845 }, 846 "dist": { 847 "type": "zip", 848 "url": "https://api.github.com/repos/symfony/property-access/zipball/ 0f3e8f40a1d3da90f674b3dd772e4777ccde4273",849 "reference": " 0f3e8f40a1d3da90f674b3dd772e4777ccde4273",844 "reference": "bbd4442bfbdf3992550772539ba743d6d834534f" 845 }, 846 "dist": { 847 "type": "zip", 848 "url": "https://api.github.com/repos/symfony/property-access/zipball/bbd4442bfbdf3992550772539ba743d6d834534f", 849 "reference": "bbd4442bfbdf3992550772539ba743d6d834534f", 850 850 "shasum": "" 851 851 }, … … 899 899 ], 900 900 "support": { 901 "source": "https://github.com/symfony/property-access/tree/v5.4. 15"901 "source": "https://github.com/symfony/property-access/tree/v5.4.21" 902 902 }, 903 903 "funding": [ … … 915 915 } 916 916 ], 917 "time": "202 2-10-27T07:55:40+00:00"917 "time": "2023-02-16T09:33:00+00:00" 918 918 }, 919 919 { 920 920 "name": "symfony/property-info", 921 "version": "v5.4. 17",921 "version": "v5.4.21", 922 922 "source": { 923 923 "type": "git", 924 924 "url": "https://github.com/symfony/property-info.git", 925 "reference": " 12e1f7b3d73b1f3690aa524b92b5de9937507361"926 }, 927 "dist": { 928 "type": "zip", 929 "url": "https://api.github.com/repos/symfony/property-info/zipball/ 12e1f7b3d73b1f3690aa524b92b5de9937507361",930 "reference": " 12e1f7b3d73b1f3690aa524b92b5de9937507361",925 "reference": "722737086d76b4edabfc2d50a48cebd4b8cd5546" 926 }, 927 "dist": { 928 "type": "zip", 929 "url": "https://api.github.com/repos/symfony/property-info/zipball/722737086d76b4edabfc2d50a48cebd4b8cd5546", 930 "reference": "722737086d76b4edabfc2d50a48cebd4b8cd5546", 931 931 "shasum": "" 932 932 }, … … 990 990 ], 991 991 "support": { 992 "source": "https://github.com/symfony/property-info/tree/v5.4. 17"992 "source": "https://github.com/symfony/property-info/tree/v5.4.21" 993 993 }, 994 994 "funding": [ … … 1006 1006 } 1007 1007 ], 1008 "time": "202 2-12-20T11:10:57+00:00"1008 "time": "2023-02-16T09:33:00+00:00" 1009 1009 }, 1010 1010 { 1011 1011 "name": "symfony/serializer", 1012 "version": "v5.4. 17",1012 "version": "v5.4.21", 1013 1013 "source": { 1014 1014 "type": "git", 1015 1015 "url": "https://github.com/symfony/serializer.git", 1016 "reference": " 4ac4fae1cbad2655a0b05f327e7ce8ef310239fb"1017 }, 1018 "dist": { 1019 "type": "zip", 1020 "url": "https://api.github.com/repos/symfony/serializer/zipball/ 4ac4fae1cbad2655a0b05f327e7ce8ef310239fb",1021 "reference": " 4ac4fae1cbad2655a0b05f327e7ce8ef310239fb",1016 "reference": "e35b42d69a8b447cc3e6c9b3f98938c596b6c60a" 1017 }, 1018 "dist": { 1019 "type": "zip", 1020 "url": "https://api.github.com/repos/symfony/serializer/zipball/e35b42d69a8b447cc3e6c9b3f98938c596b6c60a", 1021 "reference": "e35b42d69a8b447cc3e6c9b3f98938c596b6c60a", 1022 1022 "shasum": "" 1023 1023 }, … … 1093 1093 "homepage": "https://symfony.com", 1094 1094 "support": { 1095 "source": "https://github.com/symfony/serializer/tree/v5.4. 17"1095 "source": "https://github.com/symfony/serializer/tree/v5.4.21" 1096 1096 }, 1097 1097 "funding": [ … … 1109 1109 } 1110 1110 ], 1111 "time": "202 2-12-20T11:10:57+00:00"1111 "time": "2023-02-21T19:46:44+00:00" 1112 1112 }, 1113 1113 { 1114 1114 "name": "symfony/string", 1115 "version": "v5.4. 17",1115 "version": "v5.4.21", 1116 1116 "source": { 1117 1117 "type": "git", 1118 1118 "url": "https://github.com/symfony/string.git", 1119 "reference": " 55733a8664b8853b003e70251c58bc8cb2d82a6b"1120 }, 1121 "dist": { 1122 "type": "zip", 1123 "url": "https://api.github.com/repos/symfony/string/zipball/ 55733a8664b8853b003e70251c58bc8cb2d82a6b",1124 "reference": " 55733a8664b8853b003e70251c58bc8cb2d82a6b",1119 "reference": "edac10d167b78b1d90f46a80320d632de0bd9f2f" 1120 }, 1121 "dist": { 1122 "type": "zip", 1123 "url": "https://api.github.com/repos/symfony/string/zipball/edac10d167b78b1d90f46a80320d632de0bd9f2f", 1124 "reference": "edac10d167b78b1d90f46a80320d632de0bd9f2f", 1125 1125 "shasum": "" 1126 1126 }, … … 1179 1179 ], 1180 1180 "support": { 1181 "source": "https://github.com/symfony/string/tree/v5.4. 17"1181 "source": "https://github.com/symfony/string/tree/v5.4.21" 1182 1182 }, 1183 1183 "funding": [ … … 1195 1195 } 1196 1196 ], 1197 "time": "202 2-12-12T15:54:21+00:00"1197 "time": "2023-02-22T08:00:55+00:00" 1198 1198 } 1199 1199 ], -
cartboss/trunk/config/class-cartboss-constants.php
r2847751 r2901887 15 15 // const CB_METADATA_SHIP_TO_DIFFERENT_ADDRESS = 'ship_elsewhere'; 16 16 const CB_METADATA_ACCEPTS_MARKETING = 'accepts_marketing'; 17 const CB_METADATA_EXTRA_FIELDS = 'extra_fields'; 17 18 const CB_METADATA_PHONE = 'phone'; 18 19 -
cartboss/trunk/config/class-cartboss-options.php
r2806369 r2901887 3 3 4 4 class Cartboss_Options { 5 const DEFAULT_ROLES = array('administrator', 'shop_manager', 'editor', 'author'); 5 // const DEFAULT_ROLES = array('administrator', 'shop_manager', 'editor', 'author'); 6 const DEFAULT_ROLES = array(); 6 7 7 8 const API_KEY = 'cb_api_key'; … … 34 35 35 36 public static function is_enabled(): bool { 36 return self::get_is_valid_api_key() && self::get_has_balance() && self::get_is_website_active(); 37 // return self::get_is_valid_api_key() && self::get_has_balance() && self::get_is_website_active(); 38 return self::get_is_valid_api_key(); 37 39 } 38 40 -
cartboss/trunk/includes/class-cartboss-activator.php
r2847751 r2901887 13 13 Cartboss_Event_Database_Manager::instance()->create_table(); 14 14 Cartboss_Token_Database_Manager::instance()->create_table(); 15 Cartboss_Order_Database_Manager::instance()->create_table(); 15 16 // Cartboss_Cart_Database_Manager::instance()->create_table(); 16 17 -
cartboss/trunk/includes/class-cartboss-deactivator.php
r2847751 r2901887 5 5 Cartboss_Event_Database_Manager::instance()->drop_table(); 6 6 Cartboss_Token_Database_Manager::instance()->drop_table(); 7 Cartboss_Order_Database_Manager::instance()->drop_table(); 7 8 // Cartboss_Cart_Database_Manager::instance()->drop_table(); 8 9 -
cartboss/trunk/includes/class-cartboss.php
r2847751 r2901887 36 36 cartboss_include('classes/class-cartboss-api-client.php'); 37 37 cartboss_include('classes/libs/class-cartboss-cookie-helper.php'); 38 cartboss_include('classes/libs/class-cartboss-session-helper.php'); 38 39 39 40 // ajax 40 41 cartboss_include('classes/ajax/class-cartboss-ajax.php'); 41 42 cartboss_include('classes/ajax/class-cartboss-ajax-checkout.php'); 43 cartboss_include('classes/ajax/class-cartboss-ajax-checkout-fields.php'); 42 44 43 45 // cron … … 51 53 cartboss_include('classes/managers/class-cartboss-event-database-manager.php'); 52 54 cartboss_include('classes/managers/class-cartboss-token-database-manager.php'); 55 cartboss_include('classes/managers/class-cartboss-order-database-manager.php'); 53 56 // cartboss_include('classes/managers/class-cartboss-cart-database-manager.php'); 57 cartboss_include('classes/managers/class-cartboss-meta-storage-manager.php'); 54 58 cartboss_include('classes/managers/class-cartboss-session-manager.php'); 55 59 cartboss_include('classes/managers/class-cartboss-attribution-manager.php'); … … 74 78 cartboss_include('classes/handlers/class-cartboss-handler-session-reset.php'); 75 79 cartboss_include('classes/handlers/class-cartboss-handler-customize-checkout-fields.php'); 76 cartboss_include('classes/handlers/class-cartboss-handler-prefill-checkout-fields.php');80 // cartboss_include('classes/handlers/class-cartboss-handler-prefill-checkout-fields.php'); 77 81 78 82 // load appropriate config … … 94 98 Cartboss_Event_Database_Manager::instance(); 95 99 Cartboss_Token_Database_Manager::instance(); 100 Cartboss_Order_Database_Manager::instance(); 96 101 // Cartboss_Cart_Database_Manager::instance(); 97 102 Cartboss_Api_Manager::init(Cartboss_Config::instance()->get('api_host'), Cartboss_Options::get_api_key(), $this->version); … … 99 104 Cartboss_Attribution_Manager::init(); 100 105 Cartboss_Session_Manager::init(); 106 Cartboss_Meta_Storage_Manager::init(); 101 107 102 108 // init crons … … 112 118 Cartboss_Hook_Handler_Session_Reset::instance(); 113 119 Cartboss_Hook_Handler_Customize_Checkout_Fields::instance(); 114 Cartboss_Hook_Handler_Prefill_Checkout_Fields::instance();120 // Cartboss_Hook_Handler_Prefill_Checkout_Fields::instance(); 115 121 116 122 // init ajax 117 123 Cartboss_Ajax_Checkout::instance(); 124 Cartboss_Ajax_Checkout_Fields::instance(); 118 125 119 126 $this->load_dependencies(); -
cartboss/trunk/public/class-cartboss-public.php
r2847751 r2901887 47 47 // checkout helper, only on checkout page 48 48 // if (Cartboss_Utils::is_actual_checkout_page()) { 49 wp_enqueue_script(50 'cb-tracking-script',51 plugin_dir_url(__FILE__) . 'js/cartboss-checkout.min.js',52 array('jquery'),53 $assets_version,54 true55 );49 wp_enqueue_script( 50 'cb-tracking-script', 51 plugin_dir_url(__FILE__) . 'js/cartboss-checkout2.min.js', 52 array('jquery'), 53 $assets_version, 54 true 55 ); 56 56 57 $handler = new Cartboss_Ajax_Checkout(); 58 $data = array( 59 'ajaxurl' => admin_url('admin-ajax.php'), 60 'nonce' => wp_create_nonce('ajax-nonce'), 61 'action' => $handler->action, 62 'debug' => $is_debug, 63 'preset_fields' => array() 64 ); 57 $data = array( 58 'endpoint_abandon' => WC_AJAX::get_endpoint(Cartboss_Ajax_Checkout::instance()->get_action()), 59 'endpoint_populate' => WC_AJAX::get_endpoint(Cartboss_Ajax_Checkout_Fields::instance()->get_action()), 60 'nonce' => wp_create_nonce('ajax-nonce'), 61 'debug' => $is_debug, 62 'preset_fields' => array() 63 ); 65 64 66 if (!empty(WC()->customer)) { 67 foreach (WC()->customer->get_billing() as $key => $value) { 68 $data['preset_fields']['billing_' . $key] = $value; 69 } 70 foreach (WC()->customer->get_shipping() as $key => $value) { 71 $data['preset_fields']['shipping_' . $key] = $value; 72 } 73 } 74 75 if (!empty(WC()->session)) { 76 $data['preset_fields'][Cartboss_Constants::CB_FIELD_ACCEPTS_MARKETING] = Cartboss_Utils::is_true(WC()->session->get(Cartboss_Constants::CB_METADATA_ACCEPTS_MARKETING, false)); 77 // $data['preset_fields']['ship_to_different_address'] = Cartboss_Utils::is_true(WC()->session->get(Cartboss_Constants::CB_METADATA_SHIP_TO_DIFFERENT_ADDRESS, false)); 78 $data['preset_fields']['order_comments'] = sanitize_text_field(WC()->session->get(Cartboss_Constants::CB_METADATA_ORDER_COMMENTS, '')); 79 } 80 81 wp_localize_script( 82 'cb-tracking-script', 83 'cb_checkout_data', 84 $data 85 ); 65 wp_localize_script( 66 'cb-tracking-script', 67 'cb_checkout_data', 68 $data 69 ); 86 70 // } 87 71 } -
cartboss/trunk/vendor/composer/installed.json
r2847751 r2901887 3 3 { 4 4 "name": "jaybizzle/crawler-detect", 5 "version": "v1.2.11 2",6 "version_normalized": "1.2.11 2.0",5 "version": "v1.2.113", 6 "version_normalized": "1.2.113.0", 7 7 "source": { 8 8 "type": "git", 9 9 "url": "https://github.com/JayBizzle/Crawler-Detect.git", 10 "reference": " 2c555ce35a07a5c1c808cee7d5bb52c41a4c7b2f"11 }, 12 "dist": { 13 "type": "zip", 14 "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/ 2c555ce35a07a5c1c808cee7d5bb52c41a4c7b2f",15 "reference": " 2c555ce35a07a5c1c808cee7d5bb52c41a4c7b2f",10 "reference": "6710b75871da2b718550c2bc33388315a3b20151" 11 }, 12 "dist": { 13 "type": "zip", 14 "url": "https://api.github.com/repos/JayBizzle/Crawler-Detect/zipball/6710b75871da2b718550c2bc33388315a3b20151", 15 "reference": "6710b75871da2b718550c2bc33388315a3b20151", 16 16 "shasum": "" 17 17 }, … … 22 22 "phpunit/phpunit": "^4.8|^5.5|^6.5|^9.4" 23 23 }, 24 "time": "202 2-10-05T21:52:44+00:00",24 "time": "2023-02-02T21:01:40+00:00", 25 25 "type": "library", 26 26 "installation-source": "dist", … … 52 52 "support": { 53 53 "issues": "https://github.com/JayBizzle/Crawler-Detect/issues", 54 "source": "https://github.com/JayBizzle/Crawler-Detect/tree/v1.2.11 2"54 "source": "https://github.com/JayBizzle/Crawler-Detect/tree/v1.2.113" 55 55 }, 56 56 "install-path": "../jaybizzle/crawler-detect" … … 865 865 { 866 866 "name": "symfony/property-access", 867 "version": "v5.4. 15",868 "version_normalized": "5.4. 15.0",867 "version": "v5.4.21", 868 "version_normalized": "5.4.21.0", 869 869 "source": { 870 870 "type": "git", 871 871 "url": "https://github.com/symfony/property-access.git", 872 "reference": " 0f3e8f40a1d3da90f674b3dd772e4777ccde4273"873 }, 874 "dist": { 875 "type": "zip", 876 "url": "https://api.github.com/repos/symfony/property-access/zipball/ 0f3e8f40a1d3da90f674b3dd772e4777ccde4273",877 "reference": " 0f3e8f40a1d3da90f674b3dd772e4777ccde4273",872 "reference": "bbd4442bfbdf3992550772539ba743d6d834534f" 873 }, 874 "dist": { 875 "type": "zip", 876 "url": "https://api.github.com/repos/symfony/property-access/zipball/bbd4442bfbdf3992550772539ba743d6d834534f", 877 "reference": "bbd4442bfbdf3992550772539ba743d6d834534f", 878 878 "shasum": "" 879 879 }, … … 890 890 "psr/cache-implementation": "To cache access methods." 891 891 }, 892 "time": "202 2-10-27T07:55:40+00:00",892 "time": "2023-02-16T09:33:00+00:00", 893 893 "type": "library", 894 894 "installation-source": "dist", … … 929 929 ], 930 930 "support": { 931 "source": "https://github.com/symfony/property-access/tree/v5.4. 15"931 "source": "https://github.com/symfony/property-access/tree/v5.4.21" 932 932 }, 933 933 "funding": [ … … 949 949 { 950 950 "name": "symfony/property-info", 951 "version": "v5.4. 17",952 "version_normalized": "5.4. 17.0",951 "version": "v5.4.21", 952 "version_normalized": "5.4.21.0", 953 953 "source": { 954 954 "type": "git", 955 955 "url": "https://github.com/symfony/property-info.git", 956 "reference": " 12e1f7b3d73b1f3690aa524b92b5de9937507361"957 }, 958 "dist": { 959 "type": "zip", 960 "url": "https://api.github.com/repos/symfony/property-info/zipball/ 12e1f7b3d73b1f3690aa524b92b5de9937507361",961 "reference": " 12e1f7b3d73b1f3690aa524b92b5de9937507361",956 "reference": "722737086d76b4edabfc2d50a48cebd4b8cd5546" 957 }, 958 "dist": { 959 "type": "zip", 960 "url": "https://api.github.com/repos/symfony/property-info/zipball/722737086d76b4edabfc2d50a48cebd4b8cd5546", 961 "reference": "722737086d76b4edabfc2d50a48cebd4b8cd5546", 962 962 "shasum": "" 963 963 }, … … 987 987 "symfony/serializer": "To use Serializer metadata" 988 988 }, 989 "time": "202 2-12-20T11:10:57+00:00",989 "time": "2023-02-16T09:33:00+00:00", 990 990 "type": "library", 991 991 "installation-source": "dist", … … 1023 1023 ], 1024 1024 "support": { 1025 "source": "https://github.com/symfony/property-info/tree/v5.4. 17"1025 "source": "https://github.com/symfony/property-info/tree/v5.4.21" 1026 1026 }, 1027 1027 "funding": [ … … 1043 1043 { 1044 1044 "name": "symfony/serializer", 1045 "version": "v5.4. 17",1046 "version_normalized": "5.4. 17.0",1045 "version": "v5.4.21", 1046 "version_normalized": "5.4.21.0", 1047 1047 "source": { 1048 1048 "type": "git", 1049 1049 "url": "https://github.com/symfony/serializer.git", 1050 "reference": " 4ac4fae1cbad2655a0b05f327e7ce8ef310239fb"1051 }, 1052 "dist": { 1053 "type": "zip", 1054 "url": "https://api.github.com/repos/symfony/serializer/zipball/ 4ac4fae1cbad2655a0b05f327e7ce8ef310239fb",1055 "reference": " 4ac4fae1cbad2655a0b05f327e7ce8ef310239fb",1050 "reference": "e35b42d69a8b447cc3e6c9b3f98938c596b6c60a" 1051 }, 1052 "dist": { 1053 "type": "zip", 1054 "url": "https://api.github.com/repos/symfony/serializer/zipball/e35b42d69a8b447cc3e6c9b3f98938c596b6c60a", 1055 "reference": "e35b42d69a8b447cc3e6c9b3f98938c596b6c60a", 1056 1056 "shasum": "" 1057 1057 }, … … 1101 1101 "symfony/yaml": "For using the default YAML mapping loader." 1102 1102 }, 1103 "time": "202 2-12-20T11:10:57+00:00",1103 "time": "2023-02-21T19:46:44+00:00", 1104 1104 "type": "library", 1105 1105 "installation-source": "dist", … … 1129 1129 "homepage": "https://symfony.com", 1130 1130 "support": { 1131 "source": "https://github.com/symfony/serializer/tree/v5.4. 17"1131 "source": "https://github.com/symfony/serializer/tree/v5.4.21" 1132 1132 }, 1133 1133 "funding": [ … … 1149 1149 { 1150 1150 "name": "symfony/string", 1151 "version": "v5.4. 17",1152 "version_normalized": "5.4. 17.0",1151 "version": "v5.4.21", 1152 "version_normalized": "5.4.21.0", 1153 1153 "source": { 1154 1154 "type": "git", 1155 1155 "url": "https://github.com/symfony/string.git", 1156 "reference": " 55733a8664b8853b003e70251c58bc8cb2d82a6b"1157 }, 1158 "dist": { 1159 "type": "zip", 1160 "url": "https://api.github.com/repos/symfony/string/zipball/ 55733a8664b8853b003e70251c58bc8cb2d82a6b",1161 "reference": " 55733a8664b8853b003e70251c58bc8cb2d82a6b",1156 "reference": "edac10d167b78b1d90f46a80320d632de0bd9f2f" 1157 }, 1158 "dist": { 1159 "type": "zip", 1160 "url": "https://api.github.com/repos/symfony/string/zipball/edac10d167b78b1d90f46a80320d632de0bd9f2f", 1161 "reference": "edac10d167b78b1d90f46a80320d632de0bd9f2f", 1162 1162 "shasum": "" 1163 1163 }, … … 1179 1179 "symfony/var-exporter": "^4.4|^5.0|^6.0" 1180 1180 }, 1181 "time": "202 2-12-12T15:54:21+00:00",1181 "time": "2023-02-22T08:00:55+00:00", 1182 1182 "type": "library", 1183 1183 "installation-source": "dist", … … 1218 1218 ], 1219 1219 "support": { 1220 "source": "https://github.com/symfony/string/tree/v5.4. 17"1220 "source": "https://github.com/symfony/string/tree/v5.4.21" 1221 1221 }, 1222 1222 "funding": [ -
cartboss/trunk/vendor/composer/installed.php
r2847751 r2901887 6 6 'install_path' => __DIR__ . '/../../', 7 7 'aliases' => array(), 8 'reference' => ' afb2156322e0cda38f3fc1607431a567739c4637',8 'reference' => 'e796c2a0731225e329df8fce1bd2f75a625ef37a', 9 9 'name' => '__root__', 10 10 'dev' => true, … … 17 17 'install_path' => __DIR__ . '/../../', 18 18 'aliases' => array(), 19 'reference' => ' afb2156322e0cda38f3fc1607431a567739c4637',19 'reference' => 'e796c2a0731225e329df8fce1bd2f75a625ef37a', 20 20 'dev_requirement' => false, 21 21 ), 22 22 'jaybizzle/crawler-detect' => array( 23 'pretty_version' => 'v1.2.11 2',24 'version' => '1.2.11 2.0',23 'pretty_version' => 'v1.2.113', 24 'version' => '1.2.113.0', 25 25 'type' => 'library', 26 26 'install_path' => __DIR__ . '/../jaybizzle/crawler-detect', 27 27 'aliases' => array(), 28 'reference' => ' 2c555ce35a07a5c1c808cee7d5bb52c41a4c7b2f',28 'reference' => '6710b75871da2b718550c2bc33388315a3b20151', 29 29 'dev_requirement' => false, 30 30 ), … … 120 120 ), 121 121 'symfony/property-access' => array( 122 'pretty_version' => 'v5.4. 15',123 'version' => '5.4. 15.0',122 'pretty_version' => 'v5.4.21', 123 'version' => '5.4.21.0', 124 124 'type' => 'library', 125 125 'install_path' => __DIR__ . '/../symfony/property-access', 126 126 'aliases' => array(), 127 'reference' => ' 0f3e8f40a1d3da90f674b3dd772e4777ccde4273',127 'reference' => 'bbd4442bfbdf3992550772539ba743d6d834534f', 128 128 'dev_requirement' => false, 129 129 ), 130 130 'symfony/property-info' => array( 131 'pretty_version' => 'v5.4. 17',132 'version' => '5.4. 17.0',131 'pretty_version' => 'v5.4.21', 132 'version' => '5.4.21.0', 133 133 'type' => 'library', 134 134 'install_path' => __DIR__ . '/../symfony/property-info', 135 135 'aliases' => array(), 136 'reference' => ' 12e1f7b3d73b1f3690aa524b92b5de9937507361',136 'reference' => '722737086d76b4edabfc2d50a48cebd4b8cd5546', 137 137 'dev_requirement' => false, 138 138 ), 139 139 'symfony/serializer' => array( 140 'pretty_version' => 'v5.4. 17',141 'version' => '5.4. 17.0',140 'pretty_version' => 'v5.4.21', 141 'version' => '5.4.21.0', 142 142 'type' => 'library', 143 143 'install_path' => __DIR__ . '/../symfony/serializer', 144 144 'aliases' => array(), 145 'reference' => ' 4ac4fae1cbad2655a0b05f327e7ce8ef310239fb',145 'reference' => 'e35b42d69a8b447cc3e6c9b3f98938c596b6c60a', 146 146 'dev_requirement' => false, 147 147 ), 148 148 'symfony/string' => array( 149 'pretty_version' => 'v5.4. 17',150 'version' => '5.4. 17.0',149 'pretty_version' => 'v5.4.21', 150 'version' => '5.4.21.0', 151 151 'type' => 'library', 152 152 'install_path' => __DIR__ . '/../symfony/string', 153 153 'aliases' => array(), 154 'reference' => ' 55733a8664b8853b003e70251c58bc8cb2d82a6b',154 'reference' => 'edac10d167b78b1d90f46a80320d632de0bd9f2f', 155 155 'dev_requirement' => false, 156 156 ), -
cartboss/trunk/vendor/jaybizzle/crawler-detect/.github/workflows/test.yml
r2635800 r2901887 13 13 fail-fast: true 14 14 matrix: 15 php: [5.3, 5.4, 5.5, 5.6, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1 ]15 php: [5.3, 5.4, 5.5, 5.6, 7.0, 7.1, 7.2, 7.3, 7.4, 8.0, 8.1, 8.2] 16 16 17 17 name: PHP:${{ matrix.php }} -
cartboss/trunk/vendor/jaybizzle/crawler-detect/src/CrawlerDetect.php
r2652208 r2901887 185 185 return isset($this->matches[0]) ? $this->matches[0] : null; 186 186 } 187 188 189 /** 190 * @return string|null 191 */ 192 public function getUserAgent() 193 { 194 return $this->userAgent; 195 } 187 196 } -
cartboss/trunk/vendor/symfony/property-access/LICENSE
r2718232 r2901887 1 Copyright (c) 2004- 2022Fabien Potencier1 Copyright (c) 2004-present Fabien Potencier 2 2 3 3 Permission is hereby granted, free of charge, to any person obtaining a copy -
cartboss/trunk/vendor/symfony/property-info/Extractor/PhpDocExtractor.php
r2638936 r2901887 61 61 { 62 62 if (!class_exists(DocBlockFactory::class)) { 63 throw new \LogicException(sprintf('Unable to use the "%s" class as the "phpdocumentor/reflection-docblock" package is not installed. ', __CLASS__));63 throw new \LogicException(sprintf('Unable to use the "%s" class as the "phpdocumentor/reflection-docblock" package is not installed. Try running composer require "phpdocumentor/reflection-docblock".', __CLASS__)); 64 64 } 65 65 … … 201 201 } 202 202 203 if (!isset($types[0]) ) {203 if (!isset($types[0]) || [] === $types[0]) { 204 204 return null; 205 205 } -
cartboss/trunk/vendor/symfony/property-info/Extractor/PhpStanExtractor.php
r2718232 r2901887 12 12 namespace Symfony\Component\PropertyInfo\Extractor; 13 13 14 use phpDocumentor\Reflection\Types\ContextFactory; 14 15 use PHPStan\PhpDocParser\Ast\PhpDoc\InvalidTagValueNode; 15 16 use PHPStan\PhpDocParser\Ast\PhpDoc\ParamTagValueNode; … … 60 61 public function __construct(array $mutatorPrefixes = null, array $accessorPrefixes = null, array $arrayMutatorPrefixes = null) 61 62 { 63 if (!class_exists(ContextFactory::class)) { 64 throw new \LogicException(sprintf('Unable to use the "%s" class as the "phpdocumentor/type-resolver" package is not installed. Try running composer require "phpdocumentor/type-resolver".', __CLASS__)); 65 } 66 67 if (!class_exists(PhpDocParser::class)) { 68 throw new \LogicException(sprintf('Unable to use the "%s" class as the "phpstan/phpdoc-parser" package is not installed. Try running composer require "phpstan/phpdoc-parser".', __CLASS__)); 69 } 70 62 71 $this->phpStanTypeHelper = new PhpStanTypeHelper(); 63 72 $this->mutatorPrefixes = $mutatorPrefixes ?? ReflectionExtractor::$defaultMutatorPrefixes; -
cartboss/trunk/vendor/symfony/property-info/LICENSE
r2718232 r2901887 1 Copyright (c) 2015- 2022Fabien Potencier1 Copyright (c) 2015-present Fabien Potencier 2 2 3 3 Permission is hereby granted, free of charge, to any person obtaining a copy -
cartboss/trunk/vendor/symfony/property-info/Util/PhpDocTypeHelper.php
r2847751 r2901887 174 174 return 'bool'; 175 175 176 // real is not part of the PHPDoc standard, so we ignore it176 // real is not part of the PHPDoc standard, so we ignore it 177 177 case 'double': 178 178 return 'float'; -
cartboss/trunk/vendor/symfony/serializer/Encoder/CsvEncoder.php
r2718232 r2901887 168 168 } else { 169 169 foreach ($cols as $col) { 170 $header = explode($keySeparator, $col );170 $header = explode($keySeparator, $col ?? ''); 171 171 $headers[] = $header; 172 172 $headerCount[] = \count($header); -
cartboss/trunk/vendor/symfony/serializer/LICENSE
r2718232 r2901887 1 Copyright (c) 2004- 2022Fabien Potencier1 Copyright (c) 2004-present Fabien Potencier 2 2 3 3 Permission is hereby granted, free of charge, to any person obtaining a copy -
cartboss/trunk/vendor/symfony/serializer/Normalizer/AbstractNormalizer.php
r2806369 r2901887 214 214 * @param bool $attributesAsString If false, return an array of {@link AttributeMetadataInterface} 215 215 * 216 * @return string[]|AttributeMetadataInterface[]|bool 217 * 216 218 * @throws LogicException if the 'allow_extra_attributes' context variable is false and no class metadata factory is provided 217 *218 * @return string[]|AttributeMetadataInterface[]|bool219 219 */ 220 220 protected function getAllowedAttributes($classOrObject, array $context, bool $attributesAsString = false) -
cartboss/trunk/vendor/symfony/serializer/Normalizer/BackedEnumNormalizer.php
r2806369 r2901887 26 26 * {@inheritdoc} 27 27 * 28 * @return int|string 29 * 28 30 * @throws InvalidArgumentException 29 *30 * @return int|string31 31 */ 32 32 public function normalize($object, string $format = null, array $context = []) -
cartboss/trunk/vendor/symfony/serializer/Normalizer/CustomNormalizer.php
r2595210 r2901887 45 45 * Checks if the given class implements the NormalizableInterface. 46 46 * 47 * @param mixed $data Data to normalize48 * @param string $format The format being (de-)serialized from or into47 * @param mixed $data Data to normalize 48 * @param string|null $format The format being (de-)serialized from or into 49 49 * 50 50 * @return bool … … 58 58 * Checks if the given class implements the DenormalizableInterface. 59 59 * 60 * @param mixed $data Data to denormalize from61 * @param string $type The class to which the data should be denormalized62 * @param string $format The format being deserialized from60 * @param mixed $data Data to denormalize from 61 * @param string $type The class to which the data should be denormalized 62 * @param string|null $format The format being deserialized from 63 63 * 64 64 * @return bool -
cartboss/trunk/vendor/symfony/serializer/Normalizer/DataUriNormalizer.php
r2638936 r2901887 89 89 * @see https://gist.github.com/bgrins/6194623 90 90 * 91 * @return \SplFileInfo 92 * 91 93 * @throws InvalidArgumentException 92 94 * @throws NotNormalizableValueException 93 *94 * @return \SplFileInfo95 95 */ 96 96 public function denormalize($data, string $type, string $format = null, array $context = []) -
cartboss/trunk/vendor/symfony/serializer/Normalizer/DateIntervalNormalizer.php
r2595210 r2901887 37 37 * {@inheritdoc} 38 38 * 39 * @return string 40 * 39 41 * @throws InvalidArgumentException 40 *41 * @return string42 42 */ 43 43 public function normalize($object, string $format = null, array $context = []) … … 69 69 * {@inheritdoc} 70 70 * 71 * @return \DateInterval 72 * 71 73 * @throws InvalidArgumentException 72 74 * @throws UnexpectedValueException 73 *74 * @return \DateInterval75 75 */ 76 76 public function denormalize($data, string $type, string $format = null, array $context = []) -
cartboss/trunk/vendor/symfony/serializer/Normalizer/DateTimeNormalizer.php
r2806369 r2901887 51 51 * {@inheritdoc} 52 52 * 53 * @return string 54 * 53 55 * @throws InvalidArgumentException 54 *55 * @return string56 56 */ 57 57 public function normalize($object, string $format = null, array $context = []) … … 83 83 * {@inheritdoc} 84 84 * 85 * @return \DateTimeInterface 86 * 85 87 * @throws NotNormalizableValueException 86 *87 * @return \DateTimeInterface88 88 */ 89 89 public function denormalize($data, string $type, string $format = null, array $context = []) -
cartboss/trunk/vendor/symfony/serializer/Normalizer/DateTimeZoneNormalizer.php
r2638936 r2901887 26 26 * {@inheritdoc} 27 27 * 28 * @return string 29 * 28 30 * @throws InvalidArgumentException 29 *30 * @return string31 31 */ 32 32 public function normalize($object, string $format = null, array $context = []) … … 50 50 * {@inheritdoc} 51 51 * 52 * @return \DateTimeZone 53 * 52 54 * @throws NotNormalizableValueException 53 *54 * @return \DateTimeZone55 55 */ 56 56 public function denormalize($data, string $type, string $format = null, array $context = []) -
cartboss/trunk/vendor/symfony/serializer/Normalizer/DenormalizerInterface.php
r2638936 r2901887 30 30 * Denormalizes data back into an object of the given class. 31 31 * 32 * @param mixed $data Data to restore33 * @param string $type The expected class to instantiate34 * @param string $format Format the given data was extracted from35 * @param array $context Options available to the denormalizer32 * @param mixed $data Data to restore 33 * @param string $type The expected class to instantiate 34 * @param string|null $format Format the given data was extracted from 35 * @param array $context Options available to the denormalizer 36 36 * 37 37 * @return mixed … … 50 50 * Checks whether the given class is supported for denormalization by this normalizer. 51 51 * 52 * @param mixed $data Data to denormalize from53 * @param string $type The class to which the data should be denormalized54 * @param string $format The format being deserialized from52 * @param mixed $data Data to denormalize from 53 * @param string $type The class to which the data should be denormalized 54 * @param string|null $format The format being deserialized from 55 55 * 56 56 * @return bool -
cartboss/trunk/vendor/symfony/serializer/Normalizer/GetSetMethodNormalizer.php
r2847751 r2901887 153 153 154 154 if (!isset(self::$setterAccessibleCache[$key])) { 155 try { 156 // We have to use is_callable() here since method_exists() 157 // does not "see" protected/private methods 158 self::$setterAccessibleCache[$key] = \is_callable([$object, $setter]) && !(new \ReflectionMethod($object, $setter))->isStatic(); 159 } catch (\ReflectionException $e) { 160 // Method does not exist in the class, probably a magic method 161 self::$setterAccessibleCache[$key] = false; 162 } 155 self::$setterAccessibleCache[$key] = method_exists($object, $setter) && \is_callable([$object, $setter]) && !(new \ReflectionMethod($object, $setter))->isStatic(); 163 156 } 164 157 -
cartboss/trunk/vendor/symfony/serializer/Normalizer/NormalizerInterface.php
r2595210 r2901887 25 25 * Normalizes an object into a set of arrays/scalars. 26 26 * 27 * @param mixed $object Object to normalize28 * @param string $format Format the normalization result will be encoded as29 * @param array $context Context options for the normalizer27 * @param mixed $object Object to normalize 28 * @param string|null $format Format the normalization result will be encoded as 29 * @param array $context Context options for the normalizer 30 30 * 31 31 * @return array|string|int|float|bool|\ArrayObject|null \ArrayObject is used to make sure an empty object is encoded as an object not an array … … 42 42 * Checks whether the given class is supported for normalization by this normalizer. 43 43 * 44 * @param mixed $data Data to normalize45 * @param string $format The format being (de-)serialized from or into44 * @param mixed $data Data to normalize 45 * @param string|null $format The format being (de-)serialized from or into 46 46 * 47 47 * @return bool -
cartboss/trunk/vendor/symfony/serializer/Serializer.php
r2806369 r2901887 258 258 * Returns a matching normalizer. 259 259 * 260 * @param mixed $data Data to get the serializer for261 * @param string $format Format name, present to give the option to normalizers to act differently based on formats262 * @param array $context Options available to the normalizer260 * @param mixed $data Data to get the serializer for 261 * @param string|null $format Format name, present to give the option to normalizers to act differently based on formats 262 * @param array $context Options available to the normalizer 263 263 */ 264 264 private function getNormalizer($data, ?string $format, array $context): ?NormalizerInterface … … 296 296 * Returns a matching denormalizer. 297 297 * 298 * @param mixed $data Data to restore299 * @param string $class The expected class to instantiate300 * @param string $format Format name, present to give the option to normalizers to act differently based on formats301 * @param array $context Options available to the denormalizer298 * @param mixed $data Data to restore 299 * @param string $class The expected class to instantiate 300 * @param string|null $format Format name, present to give the option to normalizers to act differently based on formats 301 * @param array $context Options available to the denormalizer 302 302 */ 303 303 private function getDenormalizer($data, string $class, ?string $format, array $context): ?DenormalizerInterface -
cartboss/trunk/vendor/symfony/string/AbstractUnicodeString.php
r2806369 r2901887 38 38 39 39 // the subset of folded case mappings that is not in lower case mappings 40 private const FOLD_FROM = ['İ', 'µ', 'ſ', "\xCD\x85", 'ς', 'ϐ', 'ϑ', 'ϕ', 'ϖ', 'ϰ', 'ϱ', 'ϵ', 'ẛ', "\xE1\xBE\xBE", 'ß', ' İ', 'ʼn', 'ǰ', 'ΐ', 'ΰ', 'և', 'ẖ', 'ẗ', 'ẘ', 'ẙ', 'ẚ', 'ẞ', 'ὐ', 'ὒ', 'ὔ', 'ὖ', 'ᾀ', 'ᾁ', 'ᾂ', 'ᾃ', 'ᾄ', 'ᾅ', 'ᾆ', 'ᾇ', 'ᾈ', 'ᾉ', 'ᾊ', 'ᾋ', 'ᾌ', 'ᾍ', 'ᾎ', 'ᾏ', 'ᾐ', 'ᾑ', 'ᾒ', 'ᾓ', 'ᾔ', 'ᾕ', 'ᾖ', 'ᾗ', 'ᾘ', 'ᾙ', 'ᾚ', 'ᾛ', 'ᾜ', 'ᾝ', 'ᾞ', 'ᾟ', 'ᾠ', 'ᾡ', 'ᾢ', 'ᾣ', 'ᾤ', 'ᾥ', 'ᾦ', 'ᾧ', 'ᾨ', 'ᾩ', 'ᾪ', 'ᾫ', 'ᾬ', 'ᾭ', 'ᾮ', 'ᾯ', 'ᾲ', 'ᾳ', 'ᾴ', 'ᾶ', 'ᾷ', 'ᾼ', 'ῂ', 'ῃ', 'ῄ', 'ῆ', 'ῇ', 'ῌ', 'ῒ', 'ΐ', 'ῖ', 'ῗ', 'ῢ', 'ΰ', 'ῤ', 'ῦ', 'ῧ', 'ῲ', 'ῳ', 'ῴ', 'ῶ', 'ῷ', 'ῼ', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'ſt', 'st', 'ﬓ', 'ﬔ', 'ﬕ', 'ﬖ', 'ﬗ'];41 private const FOLD_TO = ['i̇', 'μ', 's', 'ι', 'σ', 'β', 'θ', 'φ', 'π', 'κ', 'ρ', 'ε', 'ṡ', 'ι', 'ss', ' i̇', 'ʼn', 'ǰ', 'ΐ', 'ΰ', 'եւ', 'ẖ', 'ẗ', 'ẘ', 'ẙ', 'aʾ', 'ss', 'ὐ', 'ὒ', 'ὔ', 'ὖ', 'ἀι', 'ἁι', 'ἂι', 'ἃι', 'ἄι', 'ἅι', 'ἆι', 'ἇι', 'ἀι', 'ἁι', 'ἂι', 'ἃι', 'ἄι', 'ἅι', 'ἆι', 'ἇι', 'ἠι', 'ἡι', 'ἢι', 'ἣι', 'ἤι', 'ἥι', 'ἦι', 'ἧι', 'ἠι', 'ἡι', 'ἢι', 'ἣι', 'ἤι', 'ἥι', 'ἦι', 'ἧι', 'ὠι', 'ὡι', 'ὢι', 'ὣι', 'ὤι', 'ὥι', 'ὦι', 'ὧι', 'ὠι', 'ὡι', 'ὢι', 'ὣι', 'ὤι', 'ὥι', 'ὦι', 'ὧι', 'ὰι', 'αι', 'άι', 'ᾶ', 'ᾶι', 'αι', 'ὴι', 'ηι', 'ήι', 'ῆ', 'ῆι', 'ηι', 'ῒ', 'ΐ', 'ῖ', 'ῗ', 'ῢ', 'ΰ', 'ῤ', 'ῦ', 'ῧ', 'ὼι', 'ωι', 'ώι', 'ῶ', 'ῶι', 'ωι', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'st', 'st', 'մն', 'մե', 'մի', 'վն', 'մխ'];40 private const FOLD_FROM = ['İ', 'µ', 'ſ', "\xCD\x85", 'ς', 'ϐ', 'ϑ', 'ϕ', 'ϖ', 'ϰ', 'ϱ', 'ϵ', 'ẛ', "\xE1\xBE\xBE", 'ß', 'ʼn', 'ǰ', 'ΐ', 'ΰ', 'և', 'ẖ', 'ẗ', 'ẘ', 'ẙ', 'ẚ', 'ẞ', 'ὐ', 'ὒ', 'ὔ', 'ὖ', 'ᾀ', 'ᾁ', 'ᾂ', 'ᾃ', 'ᾄ', 'ᾅ', 'ᾆ', 'ᾇ', 'ᾈ', 'ᾉ', 'ᾊ', 'ᾋ', 'ᾌ', 'ᾍ', 'ᾎ', 'ᾏ', 'ᾐ', 'ᾑ', 'ᾒ', 'ᾓ', 'ᾔ', 'ᾕ', 'ᾖ', 'ᾗ', 'ᾘ', 'ᾙ', 'ᾚ', 'ᾛ', 'ᾜ', 'ᾝ', 'ᾞ', 'ᾟ', 'ᾠ', 'ᾡ', 'ᾢ', 'ᾣ', 'ᾤ', 'ᾥ', 'ᾦ', 'ᾧ', 'ᾨ', 'ᾩ', 'ᾪ', 'ᾫ', 'ᾬ', 'ᾭ', 'ᾮ', 'ᾯ', 'ᾲ', 'ᾳ', 'ᾴ', 'ᾶ', 'ᾷ', 'ᾼ', 'ῂ', 'ῃ', 'ῄ', 'ῆ', 'ῇ', 'ῌ', 'ῒ', 'ῖ', 'ῗ', 'ῢ', 'ῤ', 'ῦ', 'ῧ', 'ῲ', 'ῳ', 'ῴ', 'ῶ', 'ῷ', 'ῼ', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'ſt', 'st', 'ﬓ', 'ﬔ', 'ﬕ', 'ﬖ', 'ﬗ']; 41 private const FOLD_TO = ['i̇', 'μ', 's', 'ι', 'σ', 'β', 'θ', 'φ', 'π', 'κ', 'ρ', 'ε', 'ṡ', 'ι', 'ss', 'ʼn', 'ǰ', 'ΐ', 'ΰ', 'եւ', 'ẖ', 'ẗ', 'ẘ', 'ẙ', 'aʾ', 'ss', 'ὐ', 'ὒ', 'ὔ', 'ὖ', 'ἀι', 'ἁι', 'ἂι', 'ἃι', 'ἄι', 'ἅι', 'ἆι', 'ἇι', 'ἀι', 'ἁι', 'ἂι', 'ἃι', 'ἄι', 'ἅι', 'ἆι', 'ἇι', 'ἠι', 'ἡι', 'ἢι', 'ἣι', 'ἤι', 'ἥι', 'ἦι', 'ἧι', 'ἠι', 'ἡι', 'ἢι', 'ἣι', 'ἤι', 'ἥι', 'ἦι', 'ἧι', 'ὠι', 'ὡι', 'ὢι', 'ὣι', 'ὤι', 'ὥι', 'ὦι', 'ὧι', 'ὠι', 'ὡι', 'ὢι', 'ὣι', 'ὤι', 'ὥι', 'ὦι', 'ὧι', 'ὰι', 'αι', 'άι', 'ᾶ', 'ᾶι', 'αι', 'ὴι', 'ηι', 'ήι', 'ῆ', 'ῆι', 'ηι', 'ῒ', 'ῖ', 'ῗ', 'ῢ', 'ῤ', 'ῦ', 'ῧ', 'ὼι', 'ωι', 'ώι', 'ῶ', 'ῶι', 'ωι', 'ff', 'fi', 'fl', 'ffi', 'ffl', 'st', 'st', 'մն', 'մե', 'մի', 'վն', 'մխ']; 42 42 43 43 // the subset of upper case mappings that map one code point to many code points -
cartboss/trunk/vendor/symfony/string/LICENSE
r2718232 r2901887 1 Copyright (c) 2019- 2022Fabien Potencier1 Copyright (c) 2019-present Fabien Potencier 2 2 3 3 Permission is hereby granted, free of charge, to any person obtaining a copy
Note: See TracChangeset
for help on using the changeset viewer.