PixelPlacerBot/app/Http/Controllers/PaletteController.php
2024-07-28 18:06:05 -04:00

148 lines
4.2 KiB
PHP

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Palette;
use App\Models\PaletteColor;
use Illuminate\Support\Facades\Storage;
class PaletteController extends Controller
{
public function index(Request $request)
{
$palettes = Palette::all();
// Check if it's an AJAX request
if ($request->ajax()) {
return response()->json($palettes);
}
return view('palette-editor', compact('palettes'));
}
public function store(Request $request)
{
$request->validate([
'name' => 'required|unique:palettes,name',
]);
$palette = Palette::create(['name' => $request->name]);
return response()->json($palette);
}
public function addColor(Request $request, Palette $palette)
{
$request->validate([
'name' => 'required|regex:/^[a-z-]+$/',
'hex_value' => 'required|regex:/^#[a-fA-F0-9]{6}$/'
]);
$color = PaletteColor::create([
'palette_id' => $palette->id,
'name' => $request->name,
'hex_value' => $request->hex_value
]);
return response()->json($color);
}
public function updateColor(Request $request, Palette $palette, PaletteColor $color)
{
$request->validate([
'name' => 'required|regex:/^[a-z-]+$/',
'hex_value' => 'required|regex:/^#[a-fA-F0-9]{6}$/'
]);
$color->update([
'name' => $request->name,
'hex_value' => $request->hex_value
]);
return response()->json($color);
}
public function deleteColor(Palette $palette, PaletteColor $color)
{
if ($palette->name === 'default-colors') {
return response()->json(['message' => 'Cannot delete colors from the default palette'], 403);
}
$color->delete();
return response()->json(['message' => 'Color deleted']);
}
public function getColors(Palette $palette)
{
return response()->json($palette->colors);
}
public function export(Palette $palette)
{
$palette->load('colors'); // Load the colors relationship
$fileName = $palette->name . '.pal';
$content = $palette->colors->map(function($color) {
return [
'name' => $color->name,
'hex_value' => $color->hex_value
];
})->toArray();
$jsonContent = json_encode($content, JSON_PRETTY_PRINT); // Format JSON for readability
return response($jsonContent, 200)
->header('Content-Type', 'application/json')
->header('Content-Disposition', 'attachment; filename="'.$fileName.'"');
}
public function import(Request $request)
{
$request->validate([
'file' => 'required|file|mimes:json,txt'
]);
$file = $request->file('file');
$content = json_decode(file_get_contents($file), true);
$paletteName = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
$palette = Palette::firstOrCreate(['name' => $paletteName]);
foreach ($content as $color) {
PaletteColor::updateOrCreate(
['palette_id' => $palette->id, 'name' => $color['name']],
['hex_value' => $color['hex_value']]
);
}
return response()->json(['message' => 'Palette imported successfully', 'palette' => $palette]);
}
public function rename(Request $request, Palette $palette)
{
if ($palette->name === 'default-colors') {
return response()->json(['message' => 'Cannot rename the default palette'], 403);
}
$request->validate([
'name' => 'required|unique:palettes,name',
]);
$palette->name = $request->name;
$palette->save();
return response()->json($palette);
}
public function delete(Palette $palette)
{
if ($palette->name === 'default-colors') {
return response()->json(['message' => 'Cannot delete the default palette'], 403);
}
$palette->colors()->delete();
$palette->delete();
return response()->json(['message' => 'Palette deleted']);
}
}