82 lines
2.1 KiB
PHP
82 lines
2.1 KiB
PHP
|
<?php
|
||
|
|
||
|
namespace App\Classes\Traits\Repairs;
|
||
|
|
||
|
use Carbon\Carbon;
|
||
|
|
||
|
/**
|
||
|
* Trait for AttachmentsManager
|
||
|
*/
|
||
|
trait RepairsSounds
|
||
|
{
|
||
|
/**
|
||
|
* Repair all attached sounds
|
||
|
*/
|
||
|
private function repairSounds()
|
||
|
{
|
||
|
$this->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);
|
||
|
}
|
||
|
}
|