595 lines
14 KiB
PHP
595 lines
14 KiB
PHP
<?php
|
|
/**
|
|
* Exceptions.
|
|
*/
|
|
namespace FortAwesome;
|
|
|
|
use \Exception;
|
|
|
|
// phpcs:disable Generic.Files.OneClassPerFile.MultipleFound
|
|
// phpcs:disable Generic.Files.OneObjectStructurePerFile.MultipleFound
|
|
|
|
/**
|
|
* An abstract class defining behavior for most exceptions thrown by this plugin.
|
|
*/
|
|
abstract class FontAwesome_Exception extends Exception {
|
|
/**
|
|
* A WP_Error object that was the occassion for this exception.
|
|
*
|
|
* Internal use only.
|
|
*
|
|
* @ignore
|
|
* @internal
|
|
*/
|
|
protected $wp_error = null;
|
|
|
|
/**
|
|
* An HTTP response array that is the occassion for this exception.
|
|
* Array keys should be like an array that would be returned from wp_remote_post().
|
|
*
|
|
* Internal use only.
|
|
*
|
|
* @ignore
|
|
* @internal
|
|
*/
|
|
protected $wp_response = null;
|
|
|
|
/**
|
|
* Construct an exception that includes a WP_Error that is the cause of the exception.
|
|
*
|
|
* Internal use only.
|
|
*
|
|
* @ignore
|
|
* @internal
|
|
*/
|
|
public static function with_wp_error( $wp_error ) {
|
|
// This is how we invoke the derived class's constructor from an inherited static method.
|
|
$obj = new static();
|
|
|
|
if ( ! is_null( $wp_error ) && is_a( $wp_error, 'WP_Error' ) ) {
|
|
$obj->wp_error = $wp_error;
|
|
}
|
|
|
|
return $obj;
|
|
}
|
|
|
|
/**
|
|
* Construct an exception with an associated HTTP response, the cause of the exception.
|
|
*
|
|
* Internal use only.
|
|
*
|
|
* @ignore
|
|
* @internal
|
|
* @param $wp_reponse a response array as would be returned by wp_remote_post()
|
|
* with keys like: 'headers', 'body', 'response'
|
|
*/
|
|
public static function with_wp_response( $wp_response ) {
|
|
// This is how we invoke the derived class's constructor from an inherited static method.
|
|
$obj = new static();
|
|
|
|
if (
|
|
! is_null( $wp_response ) &&
|
|
is_array( $wp_response ) &&
|
|
isset( $wp_response['headers'] ) &&
|
|
isset( $wp_response['body'] ) &&
|
|
isset( $wp_response['response'] )
|
|
) {
|
|
$obj->wp_response = $wp_response;
|
|
}
|
|
|
|
return $obj;
|
|
}
|
|
|
|
/**
|
|
* Construct an exception with a previously thrown Error or Exception.
|
|
*
|
|
* Internal use only.
|
|
*
|
|
* (The Throwable interface is not available until PHP 7, and we support back to 5.6.)
|
|
*
|
|
* @ignore
|
|
* @internal
|
|
* @param $e Error or Exception
|
|
*/
|
|
public static function with_thrown( $e ) {
|
|
return new static( null, 0, $e );
|
|
}
|
|
|
|
/**
|
|
* The WP_Error associated with this exception, if any.
|
|
*
|
|
* @since 4.0.0
|
|
* @return null|WP_Error
|
|
*/
|
|
public function get_wp_error() {
|
|
return $this->wp_error;
|
|
}
|
|
|
|
/**
|
|
* The response object associated with this exception, if any.
|
|
*
|
|
* @since 4.0.0
|
|
* @return null|array a response array as would be returned by wp_remote_post()
|
|
* with keys like: 'headers', 'body', 'response'.
|
|
*/
|
|
public function get_wp_response() {
|
|
return $this->wp_response;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* An abstract parent class for exceptions that should result in an HTTP 500 status.
|
|
*
|
|
* @since 4.0.0
|
|
*/
|
|
abstract class FontAwesome_ServerException extends FontAwesome_Exception {}
|
|
|
|
/**
|
|
* An abstract parent class for exceptions that should result in an HTTP 400 status.
|
|
*
|
|
* @since 4.0.0
|
|
*/
|
|
abstract class FontAwesome_ClientException extends FontAwesome_Exception {}
|
|
|
|
/**
|
|
* Thrown when an API Token is required but not found.
|
|
*
|
|
* @since 4.0.0
|
|
*/
|
|
class ApiTokenMissingException extends FontAwesome_ClientException {
|
|
/**
|
|
* Internal use only.
|
|
*
|
|
* @ignore
|
|
* @internal
|
|
*/
|
|
public function __construct( $message = null, $code = 0, $previous = null ) {
|
|
return parent::__construct(
|
|
esc_html__(
|
|
'Whoops, it looks like you have not provided a Font Awesome API Token. Enter one on the Font Awesome plugin settings page.',
|
|
'font-awesome'
|
|
),
|
|
$code,
|
|
$previous
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Thrown when the WordPress server fails to issue a request to the token endpoint
|
|
* on Font Awesome API server.
|
|
*
|
|
* @since 4.0.0
|
|
*/
|
|
class ApiTokenEndpointRequestException extends FontAwesome_ServerException {
|
|
/**
|
|
* Internal use only.
|
|
*
|
|
* @ignore
|
|
* @internal
|
|
*/
|
|
public function __construct( $message = null, $code = 0, $previous = null ) {
|
|
return parent::__construct(
|
|
esc_html__(
|
|
'Your WordPress server failed when trying to communicate with the Font Awesome API token endpoint.',
|
|
'font-awesome'
|
|
),
|
|
$code,
|
|
$previous
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Thrown when the token endpoint on the Font Awesome API server returns an
|
|
* non-200 status when trying to use the configured API Token to get an access_token
|
|
* to use for subsequent API query requests.
|
|
*/
|
|
class ApiTokenInvalidException extends FontAwesome_ClientException {
|
|
/**
|
|
* Internal use only.
|
|
*
|
|
* @ignore
|
|
* @internal
|
|
*/
|
|
public function __construct( $message = null, $code = 0, $previous = null ) {
|
|
return parent::__construct(
|
|
esc_html__(
|
|
'Whoops, it looks like that API Token is not valid. Try another one?',
|
|
'font-awesome'
|
|
),
|
|
$code,
|
|
$previous
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Thrown when the Font Awesome API server returns a response with an unexpected schema.
|
|
* This would probably indicate either a programming error in the API server, or a change
|
|
* in the schema such that the Font Awesome plugin's expectations are unmet.
|
|
*
|
|
* @since 4.0.0
|
|
*/
|
|
class ApiTokenEndpointResponseException extends FontAwesome_ServerException {
|
|
/**
|
|
* Internal use only.
|
|
*
|
|
* @ignore
|
|
* @internal
|
|
*/
|
|
public function __construct( $message = null, $code = 0, $previous = null ) {
|
|
return parent::__construct(
|
|
esc_html__(
|
|
'Oh no! It looks like your API Token was valid, but the Font Awesome API server returned an invalid response.',
|
|
'font-awesome'
|
|
),
|
|
$code,
|
|
$previous
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Thrown when there is a failure to write a file on the WordPress server filesystem
|
|
* to store the access_token.
|
|
*
|
|
* @since 4.0.0
|
|
*/
|
|
class AccessTokenStorageException extends FontAwesome_ServerException {
|
|
/**
|
|
* Internal use only.
|
|
*
|
|
* @ignore
|
|
* @internal
|
|
*/
|
|
public function __construct( $message = null, $code = 0, $previous = null ) {
|
|
return parent::__construct(
|
|
esc_html__(
|
|
'Your API Token was valid but we couldn\'t save it for some reason.',
|
|
'font-awesome'
|
|
),
|
|
$code,
|
|
$previous
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Thrown when an options configuration is attempted that does not pass validation.
|
|
*
|
|
* @since 4.0.0
|
|
*/
|
|
class ConfigSchemaException extends FontAwesome_ClientException {
|
|
/**
|
|
* Internal use only.
|
|
*
|
|
* @internal
|
|
* @ignore
|
|
*/
|
|
public static function webfont_always_enables_pseudo_elements() {
|
|
return new static(
|
|
esc_html__(
|
|
'Pseudo-elements cannot be disabled with webfont technology.',
|
|
'font-awesome'
|
|
)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Internal use only.
|
|
*
|
|
* @internal
|
|
* @ignore
|
|
*/
|
|
public static function kit_token_no_api_token() {
|
|
return new static(
|
|
esc_html__(
|
|
'A kitToken was given without a valid apiToken',
|
|
'font-awesome'
|
|
)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Internal use only.
|
|
*
|
|
* @internal
|
|
* @ignore
|
|
*/
|
|
public static function concrete_version_expected() {
|
|
return new static(
|
|
esc_html__(
|
|
'A Font Awesome version number was expected but not given',
|
|
'font-awesome'
|
|
)
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Internal use only.
|
|
*
|
|
* @internal
|
|
* @ignore
|
|
*/
|
|
public static function webfont_v4compat_introduced_later() {
|
|
return new static(
|
|
esc_html__(
|
|
'Whoops! You found a corner case here. Older Version Compatibility for our webfont technology was not introduced until Font Awesome 5.1.0. Try using a newer version, disabling version 4 compatibility, or switch to SVG.',
|
|
'font-awesome'
|
|
)
|
|
);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @internal
|
|
* @ignore
|
|
*/
|
|
public static function v6_pro_cdn_not_supported() {
|
|
return new static(
|
|
esc_html__(
|
|
'Whoops! Font Awesome Pro Version 6 is not available from CDN. Please use a Kit.',
|
|
'font-awesome'
|
|
)
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Thrown when the plugin is activated on a site that does not meet
|
|
* compatibility requirements.
|
|
*
|
|
* @since 4.2.0
|
|
*/
|
|
class ActivationException extends FontAwesome_ClientException {
|
|
/**
|
|
* Internal use only.
|
|
*
|
|
* @internal
|
|
* @ignore
|
|
*/
|
|
public static function multisite_requires_at_least_5_1_0() {
|
|
return new static(
|
|
esc_html__(
|
|
'This plugin supports WordPress Multisite only for WordPress versions 5.1.0 or newer.',
|
|
'font-awesome'
|
|
)
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Thrown when catching an Error or Exception from a registered theme or plugin.
|
|
*
|
|
* @since 4.0.0
|
|
*/
|
|
class PreferenceRegistrationException extends FontAwesome_ServerException {
|
|
/**
|
|
* Internal use only.
|
|
*
|
|
* @ignore
|
|
* @internal
|
|
*/
|
|
public function __construct( $message = null, $code = 0, $previous = null ) {
|
|
return parent::__construct(
|
|
esc_html__(
|
|
'A theme or plugin registered with Font Awesome threw an exception.',
|
|
'font-awesome'
|
|
),
|
|
$code,
|
|
$previous
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Thrown when the WordPress server fails to issue a request to the main query
|
|
* endpoint on Font Awesome API server.
|
|
*
|
|
* @since 4.0.0
|
|
*/
|
|
class ApiRequestException extends FontAwesome_ServerException {
|
|
/**
|
|
* Internal use only.
|
|
*
|
|
* @ignore
|
|
* @internal
|
|
*/
|
|
public function __construct( $message = null, $code = 0, $previous = null ) {
|
|
return parent::__construct(
|
|
esc_html__(
|
|
'Your WordPress server failed trying to send a request to the Font Awesome API server.',
|
|
'font-awesome'
|
|
),
|
|
$code,
|
|
$previous
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Thrown when the query endpoint on the Font Awesome API server responds with
|
|
* an unexpected schema. This probably indicates either a programming error
|
|
* in the API server, or a breaking change and this plugin code is out of date.
|
|
*
|
|
* @since 4.0.0
|
|
*/
|
|
class ApiResponseException extends FontAwesome_ServerException {
|
|
/**
|
|
* Internal use only.
|
|
*
|
|
* @ignore
|
|
* @internal
|
|
*/
|
|
public function __construct( $message = null, $code = 0, $previous = null ) {
|
|
return parent::__construct(
|
|
esc_html__(
|
|
'An unexpected response was received from the Font Awesome API server.',
|
|
'font-awesome'
|
|
),
|
|
$code,
|
|
$previous
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Thrown when there's a failure to write a transient for storing the Font Awesome
|
|
* releases metadata.
|
|
*
|
|
* @since 4.0.0
|
|
*/
|
|
class ReleaseProviderStorageException extends FontAwesome_ServerException {
|
|
/**
|
|
* Internal use only.
|
|
*
|
|
* @ignore
|
|
* @internal
|
|
*/
|
|
public function __construct( $message = null, $code = 0, $previous = null ) {
|
|
return parent::__construct(
|
|
esc_html__(
|
|
'Something went wrong when we tried to store the list of available Font Awesome versions in your WordPress database.',
|
|
'font-awesome'
|
|
),
|
|
$code,
|
|
$previous
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Thrown when the plugin expects release metadata to be present but isn't for some reason.
|
|
*
|
|
* @since 4.0.0
|
|
*/
|
|
class ReleaseMetadataMissingException extends FontAwesome_ServerException {
|
|
/**
|
|
* Internal use only.
|
|
*
|
|
* @ignore
|
|
* @internal
|
|
*/
|
|
public function __construct( $message = null, $code = 0, $previous = null ) {
|
|
return parent::__construct(
|
|
esc_html__(
|
|
'Eek! We\'re missing the information we need to load the version of Font Awesome you have selected. Go to your Font Awesome plugin settings page, re-select a version, and save. If that doesn\'t work, try deactivating and then re-activating the plugin. If that doesn\'t work either, you might need to delete and re-install the plug-in.',
|
|
'font-awesome'
|
|
),
|
|
$code,
|
|
$previous
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Thrown when attempting front-end page load logic and the options configuration
|
|
* is invalid. This should never happen, since only valid options configurations
|
|
* should ever be stored. If it is thrown it probably means that either there's
|
|
* a programming error in this plugin, or that the state of database has been
|
|
* changed between the time that options would have been valid upon saving and
|
|
* the time that the page load occurs and those options are found to be invalid.
|
|
*
|
|
* @since 4.0.0
|
|
*/
|
|
class ConfigCorruptionException extends FontAwesome_ServerException {
|
|
/**
|
|
* Internal use only.
|
|
*
|
|
* @ignore
|
|
* @internal
|
|
*/
|
|
public function __construct( $message = null, $code = 0, $previous = null ) {
|
|
return parent::__construct(
|
|
esc_html__(
|
|
'When trying to load Font Awesome, the plugin\'s configuration was invalid. Try deactivating, uninstalling, and re-activating the Font Awesome plugin.',
|
|
'font-awesome'
|
|
),
|
|
$code,
|
|
$previous
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Thrown when the conflict detection scanner posts data to a REST endpoint and
|
|
* the data has an invalid schema. This would probably indicate a programming
|
|
* error in this plugin.
|
|
*
|
|
* @since 4.0.0
|
|
*/
|
|
class ConflictDetectionSchemaException extends FontAwesome_ClientException {
|
|
/**
|
|
* Internal use only.
|
|
*
|
|
* @ignore
|
|
* @internal
|
|
*/
|
|
public function __construct( $message = null, $code = 0, $previous = null ) {
|
|
return parent::__construct(
|
|
esc_html__(
|
|
'Inconceivable! Somehow the conflict detection information got garbled into something we can\'t understand.',
|
|
'font-awesome'
|
|
),
|
|
$code,
|
|
$previous
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Thrown when there's a failure to store conflict detection data as a transient.
|
|
*
|
|
* @since 4.0.0
|
|
*/
|
|
class ConflictDetectionStorageException extends FontAwesome_ServerException {
|
|
/**
|
|
* Internal use only.
|
|
*
|
|
* @ignore
|
|
* @internal
|
|
*/
|
|
public function __construct( $message = null, $code = 0, $previous = null ) {
|
|
return parent::__construct(
|
|
esc_html__(
|
|
'We were not able to save conflict detection data to your WordPress database.',
|
|
'font-awesome'
|
|
),
|
|
$code,
|
|
$previous
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates that an incorrect array schema has been provided by a registerd client.
|
|
*
|
|
* See the `$client preferences` parameter schema for {@see FontAwesome::register()}.
|
|
*
|
|
* @since 4.0.0
|
|
*/
|
|
class ClientPreferencesSchemaException extends FontAwesome_ServerException {}
|
|
|
|
/**
|
|
* Indicates a problem during upgrade process.
|
|
*
|
|
* @since 4.0.0
|
|
*/
|
|
class UpgradeException extends FontAwesome_ServerException {
|
|
/**
|
|
* Internal use only.
|
|
*
|
|
* @internal
|
|
* @ignore
|
|
*/
|
|
public static function main_option_delete() {
|
|
return new static(
|
|
esc_html__(
|
|
'Failed during upgrade when trying to delete the main Font Awesome option.',
|
|
'font-awesome'
|
|
)
|
|
);
|
|
}
|
|
}
|