0 && $lenB > 0) { if ($lenA === 3 && $lenB === 3) return strnatcasecmp($a, $b); if ($lenA >= 4 && $lenB >= 4) return strnatcasecmp($b, $a); if ($lenA === 3 && $lenB >= 4) return -1; if ($lenA >= 4 && $lenB === 3) return 1; return strnatcasecmp($a, $b); } if ($lenA > 0 && $lenB === 0) return -1; if ($lenA === 0 && $lenB > 0) return 1; return strnatcasecmp($a, $b); } /* ── Carpetas con orden descendente de archivos ── */ $descendingFolders = ['El Pan del Alma', 'Boletín Salesiano']; /* * Detectar carpeta actual tanto por ?dir= como por URL directa, * igual que se hace para $trimOffset más abajo. */ $currentFolderName = basename($dir); if ($currentFolderName === '.' || $currentFolderName === '') { /* Acceso por URL directa: el script está físicamente dentro de la carpeta */ $physFolderDesc = basename(__DIR__); if (!in_array($physFolderDesc, $descendingFolders)) { $physFolderDesc = basename(getcwd()); } if (in_array($physFolderDesc, $descendingFolders)) { $currentFolderName = $physFolderDesc; } } /* Limpiar prefijo './' que a veces trae $dir */ if ($currentFolderName === '.') { $cleanDirDesc = ltrim(rtrim($dir, '/'), './'); if ($cleanDirDesc !== '') { $currentFolderName = basename($cleanDirDesc); } } $isDescending = in_array($currentFolderName, $descendingFolders); usort($folders, 'customFolderSort'); if ($isDescending) { $folders = array_reverse($folders); rsort($documents, SORT_NATURAL | SORT_FLAG_CASE); } else { sort($documents, SORT_NATURAL | SORT_FLAG_CASE); } /* ── Icono por extensión ── */ function getFileIcon($ext) { $map = [ 'pdf' => '📄', 'doc' => '📝', 'docx' => '📝', 'txt' => '📋', 'xls' => '📊', 'xlsx' => '📊', 'csv' => '📊', 'ppt' => '📽️', 'pptx' => '📽️', 'jpg' => '🖼️', 'jpeg' => '🖼️', 'png' => '🖼️', 'gif' => '🖼️', 'zip' => '🗜️', 'rar' => '🗜️', 'mp3' => '🎵', 'wav' => '🎵', 'mp4' => '🎥', 'avi' => '🎥', 'mov' => '🎥', 'php' => '💻', 'html' => '💻', 'css' => '🎨', 'js' => '🖥️' ]; return $map[$ext] ?? '📎'; } /* ── Tamaño legible ── */ function humanSize($bytes) { if ($bytes >= 1048576) return number_format($bytes / 1048576, 2) . ' MB'; if ($bytes >= 1024) return number_format($bytes / 1024, 1) . ' KB'; return $bytes . ' B'; } $totalItems = count($folders) + count($documents); ?>
CEP. Salesiano Rosenthal de la Puente
«Hagan lo que Él les diga». Creyentes, libres para servir
| Nombre | Tipo | Tamaño | Volver a: $parentName | SUBIR | — | "; } /* ── Carpetas ── */ foreach ($folders as $folder) { /* Todo en mayúsculas */ $label = htmlspecialchars(mb_strtoupper($folder, 'UTF-8')); echo "
|---|---|---|
| $label | CARPETA | — |
| $name | $type | $size |
| Total: objeto · carpeta, archivo | ||