|
8 | 8 | use Statamic\Assets\AssetUploader as Uploader; |
9 | 9 | use Statamic\Contracts\Assets\Asset as AssetContract; |
10 | 10 | use Statamic\Data\HasDirtyState; |
| 11 | +use Statamic\Events\AssetUploaded; |
11 | 12 | use Statamic\Facades\Blink; |
12 | 13 | use Statamic\Facades\Path; |
13 | 14 | use Statamic\Support\Arr; |
14 | 15 | use Statamic\Support\Str; |
| 16 | +use Symfony\Component\HttpFoundation\File\UploadedFile; |
15 | 17 |
|
16 | 18 | class Asset extends FileAsset |
17 | 19 | { |
@@ -146,15 +148,19 @@ public static function makeModelFromContract(AssetContract $source, $meta = []) |
146 | 148 | return null; |
147 | 149 | } |
148 | 150 |
|
| 151 | + $original = $source->getOriginal(); |
| 152 | + |
149 | 153 | $model = app('statamic.eloquent.assets.model')::firstOrNew([ |
150 | 154 | 'container' => $source->containerHandle(), |
151 | | - 'folder' => $source->folder(), |
152 | | - 'basename' => $source->basename(), |
| 155 | + 'folder' => Arr::get($original, 'folder', $source->folder()), |
| 156 | + 'basename' => Arr::get($original, 'basename', $source->basename()), |
153 | 157 | ])->fill([ |
154 | 158 | 'meta' => $meta, |
155 | 159 | 'filename' => $source->filename(), |
156 | 160 | 'extension' => $extension, |
157 | 161 | 'path' => $source->path(), |
| 162 | + 'folder' => $source->folder(), |
| 163 | + 'basename' => $source->basename(), |
158 | 164 | ]); |
159 | 165 |
|
160 | 166 | // Set initial timestamps. |
@@ -211,4 +217,32 @@ public function move($folder, $filename = null) |
211 | 217 |
|
212 | 218 | return $this; |
213 | 219 | } |
| 220 | + |
| 221 | + /** |
| 222 | + * Upload a file. |
| 223 | + * |
| 224 | + * @return $this |
| 225 | + */ |
| 226 | + public function upload(UploadedFile $file) |
| 227 | + { |
| 228 | + $path = Uploader::asset($this)->upload($file); |
| 229 | + |
| 230 | + $this |
| 231 | + ->path($path) |
| 232 | + ->save(); |
| 233 | + |
| 234 | + AssetUploaded::dispatch($this); |
| 235 | + |
| 236 | + return $this; |
| 237 | + } |
| 238 | + |
| 239 | + public function getCurrentDirtyStateAttributes(): array |
| 240 | + { |
| 241 | + return array_merge([ |
| 242 | + 'path' => $this->path(), |
| 243 | + 'folder' => $this->folder(), |
| 244 | + 'basename' => $this->basename(), |
| 245 | + 'data' => $this->data()->toArray(), |
| 246 | + ]); |
| 247 | + } |
214 | 248 | } |
0 commit comments