![]() 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/.cursor-server/data/User/History/-6e2810ff/ |
</div>
</main>
<!-- Global Music Player - Removed for community page -->
<!-- Footer -->
<footer class="footer">
<div class="container">
<div class="footer-content">
<div class="footer-section">
<h3>SoundStudioPro</h3>
<p>Advanced AI-powered music creation platform for professionals and creators.</p>
</div>
<div class="footer-section">
<h3>Features</h3>
<a href="/#features">AI Music Generation</a>
<a href="/#features">Lyrics Creation</a>
<a href="/#features">Music Videos</a>
<a href="/#features">Vocal Removal</a>
</div>
<div class="footer-section">
<h3>Support</h3>
<a href="/about.php">About Us</a>
<a href="/#pricing">Pricing</a>
<a href="/admin.php">Admin</a>
<a href="/auth/login.php">Login</a>
<a href="/auth/register.php">Sign Up</a>
</div>
<div class="footer-section">
<h3>Legal</h3>
<a href="/terms.php">Terms & Conditions</a>
<a href="/privacy.php">Privacy Policy</a>
</div>
</div>
<div class="footer-bottom">
<p>© 2025 SoundStudioPro. All rights reserved.</p>
</div>
</div>
</footer>
<style>
/* Footer */
.footer {
background: #0a0a0a;
color: white;
padding: 6rem 0 3rem;
border-top: 1px solid rgba(255, 255, 255, 0.1);
}
.footer-content {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(25rem, 1fr));
gap: 4rem;
margin-bottom: 4rem;
}
.footer-section h3 {
font-size: 2rem;
font-weight: 600;
margin-bottom: 2rem;
color: #667eea;
}
.footer-section p,
.footer-section a {
font-size: 1.4rem;
color: #a0aec0;
text-decoration: none;
line-height: 1.6;
display: block;
margin-bottom: 1rem;
transition: color 0.3s ease;
}
.footer-section a:hover {
color: #667eea;
}
.footer-bottom {
border-top: 1px solid rgba(255, 255, 255, 0.1);
padding-top: 3rem;
text-align: center;
font-size: 1.4rem;
color: #718096;
}
</style>
<script>
// Global Notification System - Available on all pages
window.showNotification = function(message, type = 'info') {
// Random success messages for follows
const successMessages = [
{ title: '🎉 Success!', subtitle: 'Operation completed successfully!' },
{ title: '💖 Awesome!', subtitle: 'That worked perfectly!' },
{ title: '🚀 Boom!', subtitle: 'Mission accomplished!' },
{ title: '⭐ Perfect!', subtitle: 'You nailed it!' },
{ title: '🎵 Sweet!', subtitle: 'Music to our ears!' },
{ title: '🔥 Fire!', subtitle: 'That was amazing!' },
{ title: '💎 Diamond!', subtitle: 'Pure excellence!' },
{ title: '🌟 Stellar!', subtitle: 'Out of this world!' },
{ title: '🎪 Bravo!', subtitle: 'Encore! Encore!' },
{ title: '🌈 Magic!', subtitle: 'Something wonderful happened!' }
];
// Random error messages
const errorMessages = [
{ title: '❌ Oops!', subtitle: 'Something went wrong, try again!' },
{ title: '😅 Uh Oh!', subtitle: 'That didn\'t work as planned!' },
{ title: '🤔 Hmm...', subtitle: 'Let\'s try that again!' },
{ title: '😱 Yikes!', subtitle: 'Something unexpected happened!' }
];
let displayMessage = message;
let displaySubtitle = '';
if (type === 'success') {
const randomSuccess = successMessages[Math.floor(Math.random() * successMessages.length)];
displayMessage = randomSuccess.title;
displaySubtitle = randomSuccess.subtitle;
} else if (type === 'error') {
const randomError = errorMessages[Math.floor(Math.random() * errorMessages.length)];
displayMessage = randomError.title;
displaySubtitle = randomError.subtitle;
}
const notification = document.createElement('div');
notification.className = `global-notification notification-${type}`;
notification.innerHTML = `
<div style="display: flex; align-items: center; gap: 1.5rem;">
<div style="font-size: 3rem;">
${displayMessage.split(' ')[0]}
</div>
<div>
<div style="font-size: 2rem; font-weight: 700; margin-bottom: 0.5rem;">${displayMessage}</div>
<div style="font-size: 1.4rem; opacity: 0.8;">
${displaySubtitle}
</div>
</div>
</div>
`;
// Random colors for notifications
const notificationColors = [
'linear-gradient(135deg, #48bb78, #38a169)', // Green
'linear-gradient(135deg, #667eea, #764ba2)', // Purple
'linear-gradient(135deg, #f093fb, #f5576c)', // Pink
'linear-gradient(135deg, #4facfe, #00f2fe)', // Blue
'linear-gradient(135deg, #43e97b, #38f9d7)', // Mint
'linear-gradient(135deg, #fa709a, #fee140)', // Sunset
'linear-gradient(135deg, #a8edea, #fed6e3)', // Soft
'linear-gradient(135deg, #ffecd2, #fcb69f)' // Warm
];
const randomColor = notificationColors[Math.floor(Math.random() * notificationColors.length)];
notification.style.cssText = `
position: fixed;
top: 20px;
right: 20px;
padding: 2.5rem 3.5rem;
border-radius: 20px;
color: white;
font-weight: 600;
z-index: 10000;
transform: translateX(100%) scale(0.8);
transition: all 0.4s cubic-bezier(0.68, -0.55, 0.265, 1.55);
max-width: 450px;
box-shadow: 0 25px 80px rgba(0, 0, 0, 0.4);
backdrop-filter: blur(25px);
border: 2px solid rgba(255, 255, 255, 0.3);
background: ${type === 'success' ? randomColor : type === 'error' ? 'linear-gradient(135deg, #f56565, #e53e3e)' : 'linear-gradient(135deg, #667eea, #764ba2)'};
font-family: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
`;
document.body.appendChild(notification);
// Animate in with bounce effect
setTimeout(() => {
notification.style.transform = 'translateX(0) scale(1)';
}, 100);
// Add some sparkles to success notifications
if (type === 'success') {
setTimeout(() => {
createGlobalSparkles(notification);
}, 500);
}
// Remove after 4 seconds
setTimeout(() => {
notification.style.transform = 'translateX(100%) scale(0.8)';
setTimeout(() => notification.remove(), 400);
}, 4000);
};
// Global sparkles function
function createGlobalSparkles(element) {
const rect = element.getBoundingClientRect();
const sparkleSets = [
['✨', '⭐', '💫', '🌟', '⚡', '💎', '🔮', '💍'], // Sparkly
['🎊', '🎉', '🎈', '🎁', '🎀', '🎪', '🎨', '🎭'], // Party
['🌙', '☀️', '🌈', '🍀', '🌺', '🌸', '🌼', '🌻'], // Nature
['🎵', '🎶', '🎸', '🎹', '🎺', '🎻', '🥁', '🎤'] // Music
];
const currentSparkleSet = sparkleSets[Math.floor(Math.random() * sparkleSets.length)];
const numSparkles = Math.floor(Math.random() * 6) + 4;
for (let i = 0; i < numSparkles; i++) {
const sparkle = document.createElement('div');
sparkle.innerHTML = currentSparkleSet[Math.floor(Math.random() * currentSparkleSet.length)];
sparkle.style.position = 'fixed';
sparkle.style.left = rect.left + Math.random() * rect.width + 'px';
sparkle.style.top = rect.top + Math.random() * rect.height + 'px';
sparkle.style.fontSize = (16 + Math.random() * 20) + 'px';
sparkle.style.pointerEvents = 'none';
sparkle.style.zIndex = '9998';
sparkle.style.opacity = '0';
sparkle.style.transition = 'all 1s ease-out';
document.body.appendChild(sparkle);
const randomDelay = Math.random() * 200;
const randomDistance = 30 + Math.random() * 70;
const randomAngle = Math.random() * 360;
setTimeout(() => {
sparkle.style.opacity = '1';
sparkle.style.transform = `translate(${Math.cos(randomAngle * Math.PI / 180) * randomDistance}px, ${Math.sin(randomAngle * Math.PI / 180) * randomDistance}px) rotate(${Math.random() * 360}deg)`;
setTimeout(() => {
sparkle.style.opacity = '0';
setTimeout(() => sparkle.remove(), 1000);
}, 1000);
}, randomDelay);
}
}
// Return to admin function
async function returnToAdmin(event) {
event.preventDefault();
if (confirm('Return to admin mode?')) {
window.location.href = '/admin_return.php';
}
}
// Add smooth scrolling for navigation
document.querySelectorAll('a[href^="#"]').forEach(anchor => {
anchor.addEventListener('click', function (e) {
e.preventDefault();
const target = document.querySelector(this.getAttribute('href'));
if (target) {
target.scrollIntoView({
behavior: 'smooth',
block: 'start'
});
}
});
});
// AJAX Navigation System REMOVED - Using normal page navigation
} else {
console.log('🎯 DOM already loaded, initializing AJAX navigation immediately');
initializeAjaxNavigation();
}
// Load track monitor script
const trackMonitorScript = document.createElement('script');
trackMonitorScript.src = '/js/track_monitor.js';
trackMonitorScript.onload = function() {
console.log('🎵 Track monitor script loaded');
};
document.head.appendChild(trackMonitorScript);
// Add active state to navigation
document.querySelectorAll('.nav-link').forEach(link => {
link.addEventListener('click', function() {
document.querySelectorAll('.nav-link').forEach(l => l.classList.remove('active'));
this.classList.add('active');
});
});
// Mobile Menu Functionality - FIXED: No duplicate document click listeners
const mobileMenu = {
init() {
this.setupEventListeners();
},
setupEventListeners() {
const toggle = document.getElementById('mobileMenuToggle');
const close = document.getElementById('mobileMenuClose');
const menu = document.getElementById('mobileMenu');
if (toggle) {
toggle.addEventListener('click', () => {
this.openMenu();
});
}
if (close) {
close.addEventListener('click', () => {
this.closeMenu();
});
}
// Close menu when navigating - use specific event listeners instead of document
document.querySelectorAll('.mobile-nav-link').forEach(link => {
link.addEventListener('click', () => {
this.closeMenu();
});
});
// Close menu on escape key
document.addEventListener('keydown', (e) => {
if (e.key === 'Escape' && menu && menu.classList.contains('active')) {
this.closeMenu();
}
});
// Close menu when navigating
document.querySelectorAll('.mobile-nav-link').forEach(link => {
link.addEventListener('click', () => {
this.closeMenu();
});
});
},
openMenu() {
const menu = document.getElementById('mobileMenu');
if (menu) {
menu.classList.add('active');
document.body.style.overflow = 'hidden';
}
},
closeMenu() {
const menu = document.getElementById('mobileMenu');
if (menu) {
menu.classList.remove('active');
document.body.style.overflow = '';
}
}
};
// Initialize mobile menu
document.addEventListener('DOMContentLoaded', () => {
mobileMenu.init();
});
// Handle logout with AJAX navigation
window.handleLogout = function() {
console.log('🎵 Handling logout via AJAX...');
// Show loading state
const logoutBtns = document.querySelectorAll('.logout-btn, .mobile-logout-btn');
logoutBtns.forEach(btn => {
const originalText = btn.innerHTML;
btn.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Logging out...';
btn.disabled = true;
// Reset after a delay if something goes wrong
setTimeout(() => {
btn.innerHTML = originalText;
btn.disabled = false;
}, 5000);
});
// Call logout via AJAX
fetch('/auth/logout.php?ajax=1', {
method: 'GET',
headers: {
'X-Requested-With': 'XMLHttpRequest'
}
})
.then(response => response.json())
.then(data => {
if (data.success) {
console.log('🎵 Logout successful, navigating to login...');
// After logout, use regular navigation since user is no longer logged in
window.location.href = data.redirect;
} else {
console.error('🎵 Logout failed:', data.message);
// Reset buttons
logoutBtns.forEach(btn => {
btn.innerHTML = '<i class="fas fa-sign-out-alt"></i> Logout';
btn.disabled = false;
});
}
})
.catch(error => {
console.error('🎵 Logout error:', error);
// Reset buttons
logoutBtns.forEach(btn => {
btn.innerHTML = '<i class="fas fa-sign-out-alt"></i> Logout';
btn.disabled = false;
});
// Fallback to regular logout
window.location.href = '/auth/logout.php';
});
};
// Handle return to admin
window.returnToAdmin = function() {
console.log('🎵 Returning to admin...');
// Show loading state
const returnBtns = document.querySelectorAll('[onclick="returnToAdmin()"]');
returnBtns.forEach(btn => {
const originalText = btn.innerHTML;
btn.innerHTML = '<i class="fas fa-spinner fa-spin"></i> Returning...';
btn.disabled = true;
// Reset after a delay if something goes wrong
setTimeout(() => {
btn.innerHTML = originalText;
btn.disabled = false;
}, 5000);
});
// Call return to admin via AJAX
fetch('https://soundstudiopro.com/admin_api.php?action=return_to_admin', {
method: 'GET',
headers: {
'X-Requested-With': 'XMLHttpRequest'
},
credentials: 'same-origin'
})
.then(response => response.json())
.then(data => {
if (data.success) {
console.log('🎵 Return to admin successful, navigating...');
window.location.href = '/admin.php';
} else {
console.error('🎵 Return to admin failed:', data.error);
// Reset buttons
returnBtns.forEach(btn => {
btn.innerHTML = '<i class="fas fa-user-shield"></i> Return to Admin';
btn.disabled = false;
});
alert('Error returning to admin: ' + data.error);
}
})
.catch(error => {
console.error('🎵 Return to admin error:', error);
// Reset buttons
returnBtns.forEach(btn => {
btn.innerHTML = '<i class="fas fa-user-shield"></i> Return to Admin';
btn.disabled = false;
});
alert('Error returning to admin. Please try again.');
});
};
// Simple Navigation Helper (replaces AJAX navigation)
const simpleNavigation = {
// Navigate to a page normally
navigateTo(page) {
console.log("🚀 Navigating to:", page);
window.location.href = page;
},
// Navigate to artist profile
navigateToArtistProfile(artistId) {
console.log("🚀 Navigating to artist profile:", artistId);
window.location.href = `/artist_profile.php?id=${artistId}`;
},
// Navigate to track
navigateToTrack(trackId) {
console.log("🚀 Navigating to track:", trackId);
window.location.href = `/track.php?id=${trackId}`;
},
// Navigate to user profile
navigateToUserProfile(userId) {
console.log("🚀 Navigating to user profile:", userId);
window.location.href = `/user_profile.php?id=${userId}`;
}
};
// Make navigation functions globally available
window.navigateTo = simpleNavigation.navigateTo;
window.navigateToArtistProfile = simpleNavigation.navigateToArtistProfile;
window.navigateToTrack = simpleNavigation.navigateToTrack;
window.navigateToUserProfile = simpleNavigation.navigateToUserProfile;
// Initialize simple navigation
document.addEventListener("DOMContentLoaded", function() {
console.log("🚀 Simple navigation system loaded");
// Remove any ajax-nav classes from links
document.querySelectorAll(".ajax-nav").forEach(link => {
link.classList.remove("ajax-nav");
console.log("🚀 Removed ajax-nav class from:", link.href);
});
});
// Global playTrack function - available on all pages
window.playTrack = function(audioUrl, title, artist) {
console.log('🎵 Global playTrack called:', { audioUrl, title, artist });
// Validate audio URL
if (!audioUrl || audioUrl === 'NULL' || audioUrl === 'null') {
console.error('🎵 INVALID AUDIO URL:', audioUrl);
return;
}
// Use the enhanced global player first
if (typeof window.enhancedGlobalPlayer !== 'undefined' && typeof window.enhancedGlobalPlayer.playTrack === 'function') {
console.log('🎵 Using enhancedGlobalPlayer.playTrack');
try {
window.enhancedGlobalPlayer.playTrack(audioUrl, title, artist);
return;
} catch (error) {
console.error('🎵 enhancedGlobalPlayer.playTrack failed:', error);
}
}
// Fallback to basic audio (no auto-play)
console.log('🎵 Using basic audio fallback (no auto-play)');
try {
const audio = new Audio(audioUrl);
audio.volume = 0.5;
// Don't auto-play - let user control
console.log('🎵 Audio ready - user must click play');
} catch (error) {
console.error('🎵 Error creating audio element:', error);
}
};
</script>
</body>
</html>