diff --git a/projects/plugins/jetpack/.phan/baseline.php b/projects/plugins/jetpack/.phan/baseline.php index 7120701294027..b8589a544e1db 100644 --- a/projects/plugins/jetpack/.phan/baseline.php +++ b/projects/plugins/jetpack/.phan/baseline.php @@ -178,7 +178,6 @@ 'extensions/blocks/blog-stats/blog-stats.php' => ['PhanTypeMismatchReturnProbablyReal'], 'extensions/blocks/blogroll/blogroll-item/blogroll-item.php' => ['PhanPluginDuplicateConditionalNullCoalescing'], 'extensions/blocks/calendly/calendly.php' => ['PhanTypeMismatchArgumentProbablyReal', 'PhanTypeMismatchReturnProbablyReal'], - 'extensions/blocks/contact-info/contact-info.php' => ['PhanTypeMismatchReturn'], 'extensions/blocks/cookie-consent/cookie-consent.php' => ['PhanParamTooMany'], 'extensions/blocks/donations/donations.php' => ['PhanTypeMismatchArgument'], 'extensions/blocks/gif/gif.php' => ['PhanPluginDuplicateConditionalNullCoalescing', 'PhanTypeMismatchReturnProbablyReal'], diff --git a/projects/plugins/jetpack/changelog/update-contact-info-block-loading b/projects/plugins/jetpack/changelog/update-contact-info-block-loading new file mode 100644 index 0000000000000..6c6e7cb31a30d --- /dev/null +++ b/projects/plugins/jetpack/changelog/update-contact-info-block-loading @@ -0,0 +1,4 @@ +Significance: patch +Type: other + +Contact Info: Change block registration code - move back to two files. diff --git a/projects/plugins/jetpack/extensions/blocks/contact-info/class-jetpack-contact-info-block.php b/projects/plugins/jetpack/extensions/blocks/contact-info/class-jetpack-contact-info-block.php new file mode 100644 index 0000000000000..9ec393ac0b548 --- /dev/null +++ b/projects/plugins/jetpack/extensions/blocks/contact-info/class-jetpack-contact-info-block.php @@ -0,0 +1,161 @@ + __NAMESPACE__ . '\render', + ) + ); + + Blocks::jetpack_register_block( + 'jetpack/address', + array( + 'parent' => array( 'jetpack/contact-info' ), + 'render_callback' => __NAMESPACE__ . '\render_adress', + ) + ); + + Blocks::jetpack_register_block( + 'jetpack/email', + array( + 'parent' => array( 'jetpack/contact-info' ), + 'render_callback' => __NAMESPACE__ . '\render_email', + ) + ); + + Blocks::jetpack_register_block( + 'jetpack/phone', + array( + 'parent' => array( 'jetpack/contact-info' ), + 'render_callback' => __NAMESPACE__ . '\render_phone', + ) + ); + } + + /** + * Adds contact info schema attributes. + * + * @param array $attr Array containing the contact info block attributes. + * @param string $content String containing the contact info block content. + * + * @return string + */ + public static function render( $attr, $content ) { + Jetpack_Gutenberg::load_assets_as_required( __DIR__ ); + return str_replace( + 'class="wp-block-jetpack-contact-info', // Closing " intentionally ommited to that the user can also add the className as expected. + 'itemprop="location" itemscope itemtype="http://schema.org/Organization" class="wp-block-jetpack-contact-info', + $content + ); + } + + /** + * Adds address schema attributes. + * + * @param array $attr Array containing the address block attributes. + * @param string $content String containing the address block content. + * + * @return string + */ + public static function render_address( $attr, $content ) { + // Returns empty content if the only attribute set is linkToGoogleMaps. + if ( ! self::has_attributes( $attr, array( 'linkToGoogleMaps', 'className' ) ) ) { + return ''; + } + $find = array( + 'class="wp-block-jetpack-address"', + 'class="jetpack-address__address', + // Closing " left out on purpose - there are multiple address fields and they all need to be updated with the same itemprop. + 'class="jetpack-address__region"', + 'class="jetpack-address__city"', + 'class="jetpack-address__postal"', + 'class="jetpack-address__country"', + ); + $replace = array( + 'itemprop="address" itemscope itemtype="http://schema.org/PostalAddress" class="wp-block-jetpack-address" ', + 'itemprop="streetAddress" class="jetpack-address__address', // Closing " left out on purpose. + 'itemprop="addressRegion" class="jetpack-address__region"', + 'itemprop="addressLocality" class="jetpack-address__city"', + 'itemprop="postalCode" class="jetpack-address__postal"', + 'itemprop="addressCountry" class="jetpack-address__country"', + ); + + return str_replace( $find, $replace, $content ); + } + + /** + * Helper function that lets us determine if a block has any valid attributes. + * + * @param array $attr Array containing the block attributes. + * @param array $omit Array containing the block attributes that we ignore. + * + * @return bool + */ + public static function has_attributes( $attr, $omit = array() ) { + foreach ( $attr as $attribute => $value ) { + if ( ! in_array( $attribute, $omit, true ) && ! empty( $value ) ) { + return true; + } + } + + return false; + } + + /** + * Adds email schema attributes. + * + * @param array $attr Array containing the email block attributes. + * @param string $content String containing the email block content. + * + * @return string + */ + public static function render_email( $attr, $content ) { + $content = self::has_attributes( $attr, array( 'className' ) ) ? + str_replace( 'href="mailto:', 'itemprop="email" href="mailto:', $content ) : + ''; + return $content; + } + + /** + * Adds phone schema attributes. Also wraps the tel link in a span so that + * it's recognized as a telephone number in Google's Structured Data. + * + * @param array $attr Array containing the phone block attributes. + * @param string $content String containing the phone block content. + * + * @return string + */ + public static function render_phone( $attr, $content ) { + if ( self::has_attributes( $attr, array( 'className' ) ) ) { + return str_replace( + array( ' $value ) { - if ( ! in_array( $attribute, $omit, true ) && ! empty( $value ) ) { - return true; - } - } - - return false; -} - -/** - * Adds email schema attributes. - * - * @param array $attr Array containing the email block attributes. - * @param string $content String containing the email block content. - * - * @return string - */ -function render_email( $attr, $content ) { - $content = has_attributes( $attr, array( 'className' ) ) ? - str_replace( 'href="mailto:', 'itemprop="email" href="mailto:', $content ) : - ''; - return $content; -} - -/** - * Adds phone schema attributes. Also wraps the tel link in a span so that - * it's recognized as a telephone number in Google's Structured Data. - * - * @param array $attr Array containing the phone block attributes. - * @param string $content String containing the phone block content. - * - * @return string - */ -function render_phone( $attr, $content ) { - if ( has_attributes( $attr, array( 'className' ) ) ) { - return str_replace( - array( '