| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195 | <?php/** * WPSEO plugin file. * * @package WPSEO\Internals *//** * Represents the abstract class for the health check. */abstract class WPSEO_Health_Check {	/**	 * @var string	 */	const STATUS_GOOD = 'good';	/**	 * @var string	 */	const STATUS_RECOMMENDED = 'recommended';	/**	 * @var string	 */	const STATUS_CRITICAL = 'critical';	/**	 * Name of the test.	 *	 * @var string	 */	protected $name = '';	/**	 * The value of the section header in the Health check.	 *	 * @var string	 */	protected $label = '';	/**	 * Section the result should be displayed in.	 *	 * @var string	 */	protected $status = '';	/**	 * What the badge should say with a color.	 *	 * @var array	 */	protected $badge = [		'label' => '',		'color' => '',	];	/**	 * Additional details about the results of the test.	 *	 * @var string	 */	protected $description = '';	/**	 * A link or button to allow the end user to take action on the result.	 *	 * @var string	 */	protected $actions = '';	/**	 * The name of the test.	 *	 * @var string	 */	protected $test = '';	/**	 * Whether or not the test should be ran on AJAX as well.	 *	 * @var bool True when is async, default false.	 */	protected $async = false;	/**	 * Runs the test and returns the result.	 *	 * @return array The result.	 */	abstract public function run();	/**	 * Registers the test to WordPress.	 */	public function register_test() {		if ( $this->async ) {			add_filter( 'site_status_tests', [ $this, 'add_async_test' ] );			add_action( 'wp_ajax_health-check-' . $this->get_test_name(), [ $this, 'get_async_test_result' ] );			return;		}		add_filter( 'site_status_tests', [ $this, 'add_test' ] );	}	/**	 * Runs the test.	 *	 * @param array $tests Array with the current tests.	 *	 * @return array The extended array.	 */	public function add_test( $tests ) {		$tests['direct'][ $this->name ] = [			'test' => [ $this, 'get_test_result' ],			'name' => $this->name,		];		return $tests;	}	/**	 * Runs the test in async mode.	 *	 * @param array $tests Array with the current tests.	 *	 * @return array The extended array.	 */	public function add_async_test( $tests ) {		$tests['async'][ $this->name ] = [			'test' => $this->get_test_name(),			'name' => $this->name,		];		return $tests;	}	/**	 * Formats the test result as an array.	 *	 * @return array The formatted test result.	 */	public function get_test_result() {		$this->run();		return [			'label'       => $this->label,			'status'      => $this->status,			'badge'       => $this->get_badge(),			'description' => $this->description,			'actions'     => $this->actions,		];	}	/**	 * Formats the test result as an array.	 */	public function get_async_test_result() {		wp_send_json_success( $this->get_test_result() );	}	/**	 * Retrieves the badge and ensure usable values are set.	 *	 * @return array The proper formatted badge.	 */	protected function get_badge() {		if ( ! is_array( $this->badge ) ) {			$this->badge = [];		}		if ( empty( $this->badge['label'] ) ) {			$this->badge['label'] = __( 'SEO', 'wordpress-seo' );		}		if ( empty( $this->badge['color'] ) ) {			$this->badge['color'] = 'green';		}		return $this->badge;	}	/**	 * WordPress converts the underscores to dashes. To prevent issues we have	 * to do it as well.	 *	 * @return string The formatted testname.	 */	protected function get_test_name() {		return str_replace( '_', '-', $this->test );	}}
 |