Changeset 3400404
- Timestamp:
- 11/21/2025 11:30:35 AM (4 months ago)
- Location:
- wpify-woo
- Files:
-
- 12 edited
- 1 copied
-
tags/5.2.0 (copied) (copied from wpify-woo/trunk)
-
tags/5.2.0/readme.txt (modified) (3 diffs)
-
tags/5.2.0/src/Modules/QRPayment/QRPaymentModule.php (modified) (16 diffs)
-
tags/5.2.0/src/Plugin.php (modified) (1 diff)
-
tags/5.2.0/vendor/composer/installed.php (modified) (2 diffs)
-
tags/5.2.0/vendor/wpify-woo/composer/installed.php (modified) (1 diff)
-
tags/5.2.0/wpify-woo.php (modified) (1 diff)
-
trunk/readme.txt (modified) (3 diffs)
-
trunk/src/Modules/QRPayment/QRPaymentModule.php (modified) (16 diffs)
-
trunk/src/Plugin.php (modified) (1 diff)
-
trunk/vendor/composer/installed.php (modified) (2 diffs)
-
trunk/vendor/wpify-woo/composer/installed.php (modified) (1 diff)
-
trunk/wpify-woo.php (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
wpify-woo/tags/5.2.0/readme.txt
r3399080 r3400404 5 5 Tested up to: 6.8 6 6 Requires PHP: 8.1 7 Stable tag: 5. 1.107 Stable tag: 5.2.0 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 113 113 ### QR Code Payment 114 114 115 * Display the QR code on the selected position on the thank you page. 116 * Display the QR code in the selected email notification. 117 * QR codes according to the QR Platba standard for CZ and Pay By Square pr SK. 118 * Rendering QR using an integrated library or external API. 119 * Supports any payment method. 120 * Supports any currency. 121 * Option to insert a note into the QR payment with the order number and store name. 122 * Option to add any text before and after the QR code. 123 * Option to limit QR code display by billing country. 115 * Support for multiple QR standards - QR Platba (CZ), Pay BY Square (SK), Hungarian standard (HU), EPC/SEPA (EU) 116 * Auto-detection of QR standard based on order billing country 117 * Configure multiple bank accounts for different payment methods 118 * Load bank account details from WooCommerce BACS settings or enter manually 119 * Display QR code on thank you page, email notifications and PDF invoices 120 * Shortcode `[wpify_woo_render_qr_code]` to display QR code anywhere 121 * Filter QR code display by payment method, currency and billing country 122 * Customize message and titles with placeholders for order details 123 * Compatibility mode for servers without XZ utils 124 * Developer hooks and filters for customization 124 125 125 126 ### Sklik retargeting … … 219 220 220 221 == Changelog == 222 = 5.2.0 = 223 * Add Auto detection for QR payment standard 224 * Add validation for QR payments and QR generators 225 * Add option to load bank account data from BACS payment method 226 * Add support inserting QR payment codes into WCPDF invoies 227 * Update dependencies 228 221 229 = 5.1.10 = 222 230 * Add HU QR payment standard -
wpify-woo/tags/5.2.0/src/Modules/QRPayment/QRPaymentModule.php
r3399080 r3400404 23 23 24 24 class QRPaymentModule extends AbstractModule { 25 /** 26 * QRPaymentModule constructor 27 * 28 * @param WooCommerceIntegration $woocommerce_integration WooCommerce integration instance 29 * @param RotatingFileLog $log Logger instance 30 */ 25 31 public function __construct( 26 32 private WooCommerceIntegration $woocommerce_integration, … … 41 47 $email_position_hook = $this->get_setting( 'email_position' ) ?: 'woocommerce_email_before_order_table'; 42 48 add_action( $email_position_hook, [ $this, 'display_qr_code_in_email' ], 20, 4 ); 43 } 44 49 50 add_action( 'wpo_wcpdf_after_order_details', array( $this, 'display_qr_code_in_wcpdf' ), 10, 2 ); 51 } 52 53 /** 54 * Display QR code on thank you page based on position setting 55 * 56 * @return void 57 */ 45 58 public function display_qr_code_on_thankyou() { 46 59 if ( is_checkout() && ! empty( is_wc_endpoint_url( 'order-received' ) ) ) { … … 79 92 } 80 93 94 /** 95 * Plugin slug 96 * 97 * @return string 98 */ 81 99 public function plugin_slug(): string { 82 100 return Plugin::PLUGIN_SLUG; … … 135 153 'items' => [ 136 154 [ 137 'id' => 'number', 138 'type' => 'text', 139 'label' => __( 'Account number', 'wpify-woo' ), 140 ], 141 [ 142 'id' => 'bank_code', 143 'type' => 'text', 144 'label' => __( 'Bank Code', 'wpify-woo' ), 155 'id' => 'source', 156 'type' => 'select', 157 'label' => __( 'Account data source', 'wpify-woo' ), 158 'options' => function () { 159 return $this->get_bacs_accounts_options(); 160 }, 161 'async' => true, 162 'async_params' => array( 163 'tab' => 'wpify-woo-settings', 164 'section' => $this->id(), 165 'module_id' => $this->id(), 166 ), 167 'default' => '', 168 'required' => true, 145 169 ], 146 170 [ … … 148 172 'type' => 'text', 149 173 'label' => __( 'IBAN', 'wpify-woo' ), 174 'conditions' => array( 175 array( 176 'field' => '#.source', 177 'condition' => 'empty' 178 ), 179 ), 180 ], 181 [ 182 'id' => 'number', 183 'type' => 'text', 184 'label' => __( 'Account number (CZ only)', 'wpify-woo' ), 185 'conditions' => array( 186 array( 187 'field' => '#.source', 188 'condition' => 'empty' 189 ), 190 ), 191 ], 192 [ 193 'id' => 'bank_code', 194 'type' => 'text', 195 'label' => __( 'Bank Code (CZ only)', 'wpify-woo' ), 196 'conditions' => array( 197 array( 198 'field' => '#.source', 199 'condition' => 'empty' 200 ), 201 ), 150 202 ], 151 203 [ … … 153 205 'type' => 'text', 154 206 'label' => __( 'BIC (SWIFT)', 'wpify-woo' ), 207 'conditions' => array( 208 array( 209 'field' => '#.source', 210 'condition' => 'empty' 211 ), 212 ), 213 ], 214 [ 215 'id' => 'recipient_name', 216 'type' => 'text', 217 'label' => __( 'Recipient name', 'wpify-woo' ), 218 'description' => __( 'Full name of the account owner or company business name.', 'wpify-woo' ), 155 219 ], 156 220 [ … … 161 225 'options' => [ 162 226 [ 163 'label' => 'CZ - QR Platba', 227 'label' => __( 'Auto detect by order', 'wpify-woo' ), 228 'value' => 'auto', 229 ], 230 [ 231 'label' => 'QR Platba – CZ + CZK', 164 232 'value' => 'cz', 165 233 ], 166 234 [ 167 'label' => ' SK - Pay BY Square',235 'label' => 'Pay BY Square – SK + EUR', 168 236 'value' => 'sk', 169 237 ], 170 238 [ 171 'label' => 'H U - Hungary standard',239 'label' => 'Hungary standard – HU + HUF', 172 240 'value' => 'hu', 173 241 ], 174 242 [ 175 'label' => 'E U - EPC standard (DE, NL, AT, BE, FI)',176 'value' => 'e u',243 'label' => 'EPC standard (SEPA) – DE, NL, AT, BE, FI + EUR', 244 'value' => 'epc', 177 245 ], 178 246 ], … … 186 254 }, 187 255 'async' => true, 256 'disabled' => true, 188 257 'async_params' => array( 189 258 'tab' => 'wpify-woo-settings', … … 210 279 'type' => 'text', 211 280 'label' => __( 'Info label', 'wpify-woo' ), 212 ],213 [214 'id' => 'recipient_name',215 'type' => 'text',216 'label' => __( 'Recipient name', 'wpify-woo' ),217 'description' => __( 'Full name of the account owner or company business name. (SK only)', 'wpify-woo' ),218 281 ], 219 282 ], … … 301 364 ); 302 365 366 if ( function_exists( 'wcpdf_get_document' ) ) { 367 $settings[] = [ 368 'id' => 'in_wcpdf', 369 'label' => __( 'Insert into WCPDF invoice', 'wpify-woo' ), 370 'desc' => __( 'Insert QR payment into PDF Invoices from PDF Invoices & Packing Slips for WooCommerce plugin.', 'wpify-woo' ), 371 'type' => 'toggle', 372 ]; 373 } 374 303 375 return $settings; 304 376 } … … 387 459 if ( 'cz' === $account['type'] ) { 388 460 try { 389 $payment = new QrPayment( new CzechIbanAdapter( $payment_details['account_number'], $payment_details['bank_code'] ), [ 461 $iban = $payment_details['iban'] ? new IBAN( $payment_details['iban'] ) : new CzechIbanAdapter( $payment_details['account_number'], $payment_details['bank_code'] ); 462 $payment = new QrPayment( $iban, [ 390 463 QrPaymentOptions::VARIABLE_SYMBOL => $payment_details['vs'], 391 464 QrPaymentOptions::AMOUNT => $payment_details['total'], … … 393 466 QrPaymentOptions::DUE_DATE => new DateTime( $payment_details['due_date'] ), 394 467 QrPaymentOptions::COMMENT => $payment_details['note'], 468 QrPaymentOptions::PAYEE_NAME => $payment_details['recipient_name'], 395 469 ] ); 396 470 $qrCode = $payment->getQrCode()->getDataUri(); … … 468 542 return new WP_Error( 'error', 'QR ERROR: ' . $e->getMessage() ); 469 543 } 470 } elseif ( 'e u' === $account['type'] ) {544 } elseif ( 'epc' === $account['type'] ) { 471 545 try { 472 546 $payment = new \WpifyWooDeps\rikudou\EuQrPayment\QrPayment( $payment_details['iban'] ); … … 578 652 } 579 653 654 $account = $this->validate_account_data( $account, $order ); 655 656 if ( is_wp_error( $account ) ) { 657 continue; 658 } 659 580 660 $base64 = $this->render_qr_code( $order, $account ); 581 661 … … 621 701 $title_after = str_replace( array_keys( $replaces ), array_values( $replaces ), $this->get_setting( 'title_after' ) ); 622 702 703 echo '<style>.wpify-woo-qr-payment_code {max-width: 120px;}</style>'; 623 704 echo '<div class="wpify-woo-qr-payment">'; 624 705 echo sprintf( '<div class="wpify-woo-qr-payment_title-before">%s</div>', $title_before ); … … 732 813 return ob_get_clean(); 733 814 } 815 816 /** 817 * Validate and prepare account data for QR code generation 818 * 819 * @param array $account Account configuration data 820 * @param WC_Order $order WooCommerce order object 821 * 822 * @return array|WP_Error Validated account data or WP_Error on failure 823 */ 824 public function validate_account_data( $account, $order ) { 825 $country = $order->get_billing_country(); 826 $currency = $order->get_currency(); 827 828 if ( 'auto' === $account['type'] ) { 829 if ( 'CZ' === $country ) { 830 $account['type'] = 'cz'; 831 } elseif ( 'SK' === $country ) { 832 $account['type'] = 'sk'; 833 } elseif ( 'HU' === $country ) { 834 $account['type'] = 'hu'; 835 } else { 836 $account['type'] = 'epc'; 837 } 838 } 839 840 if ( 841 ( 'cz' === $account['type'] && 'CZK' !== $currency ) || 842 ( 'sk' === $account['type'] && 'EUR' !== $currency ) || 843 ( 'hu' === $account['type'] && 'HUF' !== $currency ) || 844 ( 'epc' === $account['type'] && 'EUR' !== $currency ) 845 ) { 846 $message = __( 'QR payment: Unsupported currency for QR standard.', 'wpify-woo' ); 847 $this->log->error( sprintf( $message ), 848 array( 849 'data' => array( 850 'order_id' => $order->get_id(), 851 'country' => $country, 852 'standard' => $account['type'], 853 'currency' => $currency, 854 ), 855 ) 856 ); 857 858 return new WP_Error( 'error', $message ); 859 } 860 861 if ( ! empty( $account['source'] ) || '0' == $account['source'] ) { 862 $bacs_data = $this->get_bacs_account_data( $account['source'] ); 863 864 if ( !empty( $bacs_data ) ) { 865 866 if ( ! empty( $bacs_data['account_number'] ) ) { 867 $numbers = explode( '/', $bacs_data['account_number'] ); 868 $account['number'] = $numbers[0] ?: ''; 869 $account['bank_code'] = $numbers[1] ?: ''; 870 } 871 872 if ( ! empty( $bacs_data['iban'] ) ) { 873 $account['iban'] = $bacs_data['iban']; 874 } 875 876 if ( ! empty( $bacs_data['bic'] ) ) { 877 $account['bic'] = $bacs_data['bic']; 878 } 879 880 if ( ! empty( $bacs_data['account_name'] ) ) { 881 $account['recipient_name'] = $account['recipient_name'] ?: $bacs_data['account_name']; 882 } 883 884 } 885 } 886 887 return apply_filters( 'wpify_woo_qr_account_data', $account, $order ); 888 } 889 890 /** 891 * Display QR code in WCPDF invoices 892 * 893 * @param string $invoice_type Type of WCPDF document 894 * @param WC_Order $order WooCommerce order object 895 * 896 * @return void 897 * @throws Exception 898 */ 899 public function display_qr_code_in_wcpdf( $invoice_type, $order ) { 900 $render = $this->get_setting( 'in_wcpdf' ) ?: false; 901 902 if ( 'invoice' !== $invoice_type || ! $render ) { 903 return; 904 } 905 906 $this->display_qr_code( $order ); 907 } 908 909 /** 910 * Get BACS account data by key 911 * 912 * @param int|string $key Account index from BACS settings 913 * 914 * @return array|null Account data or null if not found 915 */ 916 public function get_bacs_account_data( $key ) { 917 $bacs_accounts_info = get_option( 'woocommerce_bacs_accounts' ); 918 919 return $bacs_accounts_info[$key] ?: null; 920 } 921 922 /** 923 * Get BACS accounts as select options for settings 924 * 925 * @return array[] Array of options with value and label keys 926 */ 927 public function get_bacs_accounts_options() { 928 $bacs_accounts_info = get_option( 'woocommerce_bacs_accounts' ); 929 $options = [ 930 [ 931 'value' => '', 932 'label' => __( 'Manual', 'wpify-woo' ), 933 ] 934 ]; 935 foreach ( $bacs_accounts_info as $key => $value ) { 936 $options[] = [ 937 'value' => $key, 938 'label' => $value['account_name'] 939 ]; 940 } 941 942 return $options; 943 944 } 734 945 } -
wpify-woo/tags/5.2.0/src/Plugin.php
r3399080 r3400404 23 23 24 24 /** Plugin version */ 25 public const VERSION = '5. 1.10';25 public const VERSION = '5.2.0'; 26 26 27 27 /** Plugin slug name */ -
wpify-woo/tags/5.2.0/vendor/composer/installed.php
r3399080 r3400404 2 2 'root' => array( 3 3 'name' => 'wpify/woo', 4 'pretty_version' => '5. 1.10',5 'version' => '5. 1.10.0',6 'reference' => ' 1a52a89f80604ac1533d6007f4b8f7a41fba893e',4 'pretty_version' => '5.2.0', 5 'version' => '5.2.0.0', 6 'reference' => 'ee9f6470e3c7a9d67f7cac512b5deaf8826424df', 7 7 'type' => 'project', 8 8 'install_path' => __DIR__ . '/../../', … … 12 12 'versions' => array( 13 13 'wpify/woo' => array( 14 'pretty_version' => '5. 1.10',15 'version' => '5. 1.10.0',16 'reference' => ' 1a52a89f80604ac1533d6007f4b8f7a41fba893e',14 'pretty_version' => '5.2.0', 15 'version' => '5.2.0.0', 16 'reference' => 'ee9f6470e3c7a9d67f7cac512b5deaf8826424df', 17 17 'type' => 'project', 18 18 'install_path' => __DIR__ . '/../../', -
wpify-woo/tags/5.2.0/vendor/wpify-woo/composer/installed.php
r3399080 r3400404 3 3 namespace WpifyWooDeps; 4 4 5 return array('root' => array('name' => '__root__', 'pretty_version' => '5. 1.10', 'version' => '5.1.10.0', 'reference' => '1a52a89f80604ac1533d6007f4b8f7a41fba893e', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev' => \true), 'versions' => array('__root__' => array('pretty_version' => '5.1.10', 'version' => '5.1.10.0', 'reference' => '1a52a89f80604ac1533d6007f4b8f7a41fba893e', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev_requirement' => \false), 'bacon/bacon-qr-code' => array('pretty_version' => '2.0.8', 'version' => '2.0.8.0', 'reference' => '8674e51bb65af933a5ffaf1c308a660387c35c22', 'type' => 'library', 'install_path' => __DIR__ . '/../bacon/bacon-qr-code', 'aliases' => array(), 'dev_requirement' => \false), 'dasprid/enum' => array('pretty_version' => '1.0.7', 'version' => '1.0.7.0', 'reference' => 'b5874fa9ed0043116c72162ec7f4fb50e02e7cce', 'type' => 'library', 'install_path' => __DIR__ . '/../dasprid/enum', 'aliases' => array(), 'dev_requirement' => \false), 'dragonbe/vies' => array('pretty_version' => '2.3.2', 'version' => '2.3.2.0', 'reference' => 'd9193cbaba7e2faefbdc228fb1bf5670f20acf30', 'type' => 'tool', 'install_path' => __DIR__ . '/../dragonbe/vies', 'aliases' => array(), 'dev_requirement' => \false), 'endroid/qr-code' => array('pretty_version' => '4.5.0', 'version' => '4.5.0.0', 'reference' => '36681470bd10352b53bcb9731bdf2270e0d79b22', 'type' => 'library', 'install_path' => __DIR__ . '/../endroid/qr-code', 'aliases' => array(), 'dev_requirement' => \false), 'guzzlehttp/guzzle' => array('pretty_version' => '7.10.0', 'version' => '7.10.0.0', 'reference' => 'b51ac707cfa420b7bfd4e4d5e510ba8008e822b4', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/guzzle', 'aliases' => array(), 'dev_requirement' => \false), 'guzzlehttp/promises' => array('pretty_version' => '2.3.0', 'version' => '2.3.0.0', 'reference' => '481557b130ef3790cf82b713667b43030dc9c957', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/promises', 'aliases' => array(), 'dev_requirement' => \false), 'guzzlehttp/psr7' => array('pretty_version' => '2.8.0', 'version' => '2.8.0.0', 'reference' => '21dc724a0583619cd1652f673303492272778051', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/psr7', 'aliases' => array(), 'dev_requirement' => \false), 'h4kuna/ares' => array('pretty_version' => 'v3.0.13', 'version' => '3.0.13.0', 'reference' => 'd695e8b57b0410738d8eb9d7157bb8c7ec340d72', 'type' => 'library', 'install_path' => __DIR__ . '/../h4kuna/ares', 'aliases' => array(), 'dev_requirement' => \false), 'heureka/inflection' => array('pretty_version' => 'v3.0.4', 'version' => '3.0.4.0', 'reference' => '684ca578eee3ede920d5d3ca8d568fb70e7d9076', 'type' => 'library', 'install_path' => __DIR__ . '/../heureka/inflection', 'aliases' => array(), 'dev_requirement' => \false), 'heureka/overeno-zakazniky' => array('pretty_version' => '3.0.3', 'version' => '3.0.3.0', 'reference' => 'aa52add431bac32c67b1c00b1969a98709cd611b', 'type' => 'library', 'install_path' => __DIR__ . '/../heureka/overeno-zakazniky', 'aliases' => array(), 'dev_requirement' => \false), 'hubipe/huqrpayment' => array('pretty_version' => 'v1.1.1', 'version' => '1.1.1.0', 'reference' => 'a1d493dfd21a5a76798dd6629ac2bdae2da2b535', 'type' => 'library', 'install_path' => __DIR__ . '/../hubipe/huqrpayment', 'aliases' => array(), 'dev_requirement' => \false), 'laravel/serializable-closure' => array('pretty_version' => 'v1.3.7', 'version' => '1.3.7.0', 'reference' => '4f48ade902b94323ca3be7646db16209ec76be3d', 'type' => 'library', 'install_path' => __DIR__ . '/../laravel/serializable-closure', 'aliases' => array(), 'dev_requirement' => \false), 'nette/utils' => array('pretty_version' => 'v4.0.8', 'version' => '4.0.8.0', 'reference' => 'c930ca4e3cf4f17dcfb03037703679d2396d2ede', 'type' => 'library', 'install_path' => __DIR__ . '/../nette/utils', 'aliases' => array(), 'dev_requirement' => \false), 'php-di/invoker' => array('pretty_version' => '2.3.7', 'version' => '2.3.7.0', 'reference' => '3c1ddfdef181431fbc4be83378f6d036d59e81e1', 'type' => 'library', 'install_path' => __DIR__ . '/../php-di/invoker', 'aliases' => array(), 'dev_requirement' => \false), 'php-di/php-di' => array('pretty_version' => '6.4.0', 'version' => '6.4.0.0', 'reference' => 'ae0f1b3b03d8b29dff81747063cbfd6276246cc4', 'type' => 'library', 'install_path' => __DIR__ . '/../php-di/php-di', 'aliases' => array(), 'dev_requirement' => \false), 'php-di/phpdoc-reader' => array('pretty_version' => '2.2.1', 'version' => '2.2.1.0', 'reference' => '66daff34cbd2627740ffec9469ffbac9f8c8185c', 'type' => 'library', 'install_path' => __DIR__ . '/../php-di/phpdoc-reader', 'aliases' => array(), 'dev_requirement' => \false), 'psr/container' => array('pretty_version' => '1.1.2', 'version' => '1.1.2.0', 'reference' => '513e0666f7216c7459170d56df27dfcefe1689ea', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/container', 'aliases' => array(), 'dev_requirement' => \false), 'psr/container-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '^1.0')), 'psr/http-client' => array('pretty_version' => '1.0.3', 'version' => '1.0.3.0', 'reference' => 'bb5906edc1c324c9a05aa0873d40117941e5fa90', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-client', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-client-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.0')), 'psr/http-factory' => array('pretty_version' => '1.1.0', 'version' => '1.1.0.0', 'reference' => '2b4765fddfe3b508ac62f829e852b1501d3f6e8a', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-factory', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-factory-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.0')), 'psr/http-message' => array('pretty_version' => '2.0', 'version' => '2.0.0.0', 'reference' => '402d35bcb92c70c026d1a6a9883f06b2ead23d71', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-message', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-message-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.0')), 'psr/log' => array('pretty_version' => '3.0.2', 'version' => '3.0.2.0', 'reference' => 'f16e1d5863e37f8d8c2a01719f5b34baa2b714d3', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/log', 'aliases' => array(), 'dev_requirement' => \false), 'ralouphie/getallheaders' => array('pretty_version' => '3.0.3', 'version' => '3.0.3.0', 'reference' => '120b605dfeb996808c31b6477290a714d356e822', 'type' => 'library', 'install_path' => __DIR__ . '/../ralouphie/getallheaders', 'aliases' => array(), 'dev_requirement' => \false), 'rikudou/czqrpayment' => array('pretty_version' => 'v5.3.1', 'version' => '5.3.1.0', 'reference' => 'f8e0ecbbdb6d30bafb50a833cc7cfe4f575b82a4', 'type' => 'library', 'install_path' => __DIR__ . '/../rikudou/czqrpayment', 'aliases' => array(), 'dev_requirement' => \false), 'rikudou/euqrpayment' => array('pretty_version' => 'v1.4.0', 'version' => '1.4.0.0', 'reference' => '4587cc8fed131939e5bf2ee0898b89ab2b1d346d', 'type' => 'library', 'install_path' => __DIR__ . '/../rikudou/euqrpayment', 'aliases' => array(), 'dev_requirement' => \false), 'rikudou/iban' => array('pretty_version' => 'v1.3.0', 'version' => '1.3.0.0', 'reference' => '7fe69bf9274792c37d5a8d9d38ef5cb000f8377a', 'type' => 'library', 'install_path' => __DIR__ . '/../rikudou/iban', 'aliases' => array(), 'dev_requirement' => \false), 'rikudou/qr-payment-interface' => array('pretty_version' => 'v1.1.0', 'version' => '1.1.0.0', 'reference' => '752f7a6bf1190c7d65ead90b5989f61927436c89', 'type' => 'library', 'install_path' => __DIR__ . '/../rikudou/qr-payment-interface', 'aliases' => array(), 'dev_requirement' => \false), 'rikudou/qr-payment-qr-code-provider' => array('pretty_version' => 'v1.2.0', 'version' => '1.2.0.0', 'reference' => 'd233c4bedeecf2ff7cd7e7d4ec7f4ad4a5eb4b64', 'type' => 'library', 'install_path' => __DIR__ . '/../rikudou/qr-payment-qr-code-provider', 'aliases' => array(), 'dev_requirement' => \false), 'rikudou/skqrpayment' => array('pretty_version' => 'v4.2.3', 'version' => '4.2.3.0', 'reference' => '857ab3707dd7effc2050c7ef152c61aef7c33d92', 'type' => 'library', 'install_path' => __DIR__ . '/../rikudou/skqrpayment', 'aliases' => array(), 'dev_requirement' => \false), 'spatie/array-to-xml' => array('pretty_version' => '2.17.1', 'version' => '2.17.1.0', 'reference' => '5cbec9c6ab17e320c58a259f0cebe88bde4a7c46', 'type' => 'library', 'install_path' => __DIR__ . '/../spatie/array-to-xml', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/deprecation-contracts' => array('pretty_version' => 'v3.6.0', 'version' => '3.6.0.0', 'reference' => '63afe740e99a13ba87ec199bb07bbdee937a5b62', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', 'aliases' => array(), 'dev_requirement' => \false), 'woocommerce/action-scheduler' => array('pretty_version' => '3.9.3', 'version' => '3.9.3.0', 'reference' => 'c58cdbab17651303d406cd3b22cf9d75c71c986c', 'type' => 'wordpress-plugin', 'install_path' => __DIR__ . '/../woocommerce/action-scheduler', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/asset' => array('pretty_version' => '1.3.0', 'version' => '1.3.0.0', 'reference' => 'faf957af650b441b49f03cb7ffa42abfe157b43b', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/asset', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/custom-fields' => array('pretty_version' => '4.1.2', 'version' => '4.1.2.0', 'reference' => '38854fc46225a6e8387e75086ba2201df32415fc', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/custom-fields', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/license' => array('pretty_version' => '2.0.7', 'version' => '2.0.7.0', 'reference' => '7f8e7fe16a1bb77cdfcd29c694c5a489fc8db1b1', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/license', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/log' => array('pretty_version' => '1.2.1', 'version' => '1.2.1.0', 'reference' => 'acd58dc5a8fb38e58c167adc2f9b2c588a7a2d87', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/log', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/model' => array('pretty_version' => '4.1.27', 'version' => '4.1.27.0', 'reference' => 'e6c6a6421ade5498be4f5fd1580770bd8dbd2fd6', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/model', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/plugin-utils' => array('pretty_version' => '1.0.1', 'version' => '1.0.1.0', 'reference' => '0ace7f3a23bdfe3e2b2b05c72af79fa034c7e77a', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/plugin-utils', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/woo-core' => array('pretty_version' => '5.1.20', 'version' => '5.1.20.0', 'reference' => '2d2032c6da6b538079d8e152618b1e5493319409', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/woo-core', 'aliases' => array(), 'dev_requirement' => \false)));5 return array('root' => array('name' => '__root__', 'pretty_version' => '5.2.0', 'version' => '5.2.0.0', 'reference' => 'ee9f6470e3c7a9d67f7cac512b5deaf8826424df', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev' => \true), 'versions' => array('__root__' => array('pretty_version' => '5.2.0', 'version' => '5.2.0.0', 'reference' => 'ee9f6470e3c7a9d67f7cac512b5deaf8826424df', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev_requirement' => \false), 'bacon/bacon-qr-code' => array('pretty_version' => '2.0.8', 'version' => '2.0.8.0', 'reference' => '8674e51bb65af933a5ffaf1c308a660387c35c22', 'type' => 'library', 'install_path' => __DIR__ . '/../bacon/bacon-qr-code', 'aliases' => array(), 'dev_requirement' => \false), 'dasprid/enum' => array('pretty_version' => '1.0.7', 'version' => '1.0.7.0', 'reference' => 'b5874fa9ed0043116c72162ec7f4fb50e02e7cce', 'type' => 'library', 'install_path' => __DIR__ . '/../dasprid/enum', 'aliases' => array(), 'dev_requirement' => \false), 'dragonbe/vies' => array('pretty_version' => '2.3.2', 'version' => '2.3.2.0', 'reference' => 'd9193cbaba7e2faefbdc228fb1bf5670f20acf30', 'type' => 'tool', 'install_path' => __DIR__ . '/../dragonbe/vies', 'aliases' => array(), 'dev_requirement' => \false), 'endroid/qr-code' => array('pretty_version' => '4.5.0', 'version' => '4.5.0.0', 'reference' => '36681470bd10352b53bcb9731bdf2270e0d79b22', 'type' => 'library', 'install_path' => __DIR__ . '/../endroid/qr-code', 'aliases' => array(), 'dev_requirement' => \false), 'guzzlehttp/guzzle' => array('pretty_version' => '7.10.0', 'version' => '7.10.0.0', 'reference' => 'b51ac707cfa420b7bfd4e4d5e510ba8008e822b4', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/guzzle', 'aliases' => array(), 'dev_requirement' => \false), 'guzzlehttp/promises' => array('pretty_version' => '2.3.0', 'version' => '2.3.0.0', 'reference' => '481557b130ef3790cf82b713667b43030dc9c957', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/promises', 'aliases' => array(), 'dev_requirement' => \false), 'guzzlehttp/psr7' => array('pretty_version' => '2.8.0', 'version' => '2.8.0.0', 'reference' => '21dc724a0583619cd1652f673303492272778051', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/psr7', 'aliases' => array(), 'dev_requirement' => \false), 'h4kuna/ares' => array('pretty_version' => 'v3.0.13', 'version' => '3.0.13.0', 'reference' => 'd695e8b57b0410738d8eb9d7157bb8c7ec340d72', 'type' => 'library', 'install_path' => __DIR__ . '/../h4kuna/ares', 'aliases' => array(), 'dev_requirement' => \false), 'heureka/inflection' => array('pretty_version' => 'v3.0.4', 'version' => '3.0.4.0', 'reference' => '684ca578eee3ede920d5d3ca8d568fb70e7d9076', 'type' => 'library', 'install_path' => __DIR__ . '/../heureka/inflection', 'aliases' => array(), 'dev_requirement' => \false), 'heureka/overeno-zakazniky' => array('pretty_version' => '3.0.3', 'version' => '3.0.3.0', 'reference' => 'aa52add431bac32c67b1c00b1969a98709cd611b', 'type' => 'library', 'install_path' => __DIR__ . '/../heureka/overeno-zakazniky', 'aliases' => array(), 'dev_requirement' => \false), 'hubipe/huqrpayment' => array('pretty_version' => 'v1.1.1', 'version' => '1.1.1.0', 'reference' => 'a1d493dfd21a5a76798dd6629ac2bdae2da2b535', 'type' => 'library', 'install_path' => __DIR__ . '/../hubipe/huqrpayment', 'aliases' => array(), 'dev_requirement' => \false), 'laravel/serializable-closure' => array('pretty_version' => 'v1.3.7', 'version' => '1.3.7.0', 'reference' => '4f48ade902b94323ca3be7646db16209ec76be3d', 'type' => 'library', 'install_path' => __DIR__ . '/../laravel/serializable-closure', 'aliases' => array(), 'dev_requirement' => \false), 'nette/utils' => array('pretty_version' => 'v4.0.8', 'version' => '4.0.8.0', 'reference' => 'c930ca4e3cf4f17dcfb03037703679d2396d2ede', 'type' => 'library', 'install_path' => __DIR__ . '/../nette/utils', 'aliases' => array(), 'dev_requirement' => \false), 'php-di/invoker' => array('pretty_version' => '2.3.7', 'version' => '2.3.7.0', 'reference' => '3c1ddfdef181431fbc4be83378f6d036d59e81e1', 'type' => 'library', 'install_path' => __DIR__ . '/../php-di/invoker', 'aliases' => array(), 'dev_requirement' => \false), 'php-di/php-di' => array('pretty_version' => '6.4.0', 'version' => '6.4.0.0', 'reference' => 'ae0f1b3b03d8b29dff81747063cbfd6276246cc4', 'type' => 'library', 'install_path' => __DIR__ . '/../php-di/php-di', 'aliases' => array(), 'dev_requirement' => \false), 'php-di/phpdoc-reader' => array('pretty_version' => '2.2.1', 'version' => '2.2.1.0', 'reference' => '66daff34cbd2627740ffec9469ffbac9f8c8185c', 'type' => 'library', 'install_path' => __DIR__ . '/../php-di/phpdoc-reader', 'aliases' => array(), 'dev_requirement' => \false), 'psr/container' => array('pretty_version' => '1.1.2', 'version' => '1.1.2.0', 'reference' => '513e0666f7216c7459170d56df27dfcefe1689ea', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/container', 'aliases' => array(), 'dev_requirement' => \false), 'psr/container-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '^1.0')), 'psr/http-client' => array('pretty_version' => '1.0.3', 'version' => '1.0.3.0', 'reference' => 'bb5906edc1c324c9a05aa0873d40117941e5fa90', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-client', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-client-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.0')), 'psr/http-factory' => array('pretty_version' => '1.1.0', 'version' => '1.1.0.0', 'reference' => '2b4765fddfe3b508ac62f829e852b1501d3f6e8a', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-factory', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-factory-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.0')), 'psr/http-message' => array('pretty_version' => '2.0', 'version' => '2.0.0.0', 'reference' => '402d35bcb92c70c026d1a6a9883f06b2ead23d71', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-message', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-message-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.0')), 'psr/log' => array('pretty_version' => '3.0.2', 'version' => '3.0.2.0', 'reference' => 'f16e1d5863e37f8d8c2a01719f5b34baa2b714d3', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/log', 'aliases' => array(), 'dev_requirement' => \false), 'ralouphie/getallheaders' => array('pretty_version' => '3.0.3', 'version' => '3.0.3.0', 'reference' => '120b605dfeb996808c31b6477290a714d356e822', 'type' => 'library', 'install_path' => __DIR__ . '/../ralouphie/getallheaders', 'aliases' => array(), 'dev_requirement' => \false), 'rikudou/czqrpayment' => array('pretty_version' => 'v5.3.1', 'version' => '5.3.1.0', 'reference' => 'f8e0ecbbdb6d30bafb50a833cc7cfe4f575b82a4', 'type' => 'library', 'install_path' => __DIR__ . '/../rikudou/czqrpayment', 'aliases' => array(), 'dev_requirement' => \false), 'rikudou/euqrpayment' => array('pretty_version' => 'v1.4.0', 'version' => '1.4.0.0', 'reference' => '4587cc8fed131939e5bf2ee0898b89ab2b1d346d', 'type' => 'library', 'install_path' => __DIR__ . '/../rikudou/euqrpayment', 'aliases' => array(), 'dev_requirement' => \false), 'rikudou/iban' => array('pretty_version' => 'v1.3.0', 'version' => '1.3.0.0', 'reference' => '7fe69bf9274792c37d5a8d9d38ef5cb000f8377a', 'type' => 'library', 'install_path' => __DIR__ . '/../rikudou/iban', 'aliases' => array(), 'dev_requirement' => \false), 'rikudou/qr-payment-interface' => array('pretty_version' => 'v1.1.0', 'version' => '1.1.0.0', 'reference' => '752f7a6bf1190c7d65ead90b5989f61927436c89', 'type' => 'library', 'install_path' => __DIR__ . '/../rikudou/qr-payment-interface', 'aliases' => array(), 'dev_requirement' => \false), 'rikudou/qr-payment-qr-code-provider' => array('pretty_version' => 'v1.2.0', 'version' => '1.2.0.0', 'reference' => 'd233c4bedeecf2ff7cd7e7d4ec7f4ad4a5eb4b64', 'type' => 'library', 'install_path' => __DIR__ . '/../rikudou/qr-payment-qr-code-provider', 'aliases' => array(), 'dev_requirement' => \false), 'rikudou/skqrpayment' => array('pretty_version' => 'v4.2.3', 'version' => '4.2.3.0', 'reference' => '857ab3707dd7effc2050c7ef152c61aef7c33d92', 'type' => 'library', 'install_path' => __DIR__ . '/../rikudou/skqrpayment', 'aliases' => array(), 'dev_requirement' => \false), 'spatie/array-to-xml' => array('pretty_version' => '2.17.1', 'version' => '2.17.1.0', 'reference' => '5cbec9c6ab17e320c58a259f0cebe88bde4a7c46', 'type' => 'library', 'install_path' => __DIR__ . '/../spatie/array-to-xml', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/deprecation-contracts' => array('pretty_version' => 'v3.6.0', 'version' => '3.6.0.0', 'reference' => '63afe740e99a13ba87ec199bb07bbdee937a5b62', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', 'aliases' => array(), 'dev_requirement' => \false), 'woocommerce/action-scheduler' => array('pretty_version' => '3.9.3', 'version' => '3.9.3.0', 'reference' => 'c58cdbab17651303d406cd3b22cf9d75c71c986c', 'type' => 'wordpress-plugin', 'install_path' => __DIR__ . '/../woocommerce/action-scheduler', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/asset' => array('pretty_version' => '1.3.0', 'version' => '1.3.0.0', 'reference' => 'faf957af650b441b49f03cb7ffa42abfe157b43b', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/asset', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/custom-fields' => array('pretty_version' => '4.1.2', 'version' => '4.1.2.0', 'reference' => '38854fc46225a6e8387e75086ba2201df32415fc', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/custom-fields', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/license' => array('pretty_version' => '2.0.7', 'version' => '2.0.7.0', 'reference' => '7f8e7fe16a1bb77cdfcd29c694c5a489fc8db1b1', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/license', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/log' => array('pretty_version' => '1.2.1', 'version' => '1.2.1.0', 'reference' => 'acd58dc5a8fb38e58c167adc2f9b2c588a7a2d87', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/log', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/model' => array('pretty_version' => '4.1.27', 'version' => '4.1.27.0', 'reference' => 'e6c6a6421ade5498be4f5fd1580770bd8dbd2fd6', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/model', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/plugin-utils' => array('pretty_version' => '1.0.1', 'version' => '1.0.1.0', 'reference' => '0ace7f3a23bdfe3e2b2b05c72af79fa034c7e77a', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/plugin-utils', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/woo-core' => array('pretty_version' => '5.1.20', 'version' => '5.1.20.0', 'reference' => '2d2032c6da6b538079d8e152618b1e5493319409', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/woo-core', 'aliases' => array(), 'dev_requirement' => \false))); -
wpify-woo/tags/5.2.0/wpify-woo.php
r3399080 r3400404 4 4 * Plugin Name: WPify Woo 5 5 * Description: Custom functionality for WooCommerce 6 * Version: 5. 1.106 * Version: 5.2.0 7 7 * Requires PHP: 8.1.0 8 8 * Requires at least: 6.2 -
wpify-woo/trunk/readme.txt
r3399080 r3400404 5 5 Tested up to: 6.8 6 6 Requires PHP: 8.1 7 Stable tag: 5. 1.107 Stable tag: 5.2.0 8 8 License: GPLv2 or later 9 9 License URI: https://www.gnu.org/licenses/gpl-2.0.html … … 113 113 ### QR Code Payment 114 114 115 * Display the QR code on the selected position on the thank you page. 116 * Display the QR code in the selected email notification. 117 * QR codes according to the QR Platba standard for CZ and Pay By Square pr SK. 118 * Rendering QR using an integrated library or external API. 119 * Supports any payment method. 120 * Supports any currency. 121 * Option to insert a note into the QR payment with the order number and store name. 122 * Option to add any text before and after the QR code. 123 * Option to limit QR code display by billing country. 115 * Support for multiple QR standards - QR Platba (CZ), Pay BY Square (SK), Hungarian standard (HU), EPC/SEPA (EU) 116 * Auto-detection of QR standard based on order billing country 117 * Configure multiple bank accounts for different payment methods 118 * Load bank account details from WooCommerce BACS settings or enter manually 119 * Display QR code on thank you page, email notifications and PDF invoices 120 * Shortcode `[wpify_woo_render_qr_code]` to display QR code anywhere 121 * Filter QR code display by payment method, currency and billing country 122 * Customize message and titles with placeholders for order details 123 * Compatibility mode for servers without XZ utils 124 * Developer hooks and filters for customization 124 125 125 126 ### Sklik retargeting … … 219 220 220 221 == Changelog == 222 = 5.2.0 = 223 * Add Auto detection for QR payment standard 224 * Add validation for QR payments and QR generators 225 * Add option to load bank account data from BACS payment method 226 * Add support inserting QR payment codes into WCPDF invoies 227 * Update dependencies 228 221 229 = 5.1.10 = 222 230 * Add HU QR payment standard -
wpify-woo/trunk/src/Modules/QRPayment/QRPaymentModule.php
r3399080 r3400404 23 23 24 24 class QRPaymentModule extends AbstractModule { 25 /** 26 * QRPaymentModule constructor 27 * 28 * @param WooCommerceIntegration $woocommerce_integration WooCommerce integration instance 29 * @param RotatingFileLog $log Logger instance 30 */ 25 31 public function __construct( 26 32 private WooCommerceIntegration $woocommerce_integration, … … 41 47 $email_position_hook = $this->get_setting( 'email_position' ) ?: 'woocommerce_email_before_order_table'; 42 48 add_action( $email_position_hook, [ $this, 'display_qr_code_in_email' ], 20, 4 ); 43 } 44 49 50 add_action( 'wpo_wcpdf_after_order_details', array( $this, 'display_qr_code_in_wcpdf' ), 10, 2 ); 51 } 52 53 /** 54 * Display QR code on thank you page based on position setting 55 * 56 * @return void 57 */ 45 58 public function display_qr_code_on_thankyou() { 46 59 if ( is_checkout() && ! empty( is_wc_endpoint_url( 'order-received' ) ) ) { … … 79 92 } 80 93 94 /** 95 * Plugin slug 96 * 97 * @return string 98 */ 81 99 public function plugin_slug(): string { 82 100 return Plugin::PLUGIN_SLUG; … … 135 153 'items' => [ 136 154 [ 137 'id' => 'number', 138 'type' => 'text', 139 'label' => __( 'Account number', 'wpify-woo' ), 140 ], 141 [ 142 'id' => 'bank_code', 143 'type' => 'text', 144 'label' => __( 'Bank Code', 'wpify-woo' ), 155 'id' => 'source', 156 'type' => 'select', 157 'label' => __( 'Account data source', 'wpify-woo' ), 158 'options' => function () { 159 return $this->get_bacs_accounts_options(); 160 }, 161 'async' => true, 162 'async_params' => array( 163 'tab' => 'wpify-woo-settings', 164 'section' => $this->id(), 165 'module_id' => $this->id(), 166 ), 167 'default' => '', 168 'required' => true, 145 169 ], 146 170 [ … … 148 172 'type' => 'text', 149 173 'label' => __( 'IBAN', 'wpify-woo' ), 174 'conditions' => array( 175 array( 176 'field' => '#.source', 177 'condition' => 'empty' 178 ), 179 ), 180 ], 181 [ 182 'id' => 'number', 183 'type' => 'text', 184 'label' => __( 'Account number (CZ only)', 'wpify-woo' ), 185 'conditions' => array( 186 array( 187 'field' => '#.source', 188 'condition' => 'empty' 189 ), 190 ), 191 ], 192 [ 193 'id' => 'bank_code', 194 'type' => 'text', 195 'label' => __( 'Bank Code (CZ only)', 'wpify-woo' ), 196 'conditions' => array( 197 array( 198 'field' => '#.source', 199 'condition' => 'empty' 200 ), 201 ), 150 202 ], 151 203 [ … … 153 205 'type' => 'text', 154 206 'label' => __( 'BIC (SWIFT)', 'wpify-woo' ), 207 'conditions' => array( 208 array( 209 'field' => '#.source', 210 'condition' => 'empty' 211 ), 212 ), 213 ], 214 [ 215 'id' => 'recipient_name', 216 'type' => 'text', 217 'label' => __( 'Recipient name', 'wpify-woo' ), 218 'description' => __( 'Full name of the account owner or company business name.', 'wpify-woo' ), 155 219 ], 156 220 [ … … 161 225 'options' => [ 162 226 [ 163 'label' => 'CZ - QR Platba', 227 'label' => __( 'Auto detect by order', 'wpify-woo' ), 228 'value' => 'auto', 229 ], 230 [ 231 'label' => 'QR Platba – CZ + CZK', 164 232 'value' => 'cz', 165 233 ], 166 234 [ 167 'label' => ' SK - Pay BY Square',235 'label' => 'Pay BY Square – SK + EUR', 168 236 'value' => 'sk', 169 237 ], 170 238 [ 171 'label' => 'H U - Hungary standard',239 'label' => 'Hungary standard – HU + HUF', 172 240 'value' => 'hu', 173 241 ], 174 242 [ 175 'label' => 'E U - EPC standard (DE, NL, AT, BE, FI)',176 'value' => 'e u',243 'label' => 'EPC standard (SEPA) – DE, NL, AT, BE, FI + EUR', 244 'value' => 'epc', 177 245 ], 178 246 ], … … 186 254 }, 187 255 'async' => true, 256 'disabled' => true, 188 257 'async_params' => array( 189 258 'tab' => 'wpify-woo-settings', … … 210 279 'type' => 'text', 211 280 'label' => __( 'Info label', 'wpify-woo' ), 212 ],213 [214 'id' => 'recipient_name',215 'type' => 'text',216 'label' => __( 'Recipient name', 'wpify-woo' ),217 'description' => __( 'Full name of the account owner or company business name. (SK only)', 'wpify-woo' ),218 281 ], 219 282 ], … … 301 364 ); 302 365 366 if ( function_exists( 'wcpdf_get_document' ) ) { 367 $settings[] = [ 368 'id' => 'in_wcpdf', 369 'label' => __( 'Insert into WCPDF invoice', 'wpify-woo' ), 370 'desc' => __( 'Insert QR payment into PDF Invoices from PDF Invoices & Packing Slips for WooCommerce plugin.', 'wpify-woo' ), 371 'type' => 'toggle', 372 ]; 373 } 374 303 375 return $settings; 304 376 } … … 387 459 if ( 'cz' === $account['type'] ) { 388 460 try { 389 $payment = new QrPayment( new CzechIbanAdapter( $payment_details['account_number'], $payment_details['bank_code'] ), [ 461 $iban = $payment_details['iban'] ? new IBAN( $payment_details['iban'] ) : new CzechIbanAdapter( $payment_details['account_number'], $payment_details['bank_code'] ); 462 $payment = new QrPayment( $iban, [ 390 463 QrPaymentOptions::VARIABLE_SYMBOL => $payment_details['vs'], 391 464 QrPaymentOptions::AMOUNT => $payment_details['total'], … … 393 466 QrPaymentOptions::DUE_DATE => new DateTime( $payment_details['due_date'] ), 394 467 QrPaymentOptions::COMMENT => $payment_details['note'], 468 QrPaymentOptions::PAYEE_NAME => $payment_details['recipient_name'], 395 469 ] ); 396 470 $qrCode = $payment->getQrCode()->getDataUri(); … … 468 542 return new WP_Error( 'error', 'QR ERROR: ' . $e->getMessage() ); 469 543 } 470 } elseif ( 'e u' === $account['type'] ) {544 } elseif ( 'epc' === $account['type'] ) { 471 545 try { 472 546 $payment = new \WpifyWooDeps\rikudou\EuQrPayment\QrPayment( $payment_details['iban'] ); … … 578 652 } 579 653 654 $account = $this->validate_account_data( $account, $order ); 655 656 if ( is_wp_error( $account ) ) { 657 continue; 658 } 659 580 660 $base64 = $this->render_qr_code( $order, $account ); 581 661 … … 621 701 $title_after = str_replace( array_keys( $replaces ), array_values( $replaces ), $this->get_setting( 'title_after' ) ); 622 702 703 echo '<style>.wpify-woo-qr-payment_code {max-width: 120px;}</style>'; 623 704 echo '<div class="wpify-woo-qr-payment">'; 624 705 echo sprintf( '<div class="wpify-woo-qr-payment_title-before">%s</div>', $title_before ); … … 732 813 return ob_get_clean(); 733 814 } 815 816 /** 817 * Validate and prepare account data for QR code generation 818 * 819 * @param array $account Account configuration data 820 * @param WC_Order $order WooCommerce order object 821 * 822 * @return array|WP_Error Validated account data or WP_Error on failure 823 */ 824 public function validate_account_data( $account, $order ) { 825 $country = $order->get_billing_country(); 826 $currency = $order->get_currency(); 827 828 if ( 'auto' === $account['type'] ) { 829 if ( 'CZ' === $country ) { 830 $account['type'] = 'cz'; 831 } elseif ( 'SK' === $country ) { 832 $account['type'] = 'sk'; 833 } elseif ( 'HU' === $country ) { 834 $account['type'] = 'hu'; 835 } else { 836 $account['type'] = 'epc'; 837 } 838 } 839 840 if ( 841 ( 'cz' === $account['type'] && 'CZK' !== $currency ) || 842 ( 'sk' === $account['type'] && 'EUR' !== $currency ) || 843 ( 'hu' === $account['type'] && 'HUF' !== $currency ) || 844 ( 'epc' === $account['type'] && 'EUR' !== $currency ) 845 ) { 846 $message = __( 'QR payment: Unsupported currency for QR standard.', 'wpify-woo' ); 847 $this->log->error( sprintf( $message ), 848 array( 849 'data' => array( 850 'order_id' => $order->get_id(), 851 'country' => $country, 852 'standard' => $account['type'], 853 'currency' => $currency, 854 ), 855 ) 856 ); 857 858 return new WP_Error( 'error', $message ); 859 } 860 861 if ( ! empty( $account['source'] ) || '0' == $account['source'] ) { 862 $bacs_data = $this->get_bacs_account_data( $account['source'] ); 863 864 if ( !empty( $bacs_data ) ) { 865 866 if ( ! empty( $bacs_data['account_number'] ) ) { 867 $numbers = explode( '/', $bacs_data['account_number'] ); 868 $account['number'] = $numbers[0] ?: ''; 869 $account['bank_code'] = $numbers[1] ?: ''; 870 } 871 872 if ( ! empty( $bacs_data['iban'] ) ) { 873 $account['iban'] = $bacs_data['iban']; 874 } 875 876 if ( ! empty( $bacs_data['bic'] ) ) { 877 $account['bic'] = $bacs_data['bic']; 878 } 879 880 if ( ! empty( $bacs_data['account_name'] ) ) { 881 $account['recipient_name'] = $account['recipient_name'] ?: $bacs_data['account_name']; 882 } 883 884 } 885 } 886 887 return apply_filters( 'wpify_woo_qr_account_data', $account, $order ); 888 } 889 890 /** 891 * Display QR code in WCPDF invoices 892 * 893 * @param string $invoice_type Type of WCPDF document 894 * @param WC_Order $order WooCommerce order object 895 * 896 * @return void 897 * @throws Exception 898 */ 899 public function display_qr_code_in_wcpdf( $invoice_type, $order ) { 900 $render = $this->get_setting( 'in_wcpdf' ) ?: false; 901 902 if ( 'invoice' !== $invoice_type || ! $render ) { 903 return; 904 } 905 906 $this->display_qr_code( $order ); 907 } 908 909 /** 910 * Get BACS account data by key 911 * 912 * @param int|string $key Account index from BACS settings 913 * 914 * @return array|null Account data or null if not found 915 */ 916 public function get_bacs_account_data( $key ) { 917 $bacs_accounts_info = get_option( 'woocommerce_bacs_accounts' ); 918 919 return $bacs_accounts_info[$key] ?: null; 920 } 921 922 /** 923 * Get BACS accounts as select options for settings 924 * 925 * @return array[] Array of options with value and label keys 926 */ 927 public function get_bacs_accounts_options() { 928 $bacs_accounts_info = get_option( 'woocommerce_bacs_accounts' ); 929 $options = [ 930 [ 931 'value' => '', 932 'label' => __( 'Manual', 'wpify-woo' ), 933 ] 934 ]; 935 foreach ( $bacs_accounts_info as $key => $value ) { 936 $options[] = [ 937 'value' => $key, 938 'label' => $value['account_name'] 939 ]; 940 } 941 942 return $options; 943 944 } 734 945 } -
wpify-woo/trunk/src/Plugin.php
r3399080 r3400404 23 23 24 24 /** Plugin version */ 25 public const VERSION = '5. 1.10';25 public const VERSION = '5.2.0'; 26 26 27 27 /** Plugin slug name */ -
wpify-woo/trunk/vendor/composer/installed.php
r3399080 r3400404 2 2 'root' => array( 3 3 'name' => 'wpify/woo', 4 'pretty_version' => '5. 1.10',5 'version' => '5. 1.10.0',6 'reference' => ' 1a52a89f80604ac1533d6007f4b8f7a41fba893e',4 'pretty_version' => '5.2.0', 5 'version' => '5.2.0.0', 6 'reference' => 'ee9f6470e3c7a9d67f7cac512b5deaf8826424df', 7 7 'type' => 'project', 8 8 'install_path' => __DIR__ . '/../../', … … 12 12 'versions' => array( 13 13 'wpify/woo' => array( 14 'pretty_version' => '5. 1.10',15 'version' => '5. 1.10.0',16 'reference' => ' 1a52a89f80604ac1533d6007f4b8f7a41fba893e',14 'pretty_version' => '5.2.0', 15 'version' => '5.2.0.0', 16 'reference' => 'ee9f6470e3c7a9d67f7cac512b5deaf8826424df', 17 17 'type' => 'project', 18 18 'install_path' => __DIR__ . '/../../', -
wpify-woo/trunk/vendor/wpify-woo/composer/installed.php
r3399080 r3400404 3 3 namespace WpifyWooDeps; 4 4 5 return array('root' => array('name' => '__root__', 'pretty_version' => '5. 1.10', 'version' => '5.1.10.0', 'reference' => '1a52a89f80604ac1533d6007f4b8f7a41fba893e', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev' => \true), 'versions' => array('__root__' => array('pretty_version' => '5.1.10', 'version' => '5.1.10.0', 'reference' => '1a52a89f80604ac1533d6007f4b8f7a41fba893e', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev_requirement' => \false), 'bacon/bacon-qr-code' => array('pretty_version' => '2.0.8', 'version' => '2.0.8.0', 'reference' => '8674e51bb65af933a5ffaf1c308a660387c35c22', 'type' => 'library', 'install_path' => __DIR__ . '/../bacon/bacon-qr-code', 'aliases' => array(), 'dev_requirement' => \false), 'dasprid/enum' => array('pretty_version' => '1.0.7', 'version' => '1.0.7.0', 'reference' => 'b5874fa9ed0043116c72162ec7f4fb50e02e7cce', 'type' => 'library', 'install_path' => __DIR__ . '/../dasprid/enum', 'aliases' => array(), 'dev_requirement' => \false), 'dragonbe/vies' => array('pretty_version' => '2.3.2', 'version' => '2.3.2.0', 'reference' => 'd9193cbaba7e2faefbdc228fb1bf5670f20acf30', 'type' => 'tool', 'install_path' => __DIR__ . '/../dragonbe/vies', 'aliases' => array(), 'dev_requirement' => \false), 'endroid/qr-code' => array('pretty_version' => '4.5.0', 'version' => '4.5.0.0', 'reference' => '36681470bd10352b53bcb9731bdf2270e0d79b22', 'type' => 'library', 'install_path' => __DIR__ . '/../endroid/qr-code', 'aliases' => array(), 'dev_requirement' => \false), 'guzzlehttp/guzzle' => array('pretty_version' => '7.10.0', 'version' => '7.10.0.0', 'reference' => 'b51ac707cfa420b7bfd4e4d5e510ba8008e822b4', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/guzzle', 'aliases' => array(), 'dev_requirement' => \false), 'guzzlehttp/promises' => array('pretty_version' => '2.3.0', 'version' => '2.3.0.0', 'reference' => '481557b130ef3790cf82b713667b43030dc9c957', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/promises', 'aliases' => array(), 'dev_requirement' => \false), 'guzzlehttp/psr7' => array('pretty_version' => '2.8.0', 'version' => '2.8.0.0', 'reference' => '21dc724a0583619cd1652f673303492272778051', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/psr7', 'aliases' => array(), 'dev_requirement' => \false), 'h4kuna/ares' => array('pretty_version' => 'v3.0.13', 'version' => '3.0.13.0', 'reference' => 'd695e8b57b0410738d8eb9d7157bb8c7ec340d72', 'type' => 'library', 'install_path' => __DIR__ . '/../h4kuna/ares', 'aliases' => array(), 'dev_requirement' => \false), 'heureka/inflection' => array('pretty_version' => 'v3.0.4', 'version' => '3.0.4.0', 'reference' => '684ca578eee3ede920d5d3ca8d568fb70e7d9076', 'type' => 'library', 'install_path' => __DIR__ . '/../heureka/inflection', 'aliases' => array(), 'dev_requirement' => \false), 'heureka/overeno-zakazniky' => array('pretty_version' => '3.0.3', 'version' => '3.0.3.0', 'reference' => 'aa52add431bac32c67b1c00b1969a98709cd611b', 'type' => 'library', 'install_path' => __DIR__ . '/../heureka/overeno-zakazniky', 'aliases' => array(), 'dev_requirement' => \false), 'hubipe/huqrpayment' => array('pretty_version' => 'v1.1.1', 'version' => '1.1.1.0', 'reference' => 'a1d493dfd21a5a76798dd6629ac2bdae2da2b535', 'type' => 'library', 'install_path' => __DIR__ . '/../hubipe/huqrpayment', 'aliases' => array(), 'dev_requirement' => \false), 'laravel/serializable-closure' => array('pretty_version' => 'v1.3.7', 'version' => '1.3.7.0', 'reference' => '4f48ade902b94323ca3be7646db16209ec76be3d', 'type' => 'library', 'install_path' => __DIR__ . '/../laravel/serializable-closure', 'aliases' => array(), 'dev_requirement' => \false), 'nette/utils' => array('pretty_version' => 'v4.0.8', 'version' => '4.0.8.0', 'reference' => 'c930ca4e3cf4f17dcfb03037703679d2396d2ede', 'type' => 'library', 'install_path' => __DIR__ . '/../nette/utils', 'aliases' => array(), 'dev_requirement' => \false), 'php-di/invoker' => array('pretty_version' => '2.3.7', 'version' => '2.3.7.0', 'reference' => '3c1ddfdef181431fbc4be83378f6d036d59e81e1', 'type' => 'library', 'install_path' => __DIR__ . '/../php-di/invoker', 'aliases' => array(), 'dev_requirement' => \false), 'php-di/php-di' => array('pretty_version' => '6.4.0', 'version' => '6.4.0.0', 'reference' => 'ae0f1b3b03d8b29dff81747063cbfd6276246cc4', 'type' => 'library', 'install_path' => __DIR__ . '/../php-di/php-di', 'aliases' => array(), 'dev_requirement' => \false), 'php-di/phpdoc-reader' => array('pretty_version' => '2.2.1', 'version' => '2.2.1.0', 'reference' => '66daff34cbd2627740ffec9469ffbac9f8c8185c', 'type' => 'library', 'install_path' => __DIR__ . '/../php-di/phpdoc-reader', 'aliases' => array(), 'dev_requirement' => \false), 'psr/container' => array('pretty_version' => '1.1.2', 'version' => '1.1.2.0', 'reference' => '513e0666f7216c7459170d56df27dfcefe1689ea', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/container', 'aliases' => array(), 'dev_requirement' => \false), 'psr/container-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '^1.0')), 'psr/http-client' => array('pretty_version' => '1.0.3', 'version' => '1.0.3.0', 'reference' => 'bb5906edc1c324c9a05aa0873d40117941e5fa90', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-client', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-client-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.0')), 'psr/http-factory' => array('pretty_version' => '1.1.0', 'version' => '1.1.0.0', 'reference' => '2b4765fddfe3b508ac62f829e852b1501d3f6e8a', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-factory', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-factory-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.0')), 'psr/http-message' => array('pretty_version' => '2.0', 'version' => '2.0.0.0', 'reference' => '402d35bcb92c70c026d1a6a9883f06b2ead23d71', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-message', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-message-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.0')), 'psr/log' => array('pretty_version' => '3.0.2', 'version' => '3.0.2.0', 'reference' => 'f16e1d5863e37f8d8c2a01719f5b34baa2b714d3', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/log', 'aliases' => array(), 'dev_requirement' => \false), 'ralouphie/getallheaders' => array('pretty_version' => '3.0.3', 'version' => '3.0.3.0', 'reference' => '120b605dfeb996808c31b6477290a714d356e822', 'type' => 'library', 'install_path' => __DIR__ . '/../ralouphie/getallheaders', 'aliases' => array(), 'dev_requirement' => \false), 'rikudou/czqrpayment' => array('pretty_version' => 'v5.3.1', 'version' => '5.3.1.0', 'reference' => 'f8e0ecbbdb6d30bafb50a833cc7cfe4f575b82a4', 'type' => 'library', 'install_path' => __DIR__ . '/../rikudou/czqrpayment', 'aliases' => array(), 'dev_requirement' => \false), 'rikudou/euqrpayment' => array('pretty_version' => 'v1.4.0', 'version' => '1.4.0.0', 'reference' => '4587cc8fed131939e5bf2ee0898b89ab2b1d346d', 'type' => 'library', 'install_path' => __DIR__ . '/../rikudou/euqrpayment', 'aliases' => array(), 'dev_requirement' => \false), 'rikudou/iban' => array('pretty_version' => 'v1.3.0', 'version' => '1.3.0.0', 'reference' => '7fe69bf9274792c37d5a8d9d38ef5cb000f8377a', 'type' => 'library', 'install_path' => __DIR__ . '/../rikudou/iban', 'aliases' => array(), 'dev_requirement' => \false), 'rikudou/qr-payment-interface' => array('pretty_version' => 'v1.1.0', 'version' => '1.1.0.0', 'reference' => '752f7a6bf1190c7d65ead90b5989f61927436c89', 'type' => 'library', 'install_path' => __DIR__ . '/../rikudou/qr-payment-interface', 'aliases' => array(), 'dev_requirement' => \false), 'rikudou/qr-payment-qr-code-provider' => array('pretty_version' => 'v1.2.0', 'version' => '1.2.0.0', 'reference' => 'd233c4bedeecf2ff7cd7e7d4ec7f4ad4a5eb4b64', 'type' => 'library', 'install_path' => __DIR__ . '/../rikudou/qr-payment-qr-code-provider', 'aliases' => array(), 'dev_requirement' => \false), 'rikudou/skqrpayment' => array('pretty_version' => 'v4.2.3', 'version' => '4.2.3.0', 'reference' => '857ab3707dd7effc2050c7ef152c61aef7c33d92', 'type' => 'library', 'install_path' => __DIR__ . '/../rikudou/skqrpayment', 'aliases' => array(), 'dev_requirement' => \false), 'spatie/array-to-xml' => array('pretty_version' => '2.17.1', 'version' => '2.17.1.0', 'reference' => '5cbec9c6ab17e320c58a259f0cebe88bde4a7c46', 'type' => 'library', 'install_path' => __DIR__ . '/../spatie/array-to-xml', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/deprecation-contracts' => array('pretty_version' => 'v3.6.0', 'version' => '3.6.0.0', 'reference' => '63afe740e99a13ba87ec199bb07bbdee937a5b62', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', 'aliases' => array(), 'dev_requirement' => \false), 'woocommerce/action-scheduler' => array('pretty_version' => '3.9.3', 'version' => '3.9.3.0', 'reference' => 'c58cdbab17651303d406cd3b22cf9d75c71c986c', 'type' => 'wordpress-plugin', 'install_path' => __DIR__ . '/../woocommerce/action-scheduler', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/asset' => array('pretty_version' => '1.3.0', 'version' => '1.3.0.0', 'reference' => 'faf957af650b441b49f03cb7ffa42abfe157b43b', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/asset', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/custom-fields' => array('pretty_version' => '4.1.2', 'version' => '4.1.2.0', 'reference' => '38854fc46225a6e8387e75086ba2201df32415fc', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/custom-fields', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/license' => array('pretty_version' => '2.0.7', 'version' => '2.0.7.0', 'reference' => '7f8e7fe16a1bb77cdfcd29c694c5a489fc8db1b1', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/license', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/log' => array('pretty_version' => '1.2.1', 'version' => '1.2.1.0', 'reference' => 'acd58dc5a8fb38e58c167adc2f9b2c588a7a2d87', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/log', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/model' => array('pretty_version' => '4.1.27', 'version' => '4.1.27.0', 'reference' => 'e6c6a6421ade5498be4f5fd1580770bd8dbd2fd6', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/model', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/plugin-utils' => array('pretty_version' => '1.0.1', 'version' => '1.0.1.0', 'reference' => '0ace7f3a23bdfe3e2b2b05c72af79fa034c7e77a', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/plugin-utils', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/woo-core' => array('pretty_version' => '5.1.20', 'version' => '5.1.20.0', 'reference' => '2d2032c6da6b538079d8e152618b1e5493319409', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/woo-core', 'aliases' => array(), 'dev_requirement' => \false)));5 return array('root' => array('name' => '__root__', 'pretty_version' => '5.2.0', 'version' => '5.2.0.0', 'reference' => 'ee9f6470e3c7a9d67f7cac512b5deaf8826424df', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev' => \true), 'versions' => array('__root__' => array('pretty_version' => '5.2.0', 'version' => '5.2.0.0', 'reference' => 'ee9f6470e3c7a9d67f7cac512b5deaf8826424df', 'type' => 'library', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), 'dev_requirement' => \false), 'bacon/bacon-qr-code' => array('pretty_version' => '2.0.8', 'version' => '2.0.8.0', 'reference' => '8674e51bb65af933a5ffaf1c308a660387c35c22', 'type' => 'library', 'install_path' => __DIR__ . '/../bacon/bacon-qr-code', 'aliases' => array(), 'dev_requirement' => \false), 'dasprid/enum' => array('pretty_version' => '1.0.7', 'version' => '1.0.7.0', 'reference' => 'b5874fa9ed0043116c72162ec7f4fb50e02e7cce', 'type' => 'library', 'install_path' => __DIR__ . '/../dasprid/enum', 'aliases' => array(), 'dev_requirement' => \false), 'dragonbe/vies' => array('pretty_version' => '2.3.2', 'version' => '2.3.2.0', 'reference' => 'd9193cbaba7e2faefbdc228fb1bf5670f20acf30', 'type' => 'tool', 'install_path' => __DIR__ . '/../dragonbe/vies', 'aliases' => array(), 'dev_requirement' => \false), 'endroid/qr-code' => array('pretty_version' => '4.5.0', 'version' => '4.5.0.0', 'reference' => '36681470bd10352b53bcb9731bdf2270e0d79b22', 'type' => 'library', 'install_path' => __DIR__ . '/../endroid/qr-code', 'aliases' => array(), 'dev_requirement' => \false), 'guzzlehttp/guzzle' => array('pretty_version' => '7.10.0', 'version' => '7.10.0.0', 'reference' => 'b51ac707cfa420b7bfd4e4d5e510ba8008e822b4', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/guzzle', 'aliases' => array(), 'dev_requirement' => \false), 'guzzlehttp/promises' => array('pretty_version' => '2.3.0', 'version' => '2.3.0.0', 'reference' => '481557b130ef3790cf82b713667b43030dc9c957', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/promises', 'aliases' => array(), 'dev_requirement' => \false), 'guzzlehttp/psr7' => array('pretty_version' => '2.8.0', 'version' => '2.8.0.0', 'reference' => '21dc724a0583619cd1652f673303492272778051', 'type' => 'library', 'install_path' => __DIR__ . '/../guzzlehttp/psr7', 'aliases' => array(), 'dev_requirement' => \false), 'h4kuna/ares' => array('pretty_version' => 'v3.0.13', 'version' => '3.0.13.0', 'reference' => 'd695e8b57b0410738d8eb9d7157bb8c7ec340d72', 'type' => 'library', 'install_path' => __DIR__ . '/../h4kuna/ares', 'aliases' => array(), 'dev_requirement' => \false), 'heureka/inflection' => array('pretty_version' => 'v3.0.4', 'version' => '3.0.4.0', 'reference' => '684ca578eee3ede920d5d3ca8d568fb70e7d9076', 'type' => 'library', 'install_path' => __DIR__ . '/../heureka/inflection', 'aliases' => array(), 'dev_requirement' => \false), 'heureka/overeno-zakazniky' => array('pretty_version' => '3.0.3', 'version' => '3.0.3.0', 'reference' => 'aa52add431bac32c67b1c00b1969a98709cd611b', 'type' => 'library', 'install_path' => __DIR__ . '/../heureka/overeno-zakazniky', 'aliases' => array(), 'dev_requirement' => \false), 'hubipe/huqrpayment' => array('pretty_version' => 'v1.1.1', 'version' => '1.1.1.0', 'reference' => 'a1d493dfd21a5a76798dd6629ac2bdae2da2b535', 'type' => 'library', 'install_path' => __DIR__ . '/../hubipe/huqrpayment', 'aliases' => array(), 'dev_requirement' => \false), 'laravel/serializable-closure' => array('pretty_version' => 'v1.3.7', 'version' => '1.3.7.0', 'reference' => '4f48ade902b94323ca3be7646db16209ec76be3d', 'type' => 'library', 'install_path' => __DIR__ . '/../laravel/serializable-closure', 'aliases' => array(), 'dev_requirement' => \false), 'nette/utils' => array('pretty_version' => 'v4.0.8', 'version' => '4.0.8.0', 'reference' => 'c930ca4e3cf4f17dcfb03037703679d2396d2ede', 'type' => 'library', 'install_path' => __DIR__ . '/../nette/utils', 'aliases' => array(), 'dev_requirement' => \false), 'php-di/invoker' => array('pretty_version' => '2.3.7', 'version' => '2.3.7.0', 'reference' => '3c1ddfdef181431fbc4be83378f6d036d59e81e1', 'type' => 'library', 'install_path' => __DIR__ . '/../php-di/invoker', 'aliases' => array(), 'dev_requirement' => \false), 'php-di/php-di' => array('pretty_version' => '6.4.0', 'version' => '6.4.0.0', 'reference' => 'ae0f1b3b03d8b29dff81747063cbfd6276246cc4', 'type' => 'library', 'install_path' => __DIR__ . '/../php-di/php-di', 'aliases' => array(), 'dev_requirement' => \false), 'php-di/phpdoc-reader' => array('pretty_version' => '2.2.1', 'version' => '2.2.1.0', 'reference' => '66daff34cbd2627740ffec9469ffbac9f8c8185c', 'type' => 'library', 'install_path' => __DIR__ . '/../php-di/phpdoc-reader', 'aliases' => array(), 'dev_requirement' => \false), 'psr/container' => array('pretty_version' => '1.1.2', 'version' => '1.1.2.0', 'reference' => '513e0666f7216c7459170d56df27dfcefe1689ea', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/container', 'aliases' => array(), 'dev_requirement' => \false), 'psr/container-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '^1.0')), 'psr/http-client' => array('pretty_version' => '1.0.3', 'version' => '1.0.3.0', 'reference' => 'bb5906edc1c324c9a05aa0873d40117941e5fa90', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-client', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-client-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.0')), 'psr/http-factory' => array('pretty_version' => '1.1.0', 'version' => '1.1.0.0', 'reference' => '2b4765fddfe3b508ac62f829e852b1501d3f6e8a', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-factory', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-factory-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.0')), 'psr/http-message' => array('pretty_version' => '2.0', 'version' => '2.0.0.0', 'reference' => '402d35bcb92c70c026d1a6a9883f06b2ead23d71', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/http-message', 'aliases' => array(), 'dev_requirement' => \false), 'psr/http-message-implementation' => array('dev_requirement' => \false, 'provided' => array(0 => '1.0')), 'psr/log' => array('pretty_version' => '3.0.2', 'version' => '3.0.2.0', 'reference' => 'f16e1d5863e37f8d8c2a01719f5b34baa2b714d3', 'type' => 'library', 'install_path' => __DIR__ . '/../psr/log', 'aliases' => array(), 'dev_requirement' => \false), 'ralouphie/getallheaders' => array('pretty_version' => '3.0.3', 'version' => '3.0.3.0', 'reference' => '120b605dfeb996808c31b6477290a714d356e822', 'type' => 'library', 'install_path' => __DIR__ . '/../ralouphie/getallheaders', 'aliases' => array(), 'dev_requirement' => \false), 'rikudou/czqrpayment' => array('pretty_version' => 'v5.3.1', 'version' => '5.3.1.0', 'reference' => 'f8e0ecbbdb6d30bafb50a833cc7cfe4f575b82a4', 'type' => 'library', 'install_path' => __DIR__ . '/../rikudou/czqrpayment', 'aliases' => array(), 'dev_requirement' => \false), 'rikudou/euqrpayment' => array('pretty_version' => 'v1.4.0', 'version' => '1.4.0.0', 'reference' => '4587cc8fed131939e5bf2ee0898b89ab2b1d346d', 'type' => 'library', 'install_path' => __DIR__ . '/../rikudou/euqrpayment', 'aliases' => array(), 'dev_requirement' => \false), 'rikudou/iban' => array('pretty_version' => 'v1.3.0', 'version' => '1.3.0.0', 'reference' => '7fe69bf9274792c37d5a8d9d38ef5cb000f8377a', 'type' => 'library', 'install_path' => __DIR__ . '/../rikudou/iban', 'aliases' => array(), 'dev_requirement' => \false), 'rikudou/qr-payment-interface' => array('pretty_version' => 'v1.1.0', 'version' => '1.1.0.0', 'reference' => '752f7a6bf1190c7d65ead90b5989f61927436c89', 'type' => 'library', 'install_path' => __DIR__ . '/../rikudou/qr-payment-interface', 'aliases' => array(), 'dev_requirement' => \false), 'rikudou/qr-payment-qr-code-provider' => array('pretty_version' => 'v1.2.0', 'version' => '1.2.0.0', 'reference' => 'd233c4bedeecf2ff7cd7e7d4ec7f4ad4a5eb4b64', 'type' => 'library', 'install_path' => __DIR__ . '/../rikudou/qr-payment-qr-code-provider', 'aliases' => array(), 'dev_requirement' => \false), 'rikudou/skqrpayment' => array('pretty_version' => 'v4.2.3', 'version' => '4.2.3.0', 'reference' => '857ab3707dd7effc2050c7ef152c61aef7c33d92', 'type' => 'library', 'install_path' => __DIR__ . '/../rikudou/skqrpayment', 'aliases' => array(), 'dev_requirement' => \false), 'spatie/array-to-xml' => array('pretty_version' => '2.17.1', 'version' => '2.17.1.0', 'reference' => '5cbec9c6ab17e320c58a259f0cebe88bde4a7c46', 'type' => 'library', 'install_path' => __DIR__ . '/../spatie/array-to-xml', 'aliases' => array(), 'dev_requirement' => \false), 'symfony/deprecation-contracts' => array('pretty_version' => 'v3.6.0', 'version' => '3.6.0.0', 'reference' => '63afe740e99a13ba87ec199bb07bbdee937a5b62', 'type' => 'library', 'install_path' => __DIR__ . '/../symfony/deprecation-contracts', 'aliases' => array(), 'dev_requirement' => \false), 'woocommerce/action-scheduler' => array('pretty_version' => '3.9.3', 'version' => '3.9.3.0', 'reference' => 'c58cdbab17651303d406cd3b22cf9d75c71c986c', 'type' => 'wordpress-plugin', 'install_path' => __DIR__ . '/../woocommerce/action-scheduler', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/asset' => array('pretty_version' => '1.3.0', 'version' => '1.3.0.0', 'reference' => 'faf957af650b441b49f03cb7ffa42abfe157b43b', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/asset', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/custom-fields' => array('pretty_version' => '4.1.2', 'version' => '4.1.2.0', 'reference' => '38854fc46225a6e8387e75086ba2201df32415fc', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/custom-fields', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/license' => array('pretty_version' => '2.0.7', 'version' => '2.0.7.0', 'reference' => '7f8e7fe16a1bb77cdfcd29c694c5a489fc8db1b1', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/license', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/log' => array('pretty_version' => '1.2.1', 'version' => '1.2.1.0', 'reference' => 'acd58dc5a8fb38e58c167adc2f9b2c588a7a2d87', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/log', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/model' => array('pretty_version' => '4.1.27', 'version' => '4.1.27.0', 'reference' => 'e6c6a6421ade5498be4f5fd1580770bd8dbd2fd6', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/model', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/plugin-utils' => array('pretty_version' => '1.0.1', 'version' => '1.0.1.0', 'reference' => '0ace7f3a23bdfe3e2b2b05c72af79fa034c7e77a', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/plugin-utils', 'aliases' => array(), 'dev_requirement' => \false), 'wpify/woo-core' => array('pretty_version' => '5.1.20', 'version' => '5.1.20.0', 'reference' => '2d2032c6da6b538079d8e152618b1e5493319409', 'type' => 'library', 'install_path' => __DIR__ . '/../wpify/woo-core', 'aliases' => array(), 'dev_requirement' => \false))); -
wpify-woo/trunk/wpify-woo.php
r3399080 r3400404 4 4 * Plugin Name: WPify Woo 5 5 * Description: Custom functionality for WooCommerce 6 * Version: 5. 1.106 * Version: 5.2.0 7 7 * Requires PHP: 8.1.0 8 8 * Requires at least: 6.2
Note: See TracChangeset
for help on using the changeset viewer.