From bf281695edb749174adb3b9384c937a168af2d05 Mon Sep 17 00:00:00 2001 From: s1t2 <> Date: Wed, 28 Aug 2019 17:56:35 +1000 Subject: [PATCH] SM-633: Upload to s3 obeying wordpress behaviour --- wordpress-s3-uploads-drop-in.php | 35 ++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/wordpress-s3-uploads-drop-in.php b/wordpress-s3-uploads-drop-in.php index 10ba96c..a35ec0f 100644 --- a/wordpress-s3-uploads-drop-in.php +++ b/wordpress-s3-uploads-drop-in.php @@ -66,11 +66,19 @@ public function filterUploadDir($dirs) public function onUpdatedAttachment($attachmentData, $attachmentId) { + $attachmentMainPath = $this->attachmentMainPath($attachmentId); $sizes = $attachmentData['sizes'] ?? []; - $paths = array_filter(array_map([$this, 'attachmentPath'], $sizes)); + $paths = []; + foreach($sizes as $size) + { + if ($path = $this->attachmentPath($size, $attachmentMainPath)) + { + $paths[] = $path; + } + } $attachments = array_values(array_merge( - [$this->attachmentMainPath($attachmentId)], + [$attachmentMainPath], $paths )); @@ -109,7 +117,8 @@ public function uploadToS3($path) { $source = fopen($path, 'rb'); $filename = basename($path); - $key = getenv('AWS_S3_PATH') . wp_get_upload_dir()['subdir'] . "/$filename"; + $time = $this->attachmentTime($path); + $key = getenv('AWS_S3_PATH') . "/$time/$filename"; $uploader = new ObjectUploader( $this->s3Client, getenv('AWS_S3_BUCKET'), @@ -119,14 +128,20 @@ public function uploadToS3($path) $uploader->upload(); } - private function attachmentLocation($attachmentId) + private function attachmentTime($path) { - $attachmentMainPath = $this->attachmentMainPath($attachmentId); - $pathInfo = pathinfo($attachmentMainPath); + $pathInfo = pathinfo($path); $dirname = explode('/', $pathInfo['dirname']); $year = $dirname[count($dirname) - 2]; $month = $dirname[count($dirname) - 1]; - return "uploads/$year/$month"; + return "$year/$month"; + } + + private function attachmentLocation($attachmentId) + { + $attachmentMainPath = $this->attachmentMainPath($attachmentId); + $time = $this->attachmentTime($attachmentMainPath); + return "uploads/$time"; } private function attachmentMainPath($attachmentId) @@ -144,9 +159,11 @@ private function attachmentOtherPaths($attachmentId) }, $this->sizes($attachmentId))); } - private function attachmentPath($sizeInfo) + private function attachmentPath($sizeInfo, $mainPath) { - return isset($sizeInfo['file']) ? wp_get_upload_dir()['path'] . '/' . $sizeInfo['file'] : null; + $basedir = wp_get_upload_dir()['basedir']; + $time = $this->attachmentTime($mainPath); + return isset($sizeInfo['file']) ? "$basedir/$time/" . $sizeInfo['file'] : null; } private function sizes($attachmentId)