name, strlen( 'jetpack/' ) ); } return $extension_name; } /** * Check to see if a minimum version of Gutenberg is available. Because a Gutenberg version is not available in * php if the Gutenberg plugin is not installed, if we know which minimum WP release has the required version we can * optionally fall back to that. * * @since 1.1.0 * * @param array $version_requirements { * An array containing the required Gutenberg version and, if known, the WordPress version that was released with this minimum version. * * @type string $gutenberg Gutenberg version. * @type string $wp Optional. WordPress version. * } * @param string $slug The slug of the block or plugin that has the Gutenberg version requirement. * * @return boolean True if the version of Gutenberg required by the block or plugin is available. */ public static function is_gutenberg_version_available( $version_requirements, $slug ) { global $wp_version; // Bail if we don't at least have the Gutenberg version requirement, the WP version is optional. if ( empty( $version_requirements['gutenberg'] ) ) { return false; } // If running a local dev build of Gutenberg plugin GUTENBERG_DEVELOPMENT_MODE is set so assume correct version. if ( defined( 'GUTENBERG_DEVELOPMENT_MODE' ) && GUTENBERG_DEVELOPMENT_MODE ) { return true; } $version_available = false; // If running a production build of the Gutenberg plugin then GUTENBERG_VERSION is set, otherwise if WP version // with required version of Gutenberg is known check that. if ( defined( 'GUTENBERG_VERSION' ) ) { $version_available = version_compare( GUTENBERG_VERSION, $version_requirements['gutenberg'], '>=' ); } elseif ( ! empty( $version_requirements['wp'] ) ) { $version_available = version_compare( $wp_version, $version_requirements['wp'], '>=' ); } if ( ! $version_available && ! self::is_standalone_block() // This is only useful in Jetpack. ) { Jetpack_Gutenberg::set_extension_unavailable( $slug, 'incorrect_gutenberg_version', array( 'required_feature' => $slug, 'required_version' => $version_requirements, 'current_version' => array( 'wp' => $wp_version, 'gutenberg' => defined( 'GUTENBERG_VERSION' ) ? GUTENBERG_VERSION : null, ), ) ); } return $version_available; } /** * Get CSS classes for a block. * * @since 1.1.0 * * @param string $slug Block slug. * @param array $attr Block attributes. * @param array $extra Potential extra classes you may want to provide. * * @return string $classes List of CSS classes for a block. */ public static function classes( $slug, $attr, $extra = array() ) { if ( empty( $slug ) ) { return ''; } // Basic block name class. $classes = array( 'wp-block-jetpack-' . $slug, ); // Add alignment if provided. if ( ! empty( $attr['align'] ) && in_array( $attr['align'], array( 'left', 'center', 'right', 'wide', 'full' ), true ) ) { $classes[] = 'align' . $attr['align']; } // Add custom classes if provided in the block editor. if ( ! empty( $attr['className'] ) ) { $classes[] = $attr['className']; } // Add any extra classes. if ( is_array( $extra ) && ! empty( $extra ) ) { $classes = array_merge( $classes, array_filter( $extra ) ); } return implode( ' ', $classes ); } /** * Does the page return AMP content. * * @since 1.1.0 * * @return bool $is_amp_request Are we on an AMP view. */ public static function is_amp_request() { $is_amp_request = ( function_exists( 'is_amp_endpoint' ) && is_amp_endpoint() ); /** This filter is documented in 3rd-party/class.jetpack-amp-support.php */ return apply_filters( 'jetpack_is_amp_request', $is_amp_request ); } /** * Is the current theme an FSE/Site Editor theme. * * @since 1.4.0 * @since 1.4.22 Remove support for deprecated `gutenberg_is_fse_theme` function. * * @return bool True if the current theme is an FSE/Site Editor theme. */ public static function is_fse_theme() { $is_fse_theme = wp_is_block_theme(); /** * Returns true if the current theme is an FSE/Site Editor theme. * * @since 1.4.0 * * @param boolean $is_fse_theme Is the theme an FSE theme. */ return apply_filters( 'jetpack_is_fse_theme', $is_fse_theme ); } /** * Check whether or the block being registered is a standalone block, * running in a context outside of the Jetpack plugin. * * @since 1.3.0 * * @return bool */ public static function is_standalone_block() { $is_standalone_block = ! class_exists( Jetpack_Gutenberg::class ); /** * Returns true if the block is not being registered within a Jetpack plugin context. * * @since 1.3.0 * * @param boolean $is_standalone_block Is the block running standalone versus as part of the Jetpack plugin. */ return apply_filters( 'jetpack_is_standalone_block', $is_standalone_block ); } }