2024-07-27 15:40:35 -04:00
|
|
|
<?php
|
|
|
|
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
|
|
|
|
use Illuminate\Http\Request;
|
|
|
|
use App\Models\Palette;
|
|
|
|
use App\Models\PaletteColor;
|
2024-07-28 18:06:05 -04:00
|
|
|
use Illuminate\Support\Facades\Storage;
|
2024-07-27 15:40:35 -04:00
|
|
|
|
|
|
|
class PaletteController extends Controller
|
|
|
|
{
|
2024-07-28 18:06:05 -04:00
|
|
|
public function index(Request $request)
|
2024-07-27 15:40:35 -04:00
|
|
|
{
|
|
|
|
$palettes = Palette::all();
|
2024-07-28 18:06:05 -04:00
|
|
|
|
|
|
|
// Check if it's an AJAX request
|
|
|
|
if ($request->ajax()) {
|
|
|
|
return response()->json($palettes);
|
|
|
|
}
|
|
|
|
|
2024-07-27 15:40:35 -04:00
|
|
|
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)
|
|
|
|
{
|
2024-07-28 18:06:05 -04:00
|
|
|
if ($palette->name === 'default-colors') {
|
|
|
|
return response()->json(['message' => 'Cannot delete colors from the default palette'], 403);
|
|
|
|
}
|
|
|
|
|
2024-07-27 15:40:35 -04:00
|
|
|
$color->delete();
|
|
|
|
return response()->json(['message' => 'Color deleted']);
|
|
|
|
}
|
|
|
|
|
|
|
|
public function getColors(Palette $palette)
|
|
|
|
{
|
|
|
|
return response()->json($palette->colors);
|
|
|
|
}
|
2024-07-28 18:06:05 -04:00
|
|
|
|
|
|
|
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']);
|
|
|
|
}
|
2024-07-27 15:40:35 -04:00
|
|
|
}
|