File: /var/www/html/spion/app/Http/Controllers/TemplateController.php
<?php
namespace App\Http\Controllers;
use App\Models\Industry;
use App\Models\Template;
use Illuminate\Http\Request;
use Yajra\DataTables\Facades\DataTables;
// use DataTables;
class TemplateController extends Controller
{
public function index(Request $request)
{
if ($request->ajax()) {
$query = Template::query();
// if ($request->search_keyword) {
// $query->where('title', 'like', '%' . $request->search_keyword . '%');
// }
// if ($request->status_filter && $request->status_filter !== 'all') {
// $query->where('status', $request->status_filter);
// }
$templates = $query->latest()->get();
return DataTables::of($templates)
->addColumn('main_image', function ($template) {
return $template->getFirstMediaUrl('main_image');
})
->addColumn('screenshots', function ($template) {
$mediaItems = $template->getMedia('screenshots');
return $mediaItems->map(function ($media) {
return $media->getUrl();
})->toArray();
})
// ->addColumn('screenshots', function ($template) {
// return $template->getMedia('screenshots')->map(function ($media) {
// return $media->getUrl();
// });
// })
->addColumn('tags', function ($template) {
return implode(', ', json_decode($template->tags, true));
})
->addColumn('features', function ($template) {
return implode(', ', json_decode($template->features, true));
})
->addColumn('action', function ($template) {
return '<a href="' . route('template.edit', $template->id) . '" class="btn btn-warning btn-sm">Edit</a>
<form action="' . route('template.destroy', $template->id) . '" method="POST" style="display: inline-block;">
' . csrf_field() . method_field('DELETE') . '
<button type="submit" class="btn btn-danger btn-sm" onclick="return confirm(\'Are you sure?\')">Delete</button>
</form>';
})
->rawColumns(['main_image', 'screenshots', 'action'])
->make(true);
}
return view('admin.template.index');
}
public function create(){
$industries = Industry::all(); // Fetch all industries
return view('admin.template.create', compact('industries'));
}
public function store(Request $request)
{
// dd($request->all());
$validated = $request->validate([
'title' => 'required|string|max:255',
'description' => 'required|string',
'image' => 'required|image|mimes:jpeg,png,jpg|max:2048',
'screenshots_image.*' => 'nullable|image|mimes:jpeg,png,jpg|max:2048',
'tags' => 'required|array',
'tags.*' => 'string|max:255',
'features' => 'required|array',
'features.*' => 'string|max:255',
'industry_id' => 'required|exists:industries,id',
]);
$template = Template::create([
'title' => $validated['title'],
'description' => $validated['description'],
'tags' => json_encode($validated['tags']),
'features' => json_encode($validated['features']),
'industry_id' => $validated['industry_id'],
'status' => $request->status ?? 1,
]);
$template->addMediaFromRequest('image')->toMediaCollection('main_image');
if ($request->hasFile('screenshots_image')) {
$files = $request->file('screenshots_image');
if (is_array($files)) {
foreach ($files as $file) {
$template->addMedia($file)->toMediaCollection('screenshots');
}
} else {
// dd('Not an array of files.');
}
}
return redirect()->route('template.index')->with('success', 'Template created successfully!');
}
public function edit($id)
{
$template = Template::findOrFail($id); // Find the template by ID
$tags = json_decode($template->tags, true); // Decode tags array
$features = json_decode($template->features, true); // Decode features array
$industries = Industry::all();
// Get the media for main image and screenshots
$mainImage = $template->getFirstMediaUrl('main_image');
$screenshots = $template->getMedia('screenshots');
return view('admin.template.edit', compact('template', 'tags', 'features', 'mainImage', 'screenshots','industries'));
}
public function update(Request $request, $id)
{
// dd($request->all());
// Validate the request
$validated = $request->validate([
'title' => 'required|string|max:255',
'description' => 'required|string',
'image' => 'nullable|image|mimes:jpeg,png,jpg|max:2048',
'screenshots_image.*' => 'nullable|image|mimes:jpeg,png,jpg|max:2048',
'tags' => 'required|array',
'tags.*' => 'string|max:255',
'features' => 'required|array',
'features.*' => 'string|max:255',
'industry_id' => 'required|exists:industries,id',
]);
// dd($validated);
// Find the template by ID
$template = Template::findOrFail($id);
// Update the template attributes
$template->update([
'title' => $validated['title'],
'description' => $validated['description'],
'tags' => json_encode($validated['tags']),
'features' => json_encode($validated['features']),
'industry_id' => $validated['industry_id'],
'status' => $request->status ?? 1,
]);
// Update the main image if a new one is uploaded
if ($request->hasFile('image')) {
$template->clearMediaCollection('main_image'); // Clear the previous main image
$template->addMediaFromRequest('image')->toMediaCollection('main_image');
}
// Update the screenshots if new ones are uploaded
if ($request->hasFile('screenshots_image')) {
$template->clearMediaCollection('screenshots'); // Clear previous screenshots
$files = $request->file('screenshots_image');
foreach ($files as $file) {
$template->addMedia($file)->toMediaCollection('screenshots');
}
}
return redirect()->route('template.index')->with('success', 'Template updated successfully!');
}
public function destroy($id)
{
$template = Template::findOrFail($id);
$template->clearMediaCollection('main_image');
$template->clearMediaCollection('screenshots');
$template->delete();
return redirect()->back()->with('success', 'Template deleted successfully!');
}
}