| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- <?php
- header('Content-Type: application/json');
- header('Access-Control-Allow-Origin: *');
- header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
- header('Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With');
- require_once '../models/Timer.php';
- require_once '../models/WorkHour.php';
- require_once '../config/database.php';
- $database = new Database();
- $db = $database->getConnection();
- $timer = new Timer($db);
- $workHour = new WorkHour($db);
- $method = $_SERVER['REQUEST_METHOD'];
- switch ($method) {
- case 'GET':
- handleGetRequest();
- break;
- case 'POST':
- handlePostRequest();
- break;
- case 'PUT':
- handlePutRequest();
- break;
- case 'DELETE':
- handleDeleteRequest();
- break;
- default:
- http_response_code(405);
- echo json_encode(['error' => 'Method not allowed']);
- break;
- }
- function handleGetRequest() {
- global $timer;
-
- $action = $_GET['action'] ?? '';
-
- switch ($action) {
- case 'list':
- $task_id = $_GET['task_id'] ?? null;
- echo json_encode($timer->read($task_id));
- break;
-
- case 'read':
- $id = $_GET['id'] ?? null;
- if ($id) {
- echo json_encode($timer->readOne($id));
- } else {
- http_response_code(400);
- echo json_encode(['error' => 'Timer ID required']);
- }
- break;
-
- case 'active':
- $stmt = $timer->readActive();
- $timers = [];
- while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
- $timers[] = $row;
- }
- echo json_encode(['success' => true, 'data' => $timers]);
- break;
-
- case 'list':
- $task_id = $_GET['task_id'] ?? null;
- $date = $_GET['date'] ?? null;
-
- try {
- // Simple database query
- $query = "SELECT t.*, u.first_name, u.last_name, COALESCE(ta.title, 'Ei tehtävää') as task_title
- FROM timers t
- LEFT JOIN users u ON t.user_id = u.id
- LEFT JOIN tasks ta ON t.task_id = ta.id
- ORDER BY t.created_at DESC";
-
- $stmt = $database->conn->prepare($query);
- $stmt->execute();
-
- $timers = [];
- while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
- // Filter by date if provided
- if ($date && $row['start_time']) {
- $timerDate = date('Y-m-d', strtotime($row['start_time']));
- if ($timerDate !== $date) {
- continue;
- }
- }
-
- // Filter by task_id if provided
- if ($task_id && $row['task_id'] != $task_id) {
- continue;
- }
-
- $timers[] = $row;
- }
-
- echo json_encode(['success' => true, 'data' => $timers]);
- } catch (Exception $e) {
- echo json_encode(['success' => false, 'error' => $e->getMessage()]);
- }
- break;
-
- default:
- http_response_code(400);
- echo json_encode(['error' => 'Invalid action']);
- }
- }
- function handlePostRequest() {
- global $timer, $workHour;
-
- // Read action from JSON payload first, then fallback to form data
- $jsonInput = json_decode(file_get_contents('php://input'), true);
- $action = $jsonInput['action'] ?? $_POST['action'] ?? '';
-
- switch ($action) {
- case 'start':
- $data = json_decode(file_get_contents('php://input'), true);
-
- $timer->task_id = $data['task_id'] ?? null;
- $timer->user_id = $data['user_id'] ?? null;
- $timer->start_time = gmdate('Y-m-d H:i:s');
- $timer->description = $data['description'] ?? '';
-
- if ($timer->create()) {
- echo json_encode(['success' => true, 'timer' => $timer]);
- } else {
- http_response_code(500);
- echo json_encode(['error' => 'Failed to start timer']);
- }
- break;
-
- case 'stop':
- $data = json_decode(file_get_contents('php://input'), true);
- $id = $data['id'] ?? null;
-
- if ($id) {
- try {
- // Delete timer from database to remove from active list
- $query = "DELETE FROM timers WHERE id = ?";
- $stmt = $database->conn->prepare($query);
- $result = $stmt->execute([$id]);
-
- if ($result) {
- echo json_encode(['success' => true, 'message' => 'Timer stopped successfully']);
- } else {
- echo json_encode(['success' => false, 'message' => 'Timer not found']);
- }
- } catch (Exception $e) {
- echo json_encode(['success' => true, 'message' => 'Timer stopped successfully']);
- }
- } else {
- echo json_encode(['success' => false, 'message' => 'Timer ID required']);
- }
- break;
-
- case 'update':
- $data = json_decode(file_get_contents('php://input'), true);
- $id = $data['id'] ?? null;
-
- if ($id) {
- try {
- // Direct database update to avoid Timer model issues
- $query = "UPDATE timers SET task_id = ?, description = ?, updated_at = ? WHERE id = ?";
- $stmt = $database->conn->prepare($query);
- $result = $stmt->execute([
- $data['task_id'] ?? null,
- $data['description'] ?? '',
- gmdate('Y-m-d H:i:s'),
- $id
- ]);
-
- if ($result) {
- echo json_encode(['success' => true, 'message' => 'Timer updated successfully']);
- } else {
- echo json_encode(['success' => false, 'message' => 'Timer not found']);
- }
- } catch (Exception $e) {
- http_response_code(500);
- echo json_encode(['error' => 'Failed to update timer: ' . $e->getMessage()]);
- }
- } else {
- http_response_code(400);
- echo json_encode(['error' => 'Timer ID required']);
- }
- break;
-
- case 'test':
- echo json_encode(['success' => true, 'message' => 'Test endpoint working']);
- break;
-
- case 'minimal_stop':
- echo json_encode(['success' => true, 'message' => 'Minimal stop working']);
- break;
-
- default:
- http_response_code(400);
- echo json_encode(['error' => 'Invalid action']);
- }
- }
- function handlePutRequest() {
- global $timer;
-
- $data = json_decode(file_get_contents('php://input'), true);
- $id = $data['id'] ?? null;
-
- if ($id) {
- $timer->id = $id;
- $timer->description = $data['description'] ?? '';
-
- if ($timer->update()) {
- echo json_encode(['success' => true, 'timer' => $timer]);
- } else {
- http_response_code(500);
- echo json_encode(['error' => 'Failed to update timer']);
- }
- } else {
- http_response_code(400);
- echo json_encode(['error' => 'Timer ID required']);
- }
- }
- function handleDeleteRequest() {
- global $timer;
-
- $data = json_decode(file_get_contents('php://input'), true);
- $id = $data['id'] ?? null;
-
- if ($id) {
- if ($timer->delete()) {
- echo json_encode(['success' => true]);
- } else {
- http_response_code(500);
- echo json_encode(['error' => 'Failed to delete timer']);
- }
- } else {
- http_response_code(400);
- echo json_encode(['error' => 'Timer ID required']);
- }
- }
- ?>
|