PNG IHDR x sBIT|d pHYs + tEXtSoftware www.inkscape.org< ,tEXtComment
<?php
// Turn on error reporting for debugging
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
session_start();
if (!file_exists('includes/connect.php') || !file_exists('includes/functions.php')) {
die("<h2 style='color:red;'>CRITICAL ERROR: Cannot find includes.</h2>");
}
require_once('includes/connect.php');
require_once('includes/functions.php');
if(isset($_GET["l"])){
admlogout();
header("location: logout.php");
exit();
}
if(!isset($_SESSION['pass'])) {
header("location: login.php");
exit();
}
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
$alertMessage = "";
$alertType = "";
// =========================================================
// 1. ADD NEW EXPERT TRADER
// =========================================================
if (isset($_POST['add_expert'])) {
$name = trim($_POST['expert_name']);
$win_rate = floatval($_POST['win_rate']);
$profit_share = intval($_POST['profit_share']);
$wins = intval($_POST['wins']);
$losses = intval($_POST['losses']);
$trades = intval($_POST['trades']);
$min_startup = floatval($_POST['min_startup']);
$followers = intval($_POST['followers']);
// Handle Avatar Upload
if (isset($_FILES['avatar']) && $_FILES['avatar']['error'] === UPLOAD_ERR_OK) {
$fileTmpPath = $_FILES['avatar']['tmp_name'];
$mimeType = mime_content_type($fileTmpPath);
$allowed = ['image/jpeg', 'image/png', 'image/jpg'];
if (in_array($mimeType, $allowed)) {
$uploadDir = '../uploads_avatars/';
if (!is_dir($uploadDir)) mkdir($uploadDir, 0755, true);
$ext = ($mimeType === 'image/png') ? 'png' : 'jpg';
$fileName = 'avatar_' . time() . '_' . uniqid() . '.' . $ext;
$dest_path = $uploadDir . $fileName;
$db_path = 'uploads_avatars/' . $fileName;
if (move_uploaded_file($fileTmpPath, $dest_path)) {
$stmt = $conn->prepare("INSERT INTO copy_traders (name, avatar_url, win_rate, profit_share, wins, losses, trades, min_startup, followers) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");
$stmt->bind_param("ssdiiiiid", $name, $db_path, $win_rate, $profit_share, $wins, $losses, $trades, $min_startup, $followers);
if ($stmt->execute()) {
$alertMessage = "Expert Trader added successfully!";
$alertType = "success";
} else {
$alertMessage = "Database error saving expert.";
$alertType = "error";
}
$stmt->close();
}
} else {
$alertMessage = "Invalid image format. Use JPG or PNG.";
$alertType = "error";
}
} else {
$alertMessage = "Please upload an avatar image.";
$alertType = "error";
}
}
// =========================================================
// 2. DELETE EXPERT TRADER
// =========================================================
if (isset($_GET['delete_expert'])) {
$delId = intval($_GET['delete_expert']);
$conn->query("DELETE FROM copy_traders WHERE id = $delId");
$alertMessage = "Expert deleted.";
$alertType = "success";
}
// =========================================================
// 3. INJECT PROFIT / LOSS INTO ACTIVE COPY
// =========================================================
if (isset($_POST['inject_profit'])) {
$trade_id = intval($_POST['trade_id']);
$amount_to_inject = floatval($_POST['inject_amount']); // Can be positive or negative
$stmt = $conn->prepare("UPDATE user_copy_trades SET current_profit = current_profit + ? WHERE id = ?");
$stmt->bind_param("di", $amount_to_inject, $trade_id);
if ($stmt->execute()) {
$alertMessage = "Profit/Loss of $" . $amount_to_inject . " injected successfully!";
$alertType = "success";
}
$stmt->close();
}
// =========================================================
// 4. CLOSE USER'S COPY TRADE (Force Close)
// =========================================================
if (isset($_POST['close_trade'])) {
$trade_id = intval($_POST['trade_id']);
// Fetch trade details
$tradeRes = $conn->query("SELECT * FROM user_copy_trades WHERE id = $trade_id AND status = 'ACTIVE'");
if ($tradeRes && $tradeRes->num_rows > 0) {
$trade = $tradeRes->fetch_assoc();
$uId = $trade['user_id'];
$invested = floatval($trade['amount_invested']);
$profit = floatval($trade['current_profit']);
// Return Capital to User Capital, and Profit to User Profit
$updUser = $conn->prepare("UPDATE members SET Capital = Capital + ?, Profit = Profit + ? WHERE ID = ?");
$updUser->bind_param("ddi", $invested, $profit, $uId);
$updUser->execute();
$updUser->close();
// Mark trade as CLOSED
$timeNow = date('Y-m-d H:i:s');
$conn->query("UPDATE user_copy_trades SET status = 'CLOSED', closed_at = '$timeNow' WHERE id = $trade_id");
$alertMessage = "Trade closed! Funds returned to user.";
$alertType = "success";
}
}
// FETCH DATA FOR DISPLAY
$experts = [];
$resExp = $conn->query("SELECT * FROM copy_traders ORDER BY followers DESC");
if ($resExp) while($r = $resExp->fetch_assoc()) $experts[] = $r;
$activeCopies = [];
$resCopies = $conn->query("
SELECT uc.*, m.Email, m.Uname, ct.name as expert_name
FROM user_copy_trades uc
JOIN members m ON uc.user_id = m.ID
JOIN copy_traders ct ON uc.trader_id = ct.id
WHERE uc.status = 'ACTIVE'
ORDER BY uc.created_at DESC
");
if ($resCopies) while($r = $resCopies->fetch_assoc()) $activeCopies[] = $r;
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Melody Admin - Copytrading</title>
<link rel="stylesheet" href="vendors/iconfonts/font-awesome/css/all.min.css">
<link rel="stylesheet" href="vendors/css/vendor.bundle.base.css">
<link rel="stylesheet" href="vendors/css/vendor.bundle.addons.css">
<link rel="stylesheet" href="css/style.css">
<link rel="shortcut icon" href="images/favicon.html" />
<style>
/* Clean Melody Admin styling */
.upload-zone {
border: 2px dashed #ced4da;
padding: 20px;
text-align: center;
border-radius: 4px;
cursor: pointer;
position: relative;
background-color: #f8f9fa;
transition: border-color 0.2s;
}
.upload-zone:hover { border-color: #392c70; }
.upload-zone img { max-width: 100px; max-height: 100px; border-radius: 50%; display: none; margin: 0 auto; object-fit: cover;}
.inject-flex { display: flex; gap: 10px; align-items: center; }
.inject-input { width: 100px; }
/* Utility colors matching standard Bootstrap/Melody */
.text-success-custom { color: #198ae3; font-weight: bold; }
.text-danger-custom { color: #ff4747; font-weight: bold; }
</style>
</head>
<body>
<div class="container-scroller">
<nav class="navbar col-lg-12 col-12 p-0 fixed-top d-flex flex-row default-layout-navbar">
<div class="text-center navbar-brand-wrapper d-flex align-items-center justify-content-center">
<a class="navbar-brand brand-logo" href="index.php"><img src="images/logo-mini.svg" alt="logo"/></a>
<a class="navbar-brand brand-logo-mini" href="index.php"><img src="images/logo-mini.svg" alt="logo"/></a>
</div>
<div class="navbar-menu-wrapper d-flex align-items-stretch">
<button class="navbar-toggler navbar-toggler align-self-center" type="button" data-toggle="minimize">
<span class="fas fa-bars"></span>
</button>
<ul class="navbar-nav navbar-nav-right">
<li class="nav-item nav-profile dropdown">
<a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" id="profileDropdown">
<img src="images/faces/face5.jpg" alt="profile"/>
</a>
<div class="dropdown-menu dropdown-menu-right navbar-dropdown" aria-labelledby="profileDropdown">
<a href="cp.php" class="dropdown-item"><i class="fas fa-cog text-primary"></i> Settings</a>
<div class="dropdown-divider"></div>
<a href="index.php?l" class="dropdown-item"><i class="fas fa-power-off text-primary"></i> Logout</a>
</div>
</li>
</ul>
<button class="navbar-toggler navbar-toggler-right d-lg-none align-self-center" type="button" data-toggle="offcanvas">
<span class="fas fa-bars"></span>
</button>
</div>
</nav>
<div class="container-fluid page-body-wrapper">
<nav class="sidebar sidebar-offcanvas" id="sidebar">
<ul class="nav">
<li class="nav-item nav-profile">
<div class="nav-link">
<div class="profile-image"><img src="images/faces/face5.jpg" alt="image"/></div>
<div class="profile-name">
<p class="name">Welcome Jane</p>
<p class="designation">Super Admin</p>
</div>
</div>
</li>
<li class="nav-item"><a class="nav-link" href="index.php"><i class="fa fa-home menu-icon"></i><span class="menu-title"><b>Admin Dashboard</b></span></a></li>
<li class="nav-item">
<a class="nav-link" data-toggle="collapse" href="#page-layouts" aria-expanded="false"><i class="fab fa-trello menu-icon"></i><span class="menu-title">Member</span><i class="menu-arrow"></i></a>
<div class="collapse" id="page-layouts"><ul class="nav flex-column sub-menu"><li class="nav-item"> <a class="nav-link" href="topup.php">Top up</a></li></ul></div>
</li>
<li class="nav-item">
<a class="nav-link" data-toggle="collapse" href="#sidebar-layouts" aria-expanded="false"><i class="fas fa-columns menu-icon"></i><span class="menu-title">Transaction</span><i class="menu-arrow"></i></a>
<div class="collapse" id="sidebar-layouts">
<ul class="nav flex-column sub-menu">
<li class="nav-item"><a class="nav-link" href="transaction.php">View Transaction</a></li>
<li class="nav-item"><a class="nav-link" href="withdrawal.php">Withdrawal</a></li>
<li class="nav-item"><a class="nav-link" href="admin_deposits.php">View Deposits</a></li>
<li class="nav-item"><a class="nav-link" href="trash.php">Trash</a></li>
</ul>
</div>
</li>
<li class="nav-item"><a class="nav-link" href="admin_trades.php"><i class="fas fa-chart-line menu-icon"></i><span class="menu-title">Set Trades</span></a></li>
<li class="nav-item"><a class="nav-link" href="admin_realestate.php"><i class="fas fa-building menu-icon"></i><span class="menu-title">Real Estate</span></a></li>
<li class="nav-item active"><a class="nav-link" href="copytrading.php"><i class="fas fa-copy menu-icon"></i><span class="menu-title">Copytrading</span></a></li>
<li class="nav-item"><a class="nav-link" href="admin_wallets.php"><i class="fas fa-wallet menu-icon"></i><span class="menu-title">Wallet</span></a></li>
<li class="nav-item"><a class="nav-link" href="acc.php"><i class="fa fa-user menu-icon"></i><span class="menu-title">Account</span></a></li>
<li class="nav-item"><a class="nav-link" href="notification.php"><i class="fa fa-envelope menu-icon"></i><span class="menu-title">Send Notification</span></a></li>
<li class="nav-item"><a class="nav-link" href="qmail.php"><i class="fa fa-envelope menu-icon"></i><span class="menu-title">Send Email</span></a></li>
<li class="nav-item">
<a class="nav-link" data-toggle="collapse" href="#ui-basic" aria-expanded="false"><i class="far fa-compass menu-icon"></i><span class="menu-title">Settings</span><i class="menu-arrow"></i></a>
<div class="collapse" id="ui-basic">
<ul class="nav flex-column sub-menu">
<li class="nav-item"><a class="nav-link" href="cp.php">Change password</a></li>
<li class="nav-item"><a class="nav-link" href="eth.php">Ethereum Address</a></li>
<li class="nav-item"><a class="nav-link" href="usdt.php">Usdt-Trc20 Address</a></li>
<li class="nav-item"><a class="nav-link" href="btc.php">Bitcoin Address</a></li>
</ul>
</div>
</li>
</ul>
</nav>
<div class="main-panel">
<div class="content-wrapper">
<?php if(!empty($alertMessage)): ?>
<div class="alert alert-fill-<?php echo $alertType == 'success' ? 'success' : 'danger'; ?>" role="alert">
<i class="fa fa-<?php echo $alertType == 'success' ? 'check-circle' : 'exclamation-triangle'; ?>"></i>
<?php echo $alertMessage; ?>
</div>
<?php endif; ?>
<div class="row">
<div class="col-12 grid-margin stretch-card">
<div class="card">
<div class="card-body">
<h4 class="card-title text-primary"><i class="fas fa-bolt"></i> Live User Copy Trades</h4>
<p class="card-description">Inject profit or loss directly into a user's active copy trade portfolio in real-time.</p>
<div class="table-responsive">
<table class="table table-striped">
<thead>
<tr>
<th>User Email</th>
<th>Expert Copied</th>
<th>Invested</th>
<th>Current Profit</th>
<th>Inject Profit/Loss</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<?php if(empty($activeCopies)): ?>
<tr><td colspan="6" class="text-center text-muted">No active copy trades found.</td></tr>
<?php else: ?>
<?php foreach($activeCopies as $copy): ?>
<tr>
<td><strong><?php echo htmlspecialchars($copy['Email']); ?></strong></td>
<td><?php echo htmlspecialchars($copy['expert_name']); ?></td>
<td>$<?php echo number_format($copy['amount_invested'], 2); ?></td>
<td class="<?php echo $copy['current_profit'] >= 0 ? 'text-success-custom' : 'text-danger-custom'; ?>">
$<?php echo number_format($copy['current_profit'], 2); ?>
</td>
<td>
<form method="POST" class="inject-flex">
<input type="hidden" name="trade_id" value="<?php echo $copy['id']; ?>">
<input type="number" step="any" name="inject_amount" class="form-control form-control-sm inject-input" placeholder="e.g. 150" required>
<button type="submit" name="inject_profit" class="btn btn-sm btn-info">Apply</button>
</form>
</td>
<td>
<form method="POST" onsubmit="return confirm('Are you sure you want to close this trade? The funds and profit will be added to the user\'s balance immediately.');">
<input type="hidden" name="trade_id" value="<?php echo $copy['id']; ?>">
<button type="submit" name="close_trade" class="btn btn-sm btn-danger">Force Close</button>
</form>
</td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-4 grid-margin stretch-card">
<div class="card">
<div class="card-body">
<h4 class="card-title">Add Master Trader</h4>
<form method="POST" class="forms-sample" enctype="multipart/form-data">
<div class="form-group">
<div class="upload-zone" id="avatar-upload-zone">
<span id="upload-text" class="text-muted">Click to upload Avatar</span>
<img id="avatar-preview" src="">
</div>
<input type="file" name="avatar" id="avatar-input" style="display:none;" accept="image/png, image/jpeg" required>
</div>
<div class="form-group">
<label>Trader Name</label>
<input type="text" class="form-control" name="expert_name" placeholder="e.g. FX Alex G" required>
</div>
<div class="form-group">
<label>Win Rate (%)</label>
<input type="number" step="0.01" class="form-control" name="win_rate" placeholder="e.g. 96.5" required>
</div>
<div class="form-group">
<label>Profit Share Fee (%)</label>
<input type="number" class="form-control" name="profit_share" placeholder="e.g. 30" required>
</div>
<div class="row">
<div class="col-md-6 form-group">
<label>Total Wins</label>
<input type="number" class="form-control" name="wins" required>
</div>
<div class="col-md-6 form-group">
<label>Total Losses</label>
<input type="number" class="form-control" name="losses" required>
</div>
</div>
<div class="row">
<div class="col-md-6 form-group">
<label>Total Trades</label>
<input type="number" class="form-control" name="trades" required>
</div>
<div class="col-md-6 form-group">
<label>Followers</label>
<input type="number" class="form-control" name="followers" required>
</div>
</div>
<div class="form-group">
<label>Minimum Startup ($)</label>
<input type="number" step="any" class="form-control" name="min_startup" placeholder="e.g. 1000" required>
</div>
<button type="submit" name="add_expert" class="btn btn-primary btn-block mr-2">Publish Expert</button>
</form>
</div>
</div>
</div>
<div class="col-md-8 grid-margin stretch-card">
<div class="card">
<div class="card-body">
<h4 class="card-title">Available Master Traders</h4>
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th>Trader</th>
<th>Win Rate</th>
<th>Min Startup</th>
<th>Followers</th>
<th>Action</th>
</tr>
</thead>
<tbody>
<?php if(empty($experts)): ?>
<tr><td colspan="5" class="text-center text-muted">No experts added yet.</td></tr>
<?php else: ?>
<?php foreach($experts as $exp): ?>
<tr>
<td style="display:flex; align-items:center; gap:10px;">
<img src="../<?php echo htmlspecialchars($exp['avatar_url']); ?>" style="width:40px; height:40px; border-radius:50%; object-fit:cover;">
<strong><?php echo htmlspecialchars($exp['name']); ?></strong>
</td>
<td class="text-success-custom"><?php echo $exp['win_rate']; ?>%</td>
<td>$<?php echo number_format($exp['min_startup'], 2); ?></td>
<td><?php echo number_format($exp['followers']); ?></td>
<td>
<a href="copytrading.php?delete_expert=<?php echo $exp['id']; ?>" class="btn btn-sm btn-outline-danger" onclick="return confirm('Delete this expert?');">Delete</a>
</td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<footer class="footer">
<div class="d-sm-flex justify-content-center justify-content-sm-between">
<span class="text-muted text-center text-sm-left d-block d-sm-inline-block">Copyright © <?php echo date('Y'); ?>. All rights reserved.</span>
</div>
</footer>
</div>
</div>
</div>
<script src="vendors/js/vendor.bundle.base.js"></script>
<script src="vendors/js/vendor.bundle.addons.js"></script>
<script src="js/off-canvas.js"></script>
<script src="js/hoverable-collapse.js"></script>
<script src="js/misc.js"></script>
<script>
// Image Upload Preview
const uploadZone = document.getElementById('avatar-upload-zone');
const fileInput = document.getElementById('avatar-input');
const preview = document.getElementById('avatar-preview');
const uploadText = document.getElementById('upload-text');
if(uploadZone && fileInput) {
uploadZone.addEventListener('click', () => fileInput.click());
fileInput.addEventListener('change', function(e) {
if (e.target.files && e.target.files[0]) {
const reader = new FileReader();
reader.onload = function(event) {
preview.src = event.target.result;
preview.style.display = 'block';
uploadText.style.display = 'none';
uploadZone.style.padding = '5px';
}
reader.readAsDataURL(e.target.files[0]);
}
});
}
</script>
</body>
</html>
b IDATxytVսϓ22 A@IR:hCiZ[v*E:WũZA ^dQeQ @ !jZ'>gsV仿$|?g)&x-E