From 236830015f5e80d5521dd903345309c51d6c2e64 Mon Sep 17 00:00:00 2001 From: balexey88 Date: Fri, 18 Oct 2024 00:46:55 +0300 Subject: [PATCH] Prepare release 0.0.2 --- changelog.txt | 3 ++ changes.md | 3 ++ class-buddypress.php | 56 +++++++++++++++++++++++++++++++ readme.txt | 6 +++- tests/ClassBuddyPressTest.php | 13 ++++++- vendor/bin/.phpunit.result.cache | 2 +- vendor/composer/installed.php | 4 +-- wp-stateless-buddypress-addon.php | 2 +- 8 files changed, 83 insertions(+), 6 deletions(-) diff --git a/changelog.txt b/changelog.txt index 9023a0b..a5410a0 100644 --- a/changelog.txt +++ b/changelog.txt @@ -1,3 +1,6 @@ == Changelog == += 0.0.2 = +* FIX: disable `Cache Busting` when working with BuddyPress attachments. + = 0.0.1 = * Initial public release. diff --git a/changes.md b/changes.md index 74999db..73cf68a 100644 --- a/changes.md +++ b/changes.md @@ -1,3 +1,6 @@ +#### 0.0.2 +* FIX: disable `Cache Busting` when working with BuddyPress attachments. + #### 0.0.1 - Initial public release. diff --git a/class-buddypress.php b/class-buddypress.php index 2390c0b..fc7fe75 100644 --- a/class-buddypress.php +++ b/class-buddypress.php @@ -28,8 +28,10 @@ public function module_init( $sm ) { add_filter('bp_core_avatar_folder_url', array($this, 'bp_core_avatar_folder_url'), 10, 4); add_filter('bp_core_avatar_folder_dir', array($this, 'bp_core_avatar_folder_dir'), 10, 4); + add_filter('stateless_skip_cache_busting', array($this, 'skip_cache_busting'), 20, 2); add_filter('sm:sync::syncArgs', array($this, 'sync_args'), 10, 4); add_filter('bp_core_pre_delete_existing_avatar', array($this, 'delete_existing_avatar'), 10, 2); + add_filter('bp_attachments_pre_get_attachment', array($this, 'bp_attachments_pre_get_attachment'), 10, 2); } /** @@ -92,6 +94,60 @@ public function delete_existing_avatar($return, $args) { return $return; } + /** + * Sync and return GCS url for group images. + * + * Used as CSS background-image. + * + * @param [type] $return + * @param [type] $r + * @return void + */ + public function bp_attachments_pre_get_attachment($return, $r) { + // Return if this is a recursive call. + if (!empty($r['recursive'])) { + return $return; + } + try { + $debug_backtrace = debug_backtrace(false); + // Making sure we only return GCS link if the type is url. + if (!empty($debug_backtrace[3]['args'][0]) && $debug_backtrace[3]['args'][0] == 'url') { + $r['recursive'] = true; + $url = bp_attachments_get_attachment('url', $r); + $name = apply_filters('wp_stateless_file_name', $url, 0); + $root_dir = ud_get_stateless_media()->get('sm.root_dir'); + $root_dir = apply_filters("wp_stateless_handle_root_dir", $root_dir); + $root_dir = trim($root_dir, '/ '); // Remove any forward slash and empty space. + if (!empty($name) && $root_dir . "/" != $name) { + $full_path = bp_attachments_get_attachment(false, $r); + do_action('sm:sync::syncFile', $name, $full_path, false, array('ephemeral' => false)); + $return = ud_get_stateless_media()->get_gs_host() . '/' . $name; + } + } + } catch (\Throwable $th) { + } + return $return; + } + + /** + * Skip cache busting while Buddypress processes images. + * + * @param $return + * @param $filename + * @return mixed + */ + public function skip_cache_busting($return, $filename) { + $back_trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS); + foreach ($back_trace as $trace) { + if ( isset($trace['file']) && strpos($trace['file'], 'buddypress') !== false ) { + if ( isset($trace['function']) && $trace['function'] === 'sanitize_file_name' ) { + return $filename; + } + } + } + return $return; + } + /** * Update args when uploading/syncing file to GCS. * diff --git a/readme.txt b/readme.txt index d527c2e..239bf7e 100644 --- a/readme.txt +++ b/readme.txt @@ -6,7 +6,7 @@ License: GPLv2 or later Requires PHP: 8.0 Requires at least: 5.0 Tested up to: 6.6.2 -Stable tag: 0.0.1 +Stable tag: 0.0.2 Provides compatibility between the BuddyPress and the WP-Stateless plugins. @@ -44,6 +44,10 @@ To ensure new releases cause as little disruption as possible, we rely on early == Changelog == += 0.0.2 = + +* FIX: disable `Cache Busting` when working with BuddyPress attachments. + = 0.0.1 = * Initial public release. diff --git a/tests/ClassBuddyPressTest.php b/tests/ClassBuddyPressTest.php index ba78486..4cafccf 100644 --- a/tests/ClassBuddyPressTest.php +++ b/tests/ClassBuddyPressTest.php @@ -73,13 +73,15 @@ public function testShouldInitHooks() { self::assertNotFalse( has_filter('bp_core_avatar_folder_dir', [ $budypress, 'bp_core_avatar_folder_dir' ]) ); self::assertNotFalse( has_filter('bp_core_pre_delete_existing_avatar', [ $budypress, 'delete_existing_avatar' ]) ); self::assertNotFalse( has_filter('sm:sync::syncArgs', [ $budypress, 'sync_args' ]) ); + self::assertNotFalse( has_filter('bp_attachments_pre_get_attachment', [ $budypress, 'bp_attachments_pre_get_attachment' ]) ); + self::assertNotFalse( has_filter('stateless_skip_cache_busting', [ $budypress, 'skip_cache_busting' ]) ); } public function testShouldCountHooks() { $budypress = new BuddyPress(); Functions\expect('add_action')->times(2); - Functions\expect('add_filter')->times(4); + Functions\expect('add_filter')->times(6); $budypress->module_init([]); } @@ -100,6 +102,15 @@ public function testShouldDeleteAvatar() { $budypress->delete_existing_avatar(self::AVATAR_SRC_URL, self::TEST_BP_DATA); } + public function testShouldPreGetAttachment() { + $budypress = new BuddyPress(); + Actions\expectDone('sm:sync::syncFile')->once(); + $this->assertEquals( + self::AVATAR_DST_URL, + $budypress->bp_attachments_pre_get_attachment(self::AVATAR_DST_URL, self::TEST_BP_DATA), + ); + } + public function testShouldUpdateArgs() { $budypress = new BuddyPress(); diff --git a/vendor/bin/.phpunit.result.cache b/vendor/bin/.phpunit.result.cache index 658d02c..ea62ae2 100644 --- a/vendor/bin/.phpunit.result.cache +++ b/vendor/bin/.phpunit.result.cache @@ -1 +1 @@ -{"version":1,"defects":{"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldInitModule":4,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldSkipCacheBusting":4,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldFetchAvatar":4,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldInitHooks":4,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldSyncAvatar":4,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldDeleteAvatar":4,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldGetAttachment":4,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldPreGetAttachment":4,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldCountHooks":4,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldFetchAvatar":4,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldDeleteAvatar":4,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldUpdateArgs":4,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldPreGetAttachment":4},"times":{"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldInitModule":0.008,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldSkipCacheBusting":0,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldFetchAvatar":0.004,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldInitHooks":0.111,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldSyncAvatar":0.001,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldDeleteAvatar":0,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldGetAttachment":0.004,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldPreGetAttachment":0.001,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldInitHooks":0.122,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldCountHooks":0.003,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldFetchAvatar":0.005,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldSyncAvatar":0.001,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldDeleteAvatar":0.001,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldPreGetAttachment":0.005,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldUpdateArgs":0.002,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldUpdateArgsStateless":0,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldNotUpdateArgs":0}} \ No newline at end of file +{"version":1,"defects":{"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldInitModule":4,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldSkipCacheBusting":4,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldFetchAvatar":4,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldInitHooks":4,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldSyncAvatar":4,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldDeleteAvatar":4,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldGetAttachment":4,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldPreGetAttachment":4,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldCountHooks":4,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldFetchAvatar":4,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldDeleteAvatar":4,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldUpdateArgs":4,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldPreGetAttachment":4},"times":{"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldInitModule":0.008,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldSkipCacheBusting":0,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldFetchAvatar":0.004,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldInitHooks":0.111,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldSyncAvatar":0.001,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldDeleteAvatar":0,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldGetAttachment":0.004,"WPSL\\BuddyPress\\ClassBuddyPressTest::testShouldPreGetAttachment":0.001,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldInitHooks":0.119,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldCountHooks":0.003,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldFetchAvatar":0.005,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldSyncAvatar":0.001,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldDeleteAvatar":0.001,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldPreGetAttachment":0.002,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldUpdateArgs":0.001,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldUpdateArgsStateless":0,"SLCA\\BuddyPress\\ClassBuddyPressTest::testShouldNotUpdateArgs":0}} \ No newline at end of file diff --git a/vendor/composer/installed.php b/vendor/composer/installed.php index d0b3da9..afb616d 100644 --- a/vendor/composer/installed.php +++ b/vendor/composer/installed.php @@ -3,7 +3,7 @@ 'name' => 'udx/wp-stateless-buddypress-addon', 'pretty_version' => 'dev-main', 'version' => 'dev-main', - 'reference' => '0974f8d83917b8e8489e9ab0bfa26e4a4659407f', + 'reference' => 'a609f8069d78f89eda99035072201433af08c729', 'type' => 'wordpress-plugin', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), @@ -13,7 +13,7 @@ 'udx/wp-stateless-buddypress-addon' => array( 'pretty_version' => 'dev-main', 'version' => 'dev-main', - 'reference' => '0974f8d83917b8e8489e9ab0bfa26e4a4659407f', + 'reference' => 'a609f8069d78f89eda99035072201433af08c729', 'type' => 'wordpress-plugin', 'install_path' => __DIR__ . '/../../', 'aliases' => array(), diff --git a/wp-stateless-buddypress-addon.php b/wp-stateless-buddypress-addon.php index 5dd856e..74adbab 100644 --- a/wp-stateless-buddypress-addon.php +++ b/wp-stateless-buddypress-addon.php @@ -5,7 +5,7 @@ * Plugin URI: https://stateless.udx.io/addons/buddypress/ * Description: Provides compatibility between the BuddyPress and the WP-Stateless plugins. * Author: UDX - * Version: 0.0.1 + * Version: 0.0.2 * Text Domain: wp-stateless-buddypress-addon * Author URI: https://udx.io * License: GPLv2 or later