HEX
Server: nginx/1.18.0
System: Linux iZj6c1ieg2jrpk1z5tzi19Z 6.3.9-1.el7.elrepo.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Jun 21 22:18:40 EDT 2023 x86_64
User: www (1001)
PHP: 8.2.4
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/wwwroot/www.cytocare.cn/wp-content/plugins/shopmagic-abandoned-carts/src/Plugin.php
<?php

declare( strict_types=1 );

namespace WPDesk\ShopMagicCart;

use ShopMagicCartVendor\WPDesk\Notice\Notice;
use ShopMagicCartVendor\WPDesk\PluginBuilder\Plugin\AbstractPlugin;
use ShopMagicCartVendor\WPDesk\PluginBuilder\Plugin\Hookable;
use ShopMagicCartVendor\WPDesk\PluginBuilder\Plugin\HookableCollection;
use ShopMagicCartVendor\WPDesk\PluginBuilder\Plugin\HookableParent;
use ShopMagicCartVendor\WPDesk_Plugin_Info;
use ShopMagicVendor\DI\ContainerBuilder;
use ShopMagicVendor\WPDesk\Migrations\WpdbMigrator;
use WPDesk\ShopMagicCart\Admin\AnalyticsController;
use WPDesk\ShopMagicCart\Controller\CartsController;
use WPDesk\ShopMagicCart\TestData\CartTestProvider;
use WPDesk\ShopMagicCart\migrations\Version_10;
use WPDesk\ShopMagic\Components\HookProvider\Conditional;
use WPDesk\ShopMagic\Components\HookProvider\HookProvider;
use WPDesk\ShopMagic\Components\Routing\Argument;
use WPDesk\ShopMagic\Components\Routing\ArgumentCollection;
use WPDesk\ShopMagic\Components\Routing\IntArgument;
use WPDesk\ShopMagic\Components\Routing\RestRoutesRegistry;
use WPDesk\ShopMagic\Integration\ExternalPluginsAccess;

/**
 * Main plugin class. The most important flow decisions are made here.
 */
final class Plugin extends AbstractPlugin implements HookableCollection {
	use HookableParent;

	public function __construct( WPDesk_Plugin_Info $plugin_info ) {
		parent::__construct( $plugin_info ); // @phpstan-ignore-line

		$this->plugin_url       = $this->plugin_info->get_plugin_url();
		$this->plugin_namespace = $this->plugin_info->get_text_domain();
		$this->docs_url         = 'https://docs.shopmagic.app/?utm_source=user-site&utm_medium=quick-link&utm_campaign=docs';
		$this->support_url      = 'https://shopmagic.app/support/?utm_source=user-site&utm_medium=quick-link&utm_campaign=support';
	}

	public function hooks(): void {
		parent::hooks();

		add_action(
			'shopmagic/core/initialized/v2',
			function ( ExternalPluginsAccess $core ) {
				$shopmagic_version = $core->get_version();
				if ( version_compare( $shopmagic_version, '5', '>=' ) ) {
					new Notice(
						sprintf(
						// translators: %s ShopMagic version.
							__(
								'This version of ShopMagic Abandoned Carts plugin is not compatible with ShopMagic %s. Please upgrade ShopMagic Abandoned Carts to the newest version.',
								'shopmagic-abandoned-carts'
							),
							$shopmagic_version
						)
					);

					return;
				}

				$container = $core->get_container();
				$builder   = new ContainerBuilder();
				$builder->wrapContainer( $container );
				$builder->useAutowiring( false );
				$builder->addDefinitions(
					[
						'shopmagic.abandonedCarts.pluginUrl' => $this->plugin_info->get_plugin_url(),
						'shopmagic.abandonedCarts.version' => $this->plugin_info->get_version(),
					],
					$this->plugin_info->get_plugin_dir() . '/config/services.inc.php'
				);
				$carts_container = $builder->build();

				$container->addContainer( $carts_container );

				foreach ( $container->get( 'hookable.init' ) as $item ) {
					if ( $item instanceof Conditional && ! $item::is_needed() ) {
						continue;
					}
					if ( $item instanceof Hookable || $item instanceof HookProvider ) {
						$item->hooks();
					}
				}

				add_action(
					'shopmagic/core/rest/init',
					static function () use ( $container, $core ) {
						$routes   = $core->get_routes_configurator();
						$registry = RestRoutesRegistry::with_defaults( $routes, $container );
						$registry->setLogger( $core->get_logger() );

						$routes->add( '/carts' )
								->args(
									new ArgumentCollection(
										( new IntArgument( 'page' ) )
											->minimum( 1 )
											->default( 1 ),
										( new IntArgument( 'pageSize' ) )
											->default( 20 )
											->minimum( 1 )
											->maximum( 100 ),
										( new Argument( 'filters' ) )
											->type( 'object' )
									)
								)
								->controller( [ CartsController::class, 'index' ] );

						$routes->add( '/carts/(?P<id>[\d]+)' )
								->args(
									new ArgumentCollection(
										new IntArgument( 'id' )
									)
								)
								->methods( 'DELETE' )
								->controller( [ CartsController::class, 'delete' ] );

						$routes->add( '/analytics/carts/aggregate' )
								->controller( [ AnalyticsController::class, 'carts' ] );

						$routes->add( '/analytics/carts/top-stats' )
								->controller( [ AnalyticsController::class, 'top_statistics' ] );

						$routes->add( '/carts/count' )
								->controller( [ CartsController::class, 'count' ] );

						$registry->hooks();
					}
				);

				WpdbMigrator::from_classes( [ Version_10::class ], 'shopmagic_cart' )->migrate();

				$core->add_extension( new CartExtension( $container ) );

				$core->add_test_provider( $container->get( CartTestProvider::class ) );

				$core->append_setting_tab( new Admin\Settings() );
			},
			10
		);
	}
}