File: //home/workzeni/stream-flix.workzenix.com/app/Http/Controllers/Admin/MovieController.php
<?php
namespace App\Http\Controllers\Admin;
use App\Http\Controllers\Controller;
use App\Models\Category;
use App\Models\Movie;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
use App\Helpers\FileHelper;
use App\Models\Language;
use Illuminate\Support\Facades\Log;
class MovieController extends Controller
{
private function generateCode()
{
return strtoupper(Str::random(8));
}
public function index(Request $request)
{
$categories = Category::where('status', 'active')->get();
$languages = Language::where('status', 'active')->get();
$movies = Movie::latest()->get();
// For AJAX filtering
if ($request->ajax()) {
$query = Movie::with(['category', 'language']);
// Filter by category
if ($request->category_id && $request->category_id != 'all') {
$query->where('category_id', $request->category_id);
}
// Filter by status
if ($request->status && $request->status != 'all') {
$query->where('status', $request->status);
}
// Search by name
if ($request->search) {
$query->where('name', 'like', '%' . $request->search . '%');
}
$perPage = $request->per_page ?? 10;
$movies = $query->latest()->paginate($perPage);
return response()->json([
'movies' => $movies->items(),
'pagination' => [
'total' => $movies->total(),
'per_page' => $movies->perPage(),
'current_page' => $movies->currentPage(),
'last_page' => $movies->lastPage(),
]
]);
}
// Normal page load
return view('admin.pages.movie.index', compact('categories', 'languages', 'movies'));
}
public function create()
{
$categories = Category::all();
$languages = Language::all();
return view('admin.pages.movie.add', compact('categories', 'languages'));
}
public function store(Request $request)
{
$request->validate([
'category_id' => 'required|string',
'language_id' => 'required|string',
'name' => 'nullable|string|max:255|unique:languages',
'year' => 'nullable|string',
'duration' => 'nullable|string',
'rating' => 'nullable',
'description' => 'nullable|string',
'thumbnail_image' => 'nullable|image|mimes:jpeg,png,jpg,gif',
'movie_url' => 'nullable|file|mimes:mp4,avi,mkv,flv',
'status' => 'required|in:active,inactive,draft',
]);
$movie = new Movie();
$movie->category_id = $request->category_id;
$movie->language_id = $request->language_id;
$movie->name = $request->name;
$movie->slug = Str::slug($request->name);
$movie->code = $this->generateCode();
$movie->year = $request->year;
$movie->duration = $request->duration;
$movie->rating = $request->rating;
$movie->description = $request->description;
$movie->status = $request->status;
if ($request->hasFile('thumbnail_image')) {
$movie->thumbnail_image = FileHelper::saveFile($request->file('thumbnail_image'), 'thumbnail');
}
if ($request->hasFile('movie_url')) {
$movie->movie_url = FileHelper::saveFile($request->file('movie_url'), 'movies');
}
$movie->save();
// return response()->json(['message' => 'Movie saved successfully!', 'movie' => $movie], 201);
return redirect()
->route('movie.list')
->with('success', 'Movie saved successfully.');
}
public function edit($language)
{
$movie = Movie::findOrFail($language);
$categories = Category::all();
$languages = Language::all();
return view('admin.pages.movie.edit', compact('movie', 'categories', 'languages'));
}
public function update(Request $request, $movieId)
{
$request->validate([
'category_id' => 'required|string',
'language_id' => 'required|string',
'name' => 'nullable|string|max:255|unique:languages,name,' . $movieId,
'year' => 'nullable|string',
'duration' => 'nullable|string',
'rating' => 'nullable|numeric',
'description' => 'nullable|string',
'thumbnail_image' => 'nullable|image|mimes:jpeg,png,jpg,gif',
'movie_url' => 'nullable|file|mimes:mp4,avi,mkv,flv',
'status' => 'required|in:active,inactive,draft',
]);
// Find the existing Movie by ID
$movie = Movie::findOrFail($movieId);
$movie->category_id = $request->category_id;
$movie->language_id = $request->language_id;
$movie->name = $request->name;
$movie->slug = Str::slug($request->name);
$movie->year = $request->year;
$movie->duration = $request->duration;
$movie->rating = $request->rating;
$movie->description = $request->description;
$movie->status = $request->status;
// Handle Thumbnail Image Upload
if ($request->hasFile('thumbnail_image')) {
$movie->thumbnail_image = FileHelper::updateSaveFile(
$request->file('thumbnail_image'), // Uploaded file
'thumbnail', // Folder name
$movie->thumbnail_image // Old file path
);
}
// Handle Movie URL Upload
if ($request->hasFile('movie_url')) {
$movie->movie_url = FileHelper::updateSaveFile(
$request->file('movie_url'),
'movies',
$movie->movie_url
);
}
$movie->save();
return response()->json(['message' => 'Movie updated successfully!', 'movie' => $movie], 200);
}
public function delete($id)
{
// Find the movie by ID
$movie = Movie::find($id);
if (!$movie) {
return response()->json(['message' => 'Movie not found!'], 404);
}
// Delete the old thumbnail image if it exists
if ($movie->thumbnail_image) {
FileHelper::deleteFile($movie->thumbnail_image, 'thumbnail');
}
// Delete the old movie URL file if it exists
if ($movie->movie_url) {
FileHelper::deleteFile($movie->movie_url, 'movies');
}
$movie->delete();
return response()->json(['message' => 'Movie deleted successfully!'], 200);
}
}