Plugin Directory

Changeset 3400404


Ignore:
Timestamp:
11/21/2025 11:30:35 AM (4 months ago)
Author:
wpify
Message:

Update to version 5.2.0

Location:
wpify-woo
Files:
12 edited
1 copied

Legend:

Unmodified
Added
Removed
  • wpify-woo/tags/5.2.0/readme.txt

    r3399080 r3400404  
    55Tested up to: 6.8
    66Requires PHP: 8.1
    7 Stable tag: 5.1.10
     7Stable tag: 5.2.0
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
     
    113113### QR Code Payment
    114114
    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
    124125
    125126### Sklik retargeting
     
    219220
    220221== 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
    221229= 5.1.10 =
    222230* Add HU QR payment standard
  • wpify-woo/tags/5.2.0/src/Modules/QRPayment/QRPaymentModule.php

    r3399080 r3400404  
    2323
    2424class QRPaymentModule extends AbstractModule {
     25    /**
     26     * QRPaymentModule constructor
     27     *
     28     * @param WooCommerceIntegration $woocommerce_integration WooCommerce integration instance
     29     * @param RotatingFileLog        $log                     Logger instance
     30     */
    2531    public function __construct(
    2632        private WooCommerceIntegration $woocommerce_integration,
     
    4147        $email_position_hook = $this->get_setting( 'email_position' ) ?: 'woocommerce_email_before_order_table';
    4248        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     */
    4558    public function display_qr_code_on_thankyou() {
    4659        if ( is_checkout() && ! empty( is_wc_endpoint_url( 'order-received' ) ) ) {
     
    7992    }
    8093
     94    /**
     95     * Plugin slug
     96     *
     97     * @return string
     98     */
    8199    public function plugin_slug(): string {
    82100        return Plugin::PLUGIN_SLUG;
     
    135153                        'items'   => [
    136154                            [
    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,
    145169                            ],
    146170                            [
     
    148172                                'type'  => 'text',
    149173                                '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                                ),
    150202                            ],
    151203                            [
     
    153205                                'type'  => 'text',
    154206                                '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' ),
    155219                            ],
    156220                            [
     
    161225                                'options'  => [
    162226                                    [
    163                                         'label' => 'CZ - QR Platba',
     227                                        'label' => __( 'Auto detect by order', 'wpify-woo' ),
     228                                        'value' => 'auto',
     229                                    ],
     230                                    [
     231                                        'label' => 'QR Platba – CZ + CZK',
    164232                                        'value' => 'cz',
    165233                                    ],
    166234                                    [
    167                                         'label' => 'SK - Pay BY Square',
     235                                        'label' => 'Pay BY Square – SK + EUR',
    168236                                        'value' => 'sk',
    169237                                    ],
    170238                                    [
    171                                         'label' => 'HU - Hungary standard',
     239                                        'label' => 'Hungary standard – HU + HUF',
    172240                                        'value' => 'hu',
    173241                                    ],
    174242                                    [
    175                                         'label' => 'EU - EPC standard (DE, NL, AT, BE, FI)',
    176                                         'value' => 'eu',
     243                                        'label' => 'EPC standard (SEPA) – DE, NL, AT, BE, FI + EUR',
     244                                        'value' => 'epc',
    177245                                    ],
    178246                                ],
     
    186254                                },
    187255                                'async'        => true,
     256                                'disabled'     => true,
    188257                                'async_params' => array(
    189258                                    'tab'       => 'wpify-woo-settings',
     
    210279                                'type'  => 'text',
    211280                                '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' ),
    218281                            ],
    219282                        ],
     
    301364        );
    302365
     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
    303375        return $settings;
    304376    }
     
    387459            if ( 'cz' === $account['type'] ) {
    388460                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, [
    390463                        QrPaymentOptions::VARIABLE_SYMBOL => $payment_details['vs'],
    391464                        QrPaymentOptions::AMOUNT          => $payment_details['total'],
     
    393466                        QrPaymentOptions::DUE_DATE        => new DateTime( $payment_details['due_date'] ),
    394467                        QrPaymentOptions::COMMENT         => $payment_details['note'],
     468                        QrPaymentOptions::PAYEE_NAME      => $payment_details['recipient_name'],
    395469                    ] );
    396470                    $qrCode  = $payment->getQrCode()->getDataUri();
     
    468542                    return new WP_Error( 'error', 'QR ERROR: ' . $e->getMessage() );
    469543                }
    470             } elseif ( 'eu' === $account['type'] ) {
     544            } elseif ( 'epc' === $account['type'] ) {
    471545                try {
    472546                    $payment = new \WpifyWooDeps\rikudou\EuQrPayment\QrPayment( $payment_details['iban'] );
     
    578652            }
    579653
     654            $account = $this->validate_account_data( $account, $order );
     655
     656            if ( is_wp_error( $account ) ) {
     657                continue;
     658            }
     659
    580660            $base64 = $this->render_qr_code( $order, $account );
    581661
     
    621701            $title_after  = str_replace( array_keys( $replaces ), array_values( $replaces ), $this->get_setting( 'title_after' ) );
    622702
     703            echo '<style>.wpify-woo-qr-payment_code {max-width: 120px;}</style>';
    623704            echo '<div class="wpify-woo-qr-payment">';
    624705            echo sprintf( '<div class="wpify-woo-qr-payment_title-before">%s</div>', $title_before );
     
    732813        return ob_get_clean();
    733814    }
     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    }
    734945}
  • wpify-woo/tags/5.2.0/src/Plugin.php

    r3399080 r3400404  
    2323
    2424    /** Plugin version */
    25     public const VERSION = '5.1.10';
     25    public const VERSION = '5.2.0';
    2626
    2727    /** Plugin slug name */
  • wpify-woo/tags/5.2.0/vendor/composer/installed.php

    r3399080 r3400404  
    22    'root' => array(
    33        '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',
    77        'type' => 'project',
    88        'install_path' => __DIR__ . '/../../',
     
    1212    'versions' => array(
    1313        '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',
    1717            'type' => 'project',
    1818            'install_path' => __DIR__ . '/../../',
  • wpify-woo/tags/5.2.0/vendor/wpify-woo/composer/installed.php

    r3399080 r3400404  
    33namespace WpifyWooDeps;
    44
    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)));
     5return 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  
    44 * Plugin Name:          WPify Woo
    55 * Description:          Custom functionality for WooCommerce
    6  * Version:              5.1.10
     6 * Version:              5.2.0
    77 * Requires PHP:         8.1.0
    88 * Requires at least:    6.2
  • wpify-woo/trunk/readme.txt

    r3399080 r3400404  
    55Tested up to: 6.8
    66Requires PHP: 8.1
    7 Stable tag: 5.1.10
     7Stable tag: 5.2.0
    88License: GPLv2 or later
    99License URI: https://www.gnu.org/licenses/gpl-2.0.html
     
    113113### QR Code Payment
    114114
    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
    124125
    125126### Sklik retargeting
     
    219220
    220221== 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
    221229= 5.1.10 =
    222230* Add HU QR payment standard
  • wpify-woo/trunk/src/Modules/QRPayment/QRPaymentModule.php

    r3399080 r3400404  
    2323
    2424class QRPaymentModule extends AbstractModule {
     25    /**
     26     * QRPaymentModule constructor
     27     *
     28     * @param WooCommerceIntegration $woocommerce_integration WooCommerce integration instance
     29     * @param RotatingFileLog        $log                     Logger instance
     30     */
    2531    public function __construct(
    2632        private WooCommerceIntegration $woocommerce_integration,
     
    4147        $email_position_hook = $this->get_setting( 'email_position' ) ?: 'woocommerce_email_before_order_table';
    4248        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     */
    4558    public function display_qr_code_on_thankyou() {
    4659        if ( is_checkout() && ! empty( is_wc_endpoint_url( 'order-received' ) ) ) {
     
    7992    }
    8093
     94    /**
     95     * Plugin slug
     96     *
     97     * @return string
     98     */
    8199    public function plugin_slug(): string {
    82100        return Plugin::PLUGIN_SLUG;
     
    135153                        'items'   => [
    136154                            [
    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,
    145169                            ],
    146170                            [
     
    148172                                'type'  => 'text',
    149173                                '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                                ),
    150202                            ],
    151203                            [
     
    153205                                'type'  => 'text',
    154206                                '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' ),
    155219                            ],
    156220                            [
     
    161225                                'options'  => [
    162226                                    [
    163                                         'label' => 'CZ - QR Platba',
     227                                        'label' => __( 'Auto detect by order', 'wpify-woo' ),
     228                                        'value' => 'auto',
     229                                    ],
     230                                    [
     231                                        'label' => 'QR Platba – CZ + CZK',
    164232                                        'value' => 'cz',
    165233                                    ],
    166234                                    [
    167                                         'label' => 'SK - Pay BY Square',
     235                                        'label' => 'Pay BY Square – SK + EUR',
    168236                                        'value' => 'sk',
    169237                                    ],
    170238                                    [
    171                                         'label' => 'HU - Hungary standard',
     239                                        'label' => 'Hungary standard – HU + HUF',
    172240                                        'value' => 'hu',
    173241                                    ],
    174242                                    [
    175                                         'label' => 'EU - EPC standard (DE, NL, AT, BE, FI)',
    176                                         'value' => 'eu',
     243                                        'label' => 'EPC standard (SEPA) – DE, NL, AT, BE, FI + EUR',
     244                                        'value' => 'epc',
    177245                                    ],
    178246                                ],
     
    186254                                },
    187255                                'async'        => true,
     256                                'disabled'     => true,
    188257                                'async_params' => array(
    189258                                    'tab'       => 'wpify-woo-settings',
     
    210279                                'type'  => 'text',
    211280                                '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' ),
    218281                            ],
    219282                        ],
     
    301364        );
    302365
     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
    303375        return $settings;
    304376    }
     
    387459            if ( 'cz' === $account['type'] ) {
    388460                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, [
    390463                        QrPaymentOptions::VARIABLE_SYMBOL => $payment_details['vs'],
    391464                        QrPaymentOptions::AMOUNT          => $payment_details['total'],
     
    393466                        QrPaymentOptions::DUE_DATE        => new DateTime( $payment_details['due_date'] ),
    394467                        QrPaymentOptions::COMMENT         => $payment_details['note'],
     468                        QrPaymentOptions::PAYEE_NAME      => $payment_details['recipient_name'],
    395469                    ] );
    396470                    $qrCode  = $payment->getQrCode()->getDataUri();
     
    468542                    return new WP_Error( 'error', 'QR ERROR: ' . $e->getMessage() );
    469543                }
    470             } elseif ( 'eu' === $account['type'] ) {
     544            } elseif ( 'epc' === $account['type'] ) {
    471545                try {
    472546                    $payment = new \WpifyWooDeps\rikudou\EuQrPayment\QrPayment( $payment_details['iban'] );
     
    578652            }
    579653
     654            $account = $this->validate_account_data( $account, $order );
     655
     656            if ( is_wp_error( $account ) ) {
     657                continue;
     658            }
     659
    580660            $base64 = $this->render_qr_code( $order, $account );
    581661
     
    621701            $title_after  = str_replace( array_keys( $replaces ), array_values( $replaces ), $this->get_setting( 'title_after' ) );
    622702
     703            echo '<style>.wpify-woo-qr-payment_code {max-width: 120px;}</style>';
    623704            echo '<div class="wpify-woo-qr-payment">';
    624705            echo sprintf( '<div class="wpify-woo-qr-payment_title-before">%s</div>', $title_before );
     
    732813        return ob_get_clean();
    733814    }
     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    }
    734945}
  • wpify-woo/trunk/src/Plugin.php

    r3399080 r3400404  
    2323
    2424    /** Plugin version */
    25     public const VERSION = '5.1.10';
     25    public const VERSION = '5.2.0';
    2626
    2727    /** Plugin slug name */
  • wpify-woo/trunk/vendor/composer/installed.php

    r3399080 r3400404  
    22    'root' => array(
    33        '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',
    77        'type' => 'project',
    88        'install_path' => __DIR__ . '/../../',
     
    1212    'versions' => array(
    1313        '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',
    1717            'type' => 'project',
    1818            'install_path' => __DIR__ . '/../../',
  • wpify-woo/trunk/vendor/wpify-woo/composer/installed.php

    r3399080 r3400404  
    33namespace WpifyWooDeps;
    44
    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)));
     5return 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  
    44 * Plugin Name:          WPify Woo
    55 * Description:          Custom functionality for WooCommerce
    6  * Version:              5.1.10
     6 * Version:              5.2.0
    77 * Requires PHP:         8.1.0
    88 * Requires at least:    6.2
Note: See TracChangeset for help on using the changeset viewer.