Skip to content

Commit

Permalink
Merge pull request #5 from udx/latest
Browse files Browse the repository at this point in the history
Latest => 0.0.1
  • Loading branch information
balexey88 authored Aug 29, 2024
2 parents 8568d0a + 8ddfd9a commit de2aa83
Show file tree
Hide file tree
Showing 9 changed files with 243 additions and 22 deletions.
6 changes: 4 additions & 2 deletions .github/workflows/publish-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,8 @@ jobs:
- name: Cleanup files
run: |
rm -f composer.lock || true
rm -rf tests || true
rm -rf vendor/bin || true
rm -rf vendor/composer/installers || true
find ./ -name '.git*' -not -path './.git' -type f -delete || true
find ./ -name '.git*' -not -path './.git' -type d -exec rm -rf {} \; || true
Expand Down Expand Up @@ -117,7 +119,7 @@ jobs:
# create a draft release with the version changelog as a description
- name: Create Draft Release
id: draft_release
uses: softprops/action-gh-release@v1
uses: softprops/action-gh-release@v2
with:
name: "Release ${{ steps.vars.outputs.full_tag }}"
body: "${{ steps.changelog.outputs.description }}"
Expand All @@ -127,7 +129,7 @@ jobs:

# attach SBOM to release
- name: Upload SBOM to release
uses: actions/[email protected].1
uses: actions/[email protected].2
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ Provides compatibility between the [SiteOrigin CSS](https://wordpress.org/plugin

### Notes

* Tested with SiteOrigin CSS plugin version 1.5.9
* Tested with SiteOrigin CSS plugin version 1.5.11

### Support, Feedback, & Contribute

Expand Down
179 changes: 175 additions & 4 deletions class-siteorigin-css.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,15 @@
namespace SLCA\SiteOriginCSS;

use wpCloud\StatelessMedia\Compatibility;
use wpCloud\StatelessMedia\Helper;
use wpCloud\StatelessMedia\Utility;

/**
* Class SiteOriginCSS
*/
class SiteOriginCSS extends Compatibility {
const STORAGE_PATH = 'so-css/';

protected $id = 'so-css';
protected $title = 'SiteOrigin CSS';
protected $constant = 'WP_STATELESS_COMPATIBILITY_SOCSS';
Expand All @@ -18,8 +22,21 @@ class SiteOriginCSS extends Compatibility {
* @param $sm
*/
public function module_init($sm) {
add_filter('siteorigin_custom_css_file', array($this, 'get_custom_css_file'), 20, 1);
add_filter('set_url_scheme', array($this, 'set_url_scheme'), 20, 3);
add_action('admin_menu', array($this, 'action_admin_menu'), 3);
add_filter('sm:sync::syncArgs', array($this, 'sync_args'), 10, 4);
add_filter('sm:sync::nonMediaFiles', array($this, 'get_sync_files'), 20);
}

/**
* Get the position of 'so-css/' dir in the filename.
*
* @param $name
* @return bool
*/
protected function get_so_css($name) {
return strpos($name, self::STORAGE_PATH);
}

/**
Expand All @@ -30,16 +47,24 @@ public function module_init($sm) {
* @return string
*/
public function set_url_scheme($url, $scheme, $orig_scheme) {
$position = strpos($url, 'so-css/');
if ($position !== false) {
$upload_data = wp_upload_dir();
$position = $this->get_so_css($url);

if ( $position !== false ) {
$name = substr($url, $position);

$upload_data = wp_upload_dir();
// We need to get the absolute path before adding the bucket dir to name.
$absolutePath = $upload_data['basedir'] . '/' . $name;
$absolutePath = apply_filters('wp_stateless_addon_files_root', '');

$absolutePath .= '/' . $name;

$name = apply_filters('wp_stateless_file_name', $name, 0);

do_action('sm:sync::syncFile', $name, $absolutePath);

$url = ud_get_stateless_media()->get_gs_host() . '/' . $name;
}

return $url;
}

Expand All @@ -57,4 +82,150 @@ public function action_admin_menu() {
}
}
}

/**
* Get custom CSS params.
* 'siteorigin_custom_css_file' hook doesn't pass the $theme and $post_id, so we need to get them from the backtrace.
*/
protected function get_custom_css_params() {
$theme = null;
$post_id = null;

$functions = [
'get_custom_css',
'save_custom_css_file',
'enqueue_custom_css',
];

$backtrace = debug_backtrace();

foreach ( $backtrace as $trace ) {
if ( !isset( $trace['function'] ) || !isset( $trace['class'] )
|| $trace['class'] !== 'SiteOrigin_CSS' || !in_array( $trace['function'], $functions ) ) {
continue;
}

$args = $trace['args'] ?? [];

switch( $trace['function'] ) {
case 'save_custom_css_file':
$theme = $args[1] ?? null;
$post_id = $args[2] ?? null;
break;
default:
$theme = $args[0] ?? null;
$post_id = $args[1] ?? null;
}
}

return [$theme, $post_id];
}

/**
* Get custom CSS file name. Create a file if it doesn't exist to make it accessible.
*
* @param string $custom_css_file
* @return array
*/
public function get_custom_css_file($custom_css_file) {
if ( !ud_get_stateless_media()->is_mode('stateless') ) {
return $custom_css_file;
}

if ( class_exists('\SiteOrigin_CSS') ) {
$so_css = \SiteOrigin_CSS::single();

if ( $so_css ) {
list($theme, $post_id) = $this->get_custom_css_params();

$filename = $so_css->get_css_file_name( $theme, $post_id );

$position = $this->get_so_css($filename);

if ( $position === false ) {
return $custom_css_file;
}

$name = substr($filename, $position);

$custom_css_file['file'] = ud_get_stateless_media()->get_gs_path() . '/' . $name;
$custom_css_file['url'] = ud_get_stateless_media()->get_gs_host() . '/' . $name;

if ( !class_exists('\WP_Filesystem_Direct') ) {
require_once(ABSPATH . 'wp-admin/includes/class-wp-filesystem-base.php');
require_once(ABSPATH . 'wp-admin/includes/class-wp-filesystem-direct.php');
}

$filesystem = new \WP_Filesystem_Direct( false );

if ( !$filesystem->exists($custom_css_file['file']) ) {
$filesystem->put_contents( $custom_css_file['file'], ' ' );
}
}
}

return $custom_css_file;
}

/**
* Update args when uploading/syncing file to GCS.
*
* @param array $args
* @param string $name
* @param string $file
* @param bool $force
*
* @return array
*/
public function sync_args($args, $name, $file, $force) {
if ( $this->get_so_css($name) !== 0 ) {
return $args;
}

if ( ud_get_stateless_media()->is_mode('stateless') ) {
$args['name_with_root'] = false;
}

$args['source'] = 'SiteOrigin CSS';
$args['source_version'] = defined('SOCSS_VERSION') ? SOCSS_VERSION : '';

return $args;
}

/**
* Get the list of files to sync.
*
* @param array $file_list
* @return array
*/
public function get_sync_files($file_list) {
if ( !method_exists('\wpCloud\StatelessMedia\Utility', 'get_files') ) {
Helper::log('WP-Stateless version too old, please update.');

return $file_list;
}

$dir = apply_filters('wp_stateless_addon_sync_files_path', '', self::STORAGE_PATH);

if (is_dir($dir)) {
// Getting all the files from dir recursively.
$files = Utility::get_files($dir);

// validating and adding to the $files array.
foreach ($files as $file) {
if (!file_exists($file)) {
continue;
}

$file = self::STORAGE_PATH . str_replace( $dir, '', wp_normalize_path($file) );
$file = trim($file, '/');

if ( !in_array($file, $file_list) ) {
$file_list[] = $file;
}
}
}

return $file_list;
}
}
4 changes: 2 additions & 2 deletions readme.txt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ Tags: siteorigin css, siteorigin css addon extension, google cloud storage, stat
License: GPLv2 or later
Requires PHP: 8.0
Requires at least: 5.0
Tested up to: 6.4.3
Tested up to: 6.6.1
Stable tag: 0.0.1

Provides compatibility between the SiteOrigin CSS and the WP-Stateless plugins.
Expand All @@ -20,7 +20,7 @@ Provides compatibility between the [SiteOrigin CSS](https://wordpress.org/plugin

= Notes =

* Tested with SiteOrigin CSS plugin version 1.5.9
* Tested with SiteOrigin CSS plugin version 1.5.11

= Support, Feedback, & Contribute =

Expand Down
60 changes: 52 additions & 8 deletions tests/ClassSiteOriginCSSTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,6 @@ public function setUp(): void {
Functions\when('check_admin_referer')->justReturn( true );

// WP_Stateless mocks
Filters\expectApplied('wp_stateless_file_name')
->andReturn( self::TEST_FILE );

Functions\when('ud_get_stateless_media')->justReturn( WPStatelessStub::instance() );
}

Expand All @@ -53,19 +50,32 @@ public function testShouldInitHooks() {

$siteOriginCSS->module_init([]);

self::assertNotFalse( has_filter('siteorigin_custom_css_file', [ $siteOriginCSS, 'get_custom_css_file' ]) );
self::assertNotFalse( has_filter('set_url_scheme', [ $siteOriginCSS, 'set_url_scheme' ]) );
self::assertNotFalse( has_filter('sm:sync::syncArgs', [ $siteOriginCSS, 'sync_args' ]) );
self::assertNotFalse( has_filter('sm:sync::nonMediaFiles', [ $siteOriginCSS, 'get_sync_files' ]) );
self::assertNotFalse( has_filter('set_url_scheme', [ $siteOriginCSS, 'set_url_scheme' ]) );
self::assertNotFalse( has_action('admin_menu', [ $siteOriginCSS, 'action_admin_menu' ]) );
}

public function testShouldSaveFieldValue() {
public function testShouldRewriteURL() {
$siteOriginCSS = new SiteOriginCSS();

Actions\expectDone('sm:sync::syncFile')->once();
Filters\expectApplied('wp_stateless_addon_files_root')->once();
Filters\expectApplied('wp_stateless_file_name')->once();

$this->assertEquals(
self::DST_URL,
$siteOriginCSS->set_url_scheme(self::SRC_URL, null, null)
);
$siteOriginCSS->set_url_scheme(self::SRC_URL, null, null);
}

public function testShouldNotRewriteURL() {
$siteOriginCSS = new SiteOriginCSS();

$siteOriginCSS->set_url_scheme(self::TEST_URL, null, null);

$this->assertSame( 0, did_action('sm:sync::syncFile') );
$this->assertSame( 0, Filters\applied('wp_stateless_addon_files_root') );
$this->assertSame( 0, Filters\applied('wp_stateless_file_name') );
}

public function testShouldDeleteCssFile() {
Expand All @@ -76,9 +86,43 @@ public function testShouldDeleteCssFile() {
$_POST['siteorigin_custom_css_save'] = true;

Actions\expectDone('sm:sync::deleteFiles')->once();
Filters\expectApplied('wp_stateless_file_name')->once();

$siteOriginCSS->action_admin_menu();

self::assertTrue(true);
}

public function testShouldUpdateArgs() {
$siteOriginCSS = new SiteOriginCSS();

$args = $siteOriginCSS->sync_args([], self::TEST_FILE, '', false);

self::assertTrue( isset( $args['source'] ) );
self::assertTrue( isset( $args['source_version'] ) );
self::assertEquals( 'SiteOrigin CSS', $args['source'] );
self::assertFalse( isset( $args['name_with_root'] ) );
}

public function testShouldUpdateArgsStateless() {
$siteOriginCSS = new SiteOriginCSS();

ud_get_stateless_media()->set('sm.mode', 'stateless');

$args = $siteOriginCSS->sync_args([], self::TEST_FILE, '', false);

self::assertTrue( isset( $args['source'] ) );
self::assertTrue( isset( $args['source_version'] ) );
self::assertEquals( 'SiteOrigin CSS', $args['source'] );
self::assertTrue( isset( $args['name_with_root'] ) );
}

public function testShouldNotUpdateArgs() {
$siteOriginCSS = new SiteOriginCSS();

self::assertEquals(
0,
count( $siteOriginCSS->sync_args([], self::TEST_URL, '', false) )
);
}
}
4 changes: 4 additions & 0 deletions tests/prepend.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,5 +30,9 @@ public function get($key): ?string {
public function get_gs_host(): string {
return self::TEST_GS_HOST;
}

public function is_mode($mode): bool {
return $mode == $this->get('sm.mode') ;
}
}
}
2 changes: 1 addition & 1 deletion vendor/bin/.phpunit.result.cache
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"version":1,"defects":{"WPSL\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldInitHooks":4,"WPSL\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldSaveFieldValue":4,"SLCA\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldDeleteCssFile":4},"times":{"WPSL\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldInitHooks":0.11,"WPSL\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldSaveFieldValue":0.003,"WPSL\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldDeleteCssFile":0.001,"SLCA\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldInitHooks":0.128,"SLCA\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldSaveFieldValue":0.004,"SLCA\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldDeleteCssFile":0.001}}
{"version":1,"defects":{"WPSL\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldInitHooks":4,"WPSL\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldSaveFieldValue":4,"SLCA\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldDeleteCssFile":4,"SLCA\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldInitHooks":4,"SLCA\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldRewriteURL":3,"SLCA\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldNotRewriteURL":3,"SLCA\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldNotUpdateArgs":4,"SLCA\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldUpdateArgs":3},"times":{"WPSL\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldInitHooks":0.11,"WPSL\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldSaveFieldValue":0.003,"WPSL\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldDeleteCssFile":0.001,"SLCA\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldInitHooks":0.077,"SLCA\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldSaveFieldValue":0.004,"SLCA\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldDeleteCssFile":0.001,"SLCA\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldRewriteURL":0.047,"SLCA\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldNotRewriteURL":0.001,"SLCA\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldUpdateArgs":0.002,"SLCA\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldNotUpdateArgs":0,"SLCA\\SiteOriginCSS\\ClassSiteOriginCSSTest::testShouldUpdateArgsStateless":0}}
4 changes: 2 additions & 2 deletions vendor/composer/installed.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
'name' => 'udx/wp-stateless-siteorigin-css-addon',
'pretty_version' => 'dev-main',
'version' => 'dev-main',
'reference' => 'd1f485715379686e46294c743ad010f64a16957d',
'reference' => '6a6763914a9c1d5c1560459a4aba7162a937a1ff',
'type' => 'wordpress-plugin',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
Expand All @@ -13,7 +13,7 @@
'udx/wp-stateless-siteorigin-css-addon' => array(
'pretty_version' => 'dev-main',
'version' => 'dev-main',
'reference' => 'd1f485715379686e46294c743ad010f64a16957d',
'reference' => '6a6763914a9c1d5c1560459a4aba7162a937a1ff',
'type' => 'wordpress-plugin',
'install_path' => __DIR__ . '/../../',
'aliases' => array(),
Expand Down
Loading

0 comments on commit de2aa83

Please sign in to comment.