Files
ntspi-app/app/Http/Controllers/ScheduleController.php
T
2024-09-19 16:06:49 +05:00

95 lines
2.7 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Http\Requests\Schedule\StoreRequest;
use App\Http\Resources\ClientNavigationResource;
use App\Http\Resources\FacultyResource;
use App\Http\Resources\MainSectionResource;
use App\Http\Resources\ScheduleResource;
use App\Models\Faculty;
use App\Models\MainSection;
use App\Models\Schedule;
use App\Models\SubSchedule;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Storage;
use Illuminate\Validation\Rules\File;
use Inertia\Inertia;
class ScheduleController extends Controller
{
public function index()
{
$schedules = ScheduleResource::collection(Schedule::query()->ExistSubSchedule()->orderBy('name')->paginate(10));
$filters = [
'search' => request()->input('search'),
];
return Inertia::render('AdminPanel/Schedules/Index', compact('schedules', 'filters'));
}
public function create()
{
$faculties = FacultyResource::collection(Faculty::all());
return Inertia::render('AdminPanel/Schedules/Create', compact('faculties'));
}
public function store(StoreRequest $request)
{
$data = $request->validated();
$this->storeSchedules($request->file('files'), $data);
return redirect()->route('admin.index');
}
public function show(Schedule $schedule)
{
$schedule = new ScheduleResource($schedule);
return Inertia::render('AdminPanel/Schedules/Show', compact('schedule'));
}
public function destroy(Schedule $schedule)
{
$schedule->delete();
}
private function storeSchedules($files, $data)
{
foreach ($files as $file) {
$scheduleTitle = $this->generateScheduleTitle($file);
$schedule = $this->storeSchedule($scheduleTitle, $data);
$this->storeSubSchedule($file, $schedule);
}
}
private function generateScheduleTitle($file)
{
$str = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
$words = explode(' ', $str);
return implode(' ', array_slice($words, 0, 2));
}
private function storeSchedule($title, $data)
{
return Schedule::firstOrCreate([
'name' => $title,
'faculty_id' => $data['faculty_id'],
'is_fullTime' => $data['is_fullTime'],
]);
}
private function storeSubSchedule($file, $schedule)
{
$path = Storage::disk('public')->putFileAs('/schedules', $file, $file->getClientOriginalName());
SubSchedule::updateOrCreate([
'name' => pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME),
'path_file' => '/storage/'.$path,
'schedule_id' => $schedule->id,
]);
}
}