![]() Server : Apache/2 System : Linux server-15-235-50-60 5.15.0-164-generic #174-Ubuntu SMP Fri Nov 14 20:25:16 UTC 2025 x86_64 User : gositeme ( 1004) PHP Version : 8.2.29 Disable Function : exec,system,passthru,shell_exec,proc_close,proc_open,dl,popen,show_source,posix_kill,posix_mkfifo,posix_getpwuid,posix_setpgid,posix_setsid,posix_setuid,posix_setgid,posix_seteuid,posix_setegid,posix_uname Directory : /home/gositeme/domains/soundstudiopro.com/public_html/api/ |
<?php
session_start();
// Check if user is logged in
if (!isset($_SESSION['user_id'])) {
http_response_code(401);
echo json_encode(['success' => false, 'error' => 'User not authenticated']);
exit;
}
// Check if file was uploaded
if (!isset($_FILES['cover_image']) || $_FILES['cover_image']['error'] !== UPLOAD_ERR_OK) {
http_response_code(400);
echo json_encode(['success' => false, 'error' => 'No file uploaded or upload error']);
exit;
}
$file = $_FILES['cover_image'];
$track_id = $_POST['track_id'] ?? null;
// Validate track_id
if (!$track_id) {
http_response_code(400);
echo json_encode(['success' => false, 'error' => 'Track ID is required']);
exit;
}
// Validate file type
$allowed_types = ['image/jpeg', 'image/jpg', 'image/png', 'image/gif', 'image/webp'];
if (!in_array($file['type'], $allowed_types)) {
http_response_code(400);
echo json_encode(['success' => false, 'error' => 'Invalid file type. Only JPEG, PNG, GIF, and WebP are allowed']);
exit;
}
// Validate file size (5MB max)
if ($file['size'] > 5 * 1024 * 1024) {
http_response_code(400);
echo json_encode(['success' => false, 'error' => 'File size must be less than 5MB']);
exit;
}
// Include database configuration
require_once '../config/database.php';
$pdo = getDBConnection();
try {
// Verify that the user owns this track
$stmt = $pdo->prepare("SELECT user_id FROM music_tracks WHERE id = ?");
$stmt->execute([$track_id]);
$track = $stmt->fetch();
if (!$track) {
http_response_code(404);
echo json_encode(['success' => false, 'error' => 'Track not found']);
exit;
}
if ($track['user_id'] != $_SESSION['user_id']) {
http_response_code(403);
echo json_encode(['success' => false, 'error' => 'You can only update your own tracks']);
exit;
}
// Create uploads directory if it doesn't exist
$upload_dir = '../uploads/track_covers/';
if (!is_dir($upload_dir)) {
mkdir($upload_dir, 0755, true);
}
// Generate unique filename
$file_extension = pathinfo($file['name'], PATHINFO_EXTENSION);
$filename = 'track_' . $track_id . '_' . time() . '.' . $file_extension;
$filepath = $upload_dir . $filename;
// Move uploaded file
if (!move_uploaded_file($file['tmp_name'], $filepath)) {
throw new Exception('Failed to move uploaded file');
}
// Compress and optimize the image
require_once '../utils/image_compression.php';
$compression_result = compressTrackCover($filepath);
if ($compression_result['success']) {
// Update filename if format changed (e.g., PNG to JPEG)
if (!empty($compression_result['format_changed']) && $compression_result['format_changed']) {
$filename = basename($compression_result['filepath']);
}
error_log("Track cover compressed: " . ($compression_result['message'] ?? 'Success'));
} else {
error_log("Image compression warning: " . ($compression_result['error'] ?? 'Unknown error'));
// Continue even if compression fails - original image is still usable
}
// Update database with cover image path
$image_url = '/uploads/track_covers/' . $filename;
// Update the track's image_url
$stmt = $pdo->prepare("UPDATE music_tracks SET image_url = ? WHERE id = ?");
$stmt->execute([$image_url, $track_id]);
// Return success response
echo json_encode([
'success' => true,
'data' => [
'image_url' => $image_url,
'filename' => $filename
]
]);
} catch (Exception $e) {
http_response_code(500);
echo json_encode(['success' => false, 'error' => 'Server error: ' . $e->getMessage()]);
}
?>