67 lines
1.7 KiB
PHP
67 lines
1.7 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Project;
|
|
use App\Models\Task;
|
|
use Illuminate\Http\Request;
|
|
|
|
class TaskController extends Controller
|
|
{
|
|
public function store(Request $request, Project $project)
|
|
{
|
|
$data = $request->validate([
|
|
'title' => 'required|string|max:255',
|
|
'description' => 'nullable|string',
|
|
'priority' => 'sometimes|in:low,medium,high,urgent',
|
|
]);
|
|
|
|
$data['description'] = $this->sanitizeDescription($data['description'] ?? null);
|
|
$data['priority'] = $data['priority'] ?? 'medium';
|
|
|
|
$project->tasks()->create($data);
|
|
|
|
return redirect()->back();
|
|
}
|
|
|
|
public function update(Request $request, Task $task)
|
|
{
|
|
$data = $request->validate([
|
|
'title' => 'sometimes|string|max:255',
|
|
'description' => 'nullable|string',
|
|
'status' => 'sometimes|in:todo,in_progress,blocked,done',
|
|
'priority' => 'sometimes|in:low,medium,high,urgent',
|
|
]);
|
|
|
|
if (array_key_exists('description', $data)) {
|
|
$data['description'] = $this->sanitizeDescription($data['description']);
|
|
}
|
|
|
|
$task->update($data);
|
|
|
|
return redirect()->back();
|
|
}
|
|
|
|
public function destroy(Task $task)
|
|
{
|
|
$task->delete();
|
|
|
|
return redirect()->back();
|
|
}
|
|
|
|
private function sanitizeDescription(?string $description): ?string
|
|
{
|
|
if ($description === null) {
|
|
return null;
|
|
}
|
|
|
|
$allowedTags = '<br><b><strong><i><em><u><p><ul><ol><li>';
|
|
$description = strip_tags($description, $allowedTags);
|
|
|
|
return preg_replace(
|
|
'/<(br|b|strong|i|em|u|p|ul|ol|li)\b[^>]*>/i',
|
|
'<$1>',
|
|
$description
|
|
);
|
|
}
|
|
} |