1
0
cms11/app/Classes/Traits/Repairs/RepairsSounds.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);
}
}