feat: add AJAX functionality to delete project updates and announcements
This commit is contained in:
@@ -195,6 +195,33 @@ class ProjectController extends Controller
|
|||||||
return back()->with('success', 'Yeni ilerleme duyurusu yayınlandı.');
|
return back()->with('success', 'Yeni ilerleme duyurusu yayınlandı.');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Web Manager Action: Delete Live Progress Update / Announcement
|
||||||
|
*/
|
||||||
|
public function deleteUpdate(Request $request, string $slug)
|
||||||
|
{
|
||||||
|
$project = Project::where('slug', $slug)->firstOrFail();
|
||||||
|
|
||||||
|
$request->validate([
|
||||||
|
'update_id' => 'required|exists:project_updates,id',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$update = ProjectUpdate::where('id', $request->input('update_id'))
|
||||||
|
->where('project_id', $project->id)
|
||||||
|
->firstOrFail();
|
||||||
|
|
||||||
|
$update->delete();
|
||||||
|
|
||||||
|
if ($request->wantsJson() || $request->ajax()) {
|
||||||
|
return response()->json([
|
||||||
|
'success' => true,
|
||||||
|
'message' => 'Duyuru başarıyla silindi.',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
return back()->with('success', 'Duyuru başarıyla silindi.');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Web Manager Action: Recalculate Progress %
|
* Web Manager Action: Recalculate Progress %
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -679,9 +679,15 @@ gantt
|
|||||||
<h3 class="text-sm font-bold text-slate-900 dark:text-white">
|
<h3 class="text-sm font-bold text-slate-900 dark:text-white">
|
||||||
{{ $update->title }}
|
{{ $update->title }}
|
||||||
</h3>
|
</h3>
|
||||||
|
<div class="flex items-center gap-3">
|
||||||
<span class="text-[11px] font-semibold text-slate-400">
|
<span class="text-[11px] font-semibold text-slate-400">
|
||||||
{{ $update->created_at->format('d.m.Y H:i') }}
|
{{ $update->created_at->format('d.m.Y H:i') }}
|
||||||
</span>
|
</span>
|
||||||
|
<button onclick="deleteUpdateAjax({{ $update->id }}, this)" title="Duyuruyu Sil" class="px-2 py-1 rounded-lg bg-red-50 hover:bg-red-100 text-red-600 dark:bg-red-950/40 dark:hover:bg-red-900/60 dark:text-red-400 font-bold text-xs transition-all flex items-center gap-1 border border-red-200 dark:border-red-800/40">
|
||||||
|
<i data-lucide="trash-2" class="w-3.5 h-3.5"></i>
|
||||||
|
<span>Sil</span>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<p class="text-xs text-slate-600 dark:text-slate-300 leading-relaxed whitespace-pre-line">
|
<p class="text-xs text-slate-600 dark:text-slate-300 leading-relaxed whitespace-pre-line">
|
||||||
@@ -972,6 +978,43 @@ gantt
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AJAX Delete Announcement / Update
|
||||||
|
function deleteUpdateAjax(updateId, btnEl) {
|
||||||
|
if (!confirm('Bu duyuruyu silmek istediğinize emin misiniz?')) return;
|
||||||
|
|
||||||
|
fetch('{{ route("projects.admin.delete-update", $project->slug) }}', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'X-CSRF-TOKEN': document.querySelector('meta[name="csrf-token"]').getAttribute('content'),
|
||||||
|
'Accept': 'application/json',
|
||||||
|
'X-Requested-With': 'XMLHttpRequest'
|
||||||
|
},
|
||||||
|
body: JSON.stringify({
|
||||||
|
update_id: updateId
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.then(res => res.json())
|
||||||
|
.then(data => {
|
||||||
|
if (data.success) {
|
||||||
|
const card = btnEl.closest('.relative.group');
|
||||||
|
if (card) {
|
||||||
|
card.style.transition = 'all 0.3s ease';
|
||||||
|
card.style.opacity = '0';
|
||||||
|
card.style.transform = 'scale(0.95)';
|
||||||
|
setTimeout(() => card.remove(), 300);
|
||||||
|
}
|
||||||
|
showToast(data.message, 'success');
|
||||||
|
} else {
|
||||||
|
showToast('Duyuru silinemedi.', 'error');
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.catch(err => {
|
||||||
|
console.error('AJAX Error:', err);
|
||||||
|
showToast('Bağlantı hatası.', 'error');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Dynamic UI Updates
|
// Dynamic UI Updates
|
||||||
function updateProgressUI(pct) {
|
function updateProgressUI(pct) {
|
||||||
const valEl = document.getElementById('progress-percent-val');
|
const valEl = document.getElementById('progress-percent-val');
|
||||||
|
|||||||
@@ -182,6 +182,7 @@ Route::post('/proje-takip/{slug}/admin/task-status', [\App\Http\Controllers\Proj
|
|||||||
Route::post('/proje-takip/{slug}/admin/add-task', [\App\Http\Controllers\ProjectController::class, 'addTask'])->name('projects.admin.add-task');
|
Route::post('/proje-takip/{slug}/admin/add-task', [\App\Http\Controllers\ProjectController::class, 'addTask'])->name('projects.admin.add-task');
|
||||||
Route::post('/proje-takip/{slug}/admin/delete-task', [\App\Http\Controllers\ProjectController::class, 'deleteTask'])->name('projects.admin.delete-task');
|
Route::post('/proje-takip/{slug}/admin/delete-task', [\App\Http\Controllers\ProjectController::class, 'deleteTask'])->name('projects.admin.delete-task');
|
||||||
Route::post('/proje-takip/{slug}/admin/add-update', [\App\Http\Controllers\ProjectController::class, 'addUpdate'])->name('projects.admin.add-update');
|
Route::post('/proje-takip/{slug}/admin/add-update', [\App\Http\Controllers\ProjectController::class, 'addUpdate'])->name('projects.admin.add-update');
|
||||||
|
Route::post('/proje-takip/{slug}/admin/delete-update', [\App\Http\Controllers\ProjectController::class, 'deleteUpdate'])->name('projects.admin.delete-update');
|
||||||
Route::post('/proje-takip/{slug}/admin/recalculate', [\App\Http\Controllers\ProjectController::class, 'recalculate'])->name('projects.admin.recalculate');
|
Route::post('/proje-takip/{slug}/admin/recalculate', [\App\Http\Controllers\ProjectController::class, 'recalculate'])->name('projects.admin.recalculate');
|
||||||
Route::post('/proje-takip/{slug}/admin/toggle-mode', [\App\Http\Controllers\ProjectController::class, 'toggleAdminMode'])->name('projects.admin.toggle-mode');
|
Route::post('/proje-takip/{slug}/admin/toggle-mode', [\App\Http\Controllers\ProjectController::class, 'toggleAdminMode'])->name('projects.admin.toggle-mode');
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user