woocommerce-paypal-payments/woocommerce-paypal-payments.php

314 lines
9.6 KiB
PHP
Raw Permalink Normal View History

2020-09-17 16:50:04 -03:00
<?php
2020-03-19 16:47:08 +01:00
/**
* Plugin Name: WooCommerce PayPal Payments
* Plugin URI: https://woocommerce.com/products/woocommerce-paypal-payments/
* Description: PayPal's latest complete payments processing solution. Accept PayPal, Pay Later, credit/debit cards, alternative digital wallets local payment types and bank accounts. Turn on only PayPal options or process a full suite of payment methods. Enable global transaction with extensive currency and country coverage.
2025-07-31 16:17:40 +02:00
* Version: 3.0.9
* Author: PayPal
* Author URI: https://paypal.com/
2020-03-19 16:47:08 +01:00
* License: GPL-2.0
2024-09-03 09:07:12 +03:00
* Requires PHP: 7.4
2024-04-09 16:28:51 -03:00
* Requires Plugins: woocommerce
* Requires at least: 6.5
2025-03-13 14:01:28 +01:00
* WC requires at least: 9.6
2025-07-21 15:39:46 +02:00
* WC tested up to: 10.0
* Text Domain: woocommerce-paypal-payments
2020-09-17 16:50:04 -03:00
*
* @package WooCommerce\PayPalCommerce
2020-03-19 16:47:08 +01:00
*/
2020-09-17 16:50:04 -03:00
declare( strict_types = 1 );
2020-06-15 11:48:37 +03:00
2020-09-11 14:11:10 +03:00
namespace WooCommerce\PayPalCommerce;
2020-04-02 08:38:00 +03:00
use WooCommerce\PayPalCommerce\WcGateway\Settings\Settings;
define( 'PAYPAL_API_URL', 'https://api-m.paypal.com' );
2023-11-14 10:50:56 +02:00
define( 'PAYPAL_URL', 'https://www.paypal.com' );
define( 'PAYPAL_SANDBOX_API_URL', 'https://api-m.sandbox.paypal.com' );
2023-11-14 10:50:56 +02:00
define( 'PAYPAL_SANDBOX_URL', 'https://www.sandbox.paypal.com' );
2025-07-31 16:17:40 +02:00
define( 'PAYPAL_INTEGRATION_DATE', '2025-07-31' );
define( 'PPCP_PAYPAL_BN_CODE', 'Woo_PPCP' );
2020-10-01 08:53:44 +03:00
! defined( 'CONNECT_WOO_CLIENT_ID' ) && define( 'CONNECT_WOO_CLIENT_ID', 'AcCAsWta_JTL__OfpjspNyH7c1GGHH332fLwonA5CwX4Y10mhybRZmHLA0GdRbwKwjQIhpDQy0pluX_P' );
! defined( 'CONNECT_WOO_SANDBOX_CLIENT_ID' ) && define( 'CONNECT_WOO_SANDBOX_CLIENT_ID', 'AYmOHbt1VHg-OZ_oihPdzKEVbU3qg0qXonBcAztuzniQRaKE0w1Hr762cSFwd4n8wxOl-TCWohEa0XM_' );
2023-05-15 15:44:32 +02:00
! defined( 'CONNECT_WOO_MERCHANT_ID' ) && define( 'CONNECT_WOO_MERCHANT_ID', 'K8SKZ36LQBWXJ' );
! defined( 'CONNECT_WOO_SANDBOX_MERCHANT_ID' ) && define( 'CONNECT_WOO_SANDBOX_MERCHANT_ID', 'MPMFHQTVMBZ6G' );
! defined( 'CONNECT_WOO_URL' ) && define( 'CONNECT_WOO_URL', 'https://api.woocommerce.com/integrations/ppc' );
! defined( 'CONNECT_WOO_SANDBOX_URL' ) && define( 'CONNECT_WOO_SANDBOX_URL', 'https://api.woocommerce.com/integrations/ppcsandbox' );
2020-10-01 08:53:44 +03:00
2020-09-17 16:50:04 -03:00
( function () {
$autoload_filepath = __DIR__ . '/vendor/autoload.php';
if ( file_exists( $autoload_filepath ) && ! class_exists( '\WooCommerce\PayPalCommerce\PluginModule' ) ) {
require $autoload_filepath;
}
2020-04-02 08:38:00 +03:00
/**
* Displays an admin notice and optionally deactivates the current plugin.
*
* This function registers a callback to display administrative notices on both
* single-site and network admin areas. It's typically used to show error messages
* when plugin requirements are not met, followed by automatic plugin deactivation.
*
* @param callable $notice_callback The callback function that outputs the admin notice HTML.
* Should echo/print the notice markup directly.
* @param bool $auto_deactivate Optional. Whether to automatically deactivate the plugin
* after displaying the notice. Default true.
*
* @return void
*/
function show_admin_notice_and_deactivate( callable $notice_callback, bool $auto_deactivate = true ): void {
if ( ! is_callable( $notice_callback ) ) {
return;
}
$admin_notice_hooks = array( 'admin_notices', 'network_admin_notices' );
foreach ( $admin_notice_hooks as $hook ) {
add_action(
$hook,
static function () use ( $notice_callback, $auto_deactivate ) {
$notice_callback();
if ( $auto_deactivate ) {
deactivate_plugins( plugin_basename( __FILE__ ) );
unset( $_GET['activate'] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended
}
}
);
}
}
2020-09-17 16:50:04 -03:00
/**
* Initialize the plugin and its modules.
*/
2023-03-14 16:38:28 +02:00
function init(): void {
2021-08-27 20:40:09 +03:00
$root_dir = __DIR__;
if ( ! is_woocommerce_activated() ) {
show_admin_notice_and_deactivate(
static fn() => printf(
'<div class="notice notice-error"><span class="notice-title">%1$s</span><p>%2$s</p></div>',
esc_html__(
'The plugin WooCommerce PayPal Payments has been deactivated',
'woocommerce-paypal-payments'
),
wp_kses(
sprintf(
// translators: %s is a link to install WooCommerce.
esc_html__( 'WooCommerce PayPal Payments requires WooCommerce to be installed and active. %s', 'woocommerce-paypal-payments' ),
sprintf(
'<a href="%s">%s</a>',
esc_url( network_admin_url( 'plugin-install.php?tab=plugin-information&plugin=woocommerce' ) ),
esc_html__( 'You can download WooCommerce here.', 'woocommerce-paypal-payments' )
)
),
array(
'a' => array(
'href' => array(),
'target' => array(),
),
)
)
)
);
return;
}
2024-09-03 09:07:12 +03:00
if ( version_compare( PHP_VERSION, '7.4', '<' ) ) {
show_admin_notice_and_deactivate(
static fn() => printf(
'<div class="notice notice-error"><span class="notice-title">%1$s</span><p>%2$s</p></div>',
esc_html__(
'The plugin WooCommerce PayPal Payments has been deactivated',
'woocommerce-paypal-payments'
),
esc_html__( 'WooCommerce PayPal Payments requires PHP 7.4 or above.', 'woocommerce-paypal-payments' )
)
);
return;
}
2020-09-17 16:50:04 -03:00
static $initialized;
if ( ! $initialized ) {
2021-08-27 20:40:09 +03:00
$bootstrap = require "$root_dir/bootstrap.php";
2021-07-26 20:13:05 +03:00
2021-08-27 20:40:09 +03:00
$app_container = $bootstrap( $root_dir );
2021-07-26 20:13:05 +03:00
PPCP::init( $app_container );
2020-09-17 16:50:04 -03:00
$initialized = true;
2022-02-17 18:19:55 +02:00
/**
* The hook fired after the plugin bootstrap with the app services container as parameter.
*/
2021-08-27 20:40:09 +03:00
do_action( 'woocommerce_paypal_payments_built_container', $app_container );
2020-09-17 16:50:04 -03:00
}
}
2020-04-02 08:38:00 +03:00
2020-09-17 16:50:04 -03:00
add_action(
'plugins_loaded',
2020-09-17 16:50:04 -03:00
function () {
init();
if ( ! is_woocommerce_activated() ) {
return;
}
add_action(
'init',
function () {
$current_plugin_version = (string) PPCP::container()->get( 'ppcp.plugin' )->getVersion();
$installed_plugin_version = get_option( 'woocommerce-ppcp-version' );
if ( $installed_plugin_version !== $current_plugin_version ) {
/**
* The hook fired when the plugin is installed or updated.
*/
do_action( 'woocommerce_paypal_payments_gateway_migrate', $installed_plugin_version );
if ( $installed_plugin_version ) {
/**
* The hook fired when the plugin is updated.
*/
do_action( 'woocommerce_paypal_payments_gateway_migrate_on_update' );
}
update_option( 'woocommerce-ppcp-version', $current_plugin_version );
}
},
-1
);
}
2020-09-17 16:50:04 -03:00
);
register_activation_hook(
__FILE__,
function () {
init();
2022-02-17 18:19:55 +02:00
/**
* The hook fired in register_activation_hook.
*/
2020-10-09 19:55:28 -03:00
do_action( 'woocommerce_paypal_payments_gateway_activate' );
2020-09-17 16:50:04 -03:00
}
);
register_deactivation_hook(
__FILE__,
function () {
init();
2022-02-17 18:19:55 +02:00
/**
* The hook fired in register_deactivation_hook.
*/
2020-10-09 19:55:28 -03:00
do_action( 'woocommerce_paypal_payments_gateway_deactivate' );
2020-09-17 16:50:04 -03:00
}
);
2020-04-06 10:51:56 +03:00
add_filter(
'plugin_action_links_' . plugin_basename( __FILE__ ),
2023-03-14 16:38:28 +02:00
/**
* Add "Settings" link to Plugins screen.
*
* @param array $links
2025-03-24 14:09:19 +01:00
* @return array
2023-03-14 16:38:28 +02:00
*/
function( $links ) {
if ( ! is_woocommerce_activated() ) {
return $links;
}
array_unshift(
$links,
sprintf(
'<a href="%1$s">%2$s</a>',
admin_url( 'admin.php?page=wc-settings&tab=checkout&section=ppcp-gateway&ppcp-tab=' . Settings::CONNECTION_TAB_ID ),
__( 'Settings', 'woocommerce-paypal-payments' )
)
);
return $links;
}
);
add_filter(
'plugin_row_meta',
2023-03-14 16:38:28 +02:00
/**
* Add links below the description on the Plugins page.
*
* @param array $links
* @param string $file
2025-03-24 14:09:19 +01:00
* @return array
2023-03-14 16:38:28 +02:00
*/
function( $links, $file ) {
if ( plugin_basename( __FILE__ ) !== $file ) {
return $links;
}
return array_merge(
$links,
array(
sprintf(
2022-08-29 16:20:37 +04:00
'<a target="_blank" href="%1$s">%2$s</a>',
'https://woocommerce.com/document/woocommerce-paypal-payments/',
__( 'Documentation', 'woocommerce-paypal-payments' )
),
sprintf(
2022-08-29 14:39:52 +04:00
'<a target="_blank" href="%1$s">%2$s</a>',
'https://woocommerce.com/document/woocommerce-paypal-payments/#get-help',
__( 'Get help', 'woocommerce-paypal-payments' )
),
sprintf(
2022-08-29 16:20:37 +04:00
'<a target="_blank" href="%1$s">%2$s</a>',
'https://woocommerce.com/feature-requests/woocommerce-paypal-payments/',
__( 'Request a feature', 'woocommerce-paypal-payments' )
),
sprintf(
2022-08-29 16:20:37 +04:00
'<a target="_blank" href="%1$s">%2$s</a>',
'https://github.com/woocommerce/woocommerce-paypal-payments/issues/new?assignees=&labels=type%3A+bug&template=bug_report.md',
__( 'Submit a bug', 'woocommerce-paypal-payments' )
),
)
);
},
10,
2
);
2022-10-24 12:20:45 +02:00
add_action(
'before_woocommerce_init',
function() {
if ( class_exists( '\Automattic\WooCommerce\Utilities\FeaturesUtil' ) ) {
2023-03-14 16:38:28 +02:00
/**
* Skip WC class check.
*
* @psalm-suppress UndefinedClass
*/
2022-10-24 12:20:45 +02:00
\Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', __FILE__, true );
}
}
);
/**
* Check if WooCommerce is active.
*
* @return bool true if WooCommerce is active, otherwise false.
*/
function is_woocommerce_activated(): bool {
return class_exists( 'woocommerce' );
}
2025-02-18 18:55:12 +01:00
add_action(
'woocommerce_paypal_payments_gateway_migrate',
/**
* Set new merchant flag on plugin install.
*
* When installing the plugin for the first time, we direct the user to
* the new UI without a data migration, and fully hide the #legacy-ui.
2025-02-18 18:55:12 +01:00
*
* @param string|false $version String with previous installed plugin version.
* Boolean false on first installation on a new site.
*/
static function ( $version ) {
if ( ! $version ) {
update_option( 'woocommerce-ppcp-is-new-merchant', '1' );
}
2025-02-03 12:56:28 +01:00
}
2025-02-18 18:55:12 +01:00
);
2020-09-17 16:50:04 -03:00
} )();