Dodanie plików konfiguracyjnych oraz obrazów do menedżera plików, w tym aktualizacja ścieżki w szablonie iframe

This commit is contained in:
2024-12-06 15:14:54 +01:00
parent 5a6bc6083d
commit 38fd71b46d
258 changed files with 29392 additions and 5363 deletions

View File

@@ -63,7 +63,7 @@ ob_start();
'value' => htmlspecialchars( $this -> article['languages'][ $lg['id'] ]['main_image'] ),
'icon_content' => 'przeglądaj',
'inline' => true,
'icon_js' => "window.open ( '/libraries/filemanager-9.14.1/dialog.php?type=1&popup=1&field_id=main_image_" . $lg['id'] . "&akey=c3cb2537d25c0efc9e573d059d79c3b8', 'mywindow', 'location=1,status=1,scrollbars=1, width=1100,height=700');"
'icon_js' => "window.open ( '/libraries/filemanager-9.14.2/dialog.php?type=1&popup=1&field_id=main_image_" . $lg['id'] . "&akey=c3cb2537d25c0efc9e573d059d79c3b8', 'mywindow', 'location=1,status=1,scrollbars=1, width=1100,height=700');"
] );
?>
<?= \Html::textarea(

View File

@@ -80,7 +80,7 @@ ob_start();
'id' => 'src_' . $lg['id'],
'value' => $this -> banner['languages'][ $lg['id'] ]['src'],
'icon_content' => 'przeglądaj',
'icon_js' => "window.open ( 'http://" . $_SERVER['SERVER_NAME'] . "/libraries/filemanager-9.14.1/dialog.php?type=1&popup=1&field_id=src_" . $lg['id'] . "&akey=c3cb2537d25c0efc9e573d059d79c3b8', 'mywindow', 'location=1,status=1,scrollbars=1, width=1100,height=700');"
'icon_js' => "window.open ( 'http://" . $_SERVER['SERVER_NAME'] . "/libraries/filemanager-9.14.2/dialog.php?type=1&popup=1&field_id=src_" . $lg['id'] . "&akey=c3cb2537d25c0efc9e573d059d79c3b8', 'mywindow', 'location=1,status=1,scrollbars=1, width=1100,height=700');"
)
);
?>

View File

@@ -1 +1 @@
<iframe src="/libraries/filemanager-9.14.1/dialog.php?akey=c3cb2537d25c0efc9e573d059d79c3b8" style="border: 0px; width: 100%; height: 800px; background: #FFF; padding: 5px;"></iframe>
<iframe src="/libraries/filemanager-9.14.2/dialog.php?akey=c3cb2537d25c0efc9e573d059d79c3b8" style="border: 0px; width: 100%; height: 800px; background: #FFF; padding: 5px;"></iframe>

View File

@@ -30,7 +30,7 @@ ob_start();
'id' => 'img',
'value' => $this -> producer['img'],
'icon_content' => 'przeglądaj',
'icon_js' => "window.open ( 'http://" . $_SERVER['SERVER_NAME'] . "/libraries/filemanager-9.14.1/dialog.php?type=1&popup=1&field_id=img&akey=c3cb2537d25c0efc9e573d059d79c3b8', 'mywindow', 'location=1,status=1,scrollbars=1, width=1100,height=700');"
'icon_js' => "window.open ( 'http://" . $_SERVER['SERVER_NAME'] . "/libraries/filemanager-9.14.2/dialog.php?type=1&popup=1&field_id=img&akey=c3cb2537d25c0efc9e573d059d79c3b8', 'mywindow', 'location=1,status=1,scrollbars=1, width=1100,height=700');"
] );
?>
</div>

View File

@@ -4,67 +4,78 @@ $ROOT_DIR = $_SERVER['DOCUMENT_ROOT'];
require_once $ROOT_DIR . '/config.php';
require_once $ROOT_DIR . '/libraries/medoo/medoo.php';
$mdb = new medoo( [
'database_type' => 'mysql',
'database_name' => $database[ 'name' ],
'server' => $database[ 'host' ],
'username' => $database[ 'user' ],
'password' => $database[ 'password' ],
'charset' => 'utf8'
] );
$mdb = new medoo([
'database_type' => 'mysql',
'database_name' => $database['name'],
'server' => $database['host'],
'username' => $database['user'],
'password' => $database['password'],
'charset' => 'utf8'
]);
header('Content-Type: application/json; charset=utf-8');
$sku = isset($_GET['sku']) ? $_GET['sku'] : null;
$productId = isset($_GET['id']) ? $_GET['id'] : null;
if ($sku) {
$product = $mdb->get('pp_shop_products', '*', ['sku' => $sku]);
if ($sku)
{
$product = $mdb->get('pp_shop_products', '*', ['sku' => $sku]);
if ($product) {
$image = $mdb->get('pp_shop_products_images', '*', ['product_id' => $product['id']]);
$productDescription = $mdb->get('pp_shop_products_langs', '*', ['product_id' => $product['id'], 'lang_id' => 'pl']);
if ($product)
{
$image = $mdb->get('pp_shop_products_images', '*', ['product_id' => $product['id']]);
$productDescription = $mdb->get('pp_shop_products_langs', '*', ['product_id' => $product['id'], 'lang_id' => 'pl']);
$productArr = [
'id' => $product['id'],
'name' => $productDescription ? $productDescription['name'] : '',
'img' => $image ? ($settings['ssl'] ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $image['src'] : '',
'price_netto' => $product['price_netto'],
'price_brutto' => $product['price_brutto'],
'sku' => $product['sku'],
'ean' => $product['ean'],
'date_added' => $product['date_add'],
];
$productArr = [
'id' => $product['id'],
'name' => $productDescription ? $productDescription['name'] : '',
'img' => $image ? 'https://' . $_SERVER['HTTP_HOST'] . $image['src'] : '',
'price_netto' => $product['price_netto'],
'price_brutto' => $product['price_brutto'],
'sku' => $product['sku'],
'ean' => $product['ean'],
'date_added' => $product['date_add'],
];
echo json_encode($productArr, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE );
} else {
http_response_code(404);
echo json_encode(['error' => 'Product not found'], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
}
} elseif ($productId) {
$product = $mdb->get('pp_shop_products', '*', ['id' => $productId]);
echo json_encode($productArr, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
}
else
{
http_response_code(404);
echo json_encode(['error' => 'Product not found'], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
}
}
elseif ($productId)
{
$product = $mdb->get('pp_shop_products', '*', ['id' => $productId]);
if ($product) {
$image = $mdb->get('pp_shop_products_images', '*', ['product_id' => $product['id']]);
$productDescription = $mdb->get('pp_shop_products_langs', '*', ['product_id' => $product['id'], 'lang_id' => 'pl']);
if ($product)
{
$image = $mdb->get('pp_shop_products_images', '*', ['product_id' => $product['id']]);
$productDescription = $mdb->get('pp_shop_products_langs', '*', ['product_id' => $product['id'], 'lang_id' => 'pl']);
$productArr = [
'id' => $product['id'],
'name' => $productDescription ? $productDescription['name'] : '',
'img' => $image ? ($settings['ssl'] ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $image['src'] : '',
'price_netto' => $product['price_netto'],
'price_brutto' => $product['price_brutto'],
'sku' => $product['sku'],
'ean' => $product['ean'],
'date_added' => $product['date_add'],
];
$productArr = [
'id' => $product['id'],
'name' => $productDescription ? $productDescription['name'] : '',
'img' => $image ? ($settings['ssl'] ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . $image['src'] : '',
'price_netto' => $product['price_netto'],
'price_brutto' => $product['price_brutto'],
'sku' => $product['sku'],
'ean' => $product['ean'],
'date_added' => $product['date_add'],
];
echo json_encode($productArr, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
} else {
http_response_code(404);
echo json_encode(['error' => 'Product not found'], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
}
} else {
http_response_code(400);
echo json_encode(['error' => 'SKU or ID is missing'], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
}
echo json_encode($productArr, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
}
else
{
http_response_code(404);
echo json_encode(['error' => 'Product not found'], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
}
}
else
{
http_response_code(400);
echo json_encode(['error' => 'SKU or ID is missing'], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
}

View File

@@ -3,9 +3,9 @@ namespace admin\controls;
class Filemanager
{
public function draw()
static public function draw()
{
return \admin\view\FileManager::filemanager();
return \Tpl::view( 'filemanager/filemanager' );
}
}
?>

View File

@@ -3,10 +3,5 @@ namespace admin\view;
class FileManager
{
public function filemanager()
{
$tpl = new \Tpl;
return $tpl -> render( 'filemanager/filemanager' );
}
}
?>

View File

@@ -81,15 +81,15 @@ CKEDITOR.editorConfig = function (config) {
config.bootstrapTab_managePopupContent = true;
config.mj_variables_allow_html = true;
config.copyFormatting_allowedContexts = true;
config.jsplus_bootstrap_version = 4;
config.filebrowserBrowseUrl = '/libraries/filemanager-9.14.1/dialog.php?type=2&editor=ckeditor&akey=c3cb2537d25c0efc9e573d059d79c3b8';
config.filebrowserImageBrowseUrl = '/libraries/filemanager-9.14.1/dialog.php?type=1&editor=ckeditor&akey=c3cb2537d25c0efc9e573d059d79c3b8';
config.filebrowserUploadUrl = '/libraries/filemanager-9.14.1/dialog.php?type=2&editor=ckeditor&akey=c3cb2537d25c0efc9e573d059d79c3b8';
config.filebrowserBrowseUrl = '/libraries/filemanager-9.14.2/dialog.php?type=2&editor=ckeditor&akey=c3cb2537d25c0efc9e573d059d79c3b8';
config.filebrowserImageBrowseUrl = '/libraries/filemanager-9.14.2dialog.php?type=1&editor=ckeditor&akey=c3cb2537d25c0efc9e573d059d79c3b8';
config.filebrowserUploadUrl = '/libraries/filemanager-9.14.2/dialog.php?type=2&editor=ckeditor&akey=c3cb2537d25c0efc9e573d059d79c3b8';
config.contentsCss = '/libraries/framework/fonts/font-awesome/font-awesome.css';
config.fontawesomePath = '/libraries/font-awesome-4.7.0/css/font-awesome.min.css';
config.allowedContent = true;
config.extraAllowedContent = 'img(*)[*]{*}';
};

View File

@@ -5,8 +5,6 @@ if (session_id() == '') {
}
mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');
mb_http_input('UTF-8');
mb_language('uni');
mb_regex_encoding('UTF-8');
ob_start('mb_output_handler');
@@ -568,9 +566,9 @@ return array_merge(
'tui_defaults_config' => array(
//'common.bi.image' => $config['common.bi.image'],
//'common.bisize.width' => $config['common.bisize.width'],
//'common.bisize.height' => $config['common.bisize.height'],
//'common.bisize.height' => $config['common.bisize.height'],
'common.backgroundImage' => $config['common.backgroundImage'],
'common.backgroundColor' => $config['common.backgroundColor'],
'common.backgroundColor' => $config['common.backgroundColor'],
'common.border' => $config['common.border'],
'header.backgroundImage' => $config['header.backgroundImage'],
'header.backgroundColor' => $config['header.backgroundColor'],

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,680 @@
<?php
$config = include 'config/config.php';
require_once 'include/utils.php';
if ($_SESSION['RF']["verify"] !== "RESPONSIVEfilemanager") {
response(trans('forbidden').AddErrorLocation())->send();
exit;
}
$languages = include 'lang/languages.php';
if (isset($_SESSION['RF']['language']) && file_exists('lang/' . basename($_SESSION['RF']['language']) . '.php')) {
if (array_key_exists($_SESSION['RF']['language'], $languages)) {
include 'lang/' . basename($_SESSION['RF']['language']) . '.php';
} else {
response(trans('Lang_Not_Found').AddErrorLocation())->send();
exit;
}
} else {
response(trans('Lang_Not_Found').AddErrorLocation())->send();
exit;
}
//check $_GET['file']
if (isset($_GET['file']) && !checkRelativePath($_GET['file'])) {
response(trans('wrong path').AddErrorLocation())->send();
exit;
}
//check $_POST['file']
if(isset($_POST['path']) && !checkRelativePath($_POST['path'])) {
response(trans('wrong path').AddErrorLocation())->send();
exit;
}
$ftp = ftp_con($config);
if (isset($_GET['action'])) {
switch ($_GET['action']) {
case 'new_file_form':
echo trans('Filename') . ': <input type="text" id="create_text_file_name" style="height:30px"> <select id="create_text_file_extension" style="margin:0;width:100px;">';
foreach ($config['editable_text_file_exts'] as $ext) {
echo '<option value=".'.$ext.'">.'.$ext.'</option>';
}
echo '</select><br><hr><textarea id="textfile_create_area" style="width:100%;height:150px;"></textarea>';
break;
case 'view':
if (isset($_GET['type'])) {
$_SESSION['RF']["view_type"] = $_GET['type'];
} else {
response(trans('view type number missing').AddErrorLocation())->send();
exit;
}
break;
case 'filter':
if (isset($_GET['type'])) {
if (isset($config['remember_text_filter']) && $config['remember_text_filter']) {
$_SESSION['RF']["filter"] = $_GET['type'];
}
} else {
response(trans('view type number missing').AddErrorLocation())->send();
exit;
}
break;
case 'sort':
if (isset($_GET['sort_by'])) {
$_SESSION['RF']["sort_by"] = $_GET['sort_by'];
}
if (isset($_GET['descending']))
{
$_SESSION['RF']["descending"] = $_GET['descending'];
}
break;
case 'save_img':
$info = pathinfo($_POST['name']);
$image_data = $_POST['url'];
$ext = strtolower($info['extension']);
if (preg_match('/^data:image\/(\w+);base64,/', $image_data, $type)) {
$image_data = substr($image_data, strpos($image_data, ',') + 1);
$type = strtolower($type[1]); // jpg, png, gif
// Images get some additional checks
if (!in_array($type, array('gif', 'jpg', 'jpeg', 'jpe', 'png', 'webp'), TRUE))
{
response('File type not allowed')->send();
exit;
}
if (!in_array($ext, array('gif', 'jpg', 'jpeg', 'jpe', 'png', 'webp'), TRUE))
{
response('Extension not allowed')->send();
exit;
}
$image_data = base64_decode($image_data);
if ($image_data === false) {
response(trans('TUI_Decode_Failed').AddErrorLocation())->send();
exit;
}
} else {
response(trans('').AddErrorLocation())->send();
exit;
}
if ($image_data === false) {
response(trans('').AddErrorLocation())->send();
exit;
}
if (!checkresultingsize(strlen($image_data))) {
response(sprintf(trans('max_size_reached'), $config['MaxSizeTotal']).AddErrorLocation())->send();
exit;
}
if ($ftp) {
$temp = tempnam('/tmp', 'RF');
unlink($temp);
$temp .=".".substr(strrchr($_POST['url'], '.'), 1);
file_put_contents($temp, $image_data);
// remove file if not image
if (@getimagesize($temp) === FALSE) {
unlink($temp);
exit;
}
$ftp->put($config['ftp_base_folder'].$config['upload_dir'] . $_POST['path'] . $_POST['name'], $temp, FTP_BINARY);
create_img($temp, $temp, 122, 91);
$ftp->put($config['ftp_base_folder'].$config['ftp_thumbs_dir']. $_POST['path'] . $_POST['name'], $temp, FTP_BINARY);
unlink($temp);
} else {
$pathFileName = $config['current_path'] . $_POST['path'] . $_POST['name'];
file_put_contents($pathFileName, $image_data);
// remove file if not image
if (@getimagesize($pathFileName) === FALSE) {
unlink($pathFileName);
exit;
}
create_img($pathFileName, $config['thumbs_base_path'].$_POST['path'].$_POST['name'], 122, 91);
// TODO something with this function cause its blowing my mind
new_thumbnails_creation(
$config['current_path'].$_POST['path'],
$config['current_path'].$_POST['path'].$_POST['name'],
$_POST['name'],
$config['current_path'],
$config
);
}
break;
case 'extract':
if (!$config['extract_files']) {
response(trans('wrong action').AddErrorLocation())->send();
}
if ($ftp) {
$path = $config['ftp_base_url'].$config['upload_dir'] . $_POST['path'];
$base_folder = $config['ftp_base_url'].$config['upload_dir'] . fix_dirname($_POST['path']) . "/";
} else {
$path = $config['current_path'] . $_POST['path'];
$base_folder = $config['current_path'] . fix_dirname($_POST['path']) . "/";
}
$info = pathinfo($path);
if ($ftp) {
$tempDir = tempdir();
$temp = tempnam($tempDir, 'RF');
unlink($temp);
$temp .= "." . $info['extension'];
$handle = fopen($temp, "w");
fwrite($handle, file_get_contents($path));
fclose($handle);
$path = $temp;
$base_folder = $tempDir . "/";
}
$info = pathinfo($path);
switch ($info['extension']) {
case "zip":
$zip = new ZipArchive;
if ($zip->open($path) === true) {
//get total size
$sizeTotalFinal = 0;
for ($i = 0; $i < $zip->numFiles; $i++) {
$aStat = $zip->statIndex($i);
$sizeTotalFinal += $aStat['size'];
}
if (!checkresultingsize($sizeTotalFinal)) {
response(sprintf(trans('max_size_reached'), $config['MaxSizeTotal']).AddErrorLocation())->send();
exit;
}
//make all the folders and unzip into the folders
for ($i = 0; $i < $zip->numFiles; $i++) {
$FullFileName = $zip->statIndex($i);
if (checkRelativePath($FullFileName['name'])) {
if (substr($FullFileName['name'], -1, 1) == "/") {
create_folder($base_folder . $FullFileName['name']);
}
if (! (substr($FullFileName['name'], -1, 1) == "/")) {
$fileinfo = pathinfo($FullFileName['name']);
if (in_array(strtolower($fileinfo['extension']), $config['ext'])) {
copy('zip://' . $path . '#' . $FullFileName['name'], $base_folder . $FullFileName['name']);
}
}
}
}
$zip->close();
} else {
response(trans('Zip_No_Extract').AddErrorLocation())->send();
exit;
}
break;
case "gz":
// No resulting size pre-control available
$p = new PharData($path);
$p->decompress(); // creates files.tar
break;
case "tar":
// No resulting size pre-control available
// unarchive from the tar
$phar = new PharData($path);
$phar->decompressFiles();
$files = [];
check_files_extensions_on_phar($phar, $files, '', $config);
$phar->extractTo($base_folder, $files, true);
break;
default:
response(trans('Zip_Invalid').AddErrorLocation())->send();
exit;
}
if ($ftp) {
unlink($path);
$ftp->putAll($base_folder, "/".$config['ftp_base_folder'] . $config['upload_dir'] . fix_dirname($_POST['path']), FTP_BINARY);
deleteDir($base_folder);
}
break;
case 'media_preview':
if(isset($_GET['file'])){
$_GET['file'] = sanitize($_GET['file']);
}
if(isset($_GET['title'])){
$_GET['title'] = sanitize($_GET['title']);
}
if($ftp){
$preview_file = $config['ftp_base_url'].$config['upload_dir'] . $_GET['file'];
}else{
$preview_file = $config['current_path'] . $_GET["file"];
}
$info = pathinfo($preview_file);
ob_start();
?>
<div id="jp_container_1" class="jp-video" style="margin:0 auto;">
<div class="jp-type-single">
<div id="jquery_jplayer_1" class="jp-jplayer"></div>
<div class="jp-gui">
<div class="jp-video-play">
<a href="javascript:;" class="jp-video-play-icon" tabindex="1">play</a>
</div>
<div class="jp-interface">
<div class="jp-progress">
<div class="jp-seek-bar">
<div class="jp-play-bar"></div>
</div>
</div>
<div class="jp-current-time"></div>
<div class="jp-duration"></div>
<div class="jp-controls-holder">
<ul class="jp-controls">
<li><a href="javascript:;" class="jp-play" tabindex="1">play</a></li>
<li><a href="javascript:;" class="jp-pause" tabindex="1">pause</a></li>
<li><a href="javascript:;" class="jp-stop" tabindex="1">stop</a></li>
<li><a href="javascript:;" class="jp-mute" tabindex="1" title="mute">mute</a></li>
<li><a href="javascript:;" class="jp-unmute" tabindex="1" title="unmute">unmute</a></li>
<li><a href="javascript:;" class="jp-volume-max" tabindex="1" title="max volume">max volume</a></li>
</ul>
<div class="jp-volume-bar">
<div class="jp-volume-bar-value"></div>
</div>
<ul class="jp-toggles">
<li><a href="javascript:;" class="jp-full-screen" tabindex="1" title="full screen">full screen</a></li>
<li><a href="javascript:;" class="jp-restore-screen" tabindex="1" title="restore screen">restore screen</a></li>
<li><a href="javascript:;" class="jp-repeat" tabindex="1" title="repeat">repeat</a></li>
<li><a href="javascript:;" class="jp-repeat-off" tabindex="1" title="repeat off">repeat off</a></li>
</ul>
</div>
<div class="jp-title" style="display:none;">
<ul>
<li></li>
</ul>
</div>
</div>
</div>
<div class="jp-no-solution">
<span>Update Required</span>
To play the media you will need to either update your browser to a recent version or update your <a href="https://get.adobe.com/flashplayer/" target="_blank">Flash plugin</a>.
</div>
</div>
</div>
<?php if(in_array(strtolower($info['extension']), $config['ext_music'])): ?>
<script type="text/javascript">
$(document).ready(function () {
$("#jquery_jplayer_1").jPlayer({
ready: function () {
$(this).jPlayer("setMedia", {
title: "<?php $_GET['title']; ?>",
mp3: "<?php echo $preview_file; ?>",
m4a: "<?php echo $preview_file; ?>",
oga: "<?php echo $preview_file; ?>",
wav: "<?php echo $preview_file; ?>"
});
},
swfPath: "js",
solution: "html,flash",
supplied: "mp3, m4a, midi, mid, oga,webma, ogg, wav",
smoothPlayBar: true,
keyEnabled: false
});
});
</script>
<?php elseif (in_array(strtolower($info['extension']), $config['ext_video'])): ?>
<script type="text/javascript">
$(document).ready(function () {
$("#jquery_jplayer_1").jPlayer({
ready: function () {
$(this).jPlayer("setMedia", {
title: "<?php $_GET['title']; ?>",
m4v: "<?php echo $preview_file; ?>",
ogv: "<?php echo $preview_file; ?>",
flv: "<?php echo $preview_file; ?>"
});
},
swfPath: "js",
solution: "html,flash",
supplied: "mp4, m4v, ogv, flv, webmv, webm",
smoothPlayBar: true,
keyEnabled: false
});
});
</script>
<?php endif;
$content = ob_get_clean();
response($content)->send();
exit;
break;
case 'copy_cut':
if ($_POST['sub_action'] != 'copy' && $_POST['sub_action'] != 'cut') {
response(trans('wrong sub-action').AddErrorLocation())->send();
exit;
}
if (trim($_POST['path']) == '') {
response(trans('no path').AddErrorLocation())->send();
exit;
}
$msg_sub_action = ($_POST['sub_action'] == 'copy' ? trans('Copy') : trans('Cut'));
$path = $config['current_path'] . $_POST['path'];
if (is_dir($path)) {
// can't copy/cut dirs
if ($config['copy_cut_dirs'] === false) {
response(sprintf(trans('Copy_Cut_Not_Allowed'), $msg_sub_action, trans('Folders')).AddErrorLocation())->send();
exit;
}
list($sizeFolderToCopy, $fileNum, $foldersCount) = folder_info($path, false);
// size over limit
if ($config['copy_cut_max_size'] !== false && is_int($config['copy_cut_max_size'])) {
if (($config['copy_cut_max_size'] * 1024 * 1024) < $sizeFolderToCopy) {
response(sprintf(trans('Copy_Cut_Size_Limit'), $msg_sub_action, $config['copy_cut_max_size']).AddErrorLocation())->send();
exit;
}
}
// file count over limit
if ($config['copy_cut_max_count'] !== false && is_int($config['copy_cut_max_count'])) {
if ($config['copy_cut_max_count'] < $fileNum) {
response(sprintf(trans('Copy_Cut_Count_Limit'), $msg_sub_action, $config['copy_cut_max_count']).AddErrorLocation())->send();
exit;
}
}
if (!checkresultingsize($sizeFolderToCopy)) {
response(sprintf(trans('max_size_reached'), $config['MaxSizeTotal']).AddErrorLocation())->send();
exit;
}
} else {
// can't copy/cut files
if ($config['copy_cut_files'] === false) {
response(sprintf(trans('Copy_Cut_Not_Allowed'), $msg_sub_action, trans('Files')).AddErrorLocation())->send();
exit;
}
}
$_SESSION['RF']['clipboard']['path'] = $_POST['path'];
$_SESSION['RF']['clipboard_action'] = $_POST['sub_action'];
break;
case 'clear_clipboard':
$_SESSION['RF']['clipboard'] = null;
$_SESSION['RF']['clipboard_action'] = null;
break;
case 'chmod':
if ($ftp) {
$path = $config['ftp_base_url'] . $config['upload_dir'] . $_POST['path'];
if (
($_POST['folder']==1 && $config['chmod_dirs'] === false)
|| ($_POST['folder']==0 && $config['chmod_files'] === false)
|| (is_function_callable("chmod") === false)) {
response(sprintf(trans('File_Permission_Not_Allowed'), (is_dir($path) ? trans('Folders') : trans('Files')), 403).AddErrorLocation())->send();
exit;
}
$info = $_POST['permissions'];
} else {
$path = $config['current_path'] . $_POST['path'];
if (
(is_dir($path) && $config['chmod_dirs'] === false)
|| (is_file($path) && $config['chmod_files'] === false)
|| (is_function_callable("chmod") === false)) {
response(sprintf(trans('File_Permission_Not_Allowed'), (is_dir($path) ? trans('Folders') : trans('Files')), 403).AddErrorLocation())->send();
exit;
}
$perms = fileperms($path) & 0777;
$info = '-';
// Owner
$info .= (($perms & 0x0100) ? 'r' : '-');
$info .= (($perms & 0x0080) ? 'w' : '-');
$info .= (($perms & 0x0040) ?
(($perms & 0x0800) ? 's' : 'x') :
(($perms & 0x0800) ? 'S' : '-'));
// Group
$info .= (($perms & 0x0020) ? 'r' : '-');
$info .= (($perms & 0x0010) ? 'w' : '-');
$info .= (($perms & 0x0008) ?
(($perms & 0x0400) ? 's' : 'x') :
(($perms & 0x0400) ? 'S' : '-'));
// World
$info .= (($perms & 0x0004) ? 'r' : '-');
$info .= (($perms & 0x0002) ? 'w' : '-');
$info .= (($perms & 0x0001) ?
(($perms & 0x0200) ? 't' : 'x') :
(($perms & 0x0200) ? 'T' : '-'));
}
$ret = '<div id="files_permission_start">
<form id="chmod_form">
<table class="table file-perms-table">
<thead>
<tr>
<td></td>
<td>r&nbsp;&nbsp;</td>
<td>w&nbsp;&nbsp;</td>
<td>x&nbsp;&nbsp;</td>
</tr>
</thead>
<tbody>
<tr>
<td>'.trans('User').'</td>
<td><input id="u_4" type="checkbox" data-value="4" data-group="user" '.(substr($info, 1, 1)=='r' ? " checked" : "").'></td>
<td><input id="u_2" type="checkbox" data-value="2" data-group="user" '.(substr($info, 2, 1)=='w' ? " checked" : "").'></td>
<td><input id="u_1" type="checkbox" data-value="1" data-group="user" '.(substr($info, 3, 1)=='x' ? " checked" : "").'></td>
</tr>
<tr>
<td>'.trans('Group').'</td>
<td><input id="g_4" type="checkbox" data-value="4" data-group="group" '.(substr($info, 4, 1)=='r' ? " checked" : "").'></td>
<td><input id="g_2" type="checkbox" data-value="2" data-group="group" '.(substr($info, 5, 1)=='w' ? " checked" : "").'></td>
<td><input id="g_1" type="checkbox" data-value="1" data-group="group" '.(substr($info, 6, 1)=='x' ? " checked" : "").'></td>
</tr>
<tr>
<td>'.trans('All').'</td>
<td><input id="a_4" type="checkbox" data-value="4" data-group="all" '.(substr($info, 7, 1)=='r' ? " checked" : "").'></td>
<td><input id="a_2" type="checkbox" data-value="2" data-group="all" '.(substr($info, 8, 1)=='w' ? " checked" : "").'></td>
<td><input id="a_1" type="checkbox" data-value="1" data-group="all" '.(substr($info, 9, 1)=='x' ? " checked" : "").'></td>
</tr>
<tr>
<td></td>
<td colspan="3"><input type="text" class="input-block-level" name="chmod_value" id="chmod_value" value="" data-def-value=""></td>
</tr>
</tbody>
</table>';
if ((!$ftp && is_dir($path))) {
$ret .= '<div class="hero-unit" style="padding:10px;">'.trans('File_Permission_Recursive').'<br/><br/>
<ul class="unstyled">
<li><label class="radio"><input value="none" name="apply_recursive" type="radio" checked> '.trans('No').'</label></li>
<li><label class="radio"><input value="files" name="apply_recursive" type="radio"> '.trans('Files').'</label></li>
<li><label class="radio"><input value="folders" name="apply_recursive" type="radio"> '.trans('Folders').'</label></li>
<li><label class="radio"><input value="both" name="apply_recursive" type="radio"> '.trans('Files').' & '.trans('Folders').'</label></li>
</ul>
</div>';
}
$ret .= '</form></div>';
response($ret)->send();
exit;
break;
case 'get_lang':
if (! file_exists('lang/languages.php')) {
response(trans('Lang_Not_Found').AddErrorLocation())->send();
exit;
}
$languages = include 'lang/languages.php';
if (! isset($languages) || ! is_array($languages)) {
response(trans('Lang_Not_Found').AddErrorLocation())->send();
exit;
}
$curr = $_SESSION['RF']['language'];
$ret = '<select id="new_lang_select">';
foreach ($languages as $code => $name) {
$ret .= '<option value="' . $code . '"' . ($code == $curr ? ' selected' : '') . '>' . $name . '</option>';
}
$ret .= '</select>';
response($ret)->send();
exit;
break;
case 'change_lang':
$choosen_lang = (!empty($_POST['choosen_lang']))? $_POST['choosen_lang']:"en_EN";
if (array_key_exists($choosen_lang, $languages)) {
if (! file_exists('lang/' . $choosen_lang . '.php')) {
response(trans('Lang_Not_Found').AddErrorLocation())->send();
exit;
} else {
$_SESSION['RF']['language'] = $choosen_lang;
}
}
break;
case 'cad_preview':
if ($ftp) {
$selected_file = $config['ftp_base_url'].$config['upload_dir'] . $_GET['file'];
} else {
$selected_file = $config['current_path'] . $_GET['file'];
if (! file_exists($selected_file)) {
response(trans('File_Not_Found').AddErrorLocation())->send();
exit;
}
}
if ($ftp) {
$url_file = $selected_file;
} else {
$url_file = $config['base_url'] . $config['upload_dir'] . str_replace($config['current_path'], '', $_GET["file"]);
}
$cad_url = urlencode($url_file);
$cad_html = "<iframe src=\"//sharecad.org/cadframe/load?url=" . $url_file . "\" class=\"google-iframe\" scrolling=\"no\"></iframe>";
$ret = $cad_html;
response($ret)->send();
break;
case 'get_file': // preview or edit
$sub_action = $_GET['sub_action'];
$preview_mode = $_GET["preview_mode"];
if ($sub_action != 'preview' && $sub_action != 'edit') {
response(trans('wrong action').AddErrorLocation())->send();
exit;
}
if ($ftp) {
$selected_file = ($sub_action == 'preview' ? $config['ftp_base_url'].$config['upload_dir'] . $_GET['file'] : $config['ftp_base_url'].$config['upload_dir'] . $_POST['path']);
} else {
$selected_file = ($sub_action == 'preview' ? $config['current_path'] . $_GET['file'] : $config['current_path'] . $_POST['path']);
if (! file_exists($selected_file)) {
response(trans('File_Not_Found').AddErrorLocation())->send();
exit;
}
}
$info = pathinfo($selected_file);
if ($preview_mode == 'text') {
$is_allowed = ($sub_action == 'preview' ? $config['preview_text_files'] : $config['edit_text_files']);
$allowed_file_exts = ($sub_action == 'preview' ? $config['previewable_text_file_exts'] : $config['editable_text_file_exts']);
} elseif ($preview_mode == 'google') {
$is_allowed = $config['googledoc_enabled'];
$allowed_file_exts = $config['googledoc_file_exts'];
}
if (! isset($allowed_file_exts) || ! is_array($allowed_file_exts)) {
$allowed_file_exts = [];
}
if (!isset($info['extension'])) {
$info['extension']='';
}
if (! in_array($info['extension'], $allowed_file_exts)
|| ! isset($is_allowed)
|| $is_allowed === false
|| (!$ftp && ! is_readable($selected_file))
) {
response(sprintf(trans('File_Open_Edit_Not_Allowed'), ($sub_action == 'preview' ? strtolower(trans('Open')) : strtolower(trans('Edit')))).AddErrorLocation())->send();
exit;
}
if ($sub_action == 'preview') {
if ($preview_mode == 'text') {
// get and sanities
$data = file_get_contents($selected_file);
$data = htmlspecialchars(htmlspecialchars_decode($data));
$ret = '';
$ret .= '<script src="https://rawgit.com/google/code-prettify/master/loader/run_prettify.js?autoload=true&skin=sunburst"></script>';
$ret .= '<?prettify lang='.$info['extension'].' linenums=true?><pre class="prettyprint"><code class="language-'.$info['extension'].'">'.$data.'</code></pre>';
} elseif ($preview_mode == 'google') {
if ($ftp) {
$url_file = $selected_file;
} else {
$url_file = $config['base_url'] . $config['upload_dir'] . str_replace($config['current_path'], '', $_GET["file"]);
}
$googledoc_url = urlencode($url_file);
$ret = "<iframe src=\"https://docs.google.com/viewer?url=" . $url_file . "&embedded=true\" class=\"google-iframe\"></iframe>";
}
}else{
$data = stripslashes(htmlspecialchars(file_get_contents($selected_file)));
if(in_array($info['extension'], ['html','html'])){
$ret = '<script src="https://cdn.ckeditor.com/ckeditor5/12.1.0/classic/ckeditor.js"></script><textarea id="textfile_edit_area" style="width:100%;height:300px;">'.$data.'</textarea><script>setTimeout(function(){ ClassicEditor.create( document.querySelector( "#textfile_edit_area" )).catch( function(error){ console.error( error ); } ); }, 500);</script>';
}else{
$ret = '<textarea id="textfile_edit_area" style="width:100%;height:300px;">'.$data.'</textarea>';
}
}
response($ret)->send();
exit;
break;
default:
response(trans('no action passed').AddErrorLocation())->send();
exit;
}
} else {
response(trans('no action passed').AddErrorLocation())->send();
exit;
}

View File

@@ -0,0 +1 @@
Deny from all

View File

@@ -0,0 +1,618 @@
<?php
$version = "9.14.0";
if (session_id() == '') {
session_start();
}
mb_internal_encoding('UTF-8');
mb_http_output('UTF-8');
mb_language('uni');
mb_regex_encoding('UTF-8');
ob_start('mb_output_handler');
date_default_timezone_set('Europe/Rome');
setlocale(LC_CTYPE, 'en_US'); //correct transliteration
/*
|--------------------------------------------------------------------------
| Optional security
|--------------------------------------------------------------------------
|
| if set to true only those will access RF whose url contains the access key(akey) like:
| <input type="button" href="../filemanager/dialog.php?field_id=imgField&lang=en_EN&akey=myPrivateKey" value="Files">
| in tinymce a new parameter added: filemanager_access_key:"myPrivateKey"
| example tinymce config:
|
| tiny init ...
| external_filemanager_path:"../filemanager/",
| filemanager_title:"Filemanager" ,
| filemanager_access_key:"myPrivateKey" ,
| ...
|
*/
define('USE_ACCESS_KEYS', false); // TRUE or FALSE
/*
|--------------------------------------------------------------------------
| DON'T COPY THIS VARIABLES IN FOLDERS config.php FILES
|--------------------------------------------------------------------------
*/
define('DEBUG_ERROR_MESSAGE', false); // TRUE or FALSE
/*
|--------------------------------------------------------------------------
| Path configuration
|--------------------------------------------------------------------------
| In this configuration the folder tree is
| root
| |- source <- upload folder
| |- thumbs <- thumbnail folder [must have write permission (755)]
| |- filemanager
| |- js
| | |- tinymce
| | | |- plugins
| | | | |- responsivefilemanager
| | | | | |- plugin.min.js
*/
$config = [
/*
|--------------------------------------------------------------------------
| DON'T TOUCH (base url (only domain) of site).
|--------------------------------------------------------------------------
|
| without final / (DON'T TOUCH)
|
*/
'base_url' => ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == "on") ? "https" : "http"). "://". @$_SERVER['HTTP_HOST'],
/*
|--------------------------------------------------------------------------
| path from base_url to base of upload folder
|--------------------------------------------------------------------------
|
| with start and final /
|
*/
'upload_dir' => '/upload/filemanager/',
/*
|--------------------------------------------------------------------------
| relative path from filemanager folder to upload folder
|--------------------------------------------------------------------------
|
| with final /
|
*/
'current_path' => '../../upload/filemanager/',
/*
|--------------------------------------------------------------------------
| relative path from filemanager folder to thumbs folder
|--------------------------------------------------------------------------
|
| with final /
| DO NOT put inside upload folder
|
*/
'thumbs_base_path' => '../../temp/',
/*
|--------------------------------------------------------------------------
| path from base_url to base of thumbs folder
|--------------------------------------------------------------------------
|
| with final /
| DO NOT put inside upload folder
|
*/
'thumbs_upload_dir' => '/thumbs/',
/*
|--------------------------------------------------------------------------
| mime file control to define files extensions
|--------------------------------------------------------------------------
|
| If you want to be forced to assign the extension starting from the mime type
|
*/
'mime_extension_rename' => true,
/*
|--------------------------------------------------------------------------
| FTP configuration BETA VERSION
|--------------------------------------------------------------------------
|
| If you want enable ftp use write these parametres otherwise leave empty
| Remember to set base_url properly to point in the ftp server domain and
| upload dir will be ftp_base_folder + upload_dir so without final /
|
*/
'ftp_host' => false, //put the FTP host
'ftp_user' => "user",
'ftp_pass' => "pass",
'ftp_base_folder' => "base_folder",
'ftp_base_url' => "http://site to ftp root",
// Directory where place files before to send to FTP with final /
'ftp_temp_folder' => "../temp/",
/*
|---------------------------------------------------------------------------
| path from ftp_base_folder to base of thumbs folder with start and final /
|---------------------------------------------------------------------------
*/
'ftp_thumbs_dir' => '/thumbs/',
'ftp_ssl' => false,
'ftp_port' => 21,
/* EXAMPLE
'ftp_host' => "host.com",
'ftp_user' => "test@host.com",
'ftp_pass' => "pass.1",
'ftp_base_folder' => "",
'ftp_base_url' => "http://host.com/testFTP",
*/
/*
|--------------------------------------------------------------------------
| Multiple files selection
|--------------------------------------------------------------------------
| The user can delete multiple files, select all files , deselect all files
*/
'multiple_selection' => true,
/*
|
| The user can have a select button that pass a json to external input or pass the first file selected to editor
| If you use responsivefilemanager tinymce extension can copy into editor multiple object like images, videos, audios, links in the same time
|
*/
'multiple_selection_action_button' => true,
/*
|--------------------------------------------------------------------------
| Access keys
|--------------------------------------------------------------------------
|
| add access keys eg: array('myPrivateKey', 'someoneElseKey');
| keys should only containt (a-z A-Z 0-9 \ . _ -) characters
| if you are integrating lets say to a cms for admins, i recommend making keys randomized something like this:
| $username = 'Admin';
| $salt = 'dsflFWR9u2xQa' (a hard coded string)
| $akey = md5($username.$salt);
| DO NOT use 'key' as access key!
| Keys are CASE SENSITIVE!
|
*/
'access_keys' => [],
//--------------------------------------------------------------------------------------------------------
// YOU CAN COPY AND CHANGE THESE VARIABLES INTO FOLDERS config.php FILES TO CUSTOMIZE EACH FOLDER OPTIONS
//--------------------------------------------------------------------------------------------------------
/*
|--------------------------------------------------------------------------
| Maximum size of all files in source folder
|--------------------------------------------------------------------------
|
| in Megabytes
|
*/
'MaxSizeTotal' => false,
/*
|--------------------------------------------------------------------------
| Maximum upload size
|--------------------------------------------------------------------------
|
| in Megabytes
|
*/
'MaxSizeUpload' => 10,
/*
|--------------------------------------------------------------------------
| File and Folder permission
|--------------------------------------------------------------------------
|
*/
'filePermission' => 0755,
'folderPermission' => 0777,
/*
|--------------------------------------------------------------------------
| default language file name
|--------------------------------------------------------------------------
*/
'default_language' => "en_EN",
/*
|--------------------------------------------------------------------------
| Icon theme
|--------------------------------------------------------------------------
|
| Default available: ico and ico_dark
| Can be set to custom icon inside filemanager/img
|
*/
'icon_theme' => "ico",
//Show or not total size in filemanager (is possible to greatly increase the calculations)
'show_total_size' => false,
//Show or not show folder size in list view feature in filemanager (is possible, if there is a large folder, to greatly increase the calculations)
'show_folder_size' => false,
//Show or not show sorting feature in filemanager
'show_sorting_bar' => true,
//Show or not show filters button in filemanager
'show_filter_buttons' => true,
//Show or not language selection feature in filemanager
'show_language_selection' => true,
//active or deactive the transliteration (mean convert all strange characters in A..Za..z0..9 characters)
'transliteration' => false,
//convert all spaces on files name and folders name with $replace_with variable
'convert_spaces' => false,
//convert all spaces on files name and folders name this value
'replace_with' => "_",
//convert to lowercase the files and folders name
'lower_case' => false,
//Add ?484899493349 (time value) to returned images to prevent cache
'add_time_to_img' => false,
//*******************************************
//Images limit and resizing configuration
//*******************************************
// set maximum pixel width and/or maximum pixel height for all images
// If you set a maximum width or height, oversized images are converted to those limits. Images smaller than the limit(s) are unaffected
// if you don't need a limit set both to 0
'image_max_width' => 0,
'image_max_height' => 0,
'image_max_mode' => 'auto',
/*
# $option: 0 / exact = defined size;
# 1 / portrait = keep aspect set height;
# 2 / landscape = keep aspect set width;
# 3 / auto = auto;
# 4 / crop= resize and crop;
*/
//Automatic resizing //
// If you set $image_resizing to TRUE the script converts all uploaded images exactly to image_resizing_width x image_resizing_height dimension
// If you set width or height to 0 the script automatically calculates the other dimension
// Is possible that if you upload very big images the script not work to overcome this increase the php configuration of memory and time limit
'image_resizing' => false,
'image_resizing_width' => 0,
'image_resizing_height' => 0,
'image_resizing_mode' => 'auto', // same as $image_max_mode
'image_resizing_override' => false,
// If set to TRUE then you can specify bigger images than $image_max_width & height otherwise if image_resizing is
// bigger than $image_max_width or height then it will be converted to those values
//******************
//
// WATERMARK IMAGE
//
//Watermark path or false
'image_watermark' => false,//"../watermark.png",
# Could be a pre-determined position such as:
# tl = top left,
# t = top (middle),
# tr = top right,
# l = left,
# m = middle,
# r = right,
# bl = bottom left,
# b = bottom (middle),
# br = bottom right
# Or, it could be a co-ordinate position such as: 50x100
'image_watermark_position' => 'br',
# padding: If using a pre-determined position you can
# adjust the padding from the edges by passing an amount
# in pixels. If using co-ordinates, this value is ignored.
'image_watermark_padding' => 10,
//******************
// Default layout setting
//
// 0 => boxes
// 1 => detailed list (1 column)
// 2 => columns list (multiple columns depending on the width of the page)
// YOU CAN ALSO PASS THIS PARAMETERS USING SESSION VAR => $_SESSION['RF']["VIEW"]=
//
//******************
'default_view' => 0,
//set if the filename is truncated when overflow first row
'ellipsis_title_after_first_row' => true,
//*************************
//Permissions configuration
//******************
'delete_files' => true,
'create_folders' => true,
'delete_folders' => true,
'upload_files' => true,
'rename_files' => true,
'rename_folders' => true,
'duplicate_files' => true,
'extract_files' => true,
'copy_cut_files' => true, // for copy/cut files
'copy_cut_dirs' => true, // for copy/cut directories
'chmod_files' => true, // change file permissions
'chmod_dirs' => true, // change folder permissions
'preview_text_files' => true, // eg.: txt, log etc.
'edit_text_files' => true, // eg.: txt, log etc.
'create_text_files' => true, // only create files with exts. defined in $config['editable_text_file_exts']
'download_files' => true, // allow download files or just preview
// you can preview these type of files if $preview_text_files is true
'previewable_text_file_exts' => ["bsh", "c","css", "cc", "cpp", "cs", "csh", "cyc", "cv", "htm", "html", "java", "js", "m", "mxml", "perl", "pl", "pm", "py", "rb", "sh", "xhtml", "xml","xsl",'txt', 'log',''],
// you can edit these type of files if $edit_text_files is true (only text based files)
// you can create these type of files if $config['create_text_files'] is true (only text based files)
// if you want you can add html,css etc.
// but for security reasons it's NOT RECOMMENDED!
'editable_text_file_exts' => ['txt', 'log', 'xml', 'html', 'css', 'htm', 'js',''],
'jplayer_exts' => ["mp4","flv","webmv","webma","webm","m4a","m4v","ogv","oga","mp3","midi","mid","ogg","wav"],
'cad_exts' => ['dwg', 'dxf', 'hpgl', 'plt', 'spl', 'step', 'stp', 'iges', 'igs', 'sat', 'cgm', 'svg'],
// Preview with Google Documents
'googledoc_enabled' => true,
'googledoc_file_exts' => ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx' , 'pdf', 'odt', 'odp', 'ods'],
// defines size limit for paste in MB / operation
// set 'FALSE' for no limit
'copy_cut_max_size' => 100,
// defines file count limit for paste / operation
// set 'FALSE' for no limit
'copy_cut_max_count' => 200,
//IF any of these limits reached, operation won't start and generate warning
//**********************
//Allowed extensions (lowercase insert)
//**********************
'ext_img' => ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'svg', 'ico', 'webp'], //Images
'ext_file' => ['doc', 'docx', 'rtf', 'pdf', 'xls', 'xlsx', 'txt', 'csv', 'html', 'xhtml', 'psd', 'sql', 'log', 'fla', 'xml', 'ade', 'adp', 'mdb', 'accdb', 'ppt', 'pptx', 'odt', 'ots', 'ott', 'odb', 'odg', 'otp', 'otg', 'odf', 'ods', 'odp', 'css', 'ai', 'kmz','dwg', 'dxf', 'hpgl', 'plt', 'spl', 'step', 'stp', 'iges', 'igs', 'sat', 'cgm', 'tiff',''], //Files
'ext_video' => ['mov', 'mpeg', 'm4v', 'mp4', 'avi', 'mpg', 'wma', "flv", "webm"], //Video
'ext_music' => ['mp3', 'mpga', 'm4a', 'ac3', 'aiff', 'mid', 'ogg', 'wav'], //Audio
'ext_misc' => ['zip', 'rar', 'gz', 'tar', 'iso', 'dmg'], //Archives
//*********************
// If you insert an extensions blacklist array the filemanager don't check any extensions but simply block the extensions in the list
// otherwise check Allowed extensions configuration
//*********************
'ext_blacklist' => false,//['exe','bat','jpg'],
//Empty filename permits like .htaccess, .env, ...
'empty_filename' => false,
/*
|--------------------------------------------------------------------------
| accept files without extension
|--------------------------------------------------------------------------
|
| If you want to accept files without extension, remember to add '' extension on allowed extension
|
*/
'files_without_extension' => false,
/******************
* TUI Image Editor config
*******************/
// Add or modify the options below as needed - they will be json encoded when added to the configuration so arrays can be utilized as needed
'tui_active' => true,
'tui_position' => 'bottom',
// 'common.bi.image' => "../assets/images/logo.png",
// 'common.bisize.width' => '70px',
// 'common.bisize.height' => '25px',
'common.backgroundImage' => 'none',
'common.backgroundColor' => '#ececec',
'common.border' => '1px solid #E6E7E8',
// header
'header.backgroundImage' => 'none',
'header.backgroundColor' => '#ececec',
'header.border' => '0px',
// main icons
'menu.normalIcon.path' => 'svg/icon-d.svg',
'menu.normalIcon.name' => 'icon-d',
'menu.activeIcon.path' => 'svg/icon-b.svg',
'menu.activeIcon.name' => 'icon-b',
'menu.disabledIcon.path' => 'svg/icon-a.svg',
'menu.disabledIcon.name' => 'icon-a',
'menu.hoverIcon.path' => 'svg/icon-c.svg',
'menu.hoverIcon.name' => 'icon-c',
'menu.iconSize.width' => '24px',
'menu.iconSize.height' => '24px',
// submenu primary color
'submenu.backgroundColor' => '#ececec',
'submenu.partition.color' => '#000000',
// submenu icons
'submenu.normalIcon.path' => 'svg/icon-d.svg',
'submenu.normalIcon.name' => 'icon-d',
'submenu.activeIcon.path' => 'svg/icon-b.svg',
'submenu.activeIcon.name' => 'icon-b',
'submenu.iconSize.width' => '32px',
'submenu.iconSize.height' => '32px',
// submenu labels
'submenu.normalLabel.color' => '#000',
'submenu.normalLabel.fontWeight' => 'normal',
'submenu.activeLabel.color' => '#000',
'submenu.activeLabel.fontWeight' => 'normal',
// checkbox style
'checkbox.border' => '1px solid #E6E7E8',
'checkbox.backgroundColor' => '#000',
// rango style
'range.pointer.color' => '#333',
'range.bar.color' => '#ccc',
'range.subbar.color' => '#606060',
'range.disabledPointer.color' => '#d3d3d3',
'range.disabledBar.color' => 'rgba(85,85,85,0.06)',
'range.disabledSubbar.color' => 'rgba(51,51,51,0.2)',
'range.value.color' => '#000',
'range.value.fontWeight' => 'normal',
'range.value.fontSize' => '11px',
'range.value.border' => '0',
'range.value.backgroundColor' => '#f5f5f5',
'range.title.color' => '#000',
'range.title.fontWeight' => 'lighter',
// colorpicker style
'colorpicker.button.border' => '0px',
'colorpicker.title.color' => '#000',
//The filter and sorter are managed through both javascript and php scripts because if you have a lot of
//file in a folder the javascript script can't sort all or filter all, so the filemanager switch to php script.
//The plugin automatic swich javascript to php when the current folder exceeds the below limit of files number
'file_number_limit_js' => 500,
//**********************
// Hidden files and folders
//**********************
// set the names of any folders you want hidden (eg "hidden_folder1", "hidden_folder2" ) Remember all folders with these names will be hidden (you can set any exceptions in config.php files on folders)
'hidden_folders' => [],
// set the names of any files you want hidden. Remember these names will be hidden in all folders (eg "this_document.pdf", "that_image.jpg" )
'hidden_files' => ['config.php'],
/*******************
* URL upload
*******************/
'url_upload' => true,
//************************************
//Thumbnail for external use creation
//************************************
// New image resized creation with fixed path from filemanager folder after uploading (thumbnails in fixed mode)
// If you want create images resized out of upload folder for use with external script you can choose this method,
// You can create also more than one image at a time just simply add a value in the array
// Remember than the image creation respect the folder hierarchy so if you are inside source/test/test1/ the new image will create at
// path_from_filemanager/test/test1/
// PS if there isn't write permission in your destination folder you must set it
//
'fixed_image_creation' => false, //activate or not the creation of one or more image resized with fixed path from filemanager folder
'fixed_path_from_filemanager' => ['../test/', '../test1/'], //fixed path of the image folder from the current position on upload folder
'fixed_image_creation_name_to_prepend' => ['', 'test_'], //name to prepend on filename
'fixed_image_creation_to_append' => ['_test', ''], //name to appendon filename
'fixed_image_creation_width' => [300, 400], //width of image
'fixed_image_creation_height' => [200, 300], //height of image
/*
# $option: 0 / exact = defined size;
# 1 / portrait = keep aspect set height;
# 2 / landscape = keep aspect set width;
# 3 / auto = auto;
# 4 / crop= resize and crop;
*/
'fixed_image_creation_option' => ['crop', 'auto'], //set the type of the crop
// New image resized creation with relative path inside to upload folder after uploading (thumbnails in relative mode)
// With Responsive filemanager you can create automatically resized image inside the upload folder, also more than one at a time
// just simply add a value in the array
// The image creation path is always relative so if i'm inside source/test/test1 and I upload an image, the path start from here
//
'relative_image_creation' => false, //activate or not the creation of one or more image resized with relative path from upload folder
'relative_path_from_current_pos' => ['./', './'], //relative path of the image folder from the current position on upload folder
'relative_image_creation_name_to_prepend' => ['', ''], //name to prepend on filename
'relative_image_creation_name_to_append' => ['_thumb', '_thumb1'], //name to append on filename
'relative_image_creation_width' => [300, 400], //width of image
'relative_image_creation_height' => [200, 300], //height of image
/*
* $option: 0 / exact = defined size;
* 1 / portrait = keep aspect set height;
* 2 / landscape = keep aspect set width;
* 3 / auto = auto;
* 4 / crop= resize and crop;
*/
'relative_image_creation_option' => ['crop', 'crop'], //set the type of the crop
// Remember text filter after close filemanager for future session
'remember_text_filter' => false,
];
return array_merge(
$config,
[
'ext' => array_merge(
$config['ext_img'],
$config['ext_file'],
$config['ext_misc'],
$config['ext_video'],
$config['ext_music']
),
'tui_defaults_config' => [
//'common.bi.image' => $config['common.bi.image'],
//'common.bisize.width' => $config['common.bisize.width'],
//'common.bisize.height' => $config['common.bisize.height'],
'common.backgroundImage' => $config['common.backgroundImage'],
'common.backgroundColor' => $config['common.backgroundColor'],
'common.border' => $config['common.border'],
'header.backgroundImage' => $config['header.backgroundImage'],
'header.backgroundColor' => $config['header.backgroundColor'],
'header.border' => $config['header.border'],
'menu.normalIcon.path' => $config['menu.normalIcon.path'],
'menu.normalIcon.name' => $config['menu.normalIcon.name'],
'menu.activeIcon.path' => $config['menu.activeIcon.path'],
'menu.activeIcon.name' => $config['menu.activeIcon.name'],
'menu.disabledIcon.path' => $config['menu.disabledIcon.path'],
'menu.disabledIcon.name' => $config['menu.disabledIcon.name'],
'menu.hoverIcon.path' => $config['menu.hoverIcon.path'],
'menu.hoverIcon.name' => $config['menu.hoverIcon.name'],
'menu.iconSize.width' => $config['menu.iconSize.width'],
'menu.iconSize.height' => $config['menu.iconSize.height'],
'submenu.backgroundColor' => $config['submenu.backgroundColor'],
'submenu.partition.color' => $config['submenu.partition.color'],
'submenu.normalIcon.path' => $config['submenu.normalIcon.path'],
'submenu.normalIcon.name' => $config['submenu.normalIcon.name'],
'submenu.activeIcon.path' => $config['submenu.activeIcon.path'],
'submenu.activeIcon.name' => $config['submenu.activeIcon.name'],
'submenu.iconSize.width' => $config['submenu.iconSize.width'],
'submenu.iconSize.height' => $config['submenu.iconSize.height'],
'submenu.normalLabel.color' => $config['submenu.normalLabel.color'],
'submenu.normalLabel.fontWeight' => $config['submenu.normalLabel.fontWeight'],
'submenu.activeLabel.color' => $config['submenu.activeLabel.color'],
//'submenu.activeLabel.fontWeight' => $config['submenu.activeLabel.fontWeightcommon.bi.image'],
'checkbox.border' => $config['checkbox.border'],
'checkbox.backgroundColor' => $config['checkbox.backgroundColor'],
'range.pointer.color' => $config['range.pointer.color'],
'range.bar.color' => $config['range.bar.color'],
'range.subbar.color' => $config['range.subbar.color'],
'range.disabledPointer.color' => $config['range.disabledPointer.color'],
'range.disabledBar.color' => $config['range.disabledBar.color'],
'range.disabledSubbar.color' => $config['range.disabledSubbar.color'],
'range.value.color' => $config['range.value.color'],
'range.value.fontWeight' => $config['range.value.fontWeight'],
'range.value.fontSize' => $config['range.value.fontSize'],
'range.value.border' => $config['range.value.border'],
'range.value.backgroundColor' => $config['range.value.backgroundColor'],
'range.title.color' => $config['range.title.color'],
'range.title.fontWeight' => $config['range.title.fontWeight'],
'colorpicker.button.border' => $config['colorpicker.button.border'],
'colorpicker.title.color' => $config['colorpicker.title.color']
],
]
);

View File

@@ -0,0 +1,22 @@
@charset "UTF-8";
/*
* jQuery File Upload Plugin NoScript CSS
* https://github.com/blueimp/jQuery-File-Upload
*
* Copyright 2013, Sebastian Tschan
* https://blueimp.net
*
* Licensed under the MIT license:
* https://opensource.org/licenses/MIT
*/
.fileinput-button input {
position: static;
opacity: 1;
filter: none;
font-size: inherit !important;
direction: inherit;
}
.fileinput-button span {
display: none;
}

View File

@@ -0,0 +1,17 @@
@charset "UTF-8";
/*
* jQuery File Upload UI Plugin NoScript CSS
* https://github.com/blueimp/jQuery-File-Upload
*
* Copyright 2012, Sebastian Tschan
* https://blueimp.net
*
* Licensed under the MIT license:
* https://opensource.org/licenses/MIT
*/
.fileinput-button i,
.fileupload-buttonbar .delete,
.fileupload-buttonbar .toggle {
display: none;
}

View File

@@ -0,0 +1,53 @@
@charset "UTF-8";
/*
* jQuery File Upload UI Plugin CSS
* https://github.com/blueimp/jQuery-File-Upload
*
* Copyright 2010, Sebastian Tschan
* https://blueimp.net
*
* Licensed under the MIT license:
* https://opensource.org/licenses/MIT
*/
.fileupload-buttonbar .btn,
.fileupload-buttonbar .toggle {
margin-bottom: 5px;
}
.fileupload-process {
float: right;
display: none;
}
.fileupload-processing .fileupload-process,
.files .processing .preview {
display: block;
width: 32px;
height: 32px;
background: url("../img/loading.gif") center no-repeat;
background-size: contain;
}
.files audio,
.files video {
max-width: 300px;
}
@media (max-width: 767px) {
.fileupload-buttonbar .toggle,
.files .toggle,
.files .btn span {
display: none;
}
.files .name {
width: 80px;
word-wrap: break-word;
}
.files audio,
.files video {
max-width: 80px;
}
.files img,
.files canvas {
max-width: 100%;
}
}

View File

@@ -0,0 +1,37 @@
@charset "UTF-8";
/*
* jQuery File Upload Plugin CSS
* https://github.com/blueimp/jQuery-File-Upload
*
* Copyright 2013, Sebastian Tschan
* https://blueimp.net
*
* Licensed under the MIT license:
* https://opensource.org/licenses/MIT
*/
.fileinput-button {
position: relative;
overflow: hidden;
display: inline-block;
}
.fileinput-button input {
position: absolute;
top: 0;
right: 0;
margin: 0;
opacity: 0;
-ms-filter: 'alpha(opacity=0)';
font-size: 200px !important;
direction: ltr;
cursor: pointer;
}
/* Fixes for IE < 8 */
@media screen\9 {
.fileinput-button input {
filter: alpha(opacity=0);
font-size: 100%;
height: 100%;
}
}

Binary file not shown.

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,519 @@
<?php
$config = include 'config/config.php';
include 'include/utils.php';
if ($_SESSION['RF']["verify"] != "RESPONSIVEfilemanager") {
response(trans('forbidden') . AddErrorLocation())->send();
exit;
}
if (!checkRelativePath($_POST['path'])) {
response(trans('wrong path') . AddErrorLocation())->send();
exit;
}
if (isset($_SESSION['RF']['language']) && file_exists('lang/' . basename($_SESSION['RF']['language']) . '.php')) {
$languages = include 'lang/languages.php';
if (array_key_exists($_SESSION['RF']['language'], $languages)) {
include 'lang/' . basename($_SESSION['RF']['language']) . '.php';
} else {
response(trans('Lang_Not_Found') . AddErrorLocation())->send();
exit;
}
} else {
response(trans('Lang_Not_Found') . AddErrorLocation())->send();
exit;
}
$ftp = ftp_con($config);
$base = $config['current_path'];
$path = $base . $_POST['path'];
$cycle = true;
$max_cycles = 50;
$i = 0;
while ($cycle && $i < $max_cycles) {
$i++;
if ($path == $base) {
$cycle = false;
}
if (file_exists($path . "config.php")) {
$configMain = $config;
$configTemp = include $path . "config.php";
if(is_array($configTemp) && count($configTemp) > 0){
$config = array_merge($configMain, $configTemp);
$config['ext'] = array_merge(
$config['ext_img'],
$config['ext_file'],
$config['ext_misc'],
$config['ext_video'],
$config['ext_music']
);
}
else{
$config = $configMain;
}
$cycle = false;
}
$path = fix_dirname($path) . "/";
}
function returnPaths($_path, $_name, $config)
{
global $ftp;
$path = $config['current_path'] . $_path;
$path_thumb = $config['thumbs_base_path'] . $_path;
$name = null;
if ($ftp) {
$path = $config['ftp_base_folder'] . $config['upload_dir'] . $_path;
$path_thumb = $config['ftp_base_folder'] . $config['ftp_thumbs_dir'] . $_path;
}
if ($_name) {
$name = fix_filename($_name, $config);
if (strpos($name, '../') !== false || strpos($name, '..\\') !== false) {
response(trans('wrong name') . AddErrorLocation())->send();
exit;
}
}
return [$path, $path_thumb, $name];
}
if(isset($_POST['paths'])){
$paths = $paths_thumb = $names = [];
foreach ($_POST['paths'] as $key => $path) {
if (!checkRelativePath($path))
{
response(trans('wrong path').AddErrorLocation())->send();
exit;
}
$name = null;
if(isset($_POST['names'][$key])){
$name = $_POST['names'][$key];
}
list($path,$path_thumb,$name) = returnPaths($path,$name,$config);
$paths[] = $path;
$paths_thumb[] = $path_thumb;
$names = $name;
}
} else {
$name = null;
if(isset($_POST['name'])){
$name = $_POST['name'];
}
list($path,$path_thumb,$name) = returnPaths($_POST['path'],$name,$config);
}
$info = pathinfo($path);
if (isset($info['extension']) && !(isset($_GET['action']) && $_GET['action'] == 'delete_folder') &&
!check_extension($info['extension'], $config)
&& $_GET['action'] != 'create_file') {
response(trans('wrong extension') . AddErrorLocation())->send();
exit;
}
if (isset($_GET['action'])) {
switch ($_GET['action']) {
case 'delete_file':
deleteFile($path, $path_thumb, $config);
break;
case 'delete_files':
foreach ($paths as $key => $p) {
deleteFile($p, $paths_thumb[$key], $config);
}
break;
case 'delete_folder':
if ($config['delete_folders']){
if($ftp){
deleteDir($path,$ftp,$config);
deleteDir($path_thumb,$ftp,$config);
}else{
if (is_dir($path_thumb))
{
deleteDir($path_thumb,NULL,$config);
}
if (is_dir($path))
{
deleteDir($path,NULL,$config);
if ($config['fixed_image_creation'])
{
foreach($config['fixed_path_from_filemanager'] as $k=>$paths){
if ($paths!="" && $paths[strlen($paths)-1] != "/") $paths.="/";
$base_dir=$paths.substr_replace($path, '', 0, strlen($config['current_path']));
if (is_dir($base_dir)) deleteDir($base_dir,NULL,$config);
}
}
}
}
}
break;
case 'create_folder':
if ($config['create_folders'])
{
$name = fix_filename($_POST['name'],$config);
$path .= $name;
$path_thumb .= $name;
$res = create_folder(fix_path($path,$config),fix_path($path_thumb,$config),$ftp,$config);
if(!$res){
response(trans('Rename_existing_folder').AddErrorLocation())->send();
}
}
break;
case 'rename_folder':
if ($config['rename_folders']){
if(!is_dir($path)) {
response(trans('wrong path').AddErrorLocation())->send();
exit;
}
$name = fix_filename($name, $config);
$name = str_replace('.', '', $name);
if (!empty($name)) {
if (!rename_folder($path, $name, $ftp, $config)) {
response(trans('Rename_existing_folder') . AddErrorLocation())->send();
exit;
}
rename_folder($path_thumb, $name, $ftp, $config);
if (!$ftp && $config['fixed_image_creation']) {
foreach ($config['fixed_path_from_filemanager'] as $k => $paths) {
if ($paths != "" && $paths[strlen($paths) - 1] != "/") {
$paths .= "/";
}
$base_dir = $paths . substr_replace($path, '', 0, strlen($config['current_path']));
rename_folder($base_dir, $name, $ftp, $config);
}
}
} else {
response(trans('Empty_name') . AddErrorLocation())->send();
exit;
}
}
break;
case 'create_file':
if ($config['create_text_files'] === false) {
response(sprintf(trans('File_Open_Edit_Not_Allowed'), strtolower(trans('Edit'))) . AddErrorLocation())->send();
exit;
}
if (!isset($config['editable_text_file_exts']) || !is_array($config['editable_text_file_exts'])) {
$config['editable_text_file_exts'] = [];
}
// check if user supplied extension
if (strpos($name, '.') === false) {
response(trans('No_Extension') . ' ' . sprintf(trans('Valid_Extensions'), implode(', ', $config['editable_text_file_exts'])) . AddErrorLocation())->send();
exit;
}
// correct name
$old_name = $name;
$name = fix_filename($name, $config);
if (empty($name)) {
response(trans('Empty_name') . AddErrorLocation())->send();
exit;
}
// check extension
$parts = explode('.', $name);
if (!in_array(end($parts), $config['editable_text_file_exts'])) {
response(trans('Error_extension') . ' ' . sprintf(trans('Valid_Extensions'), implode(', ', $config['editable_text_file_exts'])) . AddErrorLocation(), 400)->send();
exit;
}
$content = $_POST['new_content'];
if ($ftp) {
$temp = tempnam('/tmp', 'RF');
file_put_contents($temp, $content);
$ftp->put("/" . $path . $name, $temp, FTP_BINARY);
unlink($temp);
response(trans('File_Save_OK'))->send();
} else {
if (!checkresultingsize(strlen($content))) {
response(sprintf(trans('max_size_reached'), $config['MaxSizeTotal']) . AddErrorLocation())->send();
exit;
}
// file already exists
if (file_exists($path . $name)) {
response(trans('Rename_existing_file') . AddErrorLocation())->send();
exit;
}
if (@file_put_contents($path . $name, $content) === false) {
response(trans('File_Save_Error') . AddErrorLocation())->send();
exit;
} else {
if (is_function_callable('chmod') !== false) {
chmod($path . $name, 0644);
}
response(trans('File_Save_OK'))->send();
exit;
}
}
break;
case 'rename_file':
if ($config['rename_files']) {
$name = fix_filename($name, $config);
if (!empty($name)) {
if (!rename_file($path, $name, $ftp, $config)) {
response(trans('Rename_existing_file') . AddErrorLocation())->send();
exit;
}
rename_file($path_thumb, $name, $ftp, $config);
if ($config['fixed_image_creation']) {
$info = pathinfo($path);
foreach ($config['fixed_path_from_filemanager'] as $k => $paths) {
if ($paths != "" && $paths[strlen($paths) - 1] != "/") {
$paths .= "/";
}
$base_dir = $paths . substr_replace($info['dirname'] . "/", '', 0, strlen($config['current_path']));
if (file_exists($base_dir . $config['fixed_image_creation_name_to_prepend'][$k] . $info['filename'] . $config['fixed_image_creation_to_append'][$k] . "." . $info['extension'])) {
rename_file($base_dir . $config['fixed_image_creation_name_to_prepend'][$k] . $info['filename'] . $config['fixed_image_creation_to_append'][$k] . "." . $info['extension'], $config['fixed_image_creation_name_to_prepend'][$k] . $name . $config['fixed_image_creation_to_append'][$k], $ftp, $config);
}
}
}
} else {
response(trans('Empty_name') . AddErrorLocation())->send();
exit;
}
}
break;
case 'duplicate_file':
if ($config['duplicate_files']) {
$name = fix_filename($name, $config);
if (!empty($name)) {
if (!$ftp && !checkresultingsize(filesize($path))) {
response(sprintf(trans('max_size_reached'), $config['MaxSizeTotal']) . AddErrorLocation())->send();
exit;
}
if (!duplicate_file($path, $name, $ftp, $config)) {
response(trans('Rename_existing_file') . AddErrorLocation())->send();
exit;
}
duplicate_file($path_thumb, $name, $ftp, $config);
if (!$ftp && $config['fixed_image_creation']) {
$info = pathinfo($path);
foreach ($config['fixed_path_from_filemanager'] as $k => $paths) {
if ($paths != "" && $paths[strlen($paths) - 1] != "/") {
$paths .= "/";
}
$base_dir = $paths . substr_replace($info['dirname'] . "/", '', 0, strlen($config['current_path']));
if (file_exists($base_dir . $config['fixed_image_creation_name_to_prepend'][$k] . $info['filename'] . $config['fixed_image_creation_to_append'][$k] . "." . $info['extension'])) {
duplicate_file($base_dir . $config['fixed_image_creation_name_to_prepend'][$k] . $info['filename'] . $config['fixed_image_creation_to_append'][$k] . "." . $info['extension'], $config['fixed_image_creation_name_to_prepend'][$k] . $name . $config['fixed_image_creation_to_append'][$k]);
}
}
}
} else {
response(trans('Empty_name') . AddErrorLocation())->send();
exit;
}
}
break;
case 'paste_clipboard':
if (!isset($_SESSION['RF']['clipboard_action'], $_SESSION['RF']['clipboard']['path'])
|| $_SESSION['RF']['clipboard_action'] == ''
|| $_SESSION['RF']['clipboard']['path'] == '') {
response()->send();
exit;
}
$action = $_SESSION['RF']['clipboard_action'];
$data = $_SESSION['RF']['clipboard'];
if ($ftp) {
if ($_POST['path'] != "") {
$path .= DIRECTORY_SEPARATOR;
$path_thumb .= DIRECTORY_SEPARATOR;
}
$path_thumb .= basename($data['path']);
$path .= basename($data['path']);
$data['path_thumb'] = DIRECTORY_SEPARATOR . $config['ftp_base_folder'] . $config['ftp_thumbs_dir'] . $data['path'];
$data['path'] = DIRECTORY_SEPARATOR . $config['ftp_base_folder'] . $config['upload_dir'] . $data['path'];
} else {
$data['path_thumb'] = $config['thumbs_base_path'] . $data['path'];
$data['path'] = $config['current_path'] . $data['path'];
}
$pinfo = pathinfo($data['path']);
// user wants to paste to the same dir. nothing to do here...
if ($pinfo['dirname'] == rtrim($path, DIRECTORY_SEPARATOR)) {
response()->send();
exit;
}
// user wants to paste folder to it's own sub folder.. baaaah.
if (is_dir($data['path']) && strpos($path, $data['path']) !== false) {
response()->send();
exit;
}
// something terribly gone wrong
if ($action != 'copy' && $action != 'cut') {
response(trans('wrong action') . AddErrorLocation())->send();
exit;
}
if ($ftp) {
if ($action == 'copy') {
$tmp = time() . basename($data['path']);
$ftp->get($tmp, $data['path'], FTP_BINARY);
$ftp->put(DIRECTORY_SEPARATOR . $path, $tmp, FTP_BINARY);
unlink($tmp);
if (url_exists($data['path_thumb'])) {
$tmp = time() . basename($data['path_thumb']);
@$ftp->get($tmp, $data['path_thumb'], FTP_BINARY);
@$ftp->put(DIRECTORY_SEPARATOR . $path_thumb, $tmp, FTP_BINARY);
unlink($tmp);
}
} elseif ($action == 'cut') {
$ftp->rename($data['path'], DIRECTORY_SEPARATOR . $path);
if (url_exists($data['path_thumb'])) {
@$ftp->rename($data['path_thumb'], DIRECTORY_SEPARATOR . $path_thumb);
}
}
} else {
// check for writability
if (is_really_writable($path) === false || is_really_writable($path_thumb) === false) {
response(trans('Dir_No_Write') . '<br/>' . str_replace('../', '', $path) . '<br/>' . str_replace('../', '', $path_thumb) . AddErrorLocation())->send();
exit;
}
// check if server disables copy or rename
if (is_function_callable(($action == 'copy' ? 'copy' : 'rename')) === false) {
response(sprintf(trans('Function_Disabled'), ($action == 'copy' ? (trans('Copy')) : (trans('Cut')))) . AddErrorLocation())->send();
exit;
}
if ($action == 'copy') {
list($sizeFolderToCopy, $fileNum, $foldersCount) = folder_info($path, false);
if (!checkresultingsize($sizeFolderToCopy)) {
response(sprintf(trans('max_size_reached'), $config['MaxSizeTotal']) . AddErrorLocation())->send();
exit;
}
rcopy($data['path'], $path);
rcopy($data['path_thumb'], $path_thumb);
} elseif ($action == 'cut') {
rrename($data['path'], $path);
rrename($data['path_thumb'], $path_thumb);
// cleanup
if (is_dir($data['path']) === TRUE){
rrename_after_cleaner($data['path']);
rrename_after_cleaner($data['path_thumb']);
}
}
}
// cleanup
$_SESSION['RF']['clipboard']['path'] = null;
$_SESSION['RF']['clipboard_action'] = null;
break;
case 'chmod':
$mode = $_POST['new_mode'];
$rec_option = $_POST['is_recursive'];
$valid_options = ['none', 'files', 'folders', 'both'];
$chmod_perm = ($_POST['folder'] ? $config['chmod_dirs'] : $config['chmod_files']);
// check perm
if ($chmod_perm === false) {
response(sprintf(trans('File_Permission_Not_Allowed'), (is_dir($path) ? (trans('Folders')) : (trans('Files')))) . AddErrorLocation())->send();
exit;
}
// check mode
if (!preg_match("/^[0-7]{3}$/", $mode)) {
response(trans('File_Permission_Wrong_Mode') . AddErrorLocation())->send();
exit;
}
// check recursive option
if (!in_array($rec_option, $valid_options)) {
response(trans("wrong option") . AddErrorLocation())->send();
exit;
}
// check if server disabled chmod
if (!$ftp && is_function_callable('chmod') === false) {
response(sprintf(trans('Function_Disabled'), 'chmod') . AddErrorLocation())->send();
exit;
}
$mode = "0" . $mode;
$mode = octdec($mode);
if ($ftp) {
$ftp->chmod($mode, "/" . $path);
} else {
rchmod($path, $mode, $rec_option);
}
break;
case 'save_text_file':
$content = $_POST['new_content'];
// $content = htmlspecialchars($content); not needed
// $content = stripslashes($content);
if ($ftp) {
$tmp = time();
file_put_contents($tmp, $content);
$ftp->put("/" . $path, $tmp, FTP_BINARY);
unlink($tmp);
response(trans('File_Save_OK'))->send();
} else {
// no file
if (!file_exists($path)) {
response(trans('File_Not_Found') . AddErrorLocation())->send();
exit;
}
// not writable or edit not allowed
if (!is_writable($path) || $config['edit_text_files'] === false) {
response(sprintf(trans('File_Open_Edit_Not_Allowed'), strtolower(trans('Edit'))) . AddErrorLocation())->send();
exit;
}
if (!checkresultingsize(strlen($content))) {
response(sprintf(trans('max_size_reached'), $config['MaxSizeTotal']) . AddErrorLocation())->send();
exit;
}
if (@file_put_contents($path, $content) === false) {
response(trans('File_Save_Error') . AddErrorLocation())->send();
exit;
} else {
response(trans('File_Save_OK'))->send();
exit;
}
}
break;
default:
response(trans('wrong action') . AddErrorLocation())->send();
exit;
}
}

View File

@@ -0,0 +1,127 @@
<?php
$config = include 'config/config.php';
include 'include/utils.php';
include 'include/mime_type_lib.php';
if ($_SESSION['RF']["verify"] != "RESPONSIVEfilemanager") {
response(trans('forbidden') . AddErrorLocation(), 403)->send();
exit;
}
if (!checkRelativePath($_POST['path']) || strpos($_POST['path'], '/') === 0) {
response(trans('wrong path') . AddErrorLocation(), 400)->send();
exit;
}
if (strpos($_POST['name'], '/') !== false) {
response(trans('wrong path') . AddErrorLocation(), 400)->send();
exit;
}
$ftp = ftp_con($config);
if ($ftp) {
$path = $config['ftp_base_url'] . $config['upload_dir'] . $_POST['path'];
} else {
$path = $config['current_path'] . $_POST['path'];
}
$name = $_POST['name'];
$info = pathinfo($name);
if (!check_extension($info['extension'], $config)) {
response(trans('wrong extension') . AddErrorLocation(), 400)->send();
exit;
}
$file_name = $info['basename'];
$file_ext = $info['extension'];
$file_path = $path . $name;
// make sure the file exists
if ($ftp) {
header('Content-Type: application/octet-stream');
header("Content-Transfer-Encoding: Binary");
header("Content-disposition: attachment; filename=\"" . $file_name . "\"");
readfile($file_path);
} elseif (is_file($file_path) && is_readable($file_path)) {
if (!file_exists($path . $name)) {
response(trans('File_Not_Found') . AddErrorLocation(), 404)->send();
exit;
}
$size = filesize($file_path);
$file_name = rawurldecode($file_name);
if (function_exists('mime_content_type')) {
$mime_type = mime_content_type($file_path);
} elseif (function_exists('finfo_open')) {
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mime_type = finfo_file($finfo, $file_path);
} else {
$mime_type = get_file_mime_type($file_path);
}
@ob_end_clean();
if (ini_get('zlib.output_compression')) {
ini_set('zlib.output_compression', 'Off');
}
header('Content-Type: ' . $mime_type);
header('Content-Disposition: attachment; filename="' . $file_name . '"');
header("Content-Transfer-Encoding: binary");
header('Accept-Ranges: bytes');
if (isset($_SERVER['HTTP_RANGE'])) {
list($a, $range) = explode("=", $_SERVER['HTTP_RANGE'], 2);
list($range) = explode(",", $range, 2);
list($range, $range_end) = explode("-", $range);
$range = intval($range);
if (!$range_end) {
$range_end = $size - 1;
} else {
$range_end = intval($range_end);
}
$new_length = $range_end - $range + 1;
header("HTTP/1.1 206 Partial Content");
header("Content-Length: $new_length");
header("Content-Range: bytes $range-$range_end/$size");
} else {
$new_length = $size;
header("Content-Length: " . $size);
}
$chunksize = 1 * (1024 * 1024);
$bytes_send = 0;
if ($file = fopen($file_path, 'r')) {
if (isset($_SERVER['HTTP_RANGE'])) {
fseek($file, $range);
}
while (!feof($file) &&
(!connection_aborted()) &&
($bytes_send < $new_length)
) {
$buffer = fread($file, $chunksize);
echo $buffer;
flush();
$bytes_send += strlen($buffer);
}
fclose($file);
} else {
die('Error - can not open file.');
}
die();
} else {
// file does not exist
header("HTTP/1.0 404 Not Found");
}
exit;

Binary file not shown.

After

Width:  |  Height:  |  Size: 189 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 195 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 238 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 173 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 611 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 489 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 163 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 674 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 245 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 673 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 764 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 737 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

Some files were not shown because too many files have changed in this diff Show More