${task.subtasks.map(sub => `
- ${sub.name}
+ ${sub.name}
@@ -615,31 +622,43 @@ document.querySelectorAll('.project-column').forEach(col => {
});
});
- document.querySelectorAll('[data-task-id]').forEach(span => {
- span.addEventListener('click', () => {
- const taskId = span.dataset.taskId;
- const isHighlighted = span.classList.toggle('highlighted');
+ document.querySelectorAll('[data-task-id]').forEach(span => {
+ span.addEventListener('click', () => {
+ const taskId = span.dataset.taskId;
- fetch('toggle_highlight.php', {
- method: 'POST',
- headers: { 'Content-Type': 'application/json' },
- body: JSON.stringify({ type: 'task', id: taskId, highlighted: isHighlighted })
- });
- });
- });
+ fetch('toggle_highlight.php', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({ type: 'task', id: taskId })
+ })
+ .then(res => res.json())
+ .then(data => {
+ if (!data.success) return;
- document.querySelectorAll('[data-subtask-id]').forEach(span => {
- span.addEventListener('click', () => {
- const subtaskId = span.dataset.subtaskId;
- const isHighlighted = span.classList.toggle('highlighted');
+ span.classList.toggle('highlighted', data.highlighted === 1);
+ span.classList.toggle('completed', data.highlighted === 2);
+ });
+ });
+ });
- fetch('toggle_highlight.php', {
- method: 'POST',
- headers: { 'Content-Type': 'application/json' },
- body: JSON.stringify({ type: 'subtask', id: subtaskId, highlighted: isHighlighted })
- });
- });
- });
+ document.querySelectorAll('[data-subtask-id]').forEach(span => {
+ span.addEventListener('click', () => {
+ const subtaskId = span.dataset.subtaskId;
+
+ fetch('toggle_highlight.php', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({ type: 'subtask', id: subtaskId })
+ })
+ .then(res => res.json())
+ .then(data => {
+ if (!data.success) return;
+
+ span.classList.toggle('highlighted', data.highlighted === 1);
+ span.classList.toggle('completed', data.highlighted === 2);
+ });
+ });
+ });
let itemToDelete = null;
diff --git a/toggle_highlight.php b/toggle_highlight.php
index 5494b35..b16562f 100644
--- a/toggle_highlight.php
+++ b/toggle_highlight.php
@@ -3,19 +3,28 @@ require 'db.php';
$data = json_decode(file_get_contents('php://input'), true);
-$type = $data['type'];
-$id = intval($data['id']);
-$highlighted = isset($data['highlighted']) && $data['highlighted'] ? 1 : 0;
+$type = $data['type'] ?? '';
+$id = intval($data['id'] ?? 0);
+
+if ($id <= 0 || ($type !== 'task' && $type !== 'subtask')) {
+ echo json_encode(['success' => false, 'error' => 'Invalid request']);
+ exit;
+}
if ($type === 'task') {
- $stmt = $pdo->prepare("UPDATE tasks SET highlighted = ? WHERE id = ?");
- $stmt->execute([$highlighted, $id]);
- echo json_encode(['success' => true]);
-} elseif ($type === 'subtask') {
- $stmt = $pdo->prepare("UPDATE subtasks SET highlighted = ? WHERE id = ?");
- $stmt->execute([$highlighted, $id]);
- echo json_encode(['success' => true]);
+ $stmt = $pdo->prepare("UPDATE tasks SET highlighted = (highlighted + 1) % 3 WHERE id = ?");
+ $stmt->execute([$id]);
+
+ $stmt = $pdo->prepare("SELECT highlighted FROM tasks WHERE id = ?");
+ $stmt->execute([$id]);
+ $newState = intval($stmt->fetchColumn());
} else {
- echo json_encode(['success' => false, 'error' => 'Invalid type']);
+ $stmt = $pdo->prepare("UPDATE subtasks SET highlighted = (highlighted + 1) % 3 WHERE id = ?");
+ $stmt->execute([$id]);
+
+ $stmt = $pdo->prepare("SELECT highlighted FROM subtasks WHERE id = ?");
+ $stmt->execute([$id]);
+ $newState = intval($stmt->fetchColumn());
}
-?>
+
+echo json_encode(['success' => true, 'highlighted' => $newState]);