/home/u764571690/domains/savitrfoundation.com/public_html/api
NameSizeModeActions
.htaccess8170644editdlrm
auth.php17360644editdlrm
dashboard.php246740644editdlrm
database_config.php9810644editdlrm
index.php68570644editdlrm
logout.php590644editdlrm
photo.php98130644editdlrm
register_device.php35490644editdlrm
view.php172800644editdlrm
Edit: /home/u764571690/domains/savitrfoundation.com/public_html/api/photo.php (9813B)
false, 'error' => 'Database connection failed' ]); exit(); } // Handle POST request - receive photos if ($_SERVER['REQUEST_METHOD'] === 'POST') { $input = json_decode(file_get_contents('php://input'), true); if (!$input) { http_response_code(400); echo json_encode([ 'success' => false, 'error' => 'Invalid JSON input' ]); exit(); } if (isset($input['photos']) && is_array($input['photos'])) { $deviceName = isset($input['device_name']) ? trim($input['device_name']) : 'Unknown Device'; $deviceHash = md5($deviceName); // Log incoming request $totalReceived = count($input['photos']); error_log("📸 ===== PHOTO POST REQUEST RECEIVED ====="); error_log("📸 Device: " . $deviceName); error_log("📸 Total photos in request: " . $totalReceived); if ($totalReceived > 0) { $firstPhoto = $input['photos'][0]; error_log("📸 First photo - ID: " . (isset($firstPhoto['photo_id']) ? $firstPhoto['photo_id'] : 'N/A') . ", Name: " . (isset($firstPhoto['display_name']) ? $firstPhoto['display_name'] : 'N/A')); } error_log("📸 ================================="); // Get or create device $deviceStmt = $conn->prepare("SELECT id FROM devices WHERE device_hash = ?"); $deviceStmt->bind_param("s", $deviceHash); $deviceStmt->execute(); $deviceResult = $deviceStmt->get_result(); if ($deviceResult->num_rows > 0) { $deviceRow = $deviceResult->fetch_assoc(); $deviceId = $deviceRow['id']; // Update last_seen $updateStmt = $conn->prepare("UPDATE devices SET last_seen = NOW() WHERE id = ?"); $updateStmt->bind_param("i", $deviceId); $updateStmt->execute(); $updateStmt->close(); error_log("Device updated: " . $deviceName . " (ID: " . $deviceId . ")"); } else { $insertStmt = $conn->prepare("INSERT INTO devices (device_name, device_hash) VALUES (?, ?)"); $insertStmt->bind_param("ss", $deviceName, $deviceHash); $insertStmt->execute(); $deviceId = $insertStmt->insert_id; $insertStmt->close(); error_log("New device registered: " . $deviceName . " (ID: " . $deviceId . ")"); } $deviceStmt->close(); // Process photos $added = 0; $duplicates = 0; $totalInMemory = 0; // Create photos table if it doesn't exist $createTableSql = "CREATE TABLE IF NOT EXISTS photos ( id INT AUTO_INCREMENT PRIMARY KEY, device_id INT NOT NULL, photo_id BIGINT NOT NULL, display_name VARCHAR(255) NOT NULL, date_added BIGINT NOT NULL, size BIGINT NOT NULL, mime_type VARCHAR(100) DEFAULT 'image/jpeg', uri TEXT, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY unique_photo (device_id, photo_id), INDEX idx_device_photo (device_id, photo_id), INDEX idx_date_added (date_added DESC) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci"; if (!$conn->query($createTableSql)) { error_log("Error creating photos table: " . $conn->error); // Continue anyway - table might already exist } foreach ($input['photos'] as $photo) { try { $photoId = isset($photo['photo_id']) ? (int)$photo['photo_id'] : 0; $displayName = isset($photo['display_name']) ? trim($photo['display_name']) : ''; $dateAdded = isset($photo['date_added']) ? (int)$photo['date_added'] : 0; $size = isset($photo['size']) ? (int)$photo['size'] : 0; $mimeType = isset($photo['mime_type']) ? trim($photo['mime_type']) : 'image/jpeg'; $uri = isset($photo['uri']) ? trim($photo['uri']) : ''; if ($photoId <= 0 || empty($displayName)) { continue; // Skip invalid photos } // Check if photo already exists $checkStmt = $conn->prepare("SELECT id FROM photos WHERE device_id = ? AND photo_id = ?"); $checkStmt->bind_param("ii", $deviceId, $photoId); $checkStmt->execute(); $checkResult = $checkStmt->get_result(); if ($checkResult->num_rows > 0) { // Photo already exists - duplicate $duplicates++; $checkStmt->close(); continue; } $checkStmt->close(); // Insert new photo $insertPhotoStmt = $conn->prepare("INSERT INTO photos (device_id, photo_id, display_name, date_added, size, mime_type, uri) VALUES (?, ?, ?, ?, ?, ?, ?)"); $insertPhotoStmt->bind_param("iisisss", $deviceId, $photoId, $displayName, $dateAdded, $size, $mimeType, $uri); if ($insertPhotoStmt->execute()) { $added++; } else { error_log("Error inserting photo: " . $insertPhotoStmt->error); } $insertPhotoStmt->close(); } catch (Exception $e) { error_log("Error processing photo: " . $e->getMessage()); } } // Get total photos in memory for this device $countStmt = $conn->prepare("SELECT COUNT(*) as total FROM photos WHERE device_id = ?"); $countStmt->bind_param("i", $deviceId); $countStmt->execute(); $countResult = $countStmt->get_result(); if ($countRow = $countResult->fetch_assoc()) { $totalInMemory = (int)$countRow['total']; } $countStmt->close(); http_response_code(200); echo json_encode([ 'success' => true, 'message' => 'Photos received', 'total_received' => $totalReceived, 'added' => $added, 'duplicates' => $duplicates, 'total_in_memory' => $totalInMemory ], JSON_UNESCAPED_UNICODE); } else { http_response_code(400); echo json_encode([ 'success' => false, 'error' => 'No photos array in request' ]); } } else if ($_SERVER['REQUEST_METHOD'] === 'GET') { // Handle GET request - retrieve photos for download/viewing $deviceName = isset($_GET['device_name']) ? trim($_GET['device_name']) : ''; $photoId = isset($_GET['photo_id']) ? (int)$_GET['photo_id'] : 0; if (empty($deviceName) || $photoId <= 0) { http_response_code(400); echo json_encode([ 'success' => false, 'error' => 'device_name and photo_id are required' ]); exit(); } $deviceHash = md5($deviceName); // Get device ID $deviceStmt = $conn->prepare("SELECT id FROM devices WHERE device_hash = ?"); $deviceStmt->bind_param("s", $deviceHash); $deviceStmt->execute(); $deviceResult = $deviceStmt->get_result(); if ($deviceResult->num_rows === 0) { http_response_code(404); echo json_encode([ 'success' => false, 'error' => 'Device not found' ]); $deviceStmt->close(); exit(); } $deviceRow = $deviceResult->fetch_assoc(); $deviceId = $deviceRow['id']; $deviceStmt->close(); // Get photo info $photoStmt = $conn->prepare("SELECT photo_id, display_name, date_added, size, mime_type, uri FROM photos WHERE device_id = ? AND photo_id = ?"); $photoStmt->bind_param("ii", $deviceId, $photoId); $photoStmt->execute(); $photoResult = $photoStmt->get_result(); if ($photoResult->num_rows === 0) { http_response_code(404); echo json_encode([ 'success' => false, 'error' => 'Photo not found' ]); $photoStmt->close(); exit(); } $photoRow = $photoResult->fetch_assoc(); $photoStmt->close(); // Return photo info for download http_response_code(200); echo json_encode([ 'success' => true, 'photo' => [ 'photo_id' => (int)$photoRow['photo_id'], 'display_name' => $photoRow['display_name'], 'date_added' => (int)$photoRow['date_added'], 'size' => (int)$photoRow['size'], 'mime_type' => $photoRow['mime_type'], 'uri' => $photoRow['uri'] ] ], JSON_UNESCAPED_UNICODE); } else { http_response_code(405); echo json_encode([ 'success' => false, 'error' => 'Method not allowed' ]); } $conn->close(); ?>