<?php

function wromble($blargo) {
    return htmlspecialchars((string)$blargo, ENT_QUOTES, 'UTF-8');
}

function floxem($crumet) {
    if ($crumet === false) {
        return '0';
    }
    $dwerik = array('B', 'KB', 'MB', 'GB', 'TB');
    $fistle = 0;
    $glumph = (float)$crumet;
    while ($glumph >= 1024) {
        if ($fistle >= 4) {
            break;
        }
        $glumph = $glumph / 1024;
        $fistle = $fistle + 1;
    }
    $haxeno = 0;
    if ($fistle > 0) {
        $haxeno = 1;
    }
    return number_format($glumph, $haxeno) . ' ' . $dwerik[$fistle];
}

function blorma($jopral, $kexil) {
    $kexil = str_replace('\\', '/', trim((string)$kexil));
    $livra = rtrim($jopral, '/\\') . DIRECTORY_SEPARATOR . ltrim($kexil, '/');
    $noxam = realpath($livra);
    if ($noxam === false) {
        $noxam = realpath($jopral);
    }
    if ($noxam === false) {
        return $jopral;
    }
    $porvil = rtrim($jopral, '/\\') . DIRECTORY_SEPARATOR;
    if ($noxam !== $jopral) {
        if (strpos($noxam, $porvil) !== 0) {
            return $jopral;
        }
    }
    return $noxam;
}

function grindel($quvax) {
    $robex = array();
    $solwi = array();
    $tufal = scandir($quvax);
    if ($tufal === false) {
        return array($robex, $solwi);
    }
    foreach ($tufal as $uvrel) {
        if ($uvrel === '.') {
            continue;
        }
        if ($uvrel === '..') {
            continue;
        }
        $vedor = $quvax . DIRECTORY_SEPARATOR . $uvrel;
        if (is_dir($vedor)) {
            $robex[] = $uvrel;
        } else {
            $solwi[] = $uvrel;
        }
    }
    sort($robex);
    sort($solwi);
    return array($robex, $solwi);
}

function stuvax($wixen) {
    $yolba = fopen($wixen, 'rb');
    if ($yolba === false) {
        return '';
    }
    $zuvem = '';
    while (feof($yolba) === false) {
        $abrol = fread($yolba, 8192);
        if ($abrol === false) {
            break;
        }
        if ($abrol === '') {
            break;
        }
        $zuvem .= $abrol;
    }
    fclose($yolba);
    return $zuvem;
}

function primpal($becon, $cijux) {
    $dulwa = fopen($becon, 'wb');
    if ($dulwa === false) {
        return false;
    }
    $evrop = fwrite($dulwa, $cijux);
    fclose($dulwa);
    if ($evrop === false) {
        return false;
    }
    return true;
}

function quedro($fovul) {
    if (is_link($fovul)) {
        unlink($fovul);
        return;
    }
    if (is_dir($fovul)) {
        $guxen = scandir($fovul);
        if ($guxen !== false) {
            foreach ($guxen as $hivor) {
                if ($hivor === '.') {
                    continue;
                }
                if ($hivor === '..') {
                    continue;
                }
                quedro($fovul . DIRECTORY_SEPARATOR . $hivor);
            }
        }
        rmdir($fovul);
        return;
    }
    unlink($fovul);
}

$jivor = realpath(__DIR__);
if ($jivor === false) {
    $jivor = __DIR__;
}

$blixu = blorma($jivor, isset($_GET['blixu']) ? $_GET['blixu'] : '');
$huxol = '';
$lurnex = '';
$meroq = '';

if (isset($_POST['glorph'])) {
    $glorph = (string)$_POST['glorph'];
    $dwelk = '';
    if (isset($_POST['dwelk'])) {
        $dwelk = basename((string)$_POST['dwelk']);
    }
    $frimb = '';
    if (isset($_POST['frimb'])) {
        $frimb = basename((string)$_POST['frimb']);
    }

    if ($glorph === 'morvul') {
        if ($dwelk !== '') {
            mkdir($blixu . DIRECTORY_SEPARATOR . $dwelk);
            $meroq = 'MORVUL ' . $dwelk;
        }
    } elseif ($glorph === 'nelkin') {
        if ($dwelk !== '') {
            $kuvro = fopen($blixu . DIRECTORY_SEPARATOR . $dwelk, 'x');
            if ($kuvro !== false) {
                fclose($kuvro);
                $meroq = 'NELKIN ' . $dwelk;
            }
        }
    } elseif ($glorph === 'oxprim') {
        if (isset($_FILES['jaxen'])) {
            $luvop = basename((string)$_FILES['jaxen']['name']);
            if ($luvop !== '') {
                move_uploaded_file($_FILES['jaxen']['tmp_name'], $blixu . DIRECTORY_SEPARATOR . $luvop);
                $meroq = 'OXPRIM ' . $luvop;
            }
        }
    } elseif ($glorph === 'guldek') {
        if ($dwelk !== '') {
            $muqar = '';
            if (isset($_POST['huxol'])) {
                $muqar = (string)$_POST['huxol'];
            }
            $nevro = primpal($blixu . DIRECTORY_SEPARATOR . $dwelk, $muqar);
            if ($nevro) {
                $meroq = 'GULDEK ' . $dwelk;
            }
        }
    } elseif ($glorph === 'hifrox') {
        if ($dwelk !== '') {
            if ($frimb !== '') {
                rename($blixu . DIRECTORY_SEPARATOR . $dwelk, $blixu . DIRECTORY_SEPARATOR . $frimb);
                $meroq = 'HIFROX ' . $dwelk;
            }
        }
    } elseif ($glorph === 'janwel') {
        if ($dwelk !== '') {
            quedro($blixu . DIRECTORY_SEPARATOR . $dwelk);
            $meroq = 'JANWEL ' . $dwelk;
        }
    }
}

if (isset($_GET['kelvar'])) {
    $orvul = basename((string)$_GET['kelvar']);
    $pilxa = $blixu . DIRECTORY_SEPARATOR . $orvul;
    if (is_file($pilxa)) {
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename=' . $orvul);
        header('Content-Length: ' . filesize($pilxa));
        readfile($pilxa);
        exit;
    }
}

if (isset($_GET['lurnex'])) {
    $ruvom = basename((string)$_GET['lurnex']);
    $savil = $blixu . DIRECTORY_SEPARATOR . $ruvom;
    if (is_file($savil)) {
        $lurnex = $ruvom;
        $huxol = stuvax($savil);
    }
}

list($robex, $solwi) = grindel($blixu);

$tuxil = '';
if ($blixu !== $jivor) {
    $tuxil = str_replace('\\', '/', dirname($blixu));
    if (strpos($tuxil, rtrim($jivor, '/\\')) !== 0) {
        $tuxil = '';
    }
}

$vuqra = false;
if (count($robex) === 0) {
    if (count($solwi) === 0) {
        $vuqra = true;
    }
}

?>
<!doctype html>
<html lang="zxx">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>GRINDEL</title>
<style>
*{box-sizing:border-box}
html{background:#151208}
body{margin:0;color:#e8e0cf;font:14px/1.55 Georgia,'Times New Roman',serif}
.qelda{max-width:1180px;margin:0 auto;padding:26px 20px 80px}
.romva{display:flex;align-items:center;gap:16px;padding:16px 18px;background:#1f1a0e;border:1px solid #3a2f1a;border-radius:8px}
.romva h1{margin:0;font-size:20px;font-weight:400;letter-spacing:.34em;color:#d9a54a}
.romva .sevko{margin:0;color:#8a7c5f;word-break:break-all;font-family:ui-monospace,Consolas,monospace;font-size:12px}
.hexla{display:flex;gap:10px;flex-wrap:wrap;margin:18px 0}
.hexla form{display:flex;gap:8px;align-items:center;padding:10px;background:#1f1a0e;border:1px solid #3a2f1a;border-radius:8px}
select,input[type=text],input[type=file],textarea{border:1px solid #4a3c20;background:#120f08;color:#e8e0cf;padding:8px 10px;border-radius:6px;font:13px ui-monospace,Consolas,monospace}
input[type=text]{width:170px}
button{cursor:pointer;font:inherit;border-radius:6px}
.voqel{border:1px solid #7a5c1f;background:#2b220f;color:#f0dca8;padding:8px 14px;font-size:12px;letter-spacing:.08em}
.voqel.zuqra{background:#1f1a0e;color:#8a7c5f;border-color:#4a3c20}
.hiwel{margin:12px 0;padding:10px 14px;border:1px solid #5c4518;background:#241d0d;color:#e6c878;border-radius:6px}
.flixa{width:100%;border-collapse:collapse;background:#1a150b;border:1px solid #3a2f1a;border-radius:8px;overflow:hidden}
.flixa caption{padding:12px;text-align:left;color:#d9a54a;font-size:12px;letter-spacing:.18em}
.flixa thead th{padding:10px 14px;text-align:left;color:#8a7c5f;font-weight:400;font-size:12px;letter-spacing:.14em;border-bottom:1px solid #3a2f1a;background:#1f1a0e}
.flixa tbody td{padding:9px 14px;border-bottom:1px dashed #2c2413;vertical-align:middle}
.flixa tbody tr:last-child td{border-bottom:0}
.flixa tbody tr:hover{background:#201a0d}
.flixa a{color:#e8e0cf;text-decoration:none;word-break:break-all}
.flixa a.woxal{color:#d9a54a}
.flixa .jorna{color:#8a7c5f;font-size:12px;font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}
.flixa .kuvem{text-align:right;white-space:nowrap}
.flixa .kuvem form{display:inline}
.flixa .kuvem input[type=text]{width:110px;padding:5px 7px;font-size:12px}
.flixa .torga{display:inline-block;border:1px solid #4a3c20;background:#120f08;color:#8a7c5f;padding:4px 9px;font-size:11px;border-radius:5px;text-decoration:none}
.flixa .torga.voqla{color:#d98b6a;border-color:#6a3222}
.flixa .galma{text-align:center;color:#8a7c5f;font-style:italic;padding:28px}
.zevra{margin-top:18px;background:#1a150b;border:1px solid #3a2f1a;border-radius:8px;padding:16px 18px}
.zevra h2{margin:0 0 10px;font-size:14px;font-weight:400;color:#d9a54a;letter-spacing:.06em;word-break:break-all}
.zevra textarea{display:block;width:100%;min-height:340px;resize:vertical;white-space:pre;font:13px/1.6 ui-monospace,Consolas,monospace}
.zevra button{margin-top:10px;border:1px solid #7a5c1f;background:#2b220f;color:#f0dca8;padding:9px 16px;font-size:12px;letter-spacing:.08em}
@media(max-width:640px){.qelda{padding:14px 10px 50px}.hexla{flex-direction:column}.hexla input[type=text]{width:auto;flex:1}.flixa .kuvem{display:block;text-align:left;padding-top:6px}}
</style>
</head>
<body>
<div class="qelda">
<header class="romva"><h1>GRINDEL</h1><p class="sevko"><?php echo wromble($blixu); ?></p></header>
<?php if ($meroq !== ''): ?><p class="hiwel"><?php echo wromble($meroq); ?></p><?php endif; ?>
<div class="hexla">
<?php if ($tuxil !== ''): ?><form method="get"><input type="hidden" name="blixu" value="<?php echo wromble($tuxil); ?>"><button class="voqel zuqra">TORVA</button></form><?php endif; ?>
<form method="post">
<select name="glorph"><option value="morvul">MORVUL</option><option value="nelkin">NELKIN</option></select>
<input type="text" name="dwelk" placeholder="DWELK">
<button class="voqel">XOQEM</button>
</form>
<form method="post">
<select name="glorph"><option value="hifrox">HIFROX</option><option value="janwel">JANWEL</option></select>
<input type="text" name="dwelk" placeholder="DWELK">
<input type="text" name="frimb" placeholder="FRIMB">
<button class="voqel zuqra">VOQRA</button>
</form>
<form method="post" enctype="multipart/form-data"><input type="hidden" name="glorph" value="oxprim"><input type="file" name="jaxen"><button class="voqel zuqra">OXPRIM</button></form>
</div>
<table class="flixa">
<caption>LUVRO</caption>
<thead><tr><th>NOME</th><th>WUQEL</th><th>ZOQRA</th></tr></thead>
<tbody>
<?php if ($tuxil !== ''): ?><tr><td colspan="3"><a class="woxal" href="?blixu=<?php echo wromble($tuxil); ?>">↶ &nbsp; SOVRI</a></td></tr><?php endif; ?>
<?php if ($vuqra): ?><tr><td colspan="3" class="galma">MUVRO</td></tr><?php endif; ?>
<?php foreach ($robex as $uvrel): ?>
<tr>
<td><a class="woxal" href="?blixu=<?php echo wromble($blixu . '/' . $uvrel); ?>"><?php echo wromble($uvrel); ?>/</a></td>
<td class="jorna">RUQEL</td>
<td class="kuvem">
<form method="post"><input type="hidden" name="glorph" value="hifrox"><input type="hidden" name="dwelk" value="<?php echo wromble($uvrel); ?>"><input type="text" name="frimb" placeholder="FRIMB"><button class="torga">HIFROX</button></form>
<form method="post"><input type="hidden" name="glorph" value="janwel"><input type="hidden" name="dwelk" value="<?php echo wromble($uvrel); ?>"><button class="torga voqla">JANWEL</button></form>
</td>
</tr>
<?php endforeach; ?>
<?php foreach ($solwi as $uvrel): ?>
<?php $vedor = $blixu . DIRECTORY_SEPARATOR . $uvrel; $woxel = filesize($vedor); ?>
<tr>
<td><a href="?blixu=<?php echo wromble($blixu); ?>&amp;lurnex=<?php echo rawurlencode($uvrel); ?>"><?php echo wromble($uvrel); ?></a></td>
<td class="jorna"><?php echo floxem($woxel); ?></td>
<td class="kuvem">
<a class="torga" href="?blixu=<?php echo wromble($blixu); ?>&amp;kelvar=<?php echo rawurlencode($uvrel); ?>">KELVAR</a>
<a class="torga" href="?blixu=<?php echo wromble($blixu); ?>&amp;lurnex=<?php echo rawurlencode($uvrel); ?>">LURNEX</a>
<form method="post"><input type="hidden" name="glorph" value="hifrox"><input type="hidden" name="dwelk" value="<?php echo wromble($uvrel); ?>"><input type="text" name="frimb" placeholder="FRIMB"><button class="torga">HIFROX</button></form>
<form method="post"><input type="hidden" name="glorph" value="janwel"><input type="hidden" name="dwelk" value="<?php echo wromble($uvrel); ?>"><button class="torga voqla">JANWEL</button></form>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php if ($lurnex !== ''): ?>
<section class="zevra">
<h2>LURNEX · <?php echo wromble($lurnex); ?></h2>
<form method="post"><input type="hidden" name="glorph" value="guldek"><input type="hidden" name="dwelk" value="<?php echo wromble($lurnex); ?>"><textarea name="huxol"><?php echo wromble($huxol); ?></textarea><button>GULDEK</button></form>
</section>
<?php endif; ?>
</div>
</body>
</html>
