Source: includes/classes/FeatureRequirementsStatus.php

<?php
/**
 * Simple class for tracking a features requirement status
 *
 * @since  2.1
 * @package elasticpress
 */

namespace ElasticPress;

if ( ! defined( 'ABSPATH' ) ) {
	exit; // Exit if accessed directly.
}

/**
 * Just an easy way to represent a feature requirements status
 */
class FeatureRequirementsStatus {
	const AUTO_ENABLED         = 0;
	const MANUALLY_ENABLED     = 1;
	const FORCE_DISABLED       = 2;
	const TEMPORARILY_DISABLED = 3;

	/**
	 * Returns the status of a feature
	 *
	 * 0 is no issues
	 * 1 is usable but there are warnings
	 * 2 is not usable
	 *
	 * @var    int
	 * @since  2.2
	 */
	public $code;

	/**
	 * Optional message to describe status code
	 *
	 * @var    string|array
	 * @since  2.2
	 */
	public $message;

	/**
	 * Optional feature object
	 *
	 * @var    Feature|null
	 * @since  5.3.3
	 */
	public $feature;

	/**
	 * Initialize class
	 *
	 * @param int          $code Status code.
	 * @param string|array $message Message describing status.
	 * @param Feature      $feature Feature object.
	 * @since  2.2
	 */
	public function __construct( $code, $message = null, $feature = null ) {
		$this->code    = $code;
		$this->message = $message;
		$this->feature = $feature;
	}

	/**
	 * Get the message for the feature requirements status
	 *
	 * @return array The message to display
	 * @since  5.3.3
	 */
	public function get_message() {
		/**
		 * Filter the feature requirements status message
		 *
		 * @hook ep_feature_requirements_status_message
		 * @param {array} $message The message to display
		 * @param {FeatureRequirementsStatus} $status The feature requirements status object
		 * @since  5.3.3
		 * @return array The message to display
		 */
		return apply_filters( 'ep_feature_requirements_status_message', (array) $this->message, $this );
	}

	/**
	 * Get the code for the feature requirements status
	 *
	 * @return int The code to display
	 * @since  5.3.3
	 */
	public function get_code() {
		/**
		 * Filter the feature requirements status code
		 *
		 * @hook ep_feature_requirements_status_code
		 * @param {int} $code The code to display
		 * @param {FeatureRequirementsStatus} $status The feature requirements status object
		 * @since  5.3.3
		 * @return int The code to display
		 */
		return apply_filters( 'ep_feature_requirements_status_code', (int) $this->code, $this );
	}

	/**
	 * Get the feature object
	 *
	 * @return Feature|null The feature object
	 * @since  5.3.3
	 */
	public function get_feature() {
		/**
		 * Filter the feature object
		 *
		 * @hook ep_feature_requirements_status_feature
		 * @param {Feature|null} $feature The feature object
		 * @param {FeatureRequirementsStatus} $status The feature requirements status object
		 * @since  5.3.3
		 * @return Feature|null The feature object
		 */
		return apply_filters( 'ep_feature_requirements_status_feature', $this->feature, $this );
	}
}