Server : Apache System : Linux pod-100823:apache2_74:v0.5.7 5.4.0-1138-gcp #147~18.04.1-Ubuntu SMP Mon Oct 7 21:46:26 UTC 2024 x86_64 User : www-data ( 33) PHP Version : 7.4.33.7 Disable Function : apache_child_terminate,apache_get_modules,apache_get_version,apache_getenv,apache_note,apache_setenv,disk_free_space,disk_total_space,diskfreespace,dl,exec,fastcgi_finish_request,link,opcache_compile_file,opcache_get_configuration,opcache_invalidate,opcache_is_script_cached,opcache_reset,passthru,pclose,pcntl_exec,popen,posix_getpid,posix_getppid,posix_getpwuid,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_uname,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,realpath_cache_get,shell_exec,show_source,symlink,system Directory : /nas/content/live/attorneyexperi/wp-content/plugins/diva/src/Admin/ |
<?php /** * Class AfterActivationSiteScan. * * Does an async Site Scan whenever any plugin is activated. * * @since 2.2 * * @package AMP */ namespace AmpProject\AmpWP\Admin; use _WP_Dependency; use AMP_Options_Manager; use AMP_Validation_Manager; use AmpProject\AmpWP\Infrastructure\Conditional; use AmpProject\AmpWP\Infrastructure\Delayed; use AmpProject\AmpWP\Infrastructure\HasRequirements; use AmpProject\AmpWP\Infrastructure\Registerable; use AmpProject\AmpWP\Infrastructure\Service; use AmpProject\AmpWP\Services; /** * Class AfterActivationSiteScan * * @since 2.2 * @internal */ final class AfterActivationSiteScan implements Conditional, Delayed, HasRequirements, Service, Registerable { /** * Handle for JS file. * * @var string */ const ASSET_HANDLE = 'amp-site-scan-notice'; /** * HTML ID for the app root element. * * @var string */ const APP_ROOT_ID = 'amp-site-scan-notice'; /** * React dependency handle. * * @var string */ const REACT = 'react'; /** * HTML ID for the app root sibling element. * * Since there is no action for adding notice on `themes.php` screen, we need to inject React root element with JS. * It is an ID of a success notice saying "New theme activated. Visit site" on the `themes.php` screen. * * @var string */ const APP_ROOT_SIBLING_ID = 'message2'; /** * RESTPreloader instance. * * @var RESTPreloader */ private $rest_preloader; /** * Get the list of service IDs required for this service to be registered. * * @return string[] List of required services. */ public static function get_requirements() { return [ 'dependency_support' ]; } /** * OnboardingWizardSubmenuPage constructor. * * @param RESTPreloader $rest_preloader An instance of the RESTPreloader class. */ public function __construct( RESTPreloader $rest_preloader ) { $this->rest_preloader = $rest_preloader; } /** * Check whether the conditional object is currently needed. * * @return bool Whether the conditional object is needed. */ public static function is_needed() { global $pagenow; $react = wp_scripts()->query( self::REACT ); return ( is_admin() && Services::get( 'dependency_support' )->has_support() && ! is_network_admin() && ( $react instanceof _WP_Dependency && version_compare( $react->ver, '18', '>=' ) ) && AMP_Validation_Manager::has_cap() && ( ( 'plugins.php' === $pagenow && ( ! empty( $_GET['activate'] ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended || ! empty( $_GET['activate-multi'] ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended ) ) || ( 'themes.php' === $pagenow && ! empty( $_GET['activated'] ) // phpcs:ignore WordPress.Security.NonceVerification.Recommended ) ) ); } /** * Get the action to use for registering the service. * * @return string Registration action to use. */ public static function get_registration_action() { return 'admin_init'; } /** * Runs on instantiation. */ public function register() { add_action( 'pre_current_active_plugins', [ $this, 'render_notice' ] ); add_action( 'admin_enqueue_scripts', [ $this, 'enqueue_assets' ] ); } /** * Render an admin notice that will do an async Site Scan. */ public function render_notice() { ?> <div id="<?php echo esc_attr( self::APP_ROOT_ID ); ?>"></div> <?php } /** * Enqueue notice assets. */ public function enqueue_assets() { $asset_file = AMP__DIR__ . '/assets/js/' . self::ASSET_HANDLE . '.asset.php'; $asset = require $asset_file; $dependencies = $asset['dependencies']; $version = $asset['version']; wp_enqueue_script( self::ASSET_HANDLE, amp_get_asset_url( 'js/' . self::ASSET_HANDLE . '.js' ), $dependencies, $version, true ); wp_enqueue_style( self::ASSET_HANDLE, amp_get_asset_url( 'css/' . self::ASSET_HANDLE . '.css' ), [ 'wp-components' ], AMP__VERSION ); $data = [ 'AMP_COMPATIBLE_PLUGINS_URL' => $this->get_amp_compatible_plugins_url(), 'AMP_COMPATIBLE_THEMES_URL' => $this->get_amp_compatible_themes_url(), 'APP_ROOT_ID' => self::APP_ROOT_ID, 'APP_ROOT_SIBLING_ID' => self::APP_ROOT_SIBLING_ID, 'OPTIONS_REST_PATH' => '/amp/v1/options', 'SETTINGS_LINK' => menu_page_url( AMP_Options_Manager::OPTION_NAME, false ), 'SCANNABLE_URLS_REST_PATH' => '/amp/v1/scannable-urls', 'VALIDATE_NONCE' => AMP_Validation_Manager::has_cap() ? AMP_Validation_Manager::get_amp_validate_nonce() : '', ]; wp_add_inline_script( self::ASSET_HANDLE, sprintf( 'var ampSiteScanNotice = %s;', wp_json_encode( $data ) ), 'before' ); $this->add_preload_rest_paths(); } /** * Get a URL to AMP compatible plugins directory. * * For users capable of installing plugins, the link should lead to the Plugin install page. * Other users will be directed to the plugins page on amp-wp.org. * * @return string URL to AMP compatible plugins directory. */ protected function get_amp_compatible_plugins_url() { if ( current_user_can( 'install_plugins' ) ) { return admin_url( '/plugin-install.php?tab=amp-compatible' ); } return 'https://amp-wp.org/ecosystem/plugins/'; } /** * Get a URL to AMP compatible themes directory. * * For users capable of installing themes, the link should lead to the Theme install page. * Other users will be directed to the themes page on amp-wp.org. * * @return string URL to AMP compatible themes directory. */ protected function get_amp_compatible_themes_url() { if ( current_user_can( 'install_themes' ) ) { return admin_url( '/theme-install.php?browse=amp-compatible' ); } return 'https://amp-wp.org/ecosystem/themes/'; } /** * Adds REST paths to preload. */ protected function add_preload_rest_paths() { $paths = [ '/amp/v1/options', add_query_arg( [ '_fields' => [ 'url', 'amp_url', 'type', 'label' ], ], '/amp/v1/scannable-urls' ), add_query_arg( '_fields', [ 'author', 'name', 'plugin', 'status', 'version' ], '/wp/v2/plugins' ), add_query_arg( '_fields', [ 'author', 'name', 'status', 'stylesheet', 'template', 'version' ], '/wp/v2/themes' ), '/wp/v2/users/me', ]; foreach ( $paths as $path ) { $this->rest_preloader->add_preloaded_path( $path ); } } }