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;
}

Выполнить команду


Для локальной разработки. Не используйте в интернете!