The array of conditionals. */ public static function get_conditionals() { return [ Yoast_Admin_And_Dashboard_Conditional::class, ]; } /** * Register hooks. * * @return void */ public function register_hooks() { \add_action( 'admin_init', [ $this, 'check_php_version' ] ); } /** * Checks the current PHP version. * * @return void */ public function check_php_version() { // If the user isn't an admin, don't display anything. if ( ! $this->has_right_capabilities() ) { return; } if ( ! $this->on_dashboard_page( $GLOBALS['pagenow'] ) ) { return; } // Checks if the user is running at least PHP 7.2. if ( $this->is_supported_php_version_installed() === false ) { $this->show_unsupported_php_message(); } } /** * Composes the body of the message to display. * * @return string The message to display. */ public function body() { $message = []; $message[] = MessageFormatter::strongParagraph( \__( 'Upgrade your PHP version', 'wordpress-seo' ) ) . '
'; $message[] = MessageFormatter::paragraph( \sprintf( /* translators: 1: Yoast SEO, 2: Yoast SEO Premium */ \__( 'By November 1st, 2024, we’ll update the minimum PHP requirement for %1$s, %2$s and all our add-ons to PHP 7.4. This, to ensure we can keep delivering state of the art features.', 'wordpress-seo' ), 'Yoast SEO', 'Yoast SEO Premium' ) ) . '
'; $message[] = MessageFormatter::strongParagraph( \__( 'Can’t upgrade yourself? Ask your host!', 'wordpress-seo' ) ) . '
'; $message[] = MessageFormatter::paragraph( \sprintf( /* translators: 1: Link tag to WordPress Hosts page on Yoast.com; 2: Link closing tag */ \__( 'Upgrading your PHP version is something your hosting provider can help you out with. If they can’t upgrade your PHP version, we advise you to consider %1$sswitching to a hosting provider%2$s that can provide the security and features a modern host should provide.', 'wordpress-seo' ), '', '' ) ) . '
'; return \implode( \PHP_EOL, $message ); } /** * Checks if the current user has the right capabilities. * * @return bool True when user has right capabilities. */ protected function has_right_capabilities() { return \current_user_can( 'wpseo_manage_options' ); } /** * Whether we are on the admin dashboard page or in the Yoast dashboard page. * * We need to have the notice in the main admin otherwise the dismissal mechanism won't work. * * @param string $current_page The current page. * * @return bool True if current page is the index.php. */ protected function on_dashboard_page( $current_page ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Date is not processed or saved. if ( $current_page === 'admin.php' && isset( $_GET['page'] ) && \sanitize_text_field( \wp_unslash( $_GET['page'] ) ) === 'wpseo_dashboard' ) { return true; } return ( $current_page === 'index.php' ); } /** * Checks if the installed php version is supported. * * @codeCoverageIgnore * * @return bool True when the php version is support. */ protected function is_supported_php_version_installed() { try { $checker = new RequirementsChecker( [ 'php' => \PHP_VERSION ] ); $checker->addRequirement( VersionRequirement::fromCompareString( 'php', '>=7.4' ) ); $checker->check(); return $checker->hasMessages() === false; } catch ( InvalidVersionComparisonString $e ) { return true; } catch ( InvalidType $e ) { return true; } } /** * Creates a new message to display regarding the usage of PHP 7.3 (or lower). * * @codeCoverageIgnore * * @return void */ protected function show_unsupported_php_message() { $presenter = new WPMessagePresenter( $this, new MessageDismisser( \time(), ( \WEEK_IN_SECONDS * 4 ), new WPDismissOption() ), \__( 'Remind me again in 4 weeks.', 'wordpress-seo' ) ); $presenter->registerHooks(); } }