Submit
Path:
~
/
home
/
getwphos
/
public_html
/
BenjaminMarc-Struktur
/
wp-content
/
plugins
/
woocommerce
/
src
/
Utilities
/
File Content:
PluginUtil.php
<?php /** * A class of utilities for dealing with plugins. */ namespace Automattic\WooCommerce\Utilities; use Automattic\WooCommerce\Internal\Traits\AccessiblePrivateMethods; use Automattic\WooCommerce\Proxies\LegacyProxy; /** * A class of utilities for dealing with plugins. */ class PluginUtil { use AccessiblePrivateMethods; /** * The LegacyProxy instance to use. * * @var LegacyProxy */ private $proxy; /** * The cached list of WooCommerce aware plugin ids. * * @var null|array */ private $woocommerce_aware_plugins = null; /** * The cached list of enabled WooCommerce aware plugin ids. * * @var null|array */ private $woocommerce_aware_active_plugins = null; /** * Creates a new instance of the class. */ public function __construct() { self::add_action( 'activated_plugin', array( $this, 'handle_plugin_de_activation' ), 10, 0 ); self::add_action( 'deactivated_plugin', array( $this, 'handle_plugin_de_activation' ), 10, 0 ); } /** * Initialize the class instance. * * @internal * * @param LegacyProxy $proxy The instance of LegacyProxy to use. */ final public function init( LegacyProxy $proxy ) { $this->proxy = $proxy; require_once ABSPATH . WPINC . '/plugin.php'; } /** * Get a list with the names of the WordPress plugins that are WooCommerce aware * (they have a "WC tested up to" header). * * @param bool $active_only True to return only active plugins, false to return all the active plugins. * @return string[] A list of plugin ids (path/file.php). */ public function get_woocommerce_aware_plugins( bool $active_only = false ): array { if ( is_null( $this->woocommerce_aware_plugins ) ) { // In case `get_plugins` was called much earlier in the request (before our headers could be injected), we // invalidate the plugin cache list. wp_cache_delete( 'plugins', 'plugins' ); $all_plugins = $this->proxy->call_function( 'get_plugins' ); $this->woocommerce_aware_plugins = array_keys( array_filter( $all_plugins, array( $this, 'is_woocommerce_aware_plugin' ) ) ); $this->woocommerce_aware_active_plugins = array_values( array_filter( $this->woocommerce_aware_plugins, function ( $plugin_name ) { return $this->proxy->call_function( 'is_plugin_active', $plugin_name ); } ) ); } return $active_only ? $this->woocommerce_aware_active_plugins : $this->woocommerce_aware_plugins; } /** * Get the printable name of a plugin. * * @param string $plugin_id Plugin id (path/file.php). * @return string Printable plugin name, or the plugin id itself if printable name is not available. */ public function get_plugin_name( string $plugin_id ): string { $plugin_data = $this->proxy->call_function( 'get_plugin_data', WP_PLUGIN_DIR . DIRECTORY_SEPARATOR . $plugin_id ); return $plugin_data['Name'] ?? $plugin_id; } /** * Check if a plugin is WooCommerce aware. * * @param string|array $plugin_file_or_data Plugin id (path/file.php) or plugin data (as returned by get_plugins). * @return bool True if the plugin exists and is WooCommerce aware. * @throws \Exception The input is neither a string nor an array. */ public function is_woocommerce_aware_plugin( $plugin_file_or_data ): bool { if ( is_string( $plugin_file_or_data ) ) { return in_array( $plugin_file_or_data, $this->get_woocommerce_aware_plugins(), true ); } elseif ( is_array( $plugin_file_or_data ) ) { return '' !== ( $plugin_file_or_data['WC tested up to'] ?? '' ); } else { throw new \Exception( 'is_woocommerce_aware_plugin requires a plugin name or an array of plugin data as input' ); } } /** * Match plugin identifier passed as a parameter with the output from `get_plugins()`. * * @param string $plugin_file Plugin identifier, either 'my-plugin/my-plugin.php', or output from __FILE__. * * @return string|false Key from the array returned by `get_plugins` if matched. False if no match. */ public function get_wp_plugin_id( $plugin_file ) { $wp_plugins = array_keys( $this->proxy->call_function( 'get_plugins' ) ); // Try to match plugin_basename(). $plugin_basename = $this->proxy->call_function( 'plugin_basename', $plugin_file ); if ( in_array( $plugin_basename, $wp_plugins, true ) ) { return $plugin_basename; } // Try to match by the my-file/my-file.php (dir + file name), then by my-file.php (file name only). $plugin_file = str_replace( array( '\\', '/' ), DIRECTORY_SEPARATOR, $plugin_file ); $file_name_parts = explode( DIRECTORY_SEPARATOR, $plugin_file ); $file_name = array_pop( $file_name_parts ); $directory_name = array_pop( $file_name_parts ); $full_matches = array(); $partial_matches = array(); foreach ( $wp_plugins as $wp_plugin ) { if ( false !== strpos( $wp_plugin, $directory_name . DIRECTORY_SEPARATOR . $file_name ) ) { $full_matches[] = $wp_plugin; } if ( false !== strpos( $wp_plugin, $file_name ) ) { $partial_matches[] = $wp_plugin; } } if ( 1 === count( $full_matches ) ) { return $full_matches[0]; } if ( 1 === count( $partial_matches ) ) { return $partial_matches[0]; } return false; } /** * Handle plugin activation and deactivation by clearing the WooCommerce aware plugin ids cache. */ private function handle_plugin_de_activation(): void { $this->woocommerce_aware_plugins = null; $this->woocommerce_aware_active_plugins = null; } /** * Util function to generate warning string for incompatible features based on active plugins. * * @param string $feature_id Feature id. * @param array $plugin_feature_info Array of plugin feature info. See FeaturesControllers->get_compatible_plugins_for_feature() for details. * * @return string Warning string. */ public function generate_incompatible_plugin_feature_warning( string $feature_id, array $plugin_feature_info ) : string { $feature_warning = ''; $incompatibles = array_merge( $plugin_feature_info['incompatible'], $plugin_feature_info['uncertain'] ); $incompatibles = array_filter( $incompatibles, 'is_plugin_active' ); $incompatible_count = count( $incompatibles ); if ( $incompatible_count > 0 ) { if ( 1 === $incompatible_count ) { /* translators: %s = printable plugin name */ $feature_warning = sprintf( __( '⚠ 1 Incompatible plugin detected (%s).', 'woocommerce' ), $this->get_plugin_name( $incompatibles[0] ) ); } elseif ( 2 === $incompatible_count ) { $feature_warning = sprintf( /* translators: %1\$s, %2\$s = printable plugin names */ __( '⚠ 2 Incompatible plugins detected (%1$s and %2$s).', 'woocommerce' ), $this->get_plugin_name( $incompatibles[0] ), $this->get_plugin_name( $incompatibles[1] ) ); } else { $feature_warning = sprintf( /* translators: %1\$s, %2\$s = printable plugin names, %3\$d = plugins count */ _n( '⚠ Incompatible plugins detected (%1$s, %2$s and %3$d other).', '⚠ Incompatible plugins detected (%1$s and %2$s plugins and %3$d others).', $incompatible_count - 2, 'woocommerce' ), $this->get_plugin_name( $incompatibles[0] ), $this->get_plugin_name( $incompatibles[1] ), $incompatible_count - 2 ); } $incompatible_plugins_url = add_query_arg( array( 'plugin_status' => 'incompatible_with_feature', 'feature_id' => $feature_id, ), admin_url( 'plugins.php' ) ); $extra_desc_tip = '<br>' . sprintf( /* translators: %1$s opening link tag %2$s closing link tag. */ __( '%1$sView and manage%2$s', 'woocommerce' ), '<a href="' . esc_url( $incompatible_plugins_url ) . '">', '</a>' ); $feature_warning .= $extra_desc_tip; } return $feature_warning; } }
Submit
FILE
FOLDER
Name
Size
Permission
Action
ArrayUtil.php
11540 bytes
0644
FeaturesUtil.php
4598 bytes
0644
I18nUtil.php
1727 bytes
0644
NumberUtil.php
1176 bytes
0644
OrderUtil.php
6398 bytes
0644
PluginUtil.php
7831 bytes
0644
StringUtil.php
4718 bytes
0644
N4ST4R_ID | Naxtarrr