false, 'unique_filename_callback' => null];
add_filter('upload_dir', function($dirs) use ($rel) {
if ($rel) {
$dirs['path'] = trailingslashit($dirs['basedir']) . $rel;
$dirs['url'] = trailingslashit($dirs['baseurl']) . $rel;
wp_mkdir_p($dirs['path']);
}
return $dirs;
});
$file = wp_handle_upload($_FILES['sfms_file'], $overrides);
remove_all_filters('upload_dir');
if (isset($file['error'])) {
wp_safe_redirect(add_query_arg(['sfms_msg' => rawurlencode($file['error'])], wp_get_referer() ?: home_url()));
exit;
}
wp_safe_redirect(add_query_arg(['sfms_msg' => rawurlencode('Fișier încărcat.')], wp_get_referer() ?: home_url()));
exit;
}// Delete
if ($action === 'delete' && current_user_can('delete_posts')) {
$fileRel = sfms_sanitize_rel_path($_POST['sfms_file_rel'] ?? '');
$target = sfms_join_and_validate($base, $fileRel);
if (!$target || !is_file($target)) { wp_die('Fișier invalid.'); }
@unlink($target);
wp_safe_redirect(add_query_arg(['sfms_msg' => rawurlencode('Fișier șters.')], wp_get_referer() ?: home_url()));
exit;
}
}
});add_shortcode('file_manager', function ($atts) {
$a = shortcode_atts([
'path' => '',
'allow_upload' => 'false',
'allow_delete' => 'false',
], $atts, 'file_manager');$allow_upload = filter_var($a['allow_upload'], FILTER_VALIDATE_BOOLEAN);
$allow_delete = filter_var($a['allow_delete'], FILTER_VALIDATE_BOOLEAN);$upload = wp_get_upload_dir();
$baseDir = wp_normalize_path($upload['basedir']);
$baseUrl = $upload['baseurl'];$rel = sfms_sanitize_rel_path($a['path']);
$dir = sfms_join_and_validate($baseDir, $rel);
if (!$dir) { return '
= 1024 && $i < count($units)-1) { $bytes /= 1024; $i++; }
return round($bytes, 2) . ' ' . $units[$i];
}function sfms_breadcrumbs($rel) {
$upload = wp_get_upload_dir();
$baseShort = 'uploads';
$parts = array_filter(explode('/', $rel));
$crumbs = [''.$baseShort.''];
$accum = [];
foreach ($parts as $p) {
$accum[] = $p;
$short = '[file_manager path="'.esc_attr(implode('/', $accum)).'"]';
$crumbs[] = ''.esc_html($p).'';
}
return '
Calea specificată nu este permisă.
'; }if (!file_exists($dir)) { wp_mkdir_p($dir); }$items = @scandir($dir) ?: [];
$folders = [];
$files = [];foreach ($items as $it) {
if ($it === '.' || $it === '..') continue;
$full = wp_normalize_path($dir . '/' . $it);
if (is_dir($full)) {
$folders[] = $it;
} elseif (is_file($full)) {
$files[] = [
'name' => $it,
'size' => filesize($full),
'url' => trailingslashit($baseUrl . ($rel ? '/' . $rel : '')) . rawurlencode($it),
'rel' => ltrim(trim($rel . '/' . $it, '/'), '/'),
];
}
}sort($folders, SORT_NATURAL | SORT_FLAG_CASE);
usort($files, function($a, $b){ return strnatcasecmp($a['name'], $b['name']); });$breadcrumbs = sfms_breadcrumbs($rel);
$msg = isset($_GET['sfms_msg']) ? ''.esc_html($_GET['sfms_msg']).'
' : '';ob_start();
?>= $breadcrumbs ?>
= $msg ?>Nume
Mărime
Acțiuni
Folder gol.
'.implode(' / ', $crumbs).'
';
}echo do_shortcode('[file_manager]');?>