Files
Atomcms-edit/app/Http/Controllers/Miscellaneous/LogoGeneratorController.php
T

57 lines
1.7 KiB
PHP
Executable File

<?php
namespace App\Http\Controllers\Miscellaneous;
use App\Http\Controllers\Controller;
use App\Models\Miscellaneous\WebsiteSetting;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use Illuminate\View\View;
class LogoGeneratorController extends Controller
{
public function index(): View|RedirectResponse
{
if (! hasPermission('generate_logo')) {
return to_route('me.show')->with([
'message' => __('You do not have permission to do this.'),
]);
}
return view('logo-generator');
}
public function store(Request $request): JsonResponse
{
$request->validate([
'logo' => [
'required',
'image',
'mimes:jpeg,png,gif,webp',
'max:5120',
],
]);
$file = $request->file('logo');
$mime = finfo_file(finfo_open(FILEINFO_MIME_TYPE), $file->getPathname());
$allowedMimes = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'];
if (! in_array($mime, $allowedMimes, true)) {
return response()->json(['success' => false, 'message' => 'Invalid file type.'], 422);
}
$filename = 'logo_' . Str::random(16) . '.' . $file->getClientOriginalExtension();
$path = $file->storeAs('generated-logos', $filename, 'public');
$setting = WebsiteSetting::where('key', 'cms_logo')->first();
$setting?->update([
'value' => '/storage/' . $path,
]);
return response()->json(['success' => true, 'message' => 'Logo updated!']);
}
}