Files
cattr/app/Helpers/AttachmentHelper.php
Noor E Ilahi 7ccf44f7da first commit
2026-01-09 12:54:53 +05:30

97 lines
3.0 KiB
PHP

<?php
namespace App\Helpers;
use App\Models\Task;
use App\Models\TaskComment;
use Illuminate\Http\UploadedFile;
use Str;
class AttachmentHelper
{
protected const TYPE_PLACEHOLDER = '__ABLE_TYPE__';
protected const MAX_FILE_NAME_LENGTH = 255; // name.extension
public const ABLE_BY = [
Task::TYPE => Task::class,
TaskComment::TYPE => TaskComment::class
];
public static function isAble(string $able_type): bool
{
return array_key_exists($able_type, self::ABLE_BY);
}
public static function getAbles(): array
{
return array_keys(self::ABLE_BY);
}
public static function getFileName(UploadedFile $file): string
{
$fileName = $file->getClientOriginalName();
$extension = ".{$file->clientExtension()}";
$maxNameLength = (self::MAX_FILE_NAME_LENGTH - Str::length($extension));
if (Str::length($fileName) > $maxNameLength || Str::endsWith($fileName, $extension) === false){
$fileName = Str::substr($fileName, 0, $maxNameLength) . $extension;
}
return $fileName;
}
public static function getEvents($parentCreated, $parentUpdated, $parentDeleted): array
{
return self::getMappedEvents([
'event.after.action.' . self::TYPE_PLACEHOLDER . '.create' => $parentCreated,
'event.after.action.' . self::TYPE_PLACEHOLDER . '.edit' => $parentUpdated,
'event.after.action.' . self::TYPE_PLACEHOLDER . '.destroy' => $parentDeleted,
]);
}
public static function getFilters(array $addRequestRulesForParent): array
{
return self::getMappedEvents([
'filter.validation.' . self::TYPE_PLACEHOLDER . '.edit' => $addRequestRulesForParent,
'filter.validation.' . self::TYPE_PLACEHOLDER . '.create' => $addRequestRulesForParent,
]);
}
private static function getMappedEvents(array $events): array
{
return array_merge(...array_map(
static fn($event, $function) => self::eventMapper($event, $function),
array_keys($events),
array_values($events)
));
}
private static function eventMapper($event, $function): array
{
return array_reduce(self::getAbles(), static function ($carry, $class) use ($function, $event) {
$carry[str_replace(self::TYPE_PLACEHOLDER, $class, $event)] = $function;
return $carry;
}, []);
}
public static function getMaxAllowedFileSize(): int|string
{
$size = trim(ini_get("upload_max_filesize") ?? '2M');
$last = strtolower($size[strlen($size)-1]);
$size = (float)$size;
switch($last) {
case 'g':
$size *= (1024 * 1024 * 1024); //1073741824
break;
case 'm':
$size *= (1024 * 1024); //1048576
break;
case 'k':
$size *= 1024;
break;
}
return $size;
}
}