PHP WebShell
Текущая директория: /var/www/bitcardoApp/backyard/models/transactions
Просмотр файла: index.php
<?php
// backyard/models/transactions/index.php
// Ensure DB is available when this model is included directly.
if (!isset($conn)) {
include_once '../../config/db_config.php';
}
/**
* Build WHERE clause from filters.
*/
function tx_build_where(mysqli $conn, array $f): string {
$w = ["1=1"];
if (!empty($f['coin'])) {
$w[] = "t.coin = '" . mysqli_real_escape_string($conn, $f['coin']) . "'";
}
if (!empty($f['type'])) {
$w[] = "t.type = '" . mysqli_real_escape_string($conn, $f['type']) . "'";
}
if (!empty($f['status'])) {
$w[] = "t.status = '" . mysqli_real_escape_string($conn, $f['status']) . "'";
}
if ($f['applied'] !== '' && $f['applied'] !== null) {
$w[] = "t.applied = " . (int)$f['applied'];
}
if (!empty($f['wallet_id'])) {
$w[] = "t.wallet_id = '" . mysqli_real_escape_string($conn, $f['wallet_id']) . "'";
}
if (!empty($f['txid'])) {
$w[] = "t.txid = '" . mysqli_real_escape_string($conn, $f['txid']) . "'";
}
if (!empty($f['reference'])) {
$w[] = "t.reference = '" . mysqli_real_escape_string($conn, $f['reference']) . "'";
}
if (!empty($f['from'])) {
$w[] = "DATE(t.created_at) >= '" . mysqli_real_escape_string($conn, $f['from']) . "'";
}
if (!empty($f['to'])) {
$w[] = "DATE(t.created_at) <= '" . mysqli_real_escape_string($conn, $f['to']) . "'";
}
if (!empty($f['user_q'])) {
$q = mysqli_real_escape_string($conn, $f['user_q']);
$w[] = "(u.first_name LIKE '%{$q}%' OR u.last_name LIKE '%{$q}%' OR u.email LIKE '%{$q}%' OR u.phone LIKE '%{$q}%')";
}
return 'WHERE ' . implode(' AND ', $w);
}
/**
* Search transactions with pagination.
* Returns: ['page','pages','per','total','rows'=>[]]
*/
function tx_search(mysqli $conn, array $filters): array {
$page = max(1, (int)($filters['page'] ?? 1));
$per = min(200, max(10, (int)($filters['per_page'] ?? 25)));
$off = ($page - 1) * $per;
$where = tx_build_where($conn, $filters);
$sqlCount = "
SELECT COUNT(*) AS c
FROM transactions t
LEFT JOIN users u ON u.user_id = t.user_id
$where
";
$total = 0;
if ($rc = mysqli_query($conn, $sqlCount)) {
$row = mysqli_fetch_assoc($rc);
$total = (int)($row['c'] ?? 0);
mysqli_free_result($rc);
}
$sql = "
SELECT
t.trans_id, t.coin, t.user_id, t.wallet_id, t.transfer_id,
t.sender_address, t.receiver_address, t.amount, t.type, t.txid,
t.reference, t.provider, t.confirmation, t.status, t.applied,
t.swap_id, t.note, t.updated_at, t.created_at,
u.first_name, u.last_name, u.email, u.phone
FROM transactions t
LEFT JOIN users u ON u.user_id = t.user_id
$where
ORDER BY t.created_at DESC
LIMIT $per OFFSET $off
";
$rows = [];
if ($rs = mysqli_query($conn, $sql)) {
while ($r = mysqli_fetch_assoc($rs)) {
$rows[] = $r;
}
mysqli_free_result($rs);
}
return [
'page' => $page,
'pages' => $per ? (int)ceil($total / $per) : 1,
'per' => $per,
'total' => $total,
'rows' => $rows,
];
}
/** Distinct coins present in transactions. */
function tx_list_coins(mysqli $conn): array {
$ret = [];
$sql = "SELECT DISTINCT coin FROM transactions ORDER BY coin";
if ($rs = mysqli_query($conn, $sql)) {
while ($r = mysqli_fetch_assoc($rs)) {
if ($r['coin'] !== '') $ret[] = $r['coin'];
}
mysqli_free_result($rs);
}
return $ret;
}
/** Distinct types present in transactions. */
function tx_list_types(mysqli $conn): array {
$ret = [];
$sql = "SELECT DISTINCT type FROM transactions ORDER BY type";
if ($rs = mysqli_query($conn, $sql)) {
while ($r = mysqli_fetch_assoc($rs)) {
if ($r['type'] !== '') $ret[] = $r['type'];
}
mysqli_free_result($rs);
}
return $ret;
}
/** Distinct statuses present in transactions. */
function tx_list_statuses(mysqli $conn): array {
$ret = [];
$sql = "SELECT DISTINCT status FROM transactions ORDER BY status";
if ($rs = mysqli_query($conn, $sql)) {
while ($r = mysqli_fetch_assoc($rs)) {
if ($r['status'] !== '') $ret[] = $r['status'];
}
mysqli_free_result($rs);
}
return $ret;
}
Выполнить команду
Для локальной разработки. Не используйте в интернете!