Commit realizado el 12:13:52 08-04-2024
This commit is contained in:
@@ -0,0 +1,439 @@
|
||||
<?php
|
||||
/**
|
||||
* Class Compatibility
|
||||
*
|
||||
* @link https://github.com/googleforcreators/web-stories-wp
|
||||
*
|
||||
* @copyright 2020 Google LLC
|
||||
* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* Copyright 2020 Google LLC
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Class Compatibility
|
||||
*
|
||||
* @since 1.2.0
|
||||
*/
|
||||
class Web_Stories_Compatibility {
|
||||
|
||||
/**
|
||||
* WP_Error object passed back.
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @var WP_Error
|
||||
*/
|
||||
protected $error;
|
||||
|
||||
/**
|
||||
* WordPress version.
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $wp_version;
|
||||
|
||||
/**
|
||||
* PHP version.
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $php_version;
|
||||
|
||||
/**
|
||||
* Array of extensions.
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @var array<string, array{functions?: string[], classes?: string[]}>
|
||||
*/
|
||||
protected $extensions = array();
|
||||
|
||||
/**
|
||||
* Array of required files.
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @var string[]
|
||||
*/
|
||||
protected $required_files = array();
|
||||
|
||||
/**
|
||||
* Compatibility constructor.
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @param WP_Error $error WP_Error object passed back.
|
||||
*/
|
||||
public function __construct( WP_Error $error ) { // phpcs:ignore SlevomatCodingStandard.Namespaces.FullyQualifiedExceptions.NonFullyQualifiedException
|
||||
$this->error = $error;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check to see if PHP version check passes.
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function check_php_version() {
|
||||
if ( version_compare( PHP_VERSION, $this->get_php_version(), '<' ) ) {
|
||||
/* translators: %s: PHP version number */
|
||||
$message = esc_html( sprintf( __( 'Web Stories requires PHP %s or higher.', 'web-stories' ), $this->get_php_version() ) );
|
||||
$data = array(
|
||||
'title' => $message,
|
||||
);
|
||||
$this->add_to_error( 'failed_check_php_version', $message, $data );
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check to see if WordPress version check passes.
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function check_wp_version() {
|
||||
if ( version_compare( get_bloginfo( 'version' ), $this->get_wp_version(), '<' ) ) {
|
||||
/* translators: %s: WordPress version number */
|
||||
$message = esc_html( sprintf( __( 'Web Stories requires WordPress %s or higher.', 'web-stories' ), $this->get_wp_version() ) );
|
||||
$data = array(
|
||||
'title' => $message,
|
||||
);
|
||||
$this->add_to_error( 'failed_check_wp_version', $message, $data );
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if required files.
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function check_required_files() {
|
||||
$required_files = $this->get_required_files();
|
||||
if ( $required_files ) {
|
||||
foreach ( $required_files as $required_file ) {
|
||||
if ( ! is_readable( $required_file ) ) {
|
||||
$message =
|
||||
sprintf(
|
||||
/* translators: %s: build commands. */
|
||||
__( 'You appear to be running an incomplete version of the plugin. Please run %s to finish installation.', 'web-stories' ),
|
||||
'<code>composer install && npm install && npm run build</code>'
|
||||
);
|
||||
$data = array(
|
||||
'title' => esc_html__( 'Web Stories plugin could not be initialized.', 'web-stories' ),
|
||||
);
|
||||
$this->add_to_error( 'failed_check_required_files', $message, $data );
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check to see if all required PHP extensions are installed.
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function check_extensions() {
|
||||
$missing_extensions = array();
|
||||
foreach ( array_keys( $this->get_extensions() ) as $required_extension ) {
|
||||
if ( ! extension_loaded( $required_extension ) ) {
|
||||
$missing_extensions[] = "<code>$required_extension</code>";
|
||||
}
|
||||
}
|
||||
|
||||
if ( count( $missing_extensions ) > 0 ) {
|
||||
$this->add_to_error(
|
||||
'missing_extension',
|
||||
sprintf(
|
||||
/* translators: %s is list of missing extensions */
|
||||
_n(
|
||||
'The following PHP extension is missing: %s. Please contact your host to finish installation.',
|
||||
'The following PHP extensions are missing: %s. Please contact your host to finish installation.',
|
||||
count( $missing_extensions ),
|
||||
'web-stories'
|
||||
),
|
||||
implode( ', ', $missing_extensions )
|
||||
)
|
||||
);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check to see if classes exist.
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function check_classes() {
|
||||
$missing_classes = array();
|
||||
foreach ( $this->get_extensions() as $required_constructs ) {
|
||||
foreach ( $required_constructs as $construct_type => $constructs ) {
|
||||
if ( 'classes' !== $construct_type ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach ( $constructs as $construct ) {
|
||||
if ( ! class_exists( $construct ) ) {
|
||||
$missing_classes[] = "<code>$construct</code>";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( count( $missing_classes ) > 0 ) {
|
||||
$this->add_to_error(
|
||||
'missing_class',
|
||||
sprintf(
|
||||
/* translators: %s is list of missing extensions */
|
||||
_n(
|
||||
'The following PHP class is missing: %s. Please contact your host to finish installation.',
|
||||
'The following PHP classes are missing: %s. Please contact your host to finish installation.',
|
||||
count( $missing_classes ),
|
||||
'web-stories'
|
||||
),
|
||||
implode( ', ', $missing_classes )
|
||||
)
|
||||
);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check to see if all require functions exist.
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function check_functions() {
|
||||
$missing_functions = array();
|
||||
foreach ( $this->get_extensions() as $required_constructs ) {
|
||||
foreach ( $required_constructs as $construct_type => $constructs ) {
|
||||
if ( 'functions' !== $construct_type ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach ( $constructs as $construct ) {
|
||||
if ( ! function_exists( $construct ) ) {
|
||||
$missing_functions[] = "<code>$construct</code>";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if ( count( $missing_functions ) > 0 ) {
|
||||
$this->add_to_error(
|
||||
'missing_function',
|
||||
sprintf(
|
||||
/* translators: %s is list of missing extensions */
|
||||
_n(
|
||||
'The following PHP function is missing: %s. Please contact your host to finish installation.',
|
||||
'The following PHP functions are missing: %s. Please contact your host to finish installation.',
|
||||
count( $missing_functions ),
|
||||
'web-stories'
|
||||
),
|
||||
implode( ', ', $missing_functions )
|
||||
)
|
||||
);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Run checks in admin.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function run_checks() {
|
||||
$this->check_php_version();
|
||||
$this->check_wp_version();
|
||||
$this->check_required_files();
|
||||
$this->check_extensions();
|
||||
$this->check_classes();
|
||||
$this->check_functions();
|
||||
}
|
||||
|
||||
/**
|
||||
* Get min WP version.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function get_wp_version() {
|
||||
return $this->wp_version;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get min PHP version.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @return string
|
||||
*/
|
||||
public function get_php_version() {
|
||||
return $this->php_version;
|
||||
}
|
||||
|
||||
/**
|
||||
* Array of extensions.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @return array<string, array{functions?: string[], classes?: string[]}>
|
||||
*/
|
||||
public function get_extensions() {
|
||||
return $this->extensions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get JavaScript path.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @return string[]
|
||||
*/
|
||||
public function get_required_files() {
|
||||
return $this->required_files;
|
||||
}
|
||||
|
||||
/**
|
||||
* Getter to get the error object.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @return WP_Error
|
||||
*/
|
||||
public function get_error() {
|
||||
return $this->error;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set WordPress version.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @param string $wp_version WordPress version.
|
||||
* @return void
|
||||
*/
|
||||
public function set_wp_version( $wp_version ) {
|
||||
$this->wp_version = $wp_version;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set PHP version.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @param string $php_version PHP version.
|
||||
* @return void
|
||||
*/
|
||||
public function set_php_version( $php_version ) {
|
||||
$this->php_version = $php_version;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set extensions.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @param array<string, array{functions?: string[], classes?: string[]}> $extensions Array of extensions.
|
||||
* @return void
|
||||
*/
|
||||
public function set_extensions( array $extensions ) {
|
||||
$this->extensions = $extensions;
|
||||
}
|
||||
|
||||
/**
|
||||
* Array of require files.
|
||||
*
|
||||
* @codeCoverageIgnore
|
||||
*
|
||||
* @since 1.2.0
|
||||
*
|
||||
* @param string[] $required_files Array of require files.
|
||||
* @return void
|
||||
*/
|
||||
public function set_required_files( array $required_files ) {
|
||||
$this->required_files = $required_files;
|
||||
}
|
||||
|
||||
/**
|
||||
* Helper to add error code to WP_Error object.
|
||||
*
|
||||
* @param string|int $code Error code.
|
||||
* @param string $message Error message.
|
||||
* @param mixed $data Optional. Error data.
|
||||
* @return void
|
||||
*/
|
||||
protected function add_to_error( $code, $message, $data = '' ) {
|
||||
if ( ! in_array( $code, $this->error->get_error_codes(), true ) ) {
|
||||
$this->error->add( $code, $message, $data );
|
||||
}
|
||||
}
|
||||
}
|
60
wp-content/plugins/web-stories/includes/compat/amp.php
Normal file
60
wp-content/plugins/web-stories/includes/compat/amp.php
Normal file
@@ -0,0 +1,60 @@
|
||||
<?php
|
||||
/**
|
||||
* AMP plugin compatibility functionality.
|
||||
*
|
||||
* @link https://github.com/googleforcreators/web-stories-wp
|
||||
*
|
||||
* @copyright 2020 Google LLC
|
||||
* @license https://www.apache.org/licenses/LICENSE-2.0 Apache License 2.0
|
||||
*/
|
||||
|
||||
/**
|
||||
* Copyright 2020 Google LLC
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
use Google\Web_Stories\Story_Post_Type;
|
||||
|
||||
if ( ! function_exists( '\is_amp_endpoint' ) ) {
|
||||
/**
|
||||
* Determine whether the current response being served as AMP.
|
||||
*
|
||||
* Polyfill to ensure compatibility with plugins checking for AMP
|
||||
* when the AMP plugin itself is not available.
|
||||
*
|
||||
* @since 1.0.0
|
||||
*
|
||||
* @return bool Whether it is singular story post (and thus an AMP endpoint).
|
||||
*/
|
||||
function is_amp_endpoint(): bool {
|
||||
// Not using Context class because it's not available yet at this point.
|
||||
return is_singular( Story_Post_Type::POST_TYPE_SLUG ) && ! is_embed() && ! post_password_required();
|
||||
}
|
||||
}
|
||||
|
||||
if ( ! function_exists( '\amp_is_request' ) ) {
|
||||
/**
|
||||
* Determine whether the current response being served as AMP.
|
||||
*
|
||||
* Polyfill to ensure compatibility with plugins checking for AMP
|
||||
* when the AMP plugin itself is not available.
|
||||
*
|
||||
* @since 1.0.0
|
||||
*
|
||||
* @return bool Whether it is singular story post (and thus an AMP endpoint).
|
||||
*/
|
||||
function amp_is_request(): bool {
|
||||
return is_amp_endpoint();
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user