PHP WebShell
Текущая директория: /var/www/bitcardoApp/backyard/user/transactions
Просмотр файла: view.php
<?php
// backyard/user/transactions/view.php
include '../common/header.php';
if (!isset($conn)) {
include_once '../../config/db_config.php';
}
require_once '../../models/dashboard/index.php';
function h($s) { return htmlspecialchars((string)$s, ENT_QUOTES, 'UTF-8'); }
function status_badge($status) {
$s = strtoupper(trim((string)$status));
if (in_array($s, ['SUCCESS','COMPLETED','APPROVED'], true)) return 'bg-success text-white';
if (in_array($s, ['PENDING','PROCESSING','INITIATED','QUEUED'], true)) return 'bg-warning text-dark';
if (in_array($s, ['FAILED','DECLINED','REJECTED','CANCELLED','CANCELED','ERROR'], true)) return 'bg-danger text-white';
return 'bg-secondary text-white';
}
function is_pending_like($status): bool {
$s = strtolower(trim((string)$status));
return in_array($s, ['pending','processing','queued'], true);
}
// CSRF token
if (empty($_SESSION['csrf_token'])) {
$_SESSION['csrf_token'] = bin2hex(random_bytes(32));
}
$trans_id = isset($_GET['trans_id']) ? (int)$_GET['trans_id'] : 0;
$tx = dash_get_transaction_by_id($conn, $trans_id);
?>
<div class="nk-content nk-content-fluid mt-5">
<div class="container-xl wide-lg">
<div class="nk-content-body">
<div class="nk-block-head">
<div class="nk-block-between-md g-4">
<div class="nk-block-head-content">
<h3 class="nk-block-title">Transaction Details</h3>
<div class="nk-block-des">
<p class="text-muted mb-0">Viewing transaction record.</p>
</div>
</div>
<div class="nk-block-head-content">
<a href="../dashboard/index.php" class="btn btn-outline-secondary btn-sm">Back to Dashboard</a>
</div>
</div>
</div>
<?php if (!empty($_SESSION['flash_success'])): ?>
<div class="alert alert-success border">
<?= h($_SESSION['flash_success']); ?>
</div>
<?php unset($_SESSION['flash_success']); ?>
<?php endif; ?>
<?php if (!empty($_SESSION['flash_error'])): ?>
<div class="alert alert-danger border">
<?= h($_SESSION['flash_error']); ?>
</div>
<?php unset($_SESSION['flash_error']); ?>
<?php endif; ?>
<?php if (!$tx): ?>
<div class="alert alert-danger border">
Transaction not found.
</div>
<?php else: ?>
<?php
$badgeClass = status_badge($tx['status'] ?? '');
$name = trim(($tx['first_name'] ?? '').' '.($tx['last_name'] ?? ''));
if ($name === '') $name = '—';
$providerMetaRaw = $tx['provider_meta'] ?? '';
$providerMetaPretty = '';
if (is_string($providerMetaRaw) && trim($providerMetaRaw) !== '') {
$decoded = json_decode($providerMetaRaw, true);
if (json_last_error() === JSON_ERROR_NONE) {
$providerMetaPretty = json_encode($decoded, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
} else {
$providerMetaPretty = $providerMetaRaw;
}
}
$canApprove = is_pending_like($tx['status'] ?? '') && ((int)($tx['applied'] ?? 0) === 0);
?>
<div class="card card-bordered">
<div class="card-inner">
<div class="d-flex justify-content-between align-items-start flex-wrap gap-2">
<div>
<h5 class="mb-1">#<?= h($tx['trans_id']); ?></h5>
<div class="small text-muted">
Created: <?= h($tx['created_at'] ?? '—'); ?>
</div>
</div>
<div class="d-flex gap-2 align-items-center">
<span class="badge <?= $badgeClass; ?> px-3 py-2">
<?= h($tx['status'] ?? '—'); ?>
</span>
<?php if ($canApprove): ?>
<form method="post" action="approve.php" class="m-0">
<input type="hidden" name="trans_id" value="<?= h($tx['trans_id']); ?>">
<input type="hidden" name="csrf_token" value="<?= h($_SESSION['csrf_token']); ?>">
<button type="submit" class="btn btn-sm btn-success">
Approve & Credit Wallet
</button>
</form>
<?php endif; ?>
</div>
</div>
<hr class="my-3">
<div class="row g-3">
<div class="col-md-6">
<div class="border rounded-4 p-3 h-100">
<h6 class="mb-2">User</h6>
<div class="small text-muted">Name</div>
<div class="mb-2"><?= h($name); ?></div>
<div class="small text-muted">Email</div>
<div class="mb-2"><?= h($tx['email'] ?? '—'); ?></div>
<div class="small text-muted">Phone</div>
<div><?= h($tx['phone'] ?? '—'); ?></div>
</div>
</div>
<div class="col-md-6">
<div class="border rounded-4 p-3 h-100">
<h6 class="mb-2">Transaction</h6>
<div class="small text-muted">Coin</div>
<div class="mb-2"><?= h($tx['coin'] ?? '—'); ?></div>
<div class="small text-muted">Amount</div>
<div class="mb-2"><?= h($tx['amount'] ?? '0'); ?></div>
<div class="small text-muted">Type</div>
<div><?= h($tx['type'] ?? '—'); ?></div>
</div>
</div>
<div class="col-md-12">
<div class="border rounded-4 p-3">
<h6 class="mb-2">Addresses</h6>
<div class="row g-3">
<div class="col-md-6">
<div class="small text-muted">Sender Address</div>
<div class="text-break"><?= h($tx['sender_address'] ?? '—'); ?></div>
</div>
<div class="col-md-6">
<div class="small text-muted">Receiver Address</div>
<div class="text-break"><?= h($tx['receiver_address'] ?? '—'); ?></div>
</div>
</div>
</div>
</div>
<div class="col-md-12">
<div class="border rounded-4 p-3">
<h6 class="mb-2">Provider / References</h6>
<div class="row g-3">
<div class="col-md-4">
<div class="small text-muted">Reference</div>
<div class="text-break"><?= h($tx['reference'] ?? '—'); ?></div>
</div>
<div class="col-md-4">
<div class="small text-muted">TXID</div>
<div class="text-break"><?= h($tx['txid'] ?? '—'); ?></div>
</div>
<div class="col-md-4">
<div class="small text-muted">Provider</div>
<div><?= h($tx['provider'] ?? '—'); ?></div>
</div>
<div class="col-md-4">
<div class="small text-muted">Confirmations</div>
<div><?= h($tx['confirmation'] ?? '0'); ?></div>
</div>
<div class="col-md-4">
<div class="small text-muted">Wallet ID</div>
<div class="text-break"><?= h($tx['wallet_id'] ?? '—'); ?></div>
</div>
<div class="col-md-4">
<div class="small text-muted">Transfer ID</div>
<div class="text-break"><?= h($tx['transfer_id'] ?? '—'); ?></div>
</div>
</div>
<?php if ($providerMetaPretty !== ''): ?>
<hr class="my-3">
<div class="small text-muted mb-2">Provider Meta</div>
<pre class="p-3 bg-light rounded-4 mb-0" style="white-space: pre-wrap; word-break: break-word;"><?= h($providerMetaPretty); ?></pre>
<?php endif; ?>
</div>
</div>
<?php if (!empty($tx['note'])): ?>
<div class="col-md-12">
<div class="border rounded-4 p-3">
<h6 class="mb-2">Note</h6>
<div class="text-break"><?= h($tx['note']); ?></div>
</div>
</div>
<?php endif; ?>
</div>
</div>
</div>
<?php endif; ?>
</div>
</div>
</div>
<?php include '../common/footer.php'; ?>
Выполнить команду
Для локальной разработки. Не используйте в интернете!