1
0
cms11/app/Classes/Traits/ManagesAttachments.php

98 lines
2.4 KiB
PHP

<?php
namespace App\Classes\Traits;
use App\Classes\AttachmentsManager;
trait ManagesAttachments
{
private array $attachmentsManagers = [];
/**
* Iterates over attached manager to replace attachments in specified
* markdown with appropriate Blade components
*/
public function replaceAttachmentsInMarkdown(string $markdown)
{
foreach ($this->attachmentsManagers as $manager) {
$markdown = $manager->replaceAttachmentsInMarkdown($markdown);
}
return $markdown;
}
/**
* Return an instance of attachments manager for specified kind of files
*/
public function attachments(string $kind): AttachmentsManager
{
return $this->registerAttachmentsManager($kind);
}
/**
* Find unused attachments
*/
public function listUnusedAttachments()
{
$unusedAttachments = [];
foreach ($this->attachmentsManagers as $manager) {
$unused = $manager->findUnusedAttachments($this->markdown()->get(), $this->metadata()->get('cover'));
foreach ($unused as $ref) {
$unusedAttachments[$manager->kind][] = $manager->getComponentByRef($ref, 'gallery');
}
}
return $unusedAttachments;
}
/**
* Register an attachments manager for specified filename
*/
private function registerAttachmentsManager(string $kind): AttachmentsManager
{
if (!array_key_exists($kind, $this->attachmentsManagers)) {
$this->attachmentsManagers[$kind] = new AttachmentsManager($kind, $this);
}
return $this->attachmentsManagers[$kind];
}
/**
* Load all attachments files
*/
private function loadAttachments()
{
foreach ($this->attachmentsManagers as $manager) {
$manager->load();
}
}
/**
* Save all attachments files that needs to be
*/
private function saveAttachments(): bool
{
$oneSaved = false;
foreach ($this->attachmentsManagers as $manager) {
if ($manager->save()) {
$oneSaved = true;
}
}
return $oneSaved;
}
/**
* Repair all attachments files that needs to be
*/
private function repairAttachments()
{
foreach ($this->attachmentsManagers as $manager) {
$manager->repair();
}
}
}