load(); foreach ($this->manager->get('files', []) as $ref => $data) { $this->repairKnownSound($ref, $data); } $this->save(); } /** * Repair a single sound. Move it to appropriate directory */ private function repairKnownSound(string $ref, array $data) { if (!empty($data['url'])) { $data['filename'] = $data['url']; unset($data['url']); $this->manager->set(sprintf('files.%s', $ref), $data); } $extension = pathinfo($data['filename'], PATHINFO_EXTENSION); $currentFullPath = sprintf('%s%s', $this->bundle->getDataDir(), $data['filename']); $expectedFullPath = sprintf( '%s%s/%s/%s/original.%s', $this->bundle->getDataDir(), $this->attachmentsDir, $this->kind, $ref, $extension ); if (!$this->disk->exists($currentFullPath)) { $this->deleteAttachment($ref); return; } if (empty($data['last_modified'])) { $data['last_modified'] = Carbon::parse($this->disk->lastModified($currentFullPath))->toIso8601String(); } if ($currentFullPath !== $expectedFullPath) { $this->disk->move($currentFullPath, $expectedFullPath); $data['last_modified'] = Carbon::parse($this->disk->lastModified($expectedFullPath))->toIso8601String(); $data['filename'] = sprintf( '%s/%s/%s/original.%s', $this->attachmentsDir, $this->kind, $ref, $extension ); $parentDir = dirname($currentFullPath); if (empty($this->disk->listContents($parentDir, true))) { $this->disk->delete($parentDir); } } $this->manager->set(sprintf('files.%s', $ref), $data); } }