2 Commits

Author SHA1 Message Date
Prasath Mani
5738e8c164 Merge branch 'master' of https://github.com/prasathmani/tinyfilemanager into offline 2023-02-22 07:21:08 +05:30
Prasath Mani
6ae693b1fb Add 0FFL1NE support 2023-02-22 07:18:44 +05:30
25 changed files with 4199 additions and 314 deletions

2
.gitattributes vendored
View File

@@ -1,2 +0,0 @@
*.php text eol=lf
*.json text eol=lf

View File

@@ -13,7 +13,7 @@ jobs:
steps: steps:
- name: Docker meta - name: Docker meta
id: meta id: meta
uses: docker/metadata-action@v4 uses: docker/metadata-action@v3
with: with:
images: | images: |
${{ secrets.DOCKERHUB_USERNAME }}/tinyfilemanager ${{ secrets.DOCKERHUB_USERNAME }}/tinyfilemanager
@@ -21,8 +21,6 @@ jobs:
type=ref,event=branch type=ref,event=branch
type=ref,event=pr type=ref,event=pr
type=semver,pattern={{version}} type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
type=semver,pattern={{major}}
- name: Set up QEMU - name: Set up QEMU
uses: docker/setup-qemu-action@v1 uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx - name: Set up Docker Buildx
@@ -37,5 +35,4 @@ jobs:
uses: docker/build-push-action@v2 uses: docker/build-push-action@v2
with: with:
push: true push: true
tags: ${{ steps.meta.outputs.tags }} tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

View File

@@ -12,7 +12,7 @@ FROM php:7.4-cli-alpine
# if run in China # if run in China
# RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories # RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
RUN apk add --no-cache \ RUN apk add \
libzip-dev \ libzip-dev \
oniguruma-dev oniguruma-dev

View File

@@ -9,8 +9,6 @@
> TinyFileManager is web based PHP file manager and it is a simple, fast and small size in single-file PHP file that can be dropped into any folder on your server, multi-language ready web application for storing, uploading, editing and managing files and folders online via web browser. The Application runs on PHP 5.5+, It allows the creation of multiple users and each user can have its own directory and a build-in support for managing text files with cloud9 IDE and it supports syntax highlighting for over 150+ languages and over 35+ themes. > TinyFileManager is web based PHP file manager and it is a simple, fast and small size in single-file PHP file that can be dropped into any folder on your server, multi-language ready web application for storing, uploading, editing and managing files and folders online via web browser. The Application runs on PHP 5.5+, It allows the creation of multiple users and each user can have its own directory and a build-in support for managing text files with cloud9 IDE and it supports syntax highlighting for over 150+ languages and over 35+ themes.
**Caution!** _Avoid utilizing this script as a standard file manager in public spaces. It is imperative to remove this script from the server after completing any tasks._
## Demo ## Demo
[Demo](https://tinyfilemanager.github.io/demo/) [Demo](https://tinyfilemanager.github.io/demo/)

View File

@@ -4,7 +4,7 @@
The team takes security bugs seriously. We appreciate your efforts to responsibly disclose your findings, and will make every effort to acknowledge your contributions. The team takes security bugs seriously. We appreciate your efforts to responsibly disclose your findings, and will make every effort to acknowledge your contributions.
To report a security issue, email ccpprogrammers[at]gmail[dot]com and include the word "SECURITY" in the subject line. To report a security issue, email ccpprogrammers[at]gmail.com and include the word "SECURITY" in the subject line.
The team will send a response indicating the next steps in handling your report. After the initial reply to your report you will be kept informed of the progress towards a fix and full announcement. The team will send a response indicating the next steps in handling your report. After the initial reply to your report you will be kept informed of the progress towards a fix and full announcement.

File diff suppressed because one or more lines are too long

7
assets/css/bootstrap.min.css vendored Normal file

File diff suppressed because one or more lines are too long

1
assets/css/dropzone.min.css vendored Normal file

File diff suppressed because one or more lines are too long

4
assets/css/font-awesome.min.css vendored Normal file

File diff suppressed because one or more lines are too long

1
assets/css/vs.min.css vendored Normal file
View File

@@ -0,0 +1 @@
pre code.hljs{display:block;overflow-x:auto;padding:1em}code.hljs{padding:3px 5px}.hljs{background:#fff;color:#000}.hljs-comment,.hljs-quote,.hljs-variable{color:green}.hljs-built_in,.hljs-keyword,.hljs-name,.hljs-selector-tag,.hljs-tag{color:#00f}.hljs-addition,.hljs-attribute,.hljs-literal,.hljs-section,.hljs-string,.hljs-template-tag,.hljs-template-variable,.hljs-title,.hljs-type{color:#a31515}.hljs-deletion,.hljs-meta,.hljs-selector-attr,.hljs-selector-pseudo{color:#2b91af}.hljs-doctag{color:grey}.hljs-attr{color:red}.hljs-bullet,.hljs-link,.hljs-symbol{color:#00b0e8}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700}

Binary file not shown.

Binary file not shown.

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 434 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

17
assets/js/ace.js Normal file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

7
assets/js/bootstrap.bundle.min.js vendored Normal file

File diff suppressed because one or more lines are too long

22
assets/js/datatables.min.js vendored Normal file

File diff suppressed because one or more lines are too long

1
assets/js/dropzone.min.js vendored Normal file

File diff suppressed because one or more lines are too long

1361
assets/js/highlight.min.js vendored Normal file

File diff suppressed because one or more lines are too long

2
assets/js/jquery-3.6.1.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@@ -4,7 +4,8 @@ $CONFIG = '{"lang":"en","error_reporting":false,"show_hidden":false,"hide_Cols":
/** /**
* H3K | Tiny File Manager V2.5.3 * H3K | Tiny File Manager V2.5.3
* @author CCP Programmers * @author Prasath Mani | CCP Programmers
* @email ccpprogrammers@gmail.com
* @github https://github.com/prasathmani/tinyfilemanager * @github https://github.com/prasathmani/tinyfilemanager
* @link https://tinyfilemanager.github.io * @link https://tinyfilemanager.github.io
*/ */
@@ -76,12 +77,6 @@ $iconv_input_encoding = 'UTF-8';
// Doc - https://www.php.net/manual/en/function.date.php // Doc - https://www.php.net/manual/en/function.date.php
$datetime_format = 'm/d/Y g:i A'; $datetime_format = 'm/d/Y g:i A';
// Path display mode when viewing file information
// 'full' => show full path
// 'relative' => show path relative to root_path
// 'host' => show path on the host
$path_display_mode = 'full';
// Allowed file extensions for create and rename files // Allowed file extensions for create and rename files
// e.g. 'txt,html,css,js' // e.g. 'txt,html,css,js'
$allowed_file_extensions = ''; $allowed_file_extensions = '';
@@ -100,7 +95,7 @@ $favicon_path = '';
$exclude_items = array(); $exclude_items = array();
// Online office Docs Viewer // Online office Docs Viewer
// Available rules are 'google', 'microsoft' or false // Availabe rules are 'google', 'microsoft' or false
// Google => View documents using Google Docs Viewer // Google => View documents using Google Docs Viewer
// Microsoft => View documents using Microsoft Web Apps Viewer // Microsoft => View documents using Microsoft Web Apps Viewer
// false => disable online doc viewer // false => disable online doc viewer
@@ -141,6 +136,20 @@ $ip_blacklist = array(
'::' // non-routable meta ipv6 '::' // non-routable meta ipv6
); );
// External CDN resources that can be used in the HTML (replace for GDPR compliance)
$external = array(
'css-bootstrap' => '<link href="assets/css/bootstrap.min.css" rel="stylesheet">',
'css-dropzone' => '<link href="assets/css/dropzone.min.css" rel="stylesheet">',
'css-font-awesome' => '<link rel="stylesheet" href="assets/css/font-awesome.min.css" crossorigin="anonymous">',
'css-highlightjs' => '<link rel="stylesheet" href="assets/css/' . $highlightjs_style . '.min.css">',
'js-ace' => '<script src="assets/js/ace.js"></script>',
'js-bootstrap' => '<script src="assets/js/bootstrap.bundle.min.js"></script>',
'js-dropzone' => '<script src="assets/js/dropzone.min.js"></script>',
'js-jquery' => '<script src="assets/js/jquery-3.6.1.min.js"></script>',
'js-jquery-datatables' => '<script src="assets/js/dataTables.min.js"></script>',
'js-highlightjs' => '<script src="assets/js/highlight.min.js"></script>',
);
// if User has the external config file, try to use it to override the default config above [config.php] // if User has the external config file, try to use it to override the default config above [config.php]
// sample config - https://tinyfilemanager.github.io/config-sample.txt // sample config - https://tinyfilemanager.github.io/config-sample.txt
$config_file = __DIR__.'/config.php'; $config_file = __DIR__.'/config.php';
@@ -148,22 +157,6 @@ if (is_readable($config_file)) {
@include($config_file); @include($config_file);
} }
// External CDN resources that can be used in the HTML (replace for GDPR compliance)
$external = array(
'css-bootstrap' => '<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi" crossorigin="anonymous">',
'css-dropzone' => '<link href="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.9.3/min/dropzone.min.css" rel="stylesheet">',
'css-font-awesome' => '<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" crossorigin="anonymous">',
'css-highlightjs' => '<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/styles/' . $highlightjs_style . '.min.css">',
'js-ace' => '<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.13.1/ace.js"></script>',
'js-bootstrap' => '<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3" crossorigin="anonymous"></script>',
'js-dropzone' => '<script src="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.9.3/min/dropzone.min.js"></script>',
'js-jquery' => '<script src="https://code.jquery.com/jquery-3.6.1.min.js" integrity="sha256-o88AwQnZB+VDvE9tvIXrMQaPlFFSUTR+nldQm1LuPXQ=" crossorigin="anonymous"></script>',
'js-jquery-datatables' => '<script src="https://cdn.datatables.net/1.13.1/js/jquery.dataTables.min.js" crossorigin="anonymous" defer></script>',
'js-highlightjs' => '<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/highlight.min.js"></script>',
'pre-jsdelivr' => '<link rel="preconnect" href="https://cdn.jsdelivr.net" crossorigin/><link rel="dns-prefetch" href="https://cdn.jsdelivr.net"/>',
'pre-cloudflare' => '<link rel="preconnect" href="https://cdnjs.cloudflare.com" crossorigin/><link rel="dns-prefetch" href="https://cdnjs.cloudflare.com"/>'
);
// --- EDIT BELOW CAREFULLY OR DO NOT EDIT AT ALL --- // --- EDIT BELOW CAREFULLY OR DO NOT EDIT AT ALL ---
// max upload file size // max upload file size
@@ -227,7 +220,7 @@ if (defined('FM_EMBED')) {
mb_regex_encoding('UTF-8'); mb_regex_encoding('UTF-8');
} }
session_cache_limiter('nocache'); // Prevent logout issue after page was cached session_cache_limiter('');
session_name(FM_SESSION_ID ); session_name(FM_SESSION_ID );
function session_error_handling_function($code, $msg, $file, $line) { function session_error_handling_function($code, $msg, $file, $line) {
// Permission denied for default session, try to create a new one // Permission denied for default session, try to create a new one
@@ -242,13 +235,9 @@ if (defined('FM_EMBED')) {
restore_error_handler(); restore_error_handler();
} }
//Generating CSRF Token //Genrating CSRF Token
if (empty($_SESSION['token'])) { if (empty($_SESSION['token'])) {
if (function_exists('random_bytes')) { $_SESSION['token'] = bin2hex(random_bytes(32));
$_SESSION['token'] = bin2hex(random_bytes(32));
} else {
$_SESSION['token'] = bin2hex(openssl_random_pseudo_bytes(32));
}
} }
if (empty($auth_users)) { if (empty($auth_users)) {
@@ -331,11 +320,11 @@ if ($use_auth) {
if (isset($auth_users[$_POST['fm_usr']]) && isset($_POST['fm_pwd']) && password_verify($_POST['fm_pwd'], $auth_users[$_POST['fm_usr']]) && verifyToken($_POST['token'])) { if (isset($auth_users[$_POST['fm_usr']]) && isset($_POST['fm_pwd']) && password_verify($_POST['fm_pwd'], $auth_users[$_POST['fm_usr']]) && verifyToken($_POST['token'])) {
$_SESSION[FM_SESSION_ID]['logged'] = $_POST['fm_usr']; $_SESSION[FM_SESSION_ID]['logged'] = $_POST['fm_usr'];
fm_set_msg(lng('You are logged in')); fm_set_msg(lng('You are logged in'));
fm_redirect(FM_SELF_URL); fm_redirect(FM_ROOT_URL);
} else { } else {
unset($_SESSION[FM_SESSION_ID]['logged']); unset($_SESSION[FM_SESSION_ID]['logged']);
fm_set_msg(lng('Login failed. Invalid username or password'), 'error'); fm_set_msg(lng('Login failed. Invalid username or password'), 'error');
fm_redirect(FM_SELF_URL); fm_redirect(FM_ROOT_URL);
} }
} else { } else {
fm_set_msg(lng('password_hash not supported, Upgrade PHP version'), 'error');; fm_set_msg(lng('password_hash not supported, Upgrade PHP version'), 'error');;
@@ -607,7 +596,7 @@ if ((isset($_SESSION[FM_SESSION_ID]['logged'], $auth_users[$_SESSION[FM_SESSION_
$use_curl = false; $use_curl = false;
$temp_file = tempnam(sys_get_temp_dir(), "upload-"); $temp_file = tempnam(sys_get_temp_dir(), "upload-");
$fileinfo = new stdClass(); $fileinfo = new stdClass();
$fileinfo->name = trim(urldecode(basename($url)), ".\x00..\x20"); $fileinfo->name = trim(basename($url), ".\x00..\x20");
$allowed = (FM_UPLOAD_EXTENSION) ? explode(',', FM_UPLOAD_EXTENSION) : false; $allowed = (FM_UPLOAD_EXTENSION) ? explode(',', FM_UPLOAD_EXTENSION) : false;
$ext = strtolower(pathinfo($fileinfo->name, PATHINFO_EXTENSION)); $ext = strtolower(pathinfo($fileinfo->name, PATHINFO_EXTENSION));
@@ -779,7 +768,7 @@ if (isset($_GET['copy'], $_GET['finish']) && !FM_READONLY) {
$loop_count++; $loop_count++;
} }
if (fm_rcopy($from, $fn_duplicate, False)) { if (fm_rcopy($from, $fn_duplicate, False)) {
fm_set_msg(sprintf('Copied from <b>%s</b> to <b>%s</b>', fm_enc($copy), fm_enc($fn_duplicate))); fm_set_msg(sprintf('Copyied from <b>%s</b> to <b>%s</b>', fm_enc($copy), fm_enc($fn_duplicate)));
} else { } else {
fm_set_msg(sprintf('Error while copying from <b>%s</b> to <b>%s</b>', fm_enc($copy), fm_enc($fn_duplicate)), 'error'); fm_set_msg(sprintf('Error while copying from <b>%s</b> to <b>%s</b>', fm_enc($copy), fm_enc($fn_duplicate)), 'error');
} }
@@ -923,6 +912,7 @@ if (!empty($_FILES) && !FM_READONLY) {
echo json_encode($response); exit(); echo json_encode($response); exit();
} }
$override_file_name = false;
$chunkIndex = $_POST['dzchunkindex']; $chunkIndex = $_POST['dzchunkindex'];
$chunkTotal = $_POST['dztotalchunkcount']; $chunkTotal = $_POST['dztotalchunkcount'];
$fullPathInput = fm_clean_path($_REQUEST['fullpath']); $fullPathInput = fm_clean_path($_REQUEST['fullpath']);
@@ -957,9 +947,14 @@ if (!empty($_FILES) && !FM_READONLY) {
$targetPath = $path . $ds; $targetPath = $path . $ds;
if ( is_writable($targetPath) ) { if ( is_writable($targetPath) ) {
$fullPath = $path . '/' . $fullPathInput; $fullPath = $path . '/' . basename($fullPathInput);
$folder = substr($fullPath, 0, strrpos($fullPath, "/")); $folder = substr($fullPath, 0, strrpos($fullPath, "/"));
if(file_exists ($fullPath) && !$override_file_name && !$chunks) {
$ext_1 = $ext ? '.'.$ext : '';
$fullPath = $path . '/' . basename($fullPathInput, $ext_1) .'_'. date('ymdHis'). $ext_1;
}
if (!is_dir($folder)) { if (!is_dir($folder)) {
$old = umask(0); $old = umask(0);
mkdir($folder, 0777, true); mkdir($folder, 0777, true);
@@ -972,20 +967,7 @@ if (!empty($_FILES) && !FM_READONLY) {
if ($out) { if ($out) {
$in = @fopen($tmp_name, "rb"); $in = @fopen($tmp_name, "rb");
if ($in) { if ($in) {
if (PHP_VERSION_ID < 80009) { while ($buff = fread($in, 4096)) { fwrite($out, $buff); }
// workaround https://bugs.php.net/bug.php?id=81145
do {
for (;;) {
$buff = fread($in, 4096);
if ($buff === false || $buff === '') {
break;
}
fwrite($out, $buff);
}
} while (!feof($in));
} else {
stream_copy_to_stream($in, $out);
}
$response = array ( $response = array (
'status' => 'success', 'status' => 'success',
'info' => "file upload successful" 'info' => "file upload successful"
@@ -1013,13 +995,7 @@ if (!empty($_FILES) && !FM_READONLY) {
} }
if ($chunkIndex == $chunkTotal - 1) { if ($chunkIndex == $chunkTotal - 1) {
if (file_exists ($fullPath)) { rename("{$fullPath}.part", $fullPath);
$ext_1 = $ext ? '.'.$ext : '';
$fullPathTarget = $path . '/' . basename($fullPathInput, $ext_1) .'_'. date('ymdHis'). $ext_1;
} else {
$fullPathTarget = $fullPath;
}
rename("{$fullPath}.part", $fullPathTarget);
} }
} else if (move_uploaded_file($tmp_name, $fullPath)) { } else if (move_uploaded_file($tmp_name, $fullPath)) {
@@ -1397,14 +1373,10 @@ if (isset($_GET['upload']) && !FM_READONLY) {
toast('Error: Server Timeout'); toast('Error: Server Timeout');
}); });
}).on("success", function (res) { }).on("success", function (res) {
try { let _response = JSON.parse(res.xhr.response);
let _response = JSON.parse(res.xhr.response);
if(_response.status == "error") { if(_response.status == "error") {
toast(_response.info); toast(_response.info);
}
} catch (e) {
toast("Error: Invalid JSON response");
} }
}).on("error", function(file, response) { }).on("error", function(file, response) {
toast(response); toast(response);
@@ -1650,7 +1622,7 @@ if (isset($_GET['view'])) {
$file = $_GET['view']; $file = $_GET['view'];
$file = fm_clean_path($file, false); $file = fm_clean_path($file, false);
$file = str_replace('/', '', $file); $file = str_replace('/', '', $file);
if ($file == '' || !is_file($path . '/' . $file) || !fm_is_exclude_items($file)) { if ($file == '' || !is_file($path . '/' . $file) || in_array($file, $GLOBALS['exclude_items'])) {
fm_set_msg(lng('File not found'), 'error'); fm_set_msg(lng('File not found'), 'error');
$FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
} }
@@ -1705,8 +1677,7 @@ if (isset($_GET['view'])) {
<div class="col-12"> <div class="col-12">
<p class="break-word"><b><?php echo lng($view_title) ?> "<?php echo fm_enc(fm_convert_win($file)) ?>"</b></p> <p class="break-word"><b><?php echo lng($view_title) ?> "<?php echo fm_enc(fm_convert_win($file)) ?>"</b></p>
<p class="break-word"> <p class="break-word">
<?php $display_path = fm_get_display_path($file_path); ?> <strong>Full path:</strong> <?php echo fm_enc(fm_convert_win($file_path)) ?><br>
<strong><?php echo $display_path['label']; ?>:</strong> <?php echo $display_path['path']; ?><br>
<strong>File size:</strong> <?php echo ($filesize_raw <= 1000) ? "$filesize_raw bytes" : $filesize; ?><br> <strong>File size:</strong> <?php echo ($filesize_raw <= 1000) ? "$filesize_raw bytes" : $filesize; ?><br>
<strong>MIME-type:</strong> <?php echo $mime_type ?><br> <strong>MIME-type:</strong> <?php echo $mime_type ?><br>
<?php <?php
@@ -1732,7 +1703,7 @@ if (isset($_GET['view'])) {
// Image info // Image info
if ($is_image) { if ($is_image) {
$image_size = getimagesize($file_path); $image_size = getimagesize($file_path);
echo '<strong>'.lng('Image size').':</strong> ' . (isset($image_size[0]) ? $image_size[0] : '0') . ' x ' . (isset($image_size[1]) ? $image_size[1] : '0') . '<br>'; echo lng('Image sizes').': ' . (isset($image_size[0]) ? $image_size[0] : '0') . ' x ' . (isset($image_size[1]) ? $image_size[1] : '0') . '<br>';
} }
// Text info // Text info
if ($is_text) { if ($is_text) {
@@ -1805,7 +1776,7 @@ if (isset($_GET['view'])) {
} elseif ($is_image) { } elseif ($is_image) {
// Image content // Image content
if (in_array($ext, array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'ico', 'svg', 'webp', 'avif'))) { if (in_array($ext, array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'ico', 'svg', 'webp', 'avif'))) {
echo '<p><input type="checkbox" id="preview-img-zoomCheck"><label for="preview-img-zoomCheck"><img src="' . fm_enc($file_url) . '" alt="image" class="preview-img"></label></p>'; echo '<p><img src="' . fm_enc($file_url) . '" alt="image" class="preview-img-container" class="preview-img"></p>';
} }
} elseif ($is_audio) { } elseif ($is_audio) {
// Audio content // Audio content
@@ -1849,7 +1820,7 @@ if (isset($_GET['edit']) && !FM_READONLY) {
$file = $_GET['edit']; $file = $_GET['edit'];
$file = fm_clean_path($file, false); $file = fm_clean_path($file, false);
$file = str_replace('/', '', $file); $file = str_replace('/', '', $file);
if ($file == '' || !is_file($path . '/' . $file) || !fm_is_exclude_items($file)) { if ($file == '' || !is_file($path . '/' . $file) || in_array($file, $GLOBALS['exclude_items'])) {
fm_set_msg(lng('File not found'), 'error'); fm_set_msg(lng('File not found'), 'error');
$FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH)); $FM_PATH=FM_PATH; fm_redirect(FM_SELF_URL . '?p=' . urlencode($FM_PATH));
} }
@@ -1965,8 +1936,7 @@ if (isset($_GET['chmod']) && !FM_READONLY && !FM_IS_WIN) {
</h6> </h6>
<div class="card-body"> <div class="card-body">
<p class="card-text"> <p class="card-text">
<?php $display_path = fm_get_display_path($file_path); ?> Full path: <?php echo $file_path ?><br>
<?php echo $display_path['label']; ?>: <?php echo $display_path['path']; ?><br>
</p> </p>
<form action="" method="post"> <form action="" method="post">
<input type="hidden" name="p" value="<?php echo fm_enc(FM_PATH) ?>"> <input type="hidden" name="p" value="<?php echo fm_enc(FM_PATH) ?>">
@@ -2079,12 +2049,6 @@ $tableTheme = (FM_THEME == "dark") ? "text-white bg-dark table-dark" : "bg-white
if (function_exists('posix_getpwuid') && function_exists('posix_getgrgid')) { if (function_exists('posix_getpwuid') && function_exists('posix_getgrgid')) {
$owner = posix_getpwuid(fileowner($path . '/' . $f)); $owner = posix_getpwuid(fileowner($path . '/' . $f));
$group = posix_getgrgid(filegroup($path . '/' . $f)); $group = posix_getgrgid(filegroup($path . '/' . $f));
if ($owner === false) {
$owner = array('name' => '?');
}
if ($group === false) {
$group = array('name' => '?');
}
} else { } else {
$owner = array('name' => '?'); $owner = array('name' => '?');
$group = array('name' => '?'); $group = array('name' => '?');
@@ -2138,12 +2102,6 @@ $tableTheme = (FM_THEME == "dark") ? "text-white bg-dark table-dark" : "bg-white
if (function_exists('posix_getpwuid') && function_exists('posix_getgrgid')) { if (function_exists('posix_getpwuid') && function_exists('posix_getgrgid')) {
$owner = posix_getpwuid(fileowner($path . '/' . $f)); $owner = posix_getpwuid(fileowner($path . '/' . $f));
$group = posix_getgrgid(filegroup($path . '/' . $f)); $group = posix_getgrgid(filegroup($path . '/' . $f));
if ($owner === false) {
$owner = array('name' => '?');
}
if ($group === false) {
$group = array('name' => '?');
}
} else { } else {
$owner = array('name' => '?'); $owner = array('name' => '?');
$group = array('name' => '?'); $group = array('name' => '?');
@@ -2252,6 +2210,7 @@ fm_show_footer();
/** /**
* It prints the css/js files into html * It prints the css/js files into html
* @param key The key of the external file to print. * @param key The key of the external file to print.
* @return The value of the key in the array.
*/ */
function print_external($key) { function print_external($key) {
global $external; global $external;
@@ -2266,7 +2225,7 @@ function print_external($key) {
} }
/** /**
* Verify CSRF TOKEN and remove after certified * Verify CSRF TOKEN and remove after cerify
* @param string $token * @param string $token
* @return bool * @return bool
*/ */
@@ -2536,30 +2495,6 @@ function fm_get_parent_path($path)
return false; return false;
} }
function fm_get_display_path($file_path)
{
global $path_display_mode, $root_path, $root_url;
switch ($path_display_mode) {
case 'relative':
return array(
'label' => 'Path',
'path' => fm_enc(fm_convert_win(str_replace($root_path, '', $file_path)))
);
case 'host':
$relative_path = str_replace($root_path, '', $file_path);
return array(
'label' => 'Host Path',
'path' => fm_enc(fm_convert_win('/' . $root_url . '/' . ltrim(str_replace('\\', '/', $relative_path), '/')))
);
case 'full':
default:
return array(
'label' => 'Full Path',
'path' => fm_enc(fm_convert_win($file_path))
);
}
}
/** /**
* Check file is in exclude list * Check file is in exclude list
* @param string $file * @param string $file
@@ -2854,7 +2789,6 @@ function fm_get_file_icon_class($path)
case 'map': case 'map':
case 'lock': case 'lock':
case 'dtd': case 'dtd':
case 'ps1':
$img = 'fa fa-file-code-o'; $img = 'fa fa-file-code-o';
break; break;
case 'txt': case 'txt':
@@ -2881,18 +2815,12 @@ function fm_get_file_icon_class($path)
$img = 'fa fa-css3'; $img = 'fa fa-css3';
break; break;
case 'bz2': case 'bz2':
case 'tbz2':
case 'tbz':
case 'zip': case 'zip':
case 'rar': case 'rar':
case 'gz': case 'gz':
case 'tgz':
case 'tar': case 'tar':
case '7z': case '7z':
case 'xz': case 'xz':
case 'txz':
case 'zst':
case 'tzst':
$img = 'fa fa-file-archive-o'; $img = 'fa fa-file-archive-o';
break; break;
case 'php': case 'php':
@@ -3047,7 +2975,7 @@ function fm_get_text_exts()
'eml', 'msg', 'csv', 'bat', 'twig', 'tpl', 'md', 'gitignore', 'less', 'sass', 'scss', 'c', 'cpp', 'cs', 'py', 'go', 'zsh', 'swift', 'eml', 'msg', 'csv', 'bat', 'twig', 'tpl', 'md', 'gitignore', 'less', 'sass', 'scss', 'c', 'cpp', 'cs', 'py', 'go', 'zsh', 'swift',
'map', 'lock', 'dtd', 'svg', 'asp', 'aspx', 'asx', 'asmx', 'ashx', 'jsp', 'jspx', 'cgi', 'dockerfile', 'ruby', 'yml', 'yaml', 'toml', 'map', 'lock', 'dtd', 'svg', 'asp', 'aspx', 'asx', 'asmx', 'ashx', 'jsp', 'jspx', 'cgi', 'dockerfile', 'ruby', 'yml', 'yaml', 'toml',
'vhost', 'scpt', 'applescript', 'csx', 'cshtml', 'c++', 'coffee', 'cfm', 'rb', 'graphql', 'mustache', 'jinja', 'http', 'handlebars', 'vhost', 'scpt', 'applescript', 'csx', 'cshtml', 'c++', 'coffee', 'cfm', 'rb', 'graphql', 'mustache', 'jinja', 'http', 'handlebars',
'java', 'es', 'es6', 'markdown', 'wiki', 'tmp', 'top', 'bot', 'dat', 'bak', 'htpasswd', 'pl', 'ps1' 'java', 'es', 'es6', 'markdown', 'wiki', 'tmp', 'top', 'bot', 'dat', 'bak', 'htpasswd', 'pl'
); );
} }
@@ -3577,7 +3505,7 @@ function fm_show_nav_path($path)
<ul class="navbar-nav justify-content-end <?php echo fm_get_theme(); ?>"> <ul class="navbar-nav justify-content-end <?php echo fm_get_theme(); ?>">
<li class="nav-item mr-2"> <li class="nav-item mr-2">
<div class="input-group input-group-sm mr-1" style="margin-top:4px;"> <div class="input-group input-group-sm mr-1" style="margin-top:4px;">
<input type="text" class="form-control" placeholder="<?php echo lng('Search') ?>" aria-label="<?php echo lng('Search') ?>" aria-describedby="search-addon2" id="search-addon"> <input type="text" class="form-control" placeholder="<?php echo lng('Filter') ?>" aria-label="<?php echo lng('Search') ?>" aria-describedby="search-addon2" id="search-addon">
<div class="input-group-append"> <div class="input-group-append">
<span class="input-group-text brl-0 brr-0" id="search-addon2"><i class="fa fa-search"></i></span> <span class="input-group-text brl-0 brr-0" id="search-addon2"><i class="fa fa-search"></i></span>
</div> </div>
@@ -3775,9 +3703,7 @@ $isStickyNavBar = $sticky_navbar ? 'navbar-fixed' : 'navbar-normal';
.message.ok { border-color:green;color:green } .message.ok { border-color:green;color:green }
.message.error { border-color:red;color:red } .message.error { border-color:red;color:red }
.message.alert { border-color:orange;color:orange } .message.alert { border-color:orange;color:orange }
.preview-img { max-width:100%;max-height:80vh;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAKklEQVR42mL5//8/Azbw+PFjrOJMDCSCUQ3EABZc4S0rKzsaSvTTABBgAMyfCMsY4B9iAAAAAElFTkSuQmCC);cursor:zoom-in } .preview-img { max-width:100%;max-height:80vh;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAKklEQVR42mL5//8/Azbw+PFjrOJMDCSCUQ3EABZc4S0rKzsaSvTTABBgAMyfCMsY4B9iAAAAAElFTkSuQmCC) }
input#preview-img-zoomCheck[type=checkbox] { display:none }
input#preview-img-zoomCheck[type=checkbox]:checked ~ label > img { max-width:none;max-height:none;cursor:zoom-out }
.inline-actions > a > i { font-size:1em;margin-left:5px;background:#3785c1;color:#fff;padding:3px 4px;border-radius:3px; } .inline-actions > a > i { font-size:1em;margin-left:5px;background:#3785c1;color:#fff;padding:3px 4px;border-radius:3px; }
.preview-video { position:relative;max-width:100%;height:0;padding-bottom:62.5%;margin-bottom:10px } .preview-video { position:relative;max-width:100%;height:0;padding-bottom:62.5%;margin-bottom:10px }
.preview-video video { position:absolute;width:100%;height:100%;left:0;top:0;background:#000 } .preview-video video { position:absolute;width:100%;height:100%;left:0;top:0;background:#000 }
@@ -4190,7 +4116,7 @@ $isStickyNavBar = $sticky_navbar ? 'navbar-fixed' : 'navbar-normal';
if(_data && _data.fontSize) { $fontSizeEl.html(optionNode("", _data.fontSize)); } if(_data && _data.fontSize) { $fontSizeEl.html(optionNode("", _data.fontSize)); }
$modeEl.val( editor.getSession().$modeId ); $modeEl.val( editor.getSession().$modeId );
$themeEl.val( editor.getTheme() ); $themeEl.val( editor.getTheme() );
$(function() { $fontSizeEl.val(12).change(); }); //set default font size in drop down $fontSizeEl.val(12).change(); //set default font size in drop down
} }
$(function(){ $(function(){
@@ -4297,8 +4223,6 @@ function lng($txt) {
$tr['en']['Invalid characters in file or folder name'] = 'Invalid characters in file or folder name'; $tr['en']['Invalid characters in file or folder name'] = 'Invalid characters in file or folder name';
$tr['en']['Operations with archives are not available'] = 'Operations with archives are not available'; $tr['en']['Operations with archives are not available'] = 'Operations with archives are not available';
$tr['en']['File or folder with this path already exists'] = 'File or folder with this path already exists'; $tr['en']['File or folder with this path already exists'] = 'File or folder with this path already exists';
$tr['en']['Are you sure want to rename?'] = 'Are you sure want to rename?';
$tr['en']['Are you sure want to'] = 'Are you sure want to';
$i18n = fm_get_translations($tr); $i18n = fm_get_translations($tr);
$tr = $i18n ? $i18n : $tr; $tr = $i18n ? $i18n : $tr;

View File

@@ -8,79 +8,79 @@
"translation": { "translation": {
"AppName": "Tiny File Manager", "AppName": "Tiny File Manager",
"AppTitle": "Titlu aplicație", "AppTitle": "Titlu aplicație",
"Login": "Autentificare", "Login": "Logare",
"Username": "Nume utilizator", "Username": "Nume utilizator",
"Password": "Parolă", "Password": "Parola",
"Logout": "Ieșire", "Logout": "Delogare",
"Move": "Mută", "Move": "Mută",
"Copy": "Copiază", "Copy": "Copiază",
"Save": "Salvează", "Save": "Salvează",
"SelectAll": "Selectează tot", "SelectAll": "Selectează Tot",
"UnSelectAll": "Deselectează tot", "UnSelectAll": "Deselectează Tot",
"File": "Fișier", "File": "Fișier",
"Back": "Înapoi", "Back": "Înapoi",
"Size": "Dimensiune", "Size": "Mărime",
"Perms": "Permisiuni", "Perms": "Permisiuni",
"Modified": "Modificat", "Modified": "Modificat",
"Owner": "Proprietar", "Owner": "Titular",
"Search": "Caută", "Search": "Caută",
"NewItem": "Nou", "NewItem": "Nou",
"Folder": "Dosar", "Folder": "Dosar",
"Delete": "Șterge", "Delete": "Șterge",
"Rename": "Redenumește", "Rename": "Redenumește",
"CopyTo": "Copiază în", "CopyTo": "Copiază În",
"DirectLink": "Legătură directă", "DirectLink": "Link Direct",
"UploadingFiles": "Se încarcă fișiere", "UploadingFiles": "Încarcă Fișiere",
"ChangePermissions": "Schimbă permisiunile", "ChangePermissions": "Schimbă Permisiuni",
"Copying": "Se copiază", "Copying": "Copiază",
"CreateNewItem": "Creează element nou", "CreateNewItem": "Creează Obiect Nou",
"Name": "Denumire", "Name": "Nume",
"AdvancedEditor": "Redactor avansat", "AdvancedEditor": "Editor Avansat",
"RememberMe": "Ține-mă minte", "RememberMe": "Ține-mă Minte",
"Actions": "Acțiuni", "Actions": "Acțiuni",
"Upload": "Încarcă", "Upload": "Încarcă",
"Cancel": "Anulează", "Cancel": "Anulează",
"InvertSelection": "Inversează selecția", "InvertSelection": "Selectare Inversă",
"DestinationFolder": "Dosar destinație", "DestinationFolder": "Dosar Destinație",
"ItemType": "Tip element", "ItemType": "Tip Obiect",
"ItemName": "Denumire element", "ItemName": "Nume obiect",
"CreateNow": "Creează acum", "CreateNow": "Creează Acum",
"Download": "Descarcă", "Download": "Descarcă",
"Open": "Deschide", "Open": "Deschide",
"UnZip": "Decomprimă", "UnZip": "Decomprimă",
"UnZipToFolder": "Decomprimă în dosar", "UnZipToFolder": "Decomprimă în Dosar",
"Edit": "Modifică", "Edit": "Editează",
"NormalEditor": "Redactor standard", "NormalEditor": "Editor Standard",
"BackUp": "Copie de rezervă", "BackUp": "Copie de Siguranță",
"SourceFolder": "Dosar sursă", "SourceFolder": "Dosar Sursă",
"Files": "Fișiere", "Files": "Fișiere",
"Change": "Schimbă", "Change": "Schimbă",
"Settings": "Configurări", "Settings": "Setari",
"Language": "Limba", "Language": "Limba",
"MemoryUsed": "Memorie utilizată", "MemoryUsed": "Memorie Utilizată",
"PartitionSize": "Dimensiune partiție", "PartitionSize": "Dimensiune Partiție",
"ErrorReporting": "Raportare erori", "ErrorReporting": "Raportare de Erori",
"ShowHiddenFiles": "Arată fișiere ascunse", "ShowHiddenFiles": "Arată Fișiere Ascunse",
"Full size": "Dimensiune totală", "Full size": "Dimensiune Totală",
"Help": "Ajutor", "Help": "Ajutor",
"Free of": "Liber din", "Free of": "Liber din",
"Preview": "Previzualizează", "Preview": "Previzualizează",
"Help Documents": "Documentație", "Help Documents": "Documentație",
"Report Issue": "Raportează defect", "Report Issue": "Raportează o Problemă",
"Generate": "Generează", "Generate": "Generează",
"FullSize": "Dimensiune completă", "FullSize": "Mărime Maximă",
"FreeOf": "Liber din", "FreeOf": "Liber din",
"CalculateFolderSize": "Calculează dimensiunea dosarului", "CalculateFolderSize": "Calculează spațiul acupat de dosar",
"ProcessID": "Id. proces", "ProcessID": "Id instanță",
"Created": "Creat", "Created": "Creat",
"HideColumns": "Ascunde coloanele", "HideColumns": "Ascunde Coloanele",
"Folder is empty": "Dosarul este gol", "Folder is empty": "Dosarul este gol",
"Check Latest Version": "Verifică ultima versiune", "Check Latest Version": "Verifică ultima versiune",
"Generate new password hash": "Generează hash nou parolă", "Generate new password hash": "Generează hash nou parolă",
"You are logged in": "Sunteți autentificat", "You are logged in": "Sunteti logat/ă",
"Login failed. Invalid username or password": "Autentificare eșuată. Utilizator sau parolă incorecte", "Login failed. Invalid username or password": "Autentificare eșuată. Credențialele nu sunt valide (utilizator/parolă)",
"password_hash not supported, Upgrade PHP version": "Generare hash parolă nesuportată, actualizați versiunea de PHP", "password_hash not supported, Upgrade PHP version": "Generare hash parolă nesuportată, actualizați interpretorul PHP de pe server",
"Theme": "Tematică", "Theme": "Tema",
"dark": "Întunecată", "dark": "Întunecată",
"light": "Luminoasă" "light": "Luminoasă"
} }
@@ -1512,9 +1512,7 @@
"Moved from": "Movido de", "Moved from": "Movido de",
"Created": "Criado", "Created": "Criado",
"You are logged in": "Você está logado", "You are logged in": "Você está logado",
"Login failed. Invalid username or password": "Falha na autenticação. nome de usuário ou senha inválidos", "Login failed. Invalid username or password": "Falha na autenticação. nome de usuário ou senha inválidos"
"Are you sure want to rename?": "Tem certeza de que deseja renomear?",
"Are you sure want to": "Tem certeza de que deseja"
} }
}, },
{ {
@@ -2534,14 +2532,14 @@
"Operations with archives are not available": "Bewerkingen met archieven zijn niet beschikbaar", "Operations with archives are not available": "Bewerkingen met archieven zijn niet beschikbaar",
"File or folder with this path already exists": "Bestand of map met dit pad bestaat al", "File or folder with this path already exists": "Bestand of map met dit pad bestaat al",
"Moved from": "Verplaatst van", "Moved from": "Verplaatst van",
"a files": "bestanden", "a files": "bestanden",
"Okay": "OK", "Okay": "OK",
"Enter here...": "Voer hier in...", "Enter here...": "Voer hier in...",
"Enter new file name": "Voer nieuwe bestandsnaam in:", "Enter new file name": "Voer nieuwe bestandsnaam in:",
"Full path": "Volledig path", "Full path": "Volledig path",
"File size": "Bestandsgrootte", "File size": "Bestandsgrootte",
"Image sizes": "Afbeeldingsgrootte", "Image sizes": "Afbeeldingsgrootte",
"Charset": "Karakterset", "Charset": "Karakterset",
"Image": "Afbeelding", "Image": "Afbeelding",
"Audio": "Audio", "Audio": "Audio",
"Video": "Video", "Video": "Video",
@@ -2549,18 +2547,16 @@
"Files in archive": "Bestanden in archief", "Files in archive": "Bestanden in archief",
"Total size": "Totale grootte", "Total size": "Totale grootte",
"Compression": "Compressie", "Compression": "Compressie",
"Size in archive": "Grootte in archief", "Size in archive": "Grootte in archief",
"Invalid Token.": "Ongeldig token", "Invalid Token.": "Ongeldig token",
"Fullscreen": "Volledig scherm", "Fullscreen": "Volledig scherm",
"Undo": "Ongedaan maken", "Undo": "Ongedaan maken",
"Redo": "Opnieuw doen", "Redo": "Opnieuw doen",
"Theme": "Thema", "Theme": "Thema",
"Select Theme": "Kies thema", "Select Theme": "Kies thema",
"Select Font Size": "Kies fontgrootte", "Select Font Size": "Kies fontgrootte",
"Are you sure want to rename?": "Weet u zeker dat u de naam wilt wijzigen?", "Are you sure want to rename?": "Weet u zeker dat u de naam wilt wijzigen?",
"Are you sure want to": "Verder gaan met", "Are you sure want to": "Verder gaan met"
"dark": "donker",
"light": "licht"
} }
}, },
{ {
@@ -2686,130 +2682,6 @@
"password_hash not supported, Upgrade PHP version": "password_hash er ikke understøttet, opgrader PHP-versionen", "password_hash not supported, Upgrade PHP version": "password_hash er ikke understøttet, opgrader PHP-versionen",
"to": "til" "to": "til"
} }
},
{
"name": "Bengali",
"code": "bn",
"translation": {
"Access denied. IP restriction applicable": "অ্যাক্সেস অস্বীকার করা হয়েছে৷ আইপি সীমাবদ্ধতা প্রযোজ্য",
"Actions": "একশন্স",
"Advanced Search": "উন্নত অনুসন্ধান",
"AdvancedEditor": "উন্নত এডিটর",
"AppTitle": "ফাইল ম্যানেজার",
"Archive not created": "আর্কাইভ তৈরি করা হয়নি",
"Archive not unpacked": "আর্কাইভ প্যাক করা হয়নি",
"Archive unpacked": "আর্কাইভ আনপ্যাক",
"Archive": "আর্কাইভ",
"Back": "পেছনে",
"BackUp": "ব্যাকআপ",
"CalculateFolderSize": "ফোল্ডার সাইজ গণনা করুন",
"Cancel": "বাতিল করুন",
"Change": "পরিবর্তন",
"ChangePermissions": "অনুমতি পরিবর্তন করুন",
"Check Latest Version": "সর্বশেষ সংস্করণ পরীক্ষা করুন",
"Copied from": "থেকে কপি করা হয়েছে",
"Copy": "কপি",
"CopyTo": "কপি করুন",
"Copying": "কপি করা হচ্ছে",
"Create archive?": "নতুন আর্কাইভ তৈরি করুন",
"CreateNewItem": "নতুন আইটেম তৈরি করুন",
"CreateNow": "এখন তৈরি করুন",
"Created": "তৈরি করা হয়েছে",
"Delete selected files and folders?": "নির্বাচিত ফাইল এবং ফোল্ডার মুছবেন?",
"Delete": "মুছে ফেলা",
"Deleted": "মুছে ফেলা হয়েছে",
"DestinationFolder": "গন্তব্য ফোল্ডার",
"DirectLink": "সরাসরি লিঙ্ক",
"Download": "ডাউনলোড",
"Edit": "এডিট",
"Error while copying from": "থেকে কপি করার সময় ত্রুটি",
"Error while deleting items": "থেকে মুছে ফেলার সময় ত্রুটি",
"Error while fetching archive info": "আর্কাইভ তথ্য আনার সময় ত্রুটি",
"Error while moving from": "থেকে সরানোর সময় ত্রুটি",
"Error while renaming from": "থেকে নাম পরিবর্তন করার সময় ত্রুটি",
"ErrorReporting": "এরর রিপোর্টিং",
"Execute": "এক্সিকিউট",
"FILE EXTENSION HAS NOT SUPPORTED": "ফাইল এক্সটেনশন সমর্থিত নয়",
"File Saved Successfully": "ফাইল সফলভাবে সংরক্ষিত হয়েছে৷",
"File extension is not allowed": "ফাইল এক্সটেনশন অনুমোদিত নয়",
"File not found": "ফাইল পাওয়া যায়নি",
"File or folder with this path already exists": "এই পথ সহ ফাইল বা ফোল্ডার ইতিমধ্যেই বিদ্যমান",
"File": "ফাইল",
"Files": "ফাইলস",
"Folder is empty": "ফোল্ডার খালি",
"Folder": "ফোল্ডার",
"FreeOf": "মুক্ত",
"FullSize": "ফুল সাইজ",
"Generate new password hash": "নতুন পাসওয়ার্ড হ্যাশ তৈরি করুন",
"Generate": "উৎপন্ন",
"Group": "গ্রুপ",
"Help Documents": "হেল্প ডকুমেন্টস",
"Help": "সাহায্য",
"HideColumns": "কলাম লুকান",
"Invalid characters in file name": "ফাইলের নামে অবৈধ অক্ষর",
"Invalid characters in file or folder name": "ফাইল বা ফোল্ডার নামের অবৈধ অক্ষর",
"Invalid file or folder name": "অবৈধ ফাইল বা ফোল্ডারের নাম",
"InvertSelection": "উল্টে নির্বাচন করুন",
"ItemName": "আইটেম নাম",
"ItemType": "আইটেম ধরন",
"Language": "ভাষা",
"Login failed. Invalid username or password": "লগইন ব্যর্থ. অবৈধ ব্যবহারকারীর নাম বা পাসওয়ার্ড",
"Login": "লগইন",
"Logout": "লগআউট",
"Modified": "পরিবর্তিত",
"Move": "সরান",
"Moved from": "থেকে সরানো",
"Name": "নাম",
"NewItem": "নতুন আইটেম",
"NormalEditor": "সাধারণ এডিটর",
"Nothing selected": "কিছুই নির্বাচিত নয়",
"Open": "খোলা",
"Operations with archives are not available": "আর্কাইভ সহ অপারেশন পাওয়া যায়নি",
"Other": "অন্যান্য",
"Owner": "মালিক",
"PartitionSize": "পার্টিশনের মাপ",
"Password": "পাসওয়ার্ড",
"Paths must be not equal": "পথ সমান হতে হবে না",
"Permissions changed": "অনুমতি পরিবর্তন",
"Permissions not changed": "অনুমতি পরিবর্তন করা হয়নি",
"Perms": "পারমস",
"Preview": "পূর্বরূপ",
"Read": "পড়ুন",
"Rename": "নাম পরিবর্তন করা হয়েছে",
"Renamed from": "থেকে নাম পরিবর্তন করা হয়েছে",
"Report Issue": "ইস্যুস রিপোর্ট করুন",
"Root path": "রুট পথ",
"Save": "সংরক্ষণ",
"Search file in folder and subfolders...": "ফোল্ডার এবং সাবফোল্ডারে ফাইল অনুসন্ধান করুন...",
"Search": "অনুসন্ধান করুন",
"Select folder": "ফোল্ডার নির্বাচন করুন",
"SelectAll": "সব নির্বাচন করুন",
"Selected files and folder deleted": "নির্বাচিত ফাইল এবং ফোল্ডার মুছে ফেলা হয়েছে",
"Settings": "সেটিংস",
"ShowHiddenFiles": "গোপন ফাইলগুলো দেখুন",
"Size": "সাইজ",
"Source path not defined": "সোর্স পথ সংজ্ঞায়িত করা হয়নি",
"SourceFolder": "সোর্স ফোল্ডার",
"Tar": "টার",
"Theme": "থিম",
"UnSelectAll": "সরিয়ে ফেলুন সব",
"UnZip": "আনজিপ করুন",
"UnZipToFolder": "ফোল্ডারে আনজিপ",
"Upload": "আপলোড",
"UploadingFiles": "ফাইল আপলোড করা হচ্ছে",
"Username": "ব্যবহারকারীর নাম",
"Write": "লিখুন",
"You are logged in": "আপনি লগ ইন করছেন",
"Zip": "জিপ",
"already exists": "আগে থেকেই আছে",
"dark": "ডার্ক",
"light": "লাইট",
"not created": "তৈরি করা হয়নি",
"not deleted": "মুছে ফেলা হয়নি",
"not found!": "পাওয়া যায় নি!",
"password_hash not supported, Upgrade PHP version": "পাসওয়ার্ড_হ্যাশ সমর্থিত নয়, পিএইচপি ভার্সন আপগ্রেড করুন",
"to": "to"
}
} }
] ]
} }