This commit is contained in:
Brasdrive 2025-11-09 22:40:09 -04:00
parent fb9f2726b8
commit b755cb707e
2 changed files with 40 additions and 13 deletions

View File

@ -3,17 +3,20 @@
declare(strict_types=1);
return [
'provider' => getenv('FLYSYSTEM_OFFLOAD_PROVIDER') ?: 's3',
'provider' => getenv('FLYSYSTEM_OFFLOAD_PROVIDER') ?: 'webdav',
'visibility' => getenv('FLYSYSTEM_OFFLOAD_DEFAULT_VISIBILITY') ?: 'public',
'stream' => [
'protocol' => getenv('FLYSYSTEM_OFFLOAD_STREAM_PROTOCOL') ?: 'flysystem',
'root_prefix' => getenv('FLYSYSTEM_OFFLOAD_STREAM_ROOT_PREFIX') ?: '',
'host' => getenv('FLYSYSTEM_OFFLOAD_STREAM_HOST') ?: 'uploads',
'host' => getenv('FLYSYSTEM_OFFLOAD_STREAM_HOST') ?: '',
],
'uploads' => [
'base_url' => getenv('FLYSYSTEM_OFFLOAD_BASE_URL') ?: 'https://your-bucket.s3.amazonaws.com',
'base_url' => getenv('FLYSYSTEM_OFFLOAD_BASE_URL')
?: (getenv('FLYSYSTEM_OFFLOAD_WEBDAV_BASE_URL')
? rtrim(getenv('FLYSYSTEM_OFFLOAD_WEBDAV_BASE_URL'), '/') . '/' . trim(getenv('FLYSYSTEM_OFFLOAD_WEBDAV_PREFIX') ?: 'wordpress/uploads', '/')
: content_url('uploads')),
'delete_remote' => filter_var(
getenv('FLYSYSTEM_OFFLOAD_DELETE_REMOTE') ?: 'true',
FILTER_VALIDATE_BOOLEAN
@ -26,7 +29,7 @@ return [
'admin' => [
'enabled' => filter_var(
getenv('FLYSYSTEM_OFFLOAD_ADMIN_ENABLED') ?: 'false',
getenv('FLYSYSTEM_OFFLOAD_ADMIN_ENABLED') ?: 'true',
FILTER_VALIDATE_BOOLEAN
),
],
@ -49,16 +52,16 @@ return [
'webdav' => [
'enabled' => filter_var(
getenv('FLYSYSTEM_OFFLOAD_WEBDAV_ENABLED') ?: 'false',
getenv('FLYSYSTEM_OFFLOAD_WEBDAV_ENABLED') ?: 'true',
FILTER_VALIDATE_BOOLEAN
),
'base_url' => getenv('FLYSYSTEM_OFFLOAD_WEBDAV_BASE_URL') ?: '',
'endpoint' => getenv('FLYSYSTEM_OFFLOAD_WEBDAV_ENDPOINT') ?: '',
'base_url' => getenv('FLYSYSTEM_OFFLOAD_WEBDAV_BASE_URL') ?: 'https://webdav.example.com',
'endpoint' => getenv('FLYSYSTEM_OFFLOAD_WEBDAV_ENDPOINT') ?: getenv('FLYSYSTEM_OFFLOAD_WEBDAV_BASE_URL') ?: '',
'prefix' => getenv('FLYSYSTEM_OFFLOAD_WEBDAV_PREFIX') ?: 'wordpress/uploads',
'credentials' => [
'username' => getenv('FLYSYSTEM_OFFLOAD_WEBDAV_USERNAME') ?: '',
'password' => getenv('FLYSYSTEM_OFFLOAD_WEBDAV_PASSWORD') ?: '',
'auth_type' => getenv('FLYSYSTEM_OFFLOAD_WEBDAV_AUTH_TYPE') ?: null,
'auth_type' => getenv('FLYSYSTEM_OFFLOAD_WEBDAV_AUTH_TYPE') ?: 'basic',
],
'stream' => [
'register' => filter_var(

View File

@ -22,10 +22,10 @@ final class MediaHooks {
public function __construct(FilesystemOperator $filesystem, array $config) {
$this->filesystem = $filesystem;
$this->config = $config;
$this->protocol = (string) $config['stream']['protocol'];
$this->protocol = (string) ($config['stream']['protocol'] ?? 'flysystem');
$this->streamRootPrefix = PathHelper::normalize((string) ($config['stream']['root_prefix'] ?? ''));
$this->streamHost = PathHelper::normalize((string) ($config['stream']['host'] ?? 'uploads')) ?: 'uploads';
$this->streamHost = PathHelper::normalize((string) ($config['stream']['host'] ?? ''));
$this->s3Prefix = PathHelper::normalize((string) ($config['s3']['prefix'] ?? ''));
$this->baseUrl = $this->normaliseBaseUrl((string) ($config['uploads']['base_url'] ?? content_url('uploads')));
@ -34,6 +34,15 @@ final class MediaHooks {
$this->deleteRemote = (bool) ($config['uploads']['delete_remote'] ?? true);
$this->preferLocal = (bool) ($config['uploads']['prefer_local_for_missing'] ?? false);
error_log(sprintf(
'[MediaHooks] Initialized - protocol: %s, host: %s, root_prefix: %s, base_url: %s, effective_base_url: %s',
$this->protocol,
$this->streamHost,
$this->streamRootPrefix,
$this->baseUrl,
$this->effectiveBaseUrl
));
}
public function register(): void {
@ -50,7 +59,7 @@ final class MediaHooks {
$normalizedSubdir = $subdir !== '' ? PathHelper::normalize($subdir) : '';
$streamSubdir = $normalizedSubdir !== '' ? '/' . $normalizedSubdir : '';
$streamBase = sprintf('%s://%s', $this->protocol, $this->streamHost);
$streamBase = sprintf('%s://%s', $this->protocol, $this->streamHost ?: 'default');
$uploads['path'] = $streamBase . $streamSubdir;
$uploads['basedir'] = $streamBase;
@ -63,6 +72,12 @@ final class MediaHooks {
$uploads['flysystem_host'] = $this->streamHost;
$uploads['flysystem_root_prefix'] = $this->streamRootPrefix;
error_log(sprintf(
'[MediaHooks] Upload dir filtered - path: %s, url: %s',
$uploads['path'],
$uploads['url']
));
return $uploads;
}
@ -176,6 +191,7 @@ final class MediaHooks {
private function toRemotePath(string $file): string {
$segments = [];
// ✅ Solo agregar si NO están vacíos
if ($this->streamRootPrefix !== '') {
$segments[] = $this->streamRootPrefix;
}
@ -186,7 +202,15 @@ final class MediaHooks {
$segments[] = $file;
return PathHelper::join(...$segments);
$remotePath = PathHelper::join(...$segments);
error_log(sprintf(
'[MediaHooks] toRemotePath - file: %s, remote: %s',
$file,
$remotePath
));
return $remotePath;
}
private function normaliseBaseUrl(string $baseUrl): string {
@ -220,7 +244,7 @@ final class MediaHooks {
return $baseUrl;
}
return $baseUrl . '/' . $pathPrefix;
return $baseUrl;
}
private function buildPublicUrl(string $relativePath): string {