ldc-supportweb/app/Http/Controllers/TicketController.php
2020-11-18 10:23:51 +01:00

116 lines
3.9 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\Project;
use App\Models\Ticket;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Str;
class TicketController extends Controller
{
private $status = [1 => "Nouveau", 2 => "En cours", 3 => "Traité", 4 => "Archivé"];
public function index() {
if (Auth::check()) {
$tickets = Ticket::where('status', '<>', 4)->get();
$status = $this->status;
return view('home', compact('tickets', 'status'));
} else {
return view('home');
}
}
public function create() {
$projects = Project::all();
return view('ticket.create', compact('projects'));
}
public function store(Request $request) {
if (Auth::user()->role === 1) {
$projectId = $request->project_id;
} else {
$projectId = Auth::user()->project_id;
}
$type = $request->type;
$text = $request->text;
$fileTicket = $request->file_ticket;
$request->validate([
'text' => 'required|string',
]);
if ($fileTicket !== null) {
$request->validate([
'file_ticket' => 'mimes:jpeg,jpg,png,pdf|max:2048',
]);
$projectSlug = Str::slug(Project::find($projectId)->name);
$ticketId = Ticket::count() + 1;
$fileName = Str::slug($projectSlug) . "-" . ($type === 0 ? "bug" : "evo") . "-" . $ticketId . "." . $fileTicket->extension();
$fileTicket->move(public_path('fichiers/' . $projectSlug . "/" . $ticketId . "/"), $fileName);
}
$ticket = new Ticket();
$ticket->project_id = $projectId;
$ticket->type = $type;
$ticket->text = $text;
if ($fileTicket !== null)
$ticket->file = $fileName;
$ticket->created_by = Auth::user()->id;
$ticket->save();
return redirect()->route('home')->with('success', 'Ticket enregistré !');
}
public function edit($id) {
$ticket = Ticket::findOrFail($id);
if ($ticket->created_by === Auth::user()->id || Auth::user()->role === 1) {
$projects = Project::all();
$status = $this->status;
return view('ticket.edit', compact('ticket', 'projects', 'status'));
}
return redirect()->back();
}
public function update(Request $request, $id) {
if (Auth::user()->role === 1) {
$projectId = $request->project_id;
$status = $request->status;
} else {
$projectId = Auth::user()->project_id;
}
$type = $request->type;
$text = $request->text;
$fileTicket = $request->file_ticket;
$request->validate([
'text' => 'required|string',
]);
$ticket = Ticket::findOrFail($id);
if ($fileTicket !== null) {
$request->validate([
'file_ticket' => 'mimes:jpeg,jpg,png,pdf|max:2048',
]);
if (file_exists(public_path('fichiers/' . $ticket->project->name . '/' . $ticket->id . '/') . $ticket->file))
unlink(public_path('fichiers/' . $ticket->project->name . '/' . $ticket->id . '/') . $ticket->file);
$projectSlug = Str::slug(Project::find($projectId)->name);
$fileName = Str::slug($projectSlug) . "-" . ($type === 0 ? "bug" : "evo") . "-" . $ticket->id . "." . $fileTicket->extension();
$fileTicket->move(public_path('fichiers/' . $projectSlug . "/" . $ticket->id . "/"), $fileName);
}
$ticket->project_id = $projectId;
$ticket->type = $type;
$ticket->text = $text;
if ($fileTicket !== null)
$ticket->file = $fileName;
if (Auth::user()->role === 1)
$ticket->status = $status;
$ticket->save();
return redirect()->route('edit-ticket', $ticket->id)->with('success', 'Modifications enregistrées !');
}
}