diff --git a/autoload.php b/autoload.php index dc6f098..4b9cb4a 100644 --- a/autoload.php +++ b/autoload.php @@ -16,7 +16,7 @@ function ( $class ) { $namspaces = [ 'Eighteen73\\Orbit\\' => __DIR__ . '/includes/classes/', - 'Eighteen73\\Orbit\\Dependencies\\' => __DIR__ . '/includes/dependencies/', + 'Eighteen73\\Orbit\\Dependencies\\' => __DIR__ . '/includes/lib/', ]; foreach ( $namspaces as $prefix => $base_dir ) { $len = strlen( $prefix ); diff --git a/composer.json b/composer.json index 0cf1cf3..638b1b4 100644 --- a/composer.json +++ b/composer.json @@ -25,8 +25,8 @@ "extra": { "mozart": { "dep_namespace": "Eighteen73\\Orbit\\Dependencies\\", - "dep_directory": "/includes/Dependencies/", - "classmap_directory": "/includes/classes/dependencies/", + "dep_directory": "/includes/lib/", + "classmap_directory": "/includes/classes/lib/", "classmap_prefix": "Eighteen73_Orbit_", "packages": [ "pelago/emogrifier" diff --git a/includes/classes/BlockEditor/Patterns.php b/includes/classes/BlockEditor/Patterns.php new file mode 100644 index 0000000..7b2bf76 --- /dev/null +++ b/includes/classes/BlockEditor/Patterns.php @@ -0,0 +1,123 @@ +get_all_registered(); + + if ( ! empty( $patterns ) ) { + foreach ( $patterns as $pattern ) { + if ( $this->is_woocommerce_pattern( $pattern ) ) { + unregister_block_pattern( $pattern['name'] ); + } + } + } + } + + /** + * Filter WooCommerce patterns from REST API responses. + * + * @param mixed $dispatch_result Dispatch result, will be used if not empty. + * @param \WP_REST_Request $request Request used to generate the response. + * @param string $route Route matched for the request. + * @param array $handler Route handler used for the request. + * @return mixed + */ + public function filter_woocommerce_patterns_rest( $dispatch_result, $request, $route, $handler ) { + // Check if this is a block patterns request + if ( strpos( $route, '/wp/v2/block-patterns/patterns' ) !== 0 ) { + return $dispatch_result; + } + + // If we already have a result, filter it + if ( ! empty( $dispatch_result ) && is_array( $dispatch_result ) ) { + return $this->filter_patterns_from_response( $dispatch_result ); + } + + return $dispatch_result; + } + + /** + * Check if a pattern is a WooCommerce pattern. + * + * @param array $pattern The pattern data. + * @return bool + */ + private function is_woocommerce_pattern( array $pattern ): bool { + // Check by category + if ( ! empty( $pattern['categories'] ) && in_array( 'woo-commerce', $pattern['categories'], true ) ) { + return true; + } + + // Check by pattern name/slug + $woo_prefixes = [ + 'woocommerce-blocks/', + 'woocommerce/', + 'woo/', + 'wc-', + ]; + + foreach ( $woo_prefixes as $prefix ) { + if ( strpos( $pattern['name'], $prefix ) === 0 ) { + return true; + } + } + + return false; + } + + /** + * Filter WooCommerce patterns from a REST response. + * + * @param array $response The response data. + * @return array + */ + private function filter_patterns_from_response( array $response ): array { + if ( isset( $response['data'] ) && is_array( $response['data'] ) ) { + $response['data'] = array_filter( + $response['data'], + function ( $pattern ) { + return ! $this->is_woocommerce_pattern( $pattern ); + } + ); + + // Re-index the array to maintain proper JSON structure + $response['data'] = array_values( $response['data'] ); + } + + return $response; + } +} diff --git a/includes/classes/BrandedEmails.php b/includes/classes/Branding/BrandedEmails.php similarity index 98% rename from includes/classes/BrandedEmails.php rename to includes/classes/Branding/BrandedEmails.php index d269745..48025f0 100644 --- a/includes/classes/BrandedEmails.php +++ b/includes/classes/Branding/BrandedEmails.php @@ -5,9 +5,12 @@ * @package Orbit */ -namespace Eighteen73\Orbit; +namespace Eighteen73\Orbit\Branding; use Exception; +use Eighteen73\Orbit\Singleton; +use Eighteen73\Orbit\Environment; +use Eighteen73\Orbit\Utilities\Templates; use Eighteen73\Orbit\Dependencies\Pelago\Emogrifier\CssInliner; /** @@ -262,7 +265,7 @@ public static function orbit_branded_emails_resolve_color( $color_value, $fallba } } - if ( $value ) { + if ( is_string( $value ) && $value !== '' ) { return self::orbit_branded_emails_resolve_color( $value, $fallback ); } } diff --git a/includes/classes/RemoteFiles.php b/includes/classes/Media/RemoteFiles.php similarity index 98% rename from includes/classes/RemoteFiles.php rename to includes/classes/Media/RemoteFiles.php index 3f9f0b6..93e32ff 100644 --- a/includes/classes/RemoteFiles.php +++ b/includes/classes/Media/RemoteFiles.php @@ -5,8 +5,10 @@ * @package Orbit */ -namespace Eighteen73\Orbit; +namespace Eighteen73\Orbit\Media; +use Eighteen73\Orbit\Environment; +use Eighteen73\Orbit\Singleton; use Roots\WPConfig\Config; use Roots\WPConfig\Exceptions\UndefinedConfigKeyException; diff --git a/includes/classes/HealthCheck.php b/includes/classes/Monitoring/HealthCheck.php similarity index 93% rename from includes/classes/HealthCheck.php rename to includes/classes/Monitoring/HealthCheck.php index d71c31b..ddb16ca 100644 --- a/includes/classes/HealthCheck.php +++ b/includes/classes/Monitoring/HealthCheck.php @@ -5,8 +5,9 @@ * @package Orbit */ -namespace Eighteen73\Orbit; +namespace Eighteen73\Orbit\Monitoring; +use Eighteen73\Orbit\Singleton; use WP_REST_Request; /** diff --git a/includes/classes/OtherFilters.php b/includes/classes/OtherFilters.php deleted file mode 100644 index 7f87ee0..0000000 --- a/includes/classes/OtherFilters.php +++ /dev/null @@ -1,26 +0,0 @@ -setup(); Performance\Fast404::instance()->setup(); - +ThirdParty\WooCommerce::instance()->setup(); add_action( 'init', @@ -45,9 +45,9 @@ function () { Security\HideAuthor::instance()->setup(); Security\HideVersion::instance()->setup(); Security\RemoveHeadLinks::instance()->setup(); - BrandedEmails::instance()->setup(); - OtherFilters::instance()->setup(); - HealthCheck::instance()->setup(); - RemoteFiles::instance()->setup(); + Branding\BrandedEmails::instance()->setup(); + Monitoring\HealthCheck::instance()->setup(); + Media\RemoteFiles::instance()->setup(); + BlockEditor\Patterns::instance()->setup(); } ); diff --git a/phpcs.xml b/phpcs.xml index 2211dc9..b48c21f 100644 --- a/phpcs.xml +++ b/phpcs.xml @@ -5,7 +5,7 @@ . lib/packages/* - includes/Dependencies/* + includes/lib/* diff --git a/templates/branded-emails/email-styles.php b/templates/branded-emails/email-styles.php index bb21635..53eb947 100644 --- a/templates/branded-emails/email-styles.php +++ b/templates/branded-emails/email-styles.php @@ -9,6 +9,8 @@ namespace Eighteen73\Orbit; +use Eighteen73\Orbit\Branding\BrandedEmails; + if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. } diff --git a/templates/branded-emails/email-template.php b/templates/branded-emails/email-template.php index 84bfde4..bab4ef4 100644 --- a/templates/branded-emails/email-template.php +++ b/templates/branded-emails/email-template.php @@ -9,6 +9,8 @@ namespace Eighteen73\Orbit; +use Eighteen73\Orbit\Utilities\Templates; + if ( ! defined( 'ABSPATH' ) ) { exit; // Exit if accessed directly. }