![]() 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/private_html/admin_includes/ |
<?php
// Track Pricing Management Tab
// This file handles track pricing and artist revenue sharing
// Get tracks with pricing information
try {
$stmt = $pdo->prepare("
SELECT
mt.*,
u.name as artist_name,
u.email as artist_email,
COUNT(tp.id) as purchase_count,
SUM(tp.price_paid) as total_revenue
FROM music_tracks mt
LEFT JOIN users u ON mt.user_id = u.id
LEFT JOIN track_purchases tp ON mt.id = tp.track_id
WHERE mt.status = 'complete'
GROUP BY mt.id
ORDER BY mt.created_at DESC
LIMIT 100
");
$stmt->execute();
$tracks = $stmt->fetchAll();
} catch (Exception $e) {
$tracks = [];
}
// Get pricing statistics
$pricing_stats = $pdo->query("
SELECT
COUNT(*) as total_tracks,
AVG(price) as avg_price,
MIN(price) as min_price,
MAX(price) as max_price,
SUM(CASE WHEN price > 0 THEN 1 ELSE 0 END) as priced_tracks,
SUM(CASE WHEN price = 0 THEN 1 ELSE 0 END) as free_tracks
FROM music_tracks
WHERE status = 'complete'
")->fetch();
// Revenue sharing settings (you can adjust these)
$platform_fee_percentage = 30; // Platform takes 30%
$artist_revenue_percentage = 70; // Artist gets 70%
?>
<!-- Track Pricing Management -->
<div class="section-header">
<h2><i class="fas fa-dollar-sign"></i> Track Pricing & Revenue</h2>
<p>Manage track pricing and artist revenue sharing</p>
</div>
<!-- Pricing Statistics Cards -->
<div class="stats-grid" style="margin-bottom: 3rem;">
<div class="stat-card">
<div class="stat-number"><?= number_format($pricing_stats['total_tracks']) ?></div>
<div class="stat-label">Total Tracks</div>
</div>
<div class="stat-card">
<div class="stat-number">$<?= number_format($pricing_stats['avg_price'], 2) ?></div>
<div class="stat-label">Average Price</div>
</div>
<div class="stat-card">
<div class="stat-number"><?= number_format($pricing_stats['priced_tracks']) ?></div>
<div class="stat-label">Priced Tracks</div>
</div>
<div class="stat-card">
<div class="stat-number"><?= number_format($pricing_stats['free_tracks']) ?></div>
<div class="stat-label">Free Tracks</div>
</div>
</div>
<!-- Revenue Sharing Info -->
<div class="info-card" style="background: linear-gradient(135deg, #667eea, #764ba2); padding: 20px; border-radius: 10px; margin-bottom: 2rem;">
<h3 style="color: white; margin: 0 0 10px 0;">💰 Revenue Sharing Model</h3>
<div style="color: #e2e8f0;">
<p><strong>Platform Fee:</strong> <?= $platform_fee_percentage ?>% (covers processing, hosting, development)</p>
<p><strong>Artist Revenue:</strong> <?= $artist_revenue_percentage ?>% (goes directly to track creator)</p>
<p><strong>Example:</strong> For a $2.99 track, artist earns $2.09, platform gets $0.90</p>
</div>
</div>
<input type="text" id="trackPricingSearch" placeholder="Search tracks by title, artist, or price..." class="search-input">
<table class="data-table">
<thead>
<tr>
<th>Track</th>
<th>Artist</th>
<th>Current Price</th>
<th>Purchases</th>
<th>Revenue</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<?php foreach ($tracks as $track): ?>
<tr data-track-id="<?= $track['id'] ?>">
<td>
<div style="display: flex; align-items: center; gap: 1rem;">
<div style="width: 50px; height: 50px; background: linear-gradient(135deg, #667eea, #764ba2); border-radius: 8px; display: flex; align-items: center; justify-content: center; color: white;">
<i class="fas fa-music"></i>
</div>
<div>
<div style="font-weight: 600; color: white;"><?= htmlspecialchars($track['title'] ?? 'Untitled') ?></div>
<div style="font-size: 1.2rem; color: #a0aec0;">ID: <?= $track['id'] ?></div>
<div style="font-size: 1.2rem; color: #a0aec0;"><?= gmdate('i:s', $track['duration'] ?? 0) ?></div>
</div>
</div>
</td>
<td>
<?php if ($track['artist_name']): ?>
<div>
<div style="font-weight: 600; color: white;"><?= htmlspecialchars($track['artist_name']) ?></div>
<div style="font-size: 1.2rem; color: #a0aec0;"><?= htmlspecialchars($track['artist_email']) ?></div>
</div>
<?php else: ?>
<span style="color: #f56565;">Unknown Artist</span>
<?php endif; ?>
</td>
<td>
<div style="font-weight: 600; color: white;">
$<?= number_format($track['price'], 2) ?>
</div>
<div style="font-size: 1.2rem; color: #a0aec0;">
<?= ceil($track['price']) ?> credits
</div>
</td>
<td>
<div style="font-weight: 600; color: white;">
<?= number_format($track['purchase_count']) ?>
</div>
<div style="font-size: 1.2rem; color: #a0aec0;">
purchases
</div>
</td>
<td>
<div style="font-weight: 600; color: white;">
$<?= number_format($track['total_revenue'] ?? 0, 2) ?>
</div>
<div style="font-size: 1.2rem; color: #a0aec0;">
Artist: $<?= number_format(($track['total_revenue'] ?? 0) * ($artist_revenue_percentage / 100), 2) ?>
</div>
</td>
<td>
<div class="action-buttons">
<button class="btn btn-secondary btn-sm" onclick="editTrackPrice(<?= $track['id'] ?>, <?= $track['price'] ?>)">
<i class="fas fa-dollar-sign"></i>
</button>
<button class="btn btn-primary btn-sm" onclick="viewTrackAnalytics(<?= $track['id'] ?>)">
<i class="fas fa-chart-line"></i>
</button>
<button class="btn btn-success btn-sm" onclick="setTrackFree(<?= $track['id'] ?>)">
<i class="fas fa-gift"></i>
</button>
</div>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<script>
// Track pricing search functionality
document.getElementById('trackPricingSearch')?.addEventListener('input', function() {
const query = this.value.toLowerCase();
const rows = document.querySelectorAll('.data-table tbody tr');
rows.forEach(row => {
const text = row.textContent.toLowerCase();
row.style.display = text.includes(query) ? '' : 'none';
});
});
// Edit track price function
function editTrackPrice(trackId, currentPrice) {
const newPrice = prompt('Enter new track price (USD):', currentPrice);
if (newPrice !== null && !isNaN(newPrice) && newPrice >= 0) {
fetch('/api/update_track_price.php', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
track_id: trackId,
price: parseFloat(newPrice)
})
})
.then(response => response.json())
.then(data => {
if (data.success) {
alert('Track price updated successfully!');
location.reload();
} else {
alert('Error updating track price: ' + (data.error || 'Unknown error'));
}
})
.catch(error => {
console.error('Error:', error);
alert('Error updating track price');
});
}
}
// View track analytics function
function viewTrackAnalytics(trackId) {
window.open(`/admin_track_analytics.php?track_id=${trackId}`, '_blank');
}
// Set track as free function
function setTrackFree(trackId) {
if (confirm('Set this track as free (price = $0.00)?')) {
fetch('/api/update_track_price.php', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
track_id: trackId,
price: 0.00
})
})
.then(response => response.json())
.then(data => {
if (data.success) {
alert('Track set as free successfully!');
location.reload();
} else {
alert('Error setting track as free: ' + (data.error || 'Unknown error'));
}
})
.catch(error => {
console.error('Error:', error);
alert('Error setting track as free');
});
}
}
</script>